密码基础(序列密码算法-付ZUC算法详解)
ZUC算法是中国自主研发的流密码算法,是一个对称密码算法RC4是美国RSA数据安全公司1987年设计的一种序列密码,密钥长度可变,可使用 64 位或 128 位密钥大小,按目前的计算能力,RC4算法的密钥长度至少应为128位,广泛应用于SSL/TLS标准等商业密码产品中,是目前所知应用 最广泛的对称序列密码算法。该算法以OFB方式工作,密钥流与明文相互独立。RSA数据安全公司将其收集在加密工具软件
(一)基本概念
序列密码,又称为流密码,属于对称密码体制,它一次只对明文消息的单个字符(通常是二进制位,单比特)进行加解密变换,具有实现简单、速度快、错误传播少等特点,是世界各国的军事和外交等领域中使用的主要密码体制。
序列密码的起源于20世纪20年代的维尔姆(Vernam),由美国电话电报公司的G.W.Vernam于1917年发明。若Vernam体制中的密钥序列是随机序列时,则为“一次一密”密码体制(one-time-pad),理论上是不可破译的。由于随机密钥序列的产生、分发及管理等方面存在一定的困难,Vernam体制在当时未得到广泛应用。
序列密码算法(也称为流密码算法)将明文逐位(字节也可以)转换成密文,序列密码体制模型如图所示。
特点:
加解密运算只是简单的模二加运算。
密码安全强度主要依赖密钥流的安全性。
在序列密码中,明文按一定长度分组后表示成一个序列,称为明文流(序列中的每一项称为明文字)。
加密时,先由种子密钥(或称为主密钥)通过密钥流产生器生成一个密钥流序列,该序列的每一项和明文字具有相同的比特长度,称为密钥字;然后依次把明文流和密钥流中的对应项做二元加法运算(异或运算),产生相应的密文字,由密文字构成密文流输出。
解密过程是将同样的密钥流与密文流中的对应项做二元加法运算,恢复出原来的明文流。
序列密码和分组密码的区别 :
序列密码是将密钥和初始向量作为输入,通过密钥流生成算法输出密钥流(也称为扩展密钥序列),然后将明文序列和密钥流进行异或,得到密文序列。
分组密码首先对明文消息根据分组大小进行分组,再将明文分组、密钥和初始向量一起作为输入,通过分组加密算法直接输出密文分组。常见的序列密码:RC4,ZUC应用:用于无线通信网络,实现语音、视频即时加密。
序列密码分类
同步序列密码:密钥流的产生需要收发双方进行同步,密钥流的产生完全独立于明文消息和密文消息,密文只与明文和密钥有关,密文不参与加密。
自同步序列密码:密钥流的产生是密钥及固定大小的以往密文位的函数,K=f(k,c)。密文参与加密,密文不仅与明文和密钥有关,还与之前的密文有关。
1.同步序列密码SSC(Synchronous Stream Cipher)中,密钥流独立于消息流产生。一个错误传输只会影响一个符号,不影响后面的符号。
无错误传播:一个错误传输只会影响一个符号,不影响后面的符号。
优点: 无错误传播,容易检测插入、删除、重放等主动攻击。
缺点:一旦接收端和发送端的种子密钥和内部状态不同步,解密就会失败,两者
必须立即借助外界手段重新建立同步。
2.自同步序列密码
自同步序列密码也称为异步流密码,其密钥流的产生不是独立于明文流和密文流的,与种子密钥和其前面已产生若干密文字有关(k,c)。密文不仅与明文和密钥有关,还与之前的密文有关。
自同步能力:自同步序列密码的核心特性是具有自同步能力。密钥序列的产生依赖于种子密
钥和固定个数的以前的若干位的密文。这意味着,即使在密文传输过程中出现插入或删除等
非法攻击,导致通信双方失去同步,接收端在连续接收到一定数量的正确密文后,密钥序列
产生器能够自动恢复同步解密。
有限的错误传播:因为自同步序列的状态取决于t个已有的密文字符,若一个密文字(或位)
在传输过程中被修改(插入或删除),则解密时最多只影响到后续 t个密文字的解密,即只发
生有限的错误传播。
其他特点:明文统计特性的扩算、自动对齐、检错和纠错等
序列密码与分组密码比较
(1)分组密码是以一定的固定长度的分组作为每次处理的基本单元;而序列密码则是以一个元素(一个字符或一个比特位)作为基本处理单元。
(2)分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优势,其缺点是加密处理速度慢,存在错误传播;而序列密码是用的一个随时间变换的加密变换,具有传播速度快、低错误传播和硬件实现电路简单等优势,其缺点是低扩散(意味着混乱不够)、插入及修改不敏感。
序列密码体制的安全性取决于密钥流的性能,当密钥流是完全的随机序列时,序列密码是不可破的;随机序列的主要特点表现为无规律性和不可预测性。 如果密钥流能做到真正的随机,此时的序列密码就是“一次一密”的密码体制,是绝对安全的。
在实际应用中,密钥流都是用有限存储和有限复杂逻辑的电路来产生的,此时的密钥流只有有限个状态。这样的密钥流生成器迟早要回到初始状态而使其呈现出周期性。但如果密钥流周期足够长,且随机性好,其安全强度是可以得到保证的。序列密码的安全强度取决于密钥流生成器的设计。
目前,产生密钥流最重要的部件是线性反馈移位寄存器(LFSR,Linear Feedback Shift Register),这是因为LFSR非常适合硬件实现、能产生较大周期和统计特性良好的序列。
(二)线性反馈移位寄存器
上面已经说到产生密钥流最重要的部件就是线性反馈移位寄存器,现在来讲述一下原理。
移位寄存器是指有n个寄存器(称为n级移位寄存器)r1,r2,…,rn从右到左排列,每个寄存器中能存放1位二进制数,所有寄存器中的数可以统一向右(或向左)移动1位,称为进动1拍. 即r1的值(b1)右移1位后输出,然后r2的值(b2)送r1, r3的值(b3)送r2,……最后, rn的值(bn)送rn-1
反馈移位寄存器(feedback shift register,FSR)是由n位的寄存器和反馈函数(feedback function)组成,如下图所示,n位的寄存器中的初始值称为移位寄存器的初态。
标有a1,a2,...,a(n-1),an的小方框表示(0,1)二值存储单元(都是0或1),信号流从左往右,这n个二值存储单元称为该反馈移位寄存器的级。
这是一个动态过程,比如f(a1,a2,...an)=a(n+1),移位给an,an的值移位给a(n-1)
是不是线性反馈移位寄存器是由反馈函数f是不是线性函数决定的
(三)ZUC算法
定义
ZUC算法是中国自主研发的流密码算法,是一个对称密码算法
在这里需要明白一些基础概念:
算法结构
祖冲之算法由线性反馈移位寄存器(LFSR)、比特重组(BR)和非线性函数F组成
先说线性反馈移位寄存器(LFSR):
LFSR包括16个31bit的寄存器单位变量,s0,s1....s15,LFSR运行模式有两种,初始化模式和工作模式。初始化模式是LFSR接受1个31比特字的输入u,然后对寄存器单元变量s0,s1...s15进行更新,计算过程如下:
工作模式:LFSR无输入,直接对寄存器单元变量s0,s1...s15进行更新
比特重组:
输入为LFSR寄存器单元变量s0,s2,s5,s7,s9,s11,s14,s15,输出为4个32比特字X0,X1,X2,X3,计算过程如下:
比特
比如X0=s15取高16bit和s14的低16bit拼接起来;比特重组就是从LFSR寄存器单元中抽取128比特组成4个32比特X0,X1,X2,X3。将X0,X1,X2带入下方的非线性函数
非线性函数F:
X0查S0盒,比如X0的十六进制是SA,查询S0盒的3行A列,是FD。S0盒和S2盒一样,S1盒和S3盒一样。
密钥装入
将初始密钥k和初始向量iv分别扩展为16个31比特字作为LFSR寄存器单元变量s0,s1,...s15的初始状态。步骤如下:
将k和iv分别分16份,比如s0就是k0和d0和iv0的拼接,di如右上角那个小图,是给定的
算法运行
祖冲之算法的输入参数为初始密钥k,初始向量iv和正整数L,输出参数为L个密钥字Z。算法运行过程包含初始化步骤和工作步骤。
初始化步骤:将初始密钥k和初始向量iv装入到LFSR的寄存器单元变量s0,s1...,s15中,作为LFSR的初态;令32比特记忆单元变量R1和R2为0;重复执行下述过程32次。
这个流程图很关键,各步骤输入输出
工作步骤:
(丢弃W:其实上这一步也就是把参数进行更新,我们并不需要这个结果)
附:基于祖冲之密码的机密性算法 128-EEA3
ZUC(祖冲之密码算法)特点:
引入素数域运算、比特重组、最优扩算的线性变换等先进理念和技术
三层结构的综合运用
高的理论安全性,能够有效抵抗目前已知的攻击方法,具有较高的安全冗余
算法速度快,软硬件实现性能比较好
(四)RC4算法
定义
RC4是美国RSA数据安全公司1987年设计的一种序列密码,密钥长度可变,可使用 64 位或 128 位密钥大小,按目前的计算能力,RC4算法的密钥长度至少应为128位,广泛应用于SSL/TLS标准等商业密码产品中,是目前所知应用 最广泛的对称序列密码算法。
该算法以OFB方式工作,密钥流与明文相互独立。RSA数据安全公司将其收集在加密工具软件BSAFE中。最初并没有公布RC4的算法,人们通过软件进行逆向分析得到了算法,在这种情况下,RSA数据安全 公司于1997年公布了RC4密码算法。RC4与基于LFSR的序列密码不同,它是以随机置换为基础、基于非线性数据表变换的序列密码,面向字节操作。它以一个足够大的数据表为基础,对表 进行非线性变换,产生非线性的密钥序列。
RC4属于对称密码算法中的流密码加密算法。密钥长度可变,面向字节操作。它以一个足够大的表S为基础,对表进行非线性变化,产生密钥流。明文和密钥异或形成密文,密文和密钥异或为明文。
加密过程:
step2:如果值小于256,就循环赋值填满
密钥流生成:
生成密钥序列,循环执行: 更新:i=(i+1) mod 256 更新:j=(j+S[i]) mod 256
交换 :S[i]和S[j]
输出函数,RC4的输出函数定义如下:
计算临时变量 :h=(S[i]+S[j])mod 256
生成密钥流字节:z=S[h]
在加密和解密期间,RC4不断生成密钥流字节,和明文密文进行加解密。
RC4算法的优点是:算法简单、高效,特别适合软件实现。目前,RC4所用的初始密钥至少为128位。RC4被广泛应用于商业密码产品中, 例如已经用于Microsoft Windows、Lotus Notes和Oracle的SQL数据库中、为网络浏览器和服务器之间的通信定义的安全套接字层(Secure Socket Layer, SSL);还用于无线系统以及保护无线连接的安全 , 如应用于 IEEE802.11 无 线 LAN 标准的 WEP ( Wired Equivalent Privacy)协议和Wi-Fi保护访问协议等。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)