C замечание того, что B получает дважды одно и то же зашифрованное сообщение, является проблемой, называемой анализ трафика , и исторически представляла серьезную проблему (но это было во времена, предшествовавшие шифрованию с открытым ключом).
Любая приличная общедоступная система шифрования включает в себя произвольное заполнение. Например, для RSA, как описано в PKCS # 1 , зашифрованное сообщение (длиной не более 117 байтов для 1024-битного ключа RSA) получает заголовок по крайней мере с восемью случайными (ненулевыми) байтами и несколько дополнительных данных, которые позволяют получателю однозначно определить местонахождение байтов заполнения и посмотреть, где начинаются «настоящие» данные. Случайные байты будут генерироваться заново каждый раз; следовательно, если A дважды отправляет одно и то же сообщение B, зашифрованные сообщения будут другими, но B дважды восстановит исходное сообщение.
Случайное заполнение требуется для шифрования с открытым ключом именно потому, что открытый ключ является открытым: если шифрование было детерминированным, то злоумышленник мог бы «попробовать» потенциальные сообщения и найти совпадение (это исчерпывающий поиск возможных сообщений).
Алгоритмы шифрования с открытым ключом часто имеют серьезные ограничения по размеру или производительности данных (например, при использовании RSA максимальная длина сообщения зависит от размера ключа). Таким образом, обычно используется гибридная система: шифрование с открытым ключом используется для шифрования симметричного ключа K (т. Е. Набора случайных байтов), а K используется для симметричного зашифровать данные (симметричное шифрование выполняется быстро и не имеет ограничений по размеру входного сообщения). В гибридной системе вы генерируете новый K для каждого сообщения, так что этот также дает вам случайность, необходимую вам, чтобы избежать проблемы шифрования несколько раз одного и того же сообщения с данной общедоступной ключ: на общедоступном уровне шифрования вы фактически никогда не шифруете дважды одно и то же сообщение (один и тот же ключ K ), даже если данные, которые симметрично зашифрованы с помощью K , совпадают с в предыдущем сообщении. Это защитит вас от анализа трафика, даже если само шифрование с открытым ключом не включает случайное заполнение.
При симметричном шифровании данных ключом K симметричное шифрование должно использовать «начальное значение» (IV), которое генерируется случайным образом и равномерно; он интегрирован в режим шифрования (в некоторых режимах требуется только неповторяющийся IV, не требующий генерации случайных униформ, но CBC требует генерации случайных униформ). Это третий уровень случайности, защищающий вас от анализа трафика.
При использовании асимметричного соглашения о ключе (статическое Диффи-Хеллмана ), поскольку оно немного сложнее, поскольку из-за соглашения о ключе получается ключ K , который вы не выбираете, и которая может быть одинаковой во веки веков (между данным отправителем и получателем). В этой ситуации защита от анализа трафика основана на симметричной случайности шифрования IV.
Асимметричное шифрование протоколы , такие как OpenPGP , описывают, как симметричное шифрование, шифрование с открытым ключом и случайность должны быть связаны друг с другом, сглаживая сложные детали. Мы настоятельно рекомендуем , а не заново изобрести свой собственный протокол: сложно разработать безопасный протокол, в основном потому, что невозможно легко проверить наличие или отсутствие каких-либо недостатков.