salsa20和ZUC算法详细介绍及对比

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档