1 流密码算法概述 1.1 Salsa20 算法 1.1.1 算法设计背景 2004 年ECRYPT 启动了eSTREAM 流密码计划的研究项目,Salsa20 是最终胜出的7 个算法之一。Salsa20 是由Daniel J.Bernstein 提出的基于hash 函数设计的流密码算法,其核心部分是一个基于32 比特加、比特异或以及旋转操作的512比特输入 512 比特输出的hash 函数。 现有的对 Salsa20 攻击方法包括线性分析、差分分析、非随机性分析、相关密钥分析和滑动分析等,其中以滑动攻击尤其是偶数轮的滑动攻击方式最为有效。在软件仿真方面,算法可以在目前的x86 处理器上实现 4 至 14cycles/byte 的加密效率;且具备尚可的硬件性能。 Salsa20 没有申请专利,属于公开的应用算法,为了在多个公共领域的共同架构,Bernstein 对算法的实现优化做了进一步研究和改动。 1.1.2 算法介绍 (1)运算符定义 word:word 是一个32 比特的二进制数,即集合320,1,,21中的元素之一。 (2)异或和移位计算 两个wordu ,v 的异或用公式表示为: 22iiii iiuvuvu v 设非零整数c ,0,1,2,3c ,对一个wordu 的c 比特左移位表示为uc,用公式表示为: mod322i ciiucu (3)quarterround 函数 设0123,,,yyy yy,输出 0123,,,zquarterroundyz z z z,则 11037zyyy 22109zyzy 332113zyzz 003218zyzz 两者关系如图所示: 图1 Salsa20 的qu arterrou nd 函数 (4)row round 函数 设012315,,,,,yyy yyy,输出 012315,,,,,zquarterroundyz z z zz,则: 01230123,,,,,,z z z zquarterroundyy yy 56745674,,,,,,z z z zquarterroundy yyy 101189101189,,,,,,zzz zquarterroundyyy y 1512131415121314,,,,,,zzzzquarterroundyyyy 若将输入012315,,,,,yy yyy看作是一个方阵 0123456789101112131415yyyyyyyyyyyyyyyy 则row round 函数将方阵的每一行重新排列后作为quarterround 函数的输入,从而并行地修改了所有行。 (5)columnround 函数 设012315,,,,,xx x x xx,输出 012315,,,,,y quarterroundxy y y yy,则: 048...