Ключ SymmetricAlgorithm и реализация вектора инициализации (IV)

У меня есть веб-сайт, который принимает идентификатор пользователя и шифрует его с помощью поставщика RijndaelManaged.

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

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

Кроме того, служба Windows читает из этой очереди и пытается расшифровать данные. Но поскольку каждое значение в очереди зашифровано разными IV, как служба Windows узнает, какой IV использовать?

Должен ли я хранить его вместе с зашифрованными данными, такими как;

MRibePnbXiN578TUAZcITw== - MyIVValueIsHere

Или нужно использовать какой-то известный подход?


person Teoman shipahi    schedule 19.05.2016    source источник


Ответы (2)


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

Также рассмотрите возможность использования AESCryptoServiceProvider, поскольку AES является стандартом. AES — это то же самое, что и Rijndael, но с некоторыми фиксированными стандартизированными параметрами.

person Emil    schedule 19.05.2016
comment
Спасибо за разъяснение, я также рассмотрю ваше предложение для AESCryptoServiceProvider. - person Teoman shipahi; 20.05.2016

Общепринятой практикой является добавление IV к зашифрованным данным, чтобы они были доступны для расшифровки.

person zaph    schedule 19.05.2016