Секретный и несекретный вектор инициализации - PullRequest
23 голосов
/ 27 апреля 2011

Сегодня я немного почитал и наткнулся на раздел 5.8 (на странице 45) Рекомендация для схем установления парных ключей с использованием дискретной логарифмической криптографии (пересмотренная) (NIST Special Publication 800 -56A) . Я был очень смущен этим:

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

Теперь я не Алан Тьюринг, но я думал, что векторы инициализации не должны храниться в секрете. При каких обстоятельствах нужен «секретный вектор инициализации»? Томас Порнин говорит, что IV являются публичными, и он, кажется, хорошо разбирается в криптографии. Аналогично с caf .

Ответы [ 3 ]

26 голосов
/ 27 апреля 2011

Вектор инициализации не должен быть секретным (это не ключ), но он также не должен быть публичным (отправитель и получатель должны знать его, но необязательно, чтобы королева Англии также знала это).

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

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

1 голос
/ 27 апреля 2011

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

0 голосов
/ 27 апреля 2011

Начальное значение счетчика в режиме шифрования CTR можно рассматривать как IV.Если вы сделаете это секретным, вы получите некоторую дополнительную защиту по сравнению с длиной ключа шифра, который вы используете.Трудно сказать, сколько лишнего, но незнание этого увеличивает объем работы, необходимой для выяснения, как расшифровать данное сообщение.

...