0

Я смущен. Согласно ниже, мой IV «ДОЛЖЕН» быть уникальным для каждого раунда шифрования.Сколько раз AesCryptoServiceProvider.GenerateIV можно было бы безопасно вызвать, прежде чем исчерпать количество уникальных IV?

Свойства IV зависят от используемой криптографической схемы. A основной требование уникальность, что означает, что никакая IV не может быть использована повторно под тем же ключом. Для блочных шифров повторяющиеся значения IV передают схему шифрования в режим электронной кодовой книги: равный IV и равный результат открытого текста в равном зашифрованном тексте. - https://en.wikipedia.org/wiki/Initialization_vector

Я использую класс .NET AesCryptoServiceProvider. Я использую GenerateIV для генерации нового IV и отправки этого IV вместе с зашифрованным текстом в удаленную конечную точку, которая затем расшифровывает пакет, используя IV и приватно общий ключ.

Мой пакет XML, и поэтому он всегда будет начинаться с того же ведущего текста. (Например, «< SomeTag ... > unique_text </SomeTag >»)

Мой ключ может жить более тысячи шифрования/дешифрования циклов в течение пяти до десяти минут жизни ключа. Сколько раз я могу назвать GenerateIV до того, как я сгенерирую тот же самый IV дважды? Или сформулировал другой способ, сколько циклов GenerateIV хорошо? Пять, десять, сотни, тысячи, миллионы?

Вот код в вопросе:

_sessionKeys[_currentSessionKeyId].GenerateIV(); 
var key = _sessionKeys[_currentSessionKeyId].Key; 
var iv = _sessionKeys[_currentSessionKeyId].IV; 

ICryptoTransform encryptor = _sessionKeys[_currentSessionKeyId].CreateEncryptor(key,iv); 

кажется, что учитывая, что IV, порожденный AesCryptoServiceProvider.GenerateIV имеет конечный размер, то число раз он может быть вызван до создания дубликата IV является также конечно. Но каково это конечное число.

+0

Вы беспокоитесь об исчерпании 128-битного пространства? –

+1

Документы являются полностью точными. IV должен быть уникальным для режима CTR. Когда происходит столкновение, тогда все открытые тексты, которые столкнулись, могут быть восстановлены с небольшой изобретательностью и видимыми шаблонами. Если вы используете какой-либо другой режим, например CBC, тогда вы потеряете только семантическую безопасность, но это не обязательно откроет вам открытый текст. IV должен быть непредсказуемым, но не обязательно уникальным. –

+0

@ArtjomB. - согласовано. Некоторые люди объединяют IV и Nonces, и эта статья в Википедии, похоже, страдает от этой проблемы, в некоторых местах. –

ответ

2

Существует 128 бит (16 байт) в IV. Согласно странице Википедии на странице Birthday Attack (вероятность того, что вы будете видеть повторяющееся значение, случайным образом выбирая из пула), чтобы иметь шанс получить номер в два раза, вы должны вызвать функцию около 26 000 000 000 раз. Чтобы получить это 1% -ый шанс, число, которое вы видите дважды, вы должны назвать его 2 600 000 000 000 000 000 000 раз.

Это предполагает, что GenerateIV имеет «хороший» генератор случайных чисел, который дает равномерное распределение, которое оно должно иметь.

+0

Спасибо. Отличный ответ. Это именно то, что я искал. Кроме того, спасибо за ссылку на День рождения. Это математика, которую я хотел увидеть. –