Подтвердить что ты не робот

Секретный и несекретный вектор инициализации

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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