我的程序连接到服务器,服务器的公钥是已知的。然后程序将 AES 密钥与初始化向量一起加密,并将其发送到服务器。服务器解密消息,从现在开始使用 AES 加密对话。
我的问题是关于如何生成 IV。如果我采取天真的方式并用当前时间播种一个伪随机生成器,攻击者可能会对 IV 做出一些非常好的猜测,这可诅咒不是我想要的。
由于硬件随机生成器不仅速度慢,而且并非随处可用,我想采用不同的方法。当客户端程序第一次启动时,我让用户随机移动一些鼠标,就像 TrueCrypt 一样。我现在保存由鼠标移动创建的那些“随机位”,当我需要生成器时,我会将它们用作种子。当然,每次我将随机位用作种子时,都必须更新它们。这是我的问题:我考虑将生成的前几个随机位保存为新的“随机位”。(所以他们习惯于在下次软件启动时初始化随机引擎。)现在我不确定这是否足够随机,或者伪随机生成器是否会在这里显示可猜测的模式。(我可能会使用 std::mt19937 http://en.cppreference。)
编辑:链接模式发生变化,所以我希望它适用于具有“最高”要求的模式。如果我没记错的话应该是CBC。
请注意:我正在编写的软件纯粹是实验性的。