Как представить сообщение как целое число от 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 если он не достигает к.

Другие вопросы по тегам