我的编程语言中的加密库不支持 CTR,尽管它支持 CBC、CFB、CTS、ECB 和 OFB。我假设理论上可以围绕这些其他模式之一安全地实现 CTR。
所以我想知道,这些引用是否从安全角度描述了 CTR 的正确实现?据我所读,我认为它们是,但我只是想确保我没有遗漏任何东西。
我进行了更多研究,发现 CTR 模式的块变换实际上只是用单调递增计数器的 AES ECB 变换对明文进行异或运算的结果。有了这种理解,我就能够在 .NET BCL 中内置的 AES ECB 模式之上轻松实现 AES CTR 模式。
和,
可以使用 AesManaged 类在 CTR 模式下实现 AES 加密,尽管它需要一些额外的工作。要使用 .NET AesManaged 类实现 CTR 模式,我做了以下操作:使用 CipherMode.ECB、PaddingMode.None。[在 CTR 模式下不需要填充,因为我们总是加密一个 16 字节的计数器。] 加密时,调用 CreateEncryptor()。使用生成的 ICryptoTransform,对于每个块,转换一个 16 字节的随机数(与 AES 块大小相同),然后将该转换的结果与明文进行异或以获得密文。在每个块之后增加随机数。继续,直到没有更多的块 - 不要忘记最后的块转换,对于 16 个或更少字节的最后一个块。
一方面,当引用说“增量”时,它应该是什么样的增量?确定不是线性的?