Как представить сообщение как целое число от 1 до n-1?
Я пытаюсь реализовать простую криптосистему Эль-Гамаля.
И я не могу понять, как представить сообщение как целое число от 1 до n-1. Единственное, что приходит мне в голову: если длина n бит равна k, то разделить входное сообщение m на t | t Я думаю, что это неправильно. Итак, как представить сообщение как целое число от 1 до n-1?
1 ответ
Вы можете сделать это, что по сути эквивалентно использованию режима ECB в блочных шифрах, но есть атаки на это. Злоумышленник может переупорядочить различные блоки зашифрованного текста, и вы без проблем расшифруете его, но полученный открытый текст будет нарушен без вашего ведома. Это также может открыть дверь для повторных атак, поскольку все блоки независимо шифруются. Вам понадобится какое-то аутентифицированное шифрование.
Вернуться к исходному вопросу. Такая проблема обычно решается с помощью гибридного шифрования. Блочный шифр, такой как AES, используется для шифрования всего открытого текста случайным ключом. Этот случайный ключ в свою очередь зашифрован с помощью ElGamal, так как ключ достаточно мал, чтобы быть представленным в < k бит.
Теперь в зависимости от режима работы блочного шифра это все еще может быть податливым. Вам либо нужно поместить хеш зашифрованного текста / открытого текста рядом со случайным ключом в качестве проверки целостности. Или иначе используйте аутентифицированный режим работы, такой как GCM, и добавьте полученный тег рядом со случайным ключом. В зависимости от k это должно соответствовать.
Обратите внимание, что вы должны использовать какие-то отступы для random key | hash/tag
если он не достигает к.