我目前正在为我的学士论文实现Salsa20。在用DJB的规范中给定的测试数据验证了最终加密函数所需的所有函数之后,我想测试我的加密函数。不幸的是,规范文件中没有用于完全加密的测试向量:
我已经从ECRYPT流密码项目这里中找到了Salsa20 20/20的测试向量。
但出于某种原因,第一个64字节序列与我的扩展函数的输出匹配,给定的键和IV和计数器设置为0,但第二个64字节序列不同。
实际:
0xa360370ff47dd714684fd47584e46fe89e031b59072be978f7c0a56936151a3e9c52f7be26c687a5bc234640efed47b79b02d70dd666dc39cea9288e69427318预期:
0x57be81f47b17d9ae7c4ff15429a73e10acf250ed3a90a93c711308a74c6216a9ed84cd126da7f28e8abf8bb63517e1ca98e712f4fb2e1a6aed9fdc73291faa17我使用了IV 0x0 (64位)和计数器0x1 (64位)的连接,因此给展开函数的现在是
0x00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 (大本营)但是,正如上面所示,这会导致一个不正确的结果。
我尝试用littleendian编写计数器的字节,因为规范文件在关于加密的最后一节中提到了这一点:
0x00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00但这只会导致不同的错误结果:
0x8da2b74eef1b6283e7e20166abcae538e9716e4669e2816b6b20c5c356802001cc1403a9a117d12a2669f456366d6ebb0f1246f1265150f793cdb4b253e348ae中给出。
我发现这里测试向量使用NESSIE格式,但无法解释解决问题的数据(可能没有解释,因为我做了完全错误的事情)。
。
如果有人能帮助我或引导我朝着正确的方向前进,我将非常高兴,因为我已经被困在这个问题上已经好几天了。
发布于 2020-05-30 23:33:26
您的“不同的错误结果”(基于少量的计数器)似乎是正确的第二个64字节序列。测试向量显示"stream192.255 = ",这是第四个64字节的序列。测试向量是通过使用指定的密钥和IV在512个零字节上调用“Salsa20加密函数”(规范第10节)来生成的。
https://crypto.stackexchange.com/questions/81087
复制相似问题