salsa20和ZUC算法详细介绍及对比
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)异或和移位计算
两个word u ,v 的异或用公式表示为:
()22i i i i i i u v u v u v ⊕=+-∑
设非零整数c ,{}0,1,2,3c ∈,
对一个word u 的c 比特左移位表示为u c <<<,用公式表示为:
mod322i c i i u c u +<<<=∑
(3)quarterround 函数
设()0123,,,y y y y y =,输出()()0123,,,z quarterround y z z z z ==,则
()()11037z y y y =⊕+<<<
()()22109z y z y =⊕+<<< ()()332113z y z z =⊕+<<< ()()003218z y z z =⊕+<<<
两者关系如图所示:
图1 Salsa20的quarterround 函数
(4)rowround 函数 设()012315,,,,,y y y y y y =,输出()()012315,,,,,z quarterround y z z z z z ==,
则:
()()01230123,,,,,,z z z z quarterround y y y y = ()()56745674,,,,,,z z z z quarterround y y y y = ()()101189101189,,,,,,z z z z quarterround y y y y = ()()1512131415121314,,,,,,z z z z quarterround y y y y =
若将输入()012315,,,,
,y y y y y 看作是一个方阵
0123456789101112
13
14
15y y y y y y y y y y y y y y y y ⎛⎫ ⎪ ⎪
⎪ ⎪⎝⎭
则rowround 函数将方阵的每一行重新排列后作为quarterround 函数的输入,从而并行地修改了所有行。
(5)columnround 函数 设()012315,,,,,x x x x x x =,输出()()012315,,,,,y quarterround x y y y y y ==,
则:
()()0481204812,,,,,,y y y y quarterround x x x x = ()()5913159131,,,,,,y y y y quarterround x x x x = ()()101426101426,,,,,,y y y y quarterround x x x x = ()()153711153711,,,,,,y y y y quarterround x x x x =
若将输入()012315,,,,
,x x x x x 看作是一个方阵
0123456789101112
13
14
15x x x x x x x x x x x x x x x x ⎛⎫ ⎪ ⎪
⎪ ⎪⎝⎭
则columnround 函数将方阵的每一列置换后作为quarterround 函数的输入,从而并行地修改了所有列。
(6)doubleround 函数
doubleround 变换由一个列变换(columnround )与一个行变换(rowround )组成。
()()()doubleround X rowround columnround X =
(7)littleendian 函数 设()0123,,,b b b b b =,则
()816240123222littleendian b b b b b =+++
littleendian 函数是将8比特序列转变为32比特的可逆函数。
(8)Salsa20的加密函数
Salsa20算法的核心是一个hash 函数,输入和输出均为512比特,算法的初始状态是由16个word 组成的44⨯矩阵,其中包括8个密钥017,,
,k k k ,4个常
数0σ、1σ、2σ、3σ,2个初始IV (nonce )0n 、1n ,2个时间标号(block counter )
0c 、1c ,假设用X 表示初始状态,则X 为:
00123
10101245
673k k k k n n X c c k k k k σσσσ⎛⎫
⎪ ⎪= ⎪ ⎪⎝⎭ 密钥有两种类型,分别为128比特与256比特。若长度为128比特,则后四个密钥依次重发前四个密钥的值。从安全性角度考虑,使用256比特密钥更加安全。下面针对256比特的密钥长度版本对算法进行说明。
Salsa20首先对8-word 的密钥进行扩展,即将上述初始状态X 经过10轮doubleround 变换后的输出与X 进行模232加。可以用公式简单的表示为:
()()1020Salsa X X doubleround X =+
()20Salsa X 是Salsa20算法的密钥流,它异或一个16-word 的明文分组就得出对该明文分组加密后的密文。设P 是一个明文,C 是相应的密文,加密函数为
C P S =⊕,解密函数为C P S =⊕。具体加密过程如下图所示。
图2 Salsa20的加密原理图
1