Избегать, чтобы повторяющиеся одинаковые сообщения всегда выглядели одинаково после шифрования и могли быть воспроизведены злоумышленником? - PullRequest
6 голосов
/ 12 марта 2011

Я хочу подтвердить, что определенное сообщение исходит из определенного места.

Пример: A многократно отправляет одно и то же сообщение B. Допустим, что это сообщение "helloworld", которое зашифровано для "asdfqwerty".

Как я могу убедиться, что третье лицо C не узнает, что B всегда получает одну и ту же зашифрованную строку, и C начинает отправлять "asdfqwerty" в B?

Как я могу гарантировать, что когда B расшифровывает "asdfqwerty" до "helloworld", он всегда получает этот "helloworld" от A?

Спасибо за любую помощь.

Ответы [ 4 ]

6 голосов
/ 12 марта 2011

Для первого вы хотите использовать Режим работы для вашего симметричного шифра, который использует Вектор инициализации .IV гарантирует, что каждое зашифрованное сообщение отличается, даже если оно содержит один и тот же открытый текст.

Для последнего вы хотите подписать ваше сообщение, используя закрытый ключ A (вшей).Если B (ob) имеет открытый ключ Алисы, он может проверить, действительно ли она создала сообщение.

Наконец, остерегайтесь повторных атак , где C (harlie) записывает действительное сообщениеот Алисы, а затем повторяет его Бобу.Чтобы избежать этого, добавьте nonce и / или временную метку к вашему зашифрованному сообщению (да, вы можете сделать так, чтобы IV проигрывал двойную функцию как nonce).

4 голосов
/ 14 марта 2011

C замечание того, что B получает дважды одно и то же зашифрованное сообщение, является проблемой, называемой анализ трафика , и исторически представляла серьезную проблему (но это было во времена, предшествовавшие шифрованию с открытым ключом).

Любая приличная общедоступная система шифрования включает в себя произвольное заполнение. Например, для RSA, как описано в PKCS # 1 , зашифрованное сообщение (длиной не более 117 байтов для 1024-битного ключа RSA) получает заголовок по крайней мере с восемью случайными (ненулевыми) байтами и несколько дополнительных данных, которые позволяют получателю однозначно определить местонахождение байтов заполнения и посмотреть, где начинаются «настоящие» данные. Случайные байты будут генерироваться заново каждый раз; следовательно, если A дважды отправляет одно и то же сообщение B, зашифрованные сообщения будут другими, но B дважды восстановит исходное сообщение.

Случайное заполнение требуется для шифрования с открытым ключом именно потому, что открытый ключ является открытым: если шифрование было детерминированным, то злоумышленник мог бы «попробовать» потенциальные сообщения и найти совпадение (это исчерпывающий поиск возможных сообщений).

Алгоритмы шифрования с открытым ключом часто имеют серьезные ограничения по размеру или производительности данных (например, при использовании RSA максимальная длина сообщения зависит от размера ключа). Таким образом, обычно используется гибридная система: шифрование с открытым ключом используется для шифрования симметричного ключа K (т. Е. Набора случайных байтов), а K используется для симметричного зашифровать данные (симметричное шифрование выполняется быстро и не имеет ограничений по размеру входного сообщения). В гибридной системе вы генерируете новый K для каждого сообщения, так что этот также дает вам случайность, необходимую вам, чтобы избежать проблемы шифрования несколько раз одного и того же сообщения с данной общедоступной ключ: на общедоступном уровне шифрования вы фактически никогда не шифруете дважды одно и то же сообщение (один и тот же ключ K ), даже если данные, которые симметрично зашифрованы с помощью K , совпадают с в предыдущем сообщении. Это защитит вас от анализа трафика, даже если само шифрование с открытым ключом не включает случайное заполнение.

При симметричном шифровании данных ключом K симметричное шифрование должно использовать «начальное значение» (IV), которое генерируется случайным образом и равномерно; он интегрирован в режим шифрования (в некоторых режимах требуется только неповторяющийся IV, не требующий генерации случайных униформ, но CBC требует генерации случайных униформ). Это третий уровень случайности, защищающий вас от анализа трафика.

При использовании асимметричного соглашения о ключе (статическое Диффи-Хеллмана ), поскольку оно немного сложнее, поскольку из-за соглашения о ключе получается ключ K , который вы не выбираете, и которая может быть одинаковой во веки веков (между данным отправителем и получателем). В этой ситуации защита от анализа трафика основана на симметричной случайности шифрования IV.

Асимметричное шифрование протоколы , такие как OpenPGP , описывают, как симметричное шифрование, шифрование с открытым ключом и случайность должны быть связаны друг с другом, сглаживая сложные детали. Мы настоятельно рекомендуем , а не заново изобрести свой собственный протокол: сложно разработать безопасный протокол, в основном потому, что невозможно легко проверить наличие или отсутствие каких-либо недостатков.

4 голосов
/ 12 марта 2011

Добавьте случайное значение к зашифрованным данным, и всякий раз, когда они расшифровываются, убирают их из исходных незашифрованных данных.

Вам нужен приличный генератор случайных чисел.Я уверен, что Google поможет вам в этом.

2 голосов
/ 12 марта 2011

Возможно, вы захотите изучить режим работы блочного шифра .Однако режимы предназначены для работы с потоком данных, который передается по надежному каналу.Если ваши сообщения отправляются не по порядку через ненадежный транспорт (например, UDP-пакеты), я не думаю, что вы можете использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...