我很困惑。根据下面我的IV“必须”对于每一轮加密都是唯一的。
IV 的属性取决于使用的加密方案。一个基本 要求是唯一性,这意味着不能在同一个密钥下重复使用任何 IV。对于分组密码,重复的 IV 值将加密方案转变为电子密码本模式:相等的 IV 和相等的明文导致相等的密文。- https://en.wikipedia.org/wiki/Initialization_vector
我正在使用.NET AesCryptoServiceProvider 类。我正在使用GenerateIV生成一个新的 IV 并将该 IV 与密文一起发送到远程端点,然后该端点将使用 IV 和私有共享密钥解密数据包。
我的数据包是 XML,因此总是以相同的前导文本开头。(例如“<SomeTag ...>unique_text</SomeTag>”)
在密钥的 5 到 10 分钟生命周期内,我的密钥可能会经历数千次加密/解密周期。在两次生成相同的 IV 之前,我可以调用 GenerateIV 多少次?或者换一种说法,GenerateIV 适合多少个周期?五,十,数百,数千,数百万?
这是有问题的代码:
_sessionKeys[_currentSessionKeyId].GenerateIV();
var key = _sessionKeys[_currentSessionKeyId].Key;
var iv = _sessionKeys[_currentSessionKeyId].IV;
ICryptoTransform encryptor = _sessionKeys[_currentSessionKeyId].CreateEncryptor(key,iv);
似乎鉴于 AesCryptoServiceProvider.GenerateIV 生成的 IV 的大小是有限的,那么在生成重复的 IV 之前可以调用它的次数也是有限的。但是那个有限的数字是什么。