我正在用 C++ 编写分组密码的实现。我想研究密码的差分密码分析,所以我生成随机明文和密钥,然后加密它们。
生成这些随机明文和密钥的最佳方法是什么?C++提供的随机函数是否足够随机?我应该使用一些散列函数还是与伪随机排列相同的密码来生成它们?
我正在用 C++ 编写分组密码的实现。我想研究密码的差分密码分析,所以我生成随机明文和密钥,然后加密它们。
生成这些随机明文和密钥的最佳方法是什么?C++提供的随机函数是否足够随机?我应该使用一些散列函数还是与伪随机排列相同的密码来生成它们?
差分密码分析是一种利用被攻击密码结构中一些细节的攻击;您查看使用相同密钥加密的明文对和相应的密文。必须仔细选择这些对,以便两个明文之间的差异(通常是按位差异,即 XOR)以“高”概率锻炼目标的确切算法弱点。没有“通用”差分密码分析,您只需将随机明文扔到密码中,并希望它们以某种方式组合成类似Megazord的攻击。
简而言之,要进行差分密码分析,您必须了解自己在做什么,直至毛茸茸的数学细节。当你达到这一点时,你会发现差分密码分析的基本位并不是很重要(重要的是两个明文之间的差异)。因此,在实验室实验的上下文中,大多数随机生成器都可以——但您可能必须生成很多对明文,因此如果 PRNG 太慢,您可能会遇到一些瓶颈(但不要相信然而;测量它)。
如果您想了解差分密码分析的要点,请阅读这本书并尝试在精简版的 DES 上实现它(例如,减少到 8 轮而不是标准的 16 轮)。
对于密钥,它们应该尽可能随机,因此要么使用真正的随机数生成器(不太可能),要么使用加密安全的伪随机数生成器。
纯文本可以从任何生成器中随机生成,但是您不希望纯文本更准确地反映某些位串可能更常见的真实数据吗?