A потоковый шифр - это система шифрования, которая работает с заданной последовательностью входных битов. Большинство потоковых шифров работают, генерируя из ключа длинную последовательность битов случайного вида, которые затем объединяются (поразрядным XOR) с данными для шифрования. Это (грубая) эмуляция одноразовой площадки .
A блочный шифр - это общий криптографический элемент, который работает над «блоками», которые представляют собой последовательности битов фиксированной длины (например, 128 битов для AES ). Блочный шифр - это перестановка блоков; ключ выбирает, о какой перестановке мы говорим. Один только блочный шифр не может обработать произвольное длинное сообщение; блочный шифр и данные должны использоваться в сложной конструкции, называемой режимом работы (также часто называемым «режимом сцепления»).
Существует режим цепочки для блочных шифров, называемый «CTR» как «режим счетчика»: в этом режиме блочный шифр используется для шифрования последовательных значений счетчика (счетчик, имеющий размер блока). Полученные зашифрованные блоки затем объединяются, что приводит к произвольно длинной последовательности битов, которая зависит только от ключа. Тогда достаточно XOR той последовательности с данными для шифрования. Другими словами, режим CTR превращает блочный шифр в потоковый шифр. Другим популярным режимом цепочки является CBC, который не подходит для модели потокового шифра.
В случае потоковых шифров следует избегать любой ценой повторного использования одной и той же зависимой от ключа последовательности битов для двух отдельных сообщений; это дало бы печально известную «двойную площадку», которую можно легко сломать (используя избыточность в двух зашифрованных сообщениях). С блочным шифром в режиме CTR это приводит к повторному использованию тех же значений счетчика. Вот почему режим CTR требует случайного начального значения (IV), которое является значением счетчика, с которого вы начинаете шифрование. Выбирая новый случайный IV с достаточно большими блоками, вы с очень высокой вероятностью избегаете любого наложения последовательностей значений счетчиков, которые вы используете.
Концепция IV не является специфичной для блочных шифров; некоторые потоковые шифры также используют IV (например, тот, что находится в портфеле eSTREAM ). Когда потоковый шифр имеет IV, повторное использование ключа не представляет проблемы - при условии, что вы используете надлежащий IV (то есть IV, сгенерированный с помощью криптографически сильного ГСЧ во всем пространстве возможного IV с одинаковой вероятностью). Однако некоторые другие потоковые шифры не имеют IV, в частности широко используемый RC4 . Повторное использование одного и того же ключа означало бы повторное использование одной и той же последовательности генерируемых битов, и это плохо.
Обратите внимание, что для некоторых режимов цепочки, отличных от CTR, также требуется IV, который должен быть уникальным для каждого сообщения, зашифрованного данным ключом. Блочные шифры не уменьшают необходимость в этом.