Секретный и несекретный вектор инициализации
Сегодня я немного почитал и наткнулся на раздел 5.8 (на странице 45) Рекомендации по схемам установления парных ключей с использованием дискретной логарифмической криптографии (пересмотренный вариант) (Специальная публикация NIST 800-56A). Я был очень смущен этим:
Утвержденная функция вывода ключа (KDF) должна использоваться для получения материала секретного ключа из общего секрета. Выходные данные из KDF должны использоваться только для материала секретного ключа, такого как симметричный ключ, используемый для шифрования данных или целостности сообщения, вектор секретной инициализации или мастер-ключ, который будет использоваться для генерации других ключей (возможно, с использованием другого процесса). Несекретный ключевой материал (такой как несекретный вектор инициализации) не должен генерироваться с использованием общего секрета.
Теперь я не Алан Тьюринг, но я думал, что векторы инициализации не должны храниться в секрете. При каких обстоятельствах нужен "секретный вектор инициализации"? Томас Порнин говорит, что IV являются публичными, и он, кажется, хорошо разбирается в криптографии. Аналогично с кафе.
4 ответа
Вектор инициализации не должен быть секретным (это не ключ), но он также не должен быть публичным (отправитель и получатель должны знать его, но не обязательно, чтобы Королева Англии также знала это).
Типичный протокол установления ключа приведет к тому, что обе стороны будут вычислять часть данных, которую они, но только они, оба знают. В случае Диффи-Хеллмана (или любого его варианта с эллиптической кривой) упомянутый общий фрагмент данных имеет фиксированную длину и не может контролировать его значение (они просто получают одинаковую, казалось бы, случайную последовательность битов). Чтобы использовать этот общий секрет для симметричного шифрования, они должны вывести эти общие данные в последовательность битов соответствующей длины для любого алгоритма симметричного шифрования, который они собираются использовать.
В протоколе, в котором вы используете алгоритм установления ключа для получения общего секрета между отправителем и получателем и будете использовать этот секрет для симметричного шифрования сообщения (возможно, сообщения с очень длинной передачей), можно использовать KDF для произвести ключ и IV за один раз. Вот как это происходит, например, в SSL: из общего секрета (называемого в секретном спецификации "секретом перед мастером") вычисляется большой блок производных секретных данных, который затем разделяется на симметричные ключи и векторы инициализации для оба направления шифрования. Вы могли бы поступить иначе, и, например, генерировать случайный IV и отправлять их вместе с зашифрованными данными, вместо того чтобы использовать IV, полученный через KDF (так обстоят дела в последних версиях TLS, преемника SSL). Обе стратегии одинаково действительны (TLS использует внешнее случайное IV, потому что им нужно новое случайное IV для каждой "записи" - пакета данных в соединении TLS - именно поэтому использование KDF больше не считалось целесообразным).
Хорошо, учтите, что если две стороны имеют одинаковую криптографическую функцию, но не имеют одинаковую IV, они не получат одинаковые результаты. Таким образом, кажется, что предложение состоит в том, что обе стороны получают один и тот же общий секрет, и каждая из них генерирует, детерминистически, IV (который будет одинаковым), и затем они могут общаться. Вот как я это прочитал; но я на самом деле не читал документ, и я не совсем уверен, что мое описание является точным; но так я бы начал расследование.
IV является общедоступным или частным, не имеет значения, давайте рассмотрим, что IV известен злоумышленнику, теперь, глядя на зашифрованный пакет/данные и зная IV и не зная ключа шифрования, может ли он/она догадаться о входных данных? (подумай немного)
давайте вернемся немного назад, скажем, в шифровании не используется IV. AES (вход, K)= E1. Один и тот же ввод всегда будет давать один и тот же зашифрованный текст. Злоумышленник может угадать ключ «K», просматривая зашифрованный текст и предварительно зная входные данные (например, первоначальный обмен некоторыми протоколами).
Итак, вот что помогает IV. он добавляется с входным значением, ваш зашифрованный текст изменяется даже для тех же входных данных. т.е. AES (вход, IV, K)= E1 Следовательно, злоумышленник видит, что зашифрованные пакеты отличаются (даже с одинаковыми входными данными) и не может легко угадать. (даже имея IV знания)
Начальное значение счетчика в режиме шифрования CTR можно рассматривать как IV. Если вы сделаете это секретным, вы получите некоторую дополнительную защиту по сравнению с длиной ключа шифра, который вы используете. Трудно сказать, сколько лишнего, но незнание этого увеличивает работу, необходимую для выяснения того, как расшифровать данное сообщение.