常用流密码算法 RC4 A6

合集下载

流密码

流密码

同步流密码模型
可见课本P47图3.21
同步流密码
流密码体制示例:二元加法流密码 见课本P47图3.22
密钥流生成器
两部分功能: 驱动部分:负责控制存储器的状态并提供周期长、 统计特性好的序列供非线性组合部分使用; 非线性组合部分:对这些序列进行非线性组合,以 便得到理想的密钥流 。 见课本P48图3.23
3.RC4算法

4.SEAL算法

流密码与分组密码比较
原理不同 流密码比分组密码快 流密码比分组密码代码少很多



作业
课后习题4和习题6; 用DES加密,明文是m=computer,密钥是programm M=01100011 01101111 01101101 01110000 01110101 01110100 01100101 0பைடு நூலகம்110010 K=01110000 01110010 01101111 01100111 01110010 01100001 01101101 01101101
1 2 i
k k1 1 k2 2 ki i
i
流密码的时变性
时变性:随时间而变化。 流密码内部状态随时间变化,通过加密器和解密 器中的记忆元件得以保证; 密钥流中的元素的产生由i时刻的流密码内部状态 (记作 i )和种子密钥(记作k)决定 , 即 k i f (k , i ) ; E k 与解密变换 D 加密变换 也和i时刻的流密 k 码内部状态有关。
i
i
第三章 对称密码体制 ——流密码

流密码基本原理 流密码分类 密钥流产生器 几种常见的流密码算法
流密码分类

用状态转移函数 f s 描述流密码加密器中存储器的状态 随时间变化的过程。 同步流密码 :如果某个流密码中的状态转移函数 不依赖被输入加密器存储器的明文; 自同步流密码 :状态转移函数 f s 与输入明文有关。 注意:目前大多数研究成果都是集中于同步流密码的。

RC4加密解密算法原理与完整源代码实例演示

RC4加密解密算法原理与完整源代码实例演示

RC4加密解密算法原理与完整源代码实例演⽰RC4加密算法是⼤名⿍⿍的RSA三⼈组中的头号⼈物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。

之所以称其为簇,是由于其核⼼部分的S-box长度可为任意,但⼀般为256字节。

该算法的速度可以达到加密的10倍左右,且具有很⾼级别的⾮线性。

RC4起初是⽤于保护商业机密的。

但是在1994年9⽉,它的算法被发布在互联⽹上,也就不再有什么商业机密了。

RC4也被叫做ARC4(Alleged RC4——所谓的RC4),因为RSA从来就没有正式发布过这个算法。

原理RC4算法的原理很简单,包括初始化算法(KSA)和伪随机⼦密码⽣成算法(PRGA)两⼤部分。

假设S-box的长度为256,密钥长度为Len。

先来看看算法的初始化部分(⽤C代码表⽰):其中,参数1是⼀个256长度的char型数组,定义为: unsigned char sBox[256];参数2是密钥,其内容可以随便定义:char key[256];参数3是密钥的长度,Len = strlen(key);void rc4_init(unsigned char *s, unsigned char *key, unsigned long Len){int i =0, j = 0, k[256] = {0};unsigned char tmp = 0;for(i=0;i<256;i++){s[i]=i;k[i]=key[i%Len];}for (i=0; i<256; i++){j=(j+s[i]+k[i])%256;tmp = s[i];s[i] = s[j]; //交换s[i]和s[j]s[j] = tmp;}}在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。

⽽不同的S-box在经过伪随机⼦密码⽣成算法的处理后可以得到不同的⼦密钥序列,将S-box和明⽂进⾏xor运算,得到密⽂,解密过程也完全相同。

基于RC4算法的数据加密技术研究

基于RC4算法的数据加密技术研究

基于RC4算法的数据加密技术研究近年来随着互联网技术的发展以及移动互联网的普及,数据的安全保障已成为我们不得不面对的一个问题。

在这样的背景下,加密技术也逐渐得到了广泛的重视和应用。

本文将介绍一种基于RC4算法的数据加密技术,并对其具体实现进行分析和探讨。

一、RC4算法基础RC4算法是一种流密码,也被称为弧形加密(ARC4)算法。

它的设计初衷是为了在WEP(有线等效隐私)中提供数据加密。

RC4算法采用“密钥流”的方式对数据进行加密和解密,具体的实现过程包括以下几个步骤:(1)初始化密钥初始化密钥需要一个密钥向量和一个密钥长度。

密钥向量是由算法生成的,而密钥长度是由用户指定的。

在初始化过程中,加密机会使用密钥向量和密钥长度,生成一个初始密钥流。

(2)生成密钥流生成密钥流的方法是通过对初始密钥流做变换。

这个变换包括了执行字节交换、置换和异或运算等多个操作,用来混淆初始密钥流。

这样处理之后,密钥流被加密机作为当前的加密密钥流使用。

(3)加密数据加密数据的方法是将数据与密钥流进行XOR运算。

这样,数据就被加密成了密文。

(4)解密数据解密数据的方法和加密类似,也是将密文和密钥流进行XOR运算,从而得到原始数据。

二、RC4算法的优缺点RC4算法的优点在于加密速度快、纯软件实现、实现简单、适用于实时加密传输等场景。

然而,RC4算法也存在一些不足之处:(1)安全性不足RC4算法在算法实现上存在问题,容易被攻击者发现和破解。

尤其是使用的密钥长度较短时,更容易受到攻击。

(2)密钥流重复密钥流的生成方式中存在密钥流重复的情况。

如果两个密钥序列的密钥相同,那么其生成的密钥流也是相同的,从而会导致密文也是相同的。

(3)算法过于简单RC4算法过于简单,容易被攻击者破解。

另外,其实现比较固定,容易受到针对性攻击。

三、RC4算法的优化为了使RC4算法有更高的安全性,在使用RC4算法时,需要注意一些事项,如密钥长度要足够长、密钥流不要重复等。

RC4加密算法学习

RC4加密算法学习

RC4加密算法学习为了⽔博客不择⼿段(其实是ida⾃动绕反调试的插件没安上做不动NCTF了,呜呜呜)tea已经⽔过了,那就⽔⼀篇rc4吧(简介RC4(来⾃Rivest Cipher 4的缩写)是⼀种流加密算法,密钥长度可变。

它的加解密使⽤相同的密钥,因此也属于对称加密算法。

RC4是有线等效加密(WEP)中采⽤的加密算法,也曾经是TLS可采⽤的算法之⼀。

其最重要的实现是初始化算法和伪随机⼦密码的⽣成。

RC4的实现是以字节流的⽅式依次加密明⽂中的每⼀个字节,解密的时候也是依次对密⽂中的每个字节解密。

(只有异或操作和S盒,所以加解密的过程相同,这是其可逆性的原理)算法实现先贴⼀份c++实现的代码void init(int *s, char *key, int len){int t[256] = {0};char tmp = 0;for (int i = 0; i < 256; ++i){s[i] = i;t[i] = key[i % len];}int j = 0;for (int i = 0; i < 256; ++i){j = (j + s[i] + t[i]) % 256;swap(s[i], s[j]);}}void crypt(int *s, char *data, int len){int i = 0, j = 0, t = 0;char tmp;for (int k = 0; k < len; ++k){i = (i + 1) % 256;j = (j + s[i]) % 256;swap(s[i], s[j]);t = (s[i] + s[j]) % 256;data[k] ^= s[t];}}初始化算法(KSA)先来看看初始化算法,此处我们假设S盒的长度是256,密钥key的长度为len且key的内容由⽤户规定,其长度的可变范围不限(超过256的不要就⾏)void init(int *s, char *key, int len){int t[256] = {0};char tmp = 0;for (int i = 0; i < 256; ++i){s[i] = i;t[i] = key[i % len];}int j = 0;for (int i = 0; i < 256; ++i){j = (j + s[i] + t[i]) % 256;swap(s[i], s[j]);}}初始化算法的步骤为:初始化S盒为0-255扩展密钥长度,具体操作是:若key的长度⼩于256,则不断将其复制进临时数组t,直到t的长度刚好达到256(多的就不要了)根据t数组打乱S盒,使S盒近似为⼀个随机⽣成的、内含元素只有0-255的数组在该算法中,i确保了S盒的每个元素都被处理过,⽽j确保了这种打乱的处理是近似于随机的伪随机⼦密码⽣成算法(PRGA)void crypt(int *s, char *data, int len){int i = 0, j = 0, t = 0;char tmp;for (int k = 0; k < len; ++k){i = (i + 1) % 256;j = (j + s[i]) % 256;swap(s[i], s[j]);t = (s[i] + s[j]) % 256;data[k] ^= s[t];}}该算法对data的每⼀位都进⾏了加密,具体操作是通过⼀定的算法找到了S盒中的某⼀元素,并与data当前字节异或,得到密⽂。

基于RC4算法的流密码原理与实现

基于RC4算法的流密码原理与实现

信息技术与网络安全!"#$ 年第 %& 卷第 ' 期
%#
文以后通信双方又会产生相同的密钥 因此它具有
图 #(流密码原理框架
成功%
根据密钥的 不 同 流 密 钥 可 以 分 为 同 步 流 密 钥 和
自同步流密钥
基于同步流 密 码 的 流 密 钥 独 立 于 明 文 相 同 的 明
5d 836yz;m{|}~O
刘程远
深圳中电长城信息安全系统有限公司广东 深圳 6#$"6&
摘(要在单密钥密码体制的通信中加密与解密必须使用相同密钥通信双方如何在不安全的网络环境下安全地交换管理密 钥以及应对密钥泄漏是保障密码安全的关键 流密码提供了一种安全的密钥交换方式在拥有简单和速度优势的同时通信双 方无需在信道上交换密钥从物理上避免了密钥进入公网环境 介绍了 Q,W 流密码的原理优点在通信项目中的实际应用保 持密钥流同步的方法以及失去同步后恢复的方法 关键词流密码Q,W单密钥 中图分类号/0%"'((((((文献标识码1((((((234 #"5#'%6$ 7859::+5!"';<6#%%5!"#$5"'5""$ 引用格式刘程远5基于 Q,W 算法的流密码原理与实现=5信息技术与网络安全!"#$%&'%#<%%W#5
利于检测 同步流密码在失步后如何重新同步是一个
重要问题处理不好将严重影响安全性
基于自同步流密码的流密钥在失去同步后能自行
恢复同步 如图 ! 所示其密文 *(不仅与当前明文 &( 有关还与历史明文 &# &! &(^# 有关一般在有限 的 6 级存储下每个密文字符将影响以后 6 个输入明

RC4算法简介

RC4算法简介

§2.1 RC4算法1987年, Ron Rivest 为RSA公司开发了一个可以快速软件实现的新的序列密码算法−−RC4算法, 并申请了专利. RC4算法因其算法简洁, 安全性高, 易于软件实现, 被广泛地应用于各种商业密码产品中, 它还是许多重要的加密协议和标准的一部分, 如WEP, WPA, SSL, TLS等.2.1.1 算法描述RC4算法主要基于n比特数的置换, 密钥的扩展和系统状态的更新通过一系列数组置换来实现. 通常n = 8, 即考虑256个字节间的置换.RC4算法选用40−256比特可变长的密钥, 产生以字节为单位的密钥流序列, 得到的密钥流序列再与明文序列或者密文序列异或得到密文序列或者明文序列. 其中间状态包括如下两部分:(1) 256个字节间的置换S, 其中各分量S[i]均为字节, 0≤i≤ 255.(2) 两个8-bit指针: i和j, 初值为0.系统总的状态变量约为1684比特.置换(数组)S先经密钥设置算法初始化, 再通过密钥生成算法得到需要的密钥序列. 其密钥设置算法和密钥生成算法如下:•密钥设置算法记keylength为密钥字节数, 通常5 ≤ keylength ≤32, 即密钥长度为40∼256比特, key[j].40 ≤j≤ 128. 密钥设置算法中S-盒初始化分三步:Step1. 线性填充, 即S为恒等置换.Step2. 密钥扩展, 即K[i] =K[i mod keylength], keylength ≤i≤ 255.Step3. 类似于下面的密钥生成算法, 密钥参与j的递归, 系统迭代256次, 更新S盒.其伪码表示为:for i from 0 to 255S[i] =iendforj= 0for i from 0 to 255j = (j + S[i] + key[i mod keylength]) mod 256swap(S[i],S[j])endfor注2.1.1 在WEP应用中, 会话密钥和IV级联作为RC4的种子密钥, 而在SSL应用中, 会话密钥和IV的hash值作为RC4的种子密钥. WEP协议中会话密钥和IV简单级联使用的方式也是容易对其攻击的原因之一.•密钥生成算法初始化算法结束后, 系统按下面的密钥生成算法输出需要的密钥序列.Initialization:i= 0j= 0Generation loop:i= (i+ 1) mod 256j= (j+ S[i]) mod 256Swap(S[i], S[j])Output K= S[(S[i] + S[j]) mod 256]每次迭代, 系统内部状态更新一次, 并输出一个字节K, 经过256次迭代后, S盒中每个值至少交换了一次.参考文献[1] A. Roos. A class of weak keys in the RC4 stream cipher. In: Two posts in sci.crypt. (1995),http://marcel.wanda.ch/Archive/WeakKeys.[2]S. R. Fluhrer, I. Mantin and A. Shamir. Weaknesses in the key scheduling algorithm of RC4. In: S.Vaudenay and A. Youssef (Eds.): SAC 2001, LNCS 2259, pp. 1–24, 2001.[3]G. Paul, S. Maitra. Permutation after RC4 key scheduling reveals the secret key. In: C. Adams, A. Miri,and M. Wiener (Eds.): SAC 2007, LNCS 4876, pp. 360–377, 2007.[4]M. Akgün, P. Kavak, H. Demirci. New results on the key scheduling algorithm of RC4. In: D.R.Chowdhury, V. Rijmen, and A. Das (Eds.): INDOCRYPT 2008, LNCS 5365, pp. 40–52, 2008.[5]I. Mantin and A. Shamir. A practical attack on broadcast RC4. In: M. Matsui (Ed.): FSE 2001, LNCS2355, pp. 152–164, 2002.[6]G. Paul, S. Rathi, and S. Maitra. On Non-negligible Bias of the First Output Bytes of RC4 towards theFirst Three Bytes of the Secret Key. In: WCC’07 -International Workshop on Coding and Cryptography, pp. 285–294, 2007.[7]G. Paul, S. Maitra, and R. Srivastava. On non-randomness of the permutation after RC4 key scheduling.In: S. Boztas and H.F. Lu (Eds.): AAECC 2007, LNCS 4851, pp. 100–109, 2007.[8]S. Maitra and G. Paul. New form of permutation bias and secret key leakage in keystream bytes of RC4.In: K. Nyberg (Ed.): FSE 2008, LNCS 5086, pp. 253-269, 2008.[9]P. Sepehrdad, S. Vaudenay and M. Vuagnoux. Discovery and Exploitation of New Biases in RC4. In: A.Biryukov, G. Gong, and D. R. Stinson(eds.): SAC 2010, LNCS 6544, pp. 74-91, 2010.[10]E. Tews, R.P.Weinmann, A.Pyshkin. Breaking 104 Bit WEP in Less than 60 Seconds. In: S.Kim,M.Yung, H.-W.Lee(eds.): WISA 2007. LNCS 4867, pp. 188–202. Springer, Heidelberg (2007).[11]E. Tews and M. Beck. Practical attacks against WEP and WPA. In: David A. Basin, S. Capkun, and W.Lee (Eds.): WISEC 2009, pp.79–86, ACM, 2009.[12]S. Maitra, G. Paul, and S. Sengupta. Attack on Broadcast RC4 Revisited. In A. Joux (ed.): FSE 2011,LNCS 6733, pp. 199-217, 2011.§2.2 A5算法A5是用于GSM (Global System for Mobile Communications)加密的序列密码算法, 它是数字蜂窝移动电话的欧洲标准, 主要用于加密电话到基站的连接. A5/1是1987年提出的, 在美国和欧洲使用; A5/2是其弱版本, 1989年提出, 主要出口到欧洲以外国家, 两个算法都申请了专利. 下面主要介绍A5/1算法.2.2.1 A5/1算法A5/1算法由三个LFSR组成, 寄存器的长度分别为19, 22和23, 三个LFSR的异或值作为输出. A5/1用不同的时钟控制, 每一个寄存器由基于它自己中间位的时钟按最大一致原则进行停走控制. 其结构示意图如下:图2.2.1A5/1示意图设各控制时钟分别为C1, C2, C3, 具体控制情况见下表:控制时钟受控寄存器编号C1 = C2 = C3 1, 2, 3C1 = C2 = C3+1 1, 2C1 = C2+1 = C3 1, 3C1+1 = C2 = C3 2, 3当控制比特与择多函数值一致时寄存器前进一拍, 否则寄存器保持当前状态不动. 从而在每一轮中时钟驱动两个或者三个LFSR, 每个LFSR以3/4的概率被控制.GSM会话以每4.6毫秒(millisecond)一幁的速度传输(每秒约217帧, 每分钟约214帧), 每幁包括228比特, 其中114比特表示从用户A到用户B的通信, 114比特表示从用户B到用户A的通信.每次通信的密钥由64比特秘密的会话密钥K (利用共享密钥和认证过程中的随机数由A3和A8算法共同产生)和22比特公开的幁数F n两部分组成, 它们共同来初始化系统. (每个密钥K至多能加密222= 4,194,304帧.)A5/1初始化算法主要由如下四部分组成:Step 1.所有寄存器置0.Step 2.不加控制, 系统运行64拍, 依次将密钥K的各个比特并行加到各寄存器的反馈端. (每次先将K的一个比特与三个LFSR的反馈端异或, 移存器运行1拍, 共迭代64次)Step 3.不加控制, 系统运行22拍, 依次将幁指针F n的各个比特并行加到各寄存器的反馈端. 寄存器的最终状态称为幁初态. (类似2将幁数F n叠加到LFSR中) Step 4.加控制, 系统运行100拍, 不输出.完成系统初始化后, 再在控制单元作用下运行系统228拍(按图2.2.1所示运行228拍), 得到需要的密钥序列.§2.3 ORYX算法ORYX是由美国电信工业协会(Telecommunications Industry Association)开发的用于蜂窝电话(cell phone)加密的序列密码算法, 该算法与GSM- A5算法一样, 在上世纪90年代被广泛应用于电话信号的加密. 1997年, 该算法的安全性问题被暴露.ORYX采用了3个32级的线性移位寄存器X, A和B, 总密钥长度为96比特. 寄存器X 的第29和26比特分别控制寄存器A, B的运行, 寄存器A, B的高8比特对应的查表值与寄存器X的高8比特模256加输出8比特密钥字节(见图2.2.3). 初始化时直接用96比特密钥填充系统状态, 各寄存器的反馈函数如下:P X= x0⊕ x4⊕ x5⊕ x8⊕ x9⊕ x10⊕ x13⊕ x15⊕ x17⊕ x18⊕ x27⊕ x31P A0= a0⊕a1⊕a3⊕a4⊕a6⊕a7⊕a9⊕a10⊕a11⊕a15⊕a21⊕a22⊕a25⊕a31P A1= a0⊕a1⊕a6⊕a7⊕a8⊕a9⊕a10⊕a12⊕a16⊕a21⊕a22⊕a23⊕a24⊕a25⊕a26⊕a31P B= b0⊕ b2⊕ b5⊕ b14⊕ b15⊕ b19⊕ b20⊕ b30⊕ b31K t图2.2.3 ORYX算法示意图其中表L是整数{0,1, …, 255}上的置换, 由IV值唯一确定(见表2.2.1).表2.2.1置换表L示例表2.2.2 寄存器A, B的12种扩展方式寄存器A, B共有12种扩展方式(见表2.2.2), 具体控制方式为: 当x[29]为0或1时, 寄存器A分别选用P A0或P A1作为反馈函数; 当x[26]为0寄存器B走1拍, 否则寄存器B走2拍.•ORYX算法分析文[5]指出: 已知连续25个密钥流字节, 可以恢复出系统初态(96比特原始密钥).注意到ORYX每次输出8比特, 相邻时刻寄存器X参与输出的8比特中有7比特保持不变, 若穷举寄存器A, B的高8比特(216 = 65536种可能), 由当前输出密钥字节k0可以恢复出寄存器X的高8比特H(X); 再穷举A和B的12种扩展方式, 结合k1进而可以恢复出下一时刻寄存器X的高8比特H(X)′, 由于H(X)′为H(X)移一位所得, 只有约12/27 = 1/10的初态不出现矛盾.因此, 利用连续两拍的输出, 可能初态值将会从65536降为65536 ⋅12/128= 6144. 若还知道k2的值, 利用同样的方法, 再穷举A和B的12种扩展方式, 不出现矛盾的初态又将降为6144 ⋅12/128= 576. 一般的, 已知连续6拍输出密钥字节, 可能初态数将降为1, 再由其它19拍输出密钥字节可以还原系统中间状态, 进而求出初态值.利用X高8比特的移位关系, 每次穷举时状态匹配的可能性都远小于1, 经几步穷举可能状态数将很快降为1, 由此可以进行有效攻击, 具体攻击算法参见文[5]的3.4节.参考文献[1]P. Ekdahl and T. Johansson. Another attack on A5/1. IEEE Trans. Inform. Theory, 49(1), pp.284–289, 2003. (An early version appeared in ISIT 2001)[2] E. Barkan, E. Biham, and N. Keller. Instant ciphertext only cryptanalysis of GSM encryptedcommunication. In D. Boneh (Ed.), Advances in Cryptology — CRYPTO 2003, LNCS 2729, pp. 600–616. Springer-Verlag, 2003.[3] E. Barkan, E. Biham and N. Keller. Instant Ciphertext-Only Cryptanalysis of GSMEncrypted Communication. J. Cryptol. (2008) 21: 392–429.[4]Karsten Nohl. A5/1 Security Project: Creating A5/1 Rainbow Tables. Available online at/trac/a51, Dec.2009.[5]M. Stamp and R. M. Low. Applied Cryptanalysis - Breaking Ciphers in the Real World. SanJose State University, WILEY-INTERSCIENCE, A JOHN WILEY & SONS, INC., PUBLICATION, 2007, pp. 93-103 (See Chapter 3, Section 4).。

RC4加密算法

RC4加密算法

网易视频云分享:RC4加密算法这次网易视频云的每日分享,将给大家带来RC4加密算法的介绍,同时也有一些代码示例供大家参考。

在密码学领域,RC4(又名ARC4或者ARCFOUR)是应用最广泛的流加密算法,应用在安全套接字层(SSL)(用来保护网络上传输的数据)和WEP(无线网络数据保护)上。

虽然它的最大亮点是算法的简单性和运行速度,但是因为它存在的弱点,在新的系统中使用时是有所争论的。

使用起始的输出keystream,使用非随机的或者相关性的keys,一个keysteream连续两次使用,这些使用方法都能使RC4加密方法显得特别脆弱,比如在WEP中RC4的一些使用方式就导致了非常不安全的情况。

历史RC4是由RSA Security的Ron Rivest在1987年开发出来的,虽然它的官方名是“Rivest Cipher 4”,但是首字母缩写RC也可以理解为Ron's Code。

RC4开始时是商业密码,没有公开发表出来,但是在94年9月份的时候,它被人匿名公开在了Cypherpunks邮件列表上,很快它就被发到了sci.crypt新闻组上,随后从这儿传播到了互联网的许多站点。

随之贴出的代码后来被证明是很有水平的,因为它的输出跟取得了RC4版权的私有软件的输出是完全的。

由于算法已经公开,rc4也就不再是商业秘密了,只是它的名字“RC4”仍然是一个注册商标。

RC4经常被称作是“ARCFOUR”或者"ARC4"(Alleged RC4,所谓的RC4,因为RSA从来没有官方公布这个算法),这样来避免商标使用的问题。

它已经成为一些广泛使用的协议和标准的一部分,比如,包括WEP和WPA的无线网卡和TLS。

让它如此广泛分布和使用的主要因素是它不可思议的简单和速度,不管是软件还是硬件,实现起来都十分容易。

描述RC4产生一个伪随机比特流(a keystream),加密的时候,把它跟明文进行比特级别的异或处理,解密时进行一样的步骤(因为异或操作是对称的)。

常用的对称密钥密码体制

常用的对称密钥密码体制

常用的对称密钥密码体制
常用的对称密钥密码体制有以下几种:
1. DES(Data Encryption Standard):是一种对称密钥密码体制,使用56位的密钥来加密64位的数据块。

2. AES(Advanced Encryption Standard):是一种对称密钥密码体制,使用128位、192位或256位的密钥来加密数据。

3. RC4(Rivest Cipher 4):是一种流密码,可用于对数据流进行加密。

RC4可以使用不同长度的密钥。

4. Blowfish:是一种对称密钥密码体制,可用于对数据块进行加密,密钥长度可变。

5. IDEA(International Data Encryption Algorithm):是一种对称密钥密码体制,使用128位的密钥对数据进行加密。

这些是常见的对称密钥密码体制,具有较高的安全性和广泛的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常用流密码算法(RC4算法与A5算法)
流密码(Stream Cipher),是对称密码算法的一种。

序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。

1949年Shannon证明了只有一次一密的密码体制是绝对安全的,这给序列密码技术的研究以强大的支持,序列密码方案的发展是模仿一次一密系统的尝试,或者说“一次一密”的密码方案是序列密码的雏形。

如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,则此时的序列密码就是一次一密的密码体制。

若能以一种方式产生一随机序列(密钥流),这一序列由密钥所确定,则利用这样的序列就可以进行加密,即将密钥、明文表示成连续的符号或二进制,对应地进行加密,加解密时一次处理明文中的一个或几个比特。

RC4算法:
RC4算法非常简单,易于描述:用从1到256个字节(8到2048位)的可变长度密钥初始化一个256个字节的状态矢量S,S的元素记为S[0],S[1],⋯,S[255],从始至终置换后的S包含从0到255的所有8比特数.对于加密和解密,字节K由S 中256个元素按一定方式选出一个元素而生成.每生成一个K的值,S中的元素就被重新置换一次.
1 初始化S
开始时,S中元素的值被置为按升序从0到255,即s[0]=0,S[1]=1,⋯,
S[255]=255.同时建立一个临时矢量T.如果密钥K的长度为256字节,则将K赋给T.否则,若密钥长度为keylen字节,则将K的值赋给T的前keylen个元素,并循环重复用K的值赋给T剩下的元素,直到T的所有元素都被赋值.这些预操作可概括如下:
/*初始化*/
for i=0 to 255 do
S[i]=i;
T[i]=K[i mod keylen]
然后用T产生S的初始置换.从S[0]到S[255],对每个S[i],根据由T[i]确定的方案,将S[i]置换为S中的另一字节:
/*S的初始序列*/
j=0
for i=O to 255 do
j=(j+s[i]+T[i])mod 256
swap(s[i],s[j]);
因为对S的操作仅是交换,所以惟一的改变就是置换.S仍然包含所有值为0到255的元素.
2 密钥流的生成
矢量S一旦完成初始化,输人密钥就不再被使用.密钥流的生成是从s[0]到S[255],对每个S[i],根据当前S的值,将S[i]与S中的另一字节置换.当S[255]完成置换后,操作继续重复,从S[0]开始:
/*密钥流的产生*/
i,j=0
while(true)
i=(i+1)mod 256
j=(j+S[i])mod 256
swap(sEi],s[j])
t=(sEi]+s[j])mod 256;
k=S[t]
加密中,将k的值与下一明文字节异或;解密中,将k的值与下一密文字节异或.A5算法
A5/1方案用于GSM蜂窝电话网络中的数据机密性加密。

这个算法有其数学表达,但是也可以通过相对比较简单的接线图予以说明。

A5/1算法使用3个线性反馈移位寄存器(linear feedback shift register),或简称为LFSR,我们分别将其标识为X、Y和Z。

寄存器X有19位,可以表示为(x0, x1, ... ,x18);寄存器Y有22位,可以表示为(y0, y1, ... ,y21);而寄存器Z 有23位,可以表示为(z0, z1,... ,z22)。

当然,并非像大部分计算机极客(geek,意指技术不一定很好的电脑发烧友)所热衷的两极对立场景那样随意,这里要使用三个共包含64位二进制的线性反馈移位寄存器,这个设计绝非偶然。

A5/1算法的密钥K也是64位。

该密钥用于三个线性反馈移位寄存器的初始填充,也就是说,该密钥用于充当三个寄存器的初始值。

这三个寄存器用密钥填充之后,就可以开始生成密钥流了。

A5/1算法就是一个密钥流生成器,其生成密钥与明文(或密文)进行异或运算,从而实现加密(或解密)功能,工作原理如图1所示。

其中Kc为64比特的密钥,Fn为22bit的帧号。

A5/1算法的基本工作原理如图2所示。

其由3个长度分别为19、22和23级的线性反馈移位(LFSR)组成R1、R2、R3。

它们的反馈多项式分别为:1817161321202221207
++++++++++
1;1;1
x x x x x x x x x x
3个LFSR以“停-走”的方式按照多数原则工作:每个LFSR都有一个时间判决抽头,R1的接头位于寄存器的第9级、R2、R3的接头都位于寄存器的第11级;在每个时钟周期,3个抽头的输出用于进行大数判决,与判决结构相同的LFSR在时钟控制下进行移位,与判决结果不同的LFSR则保持不变。

这样,在每个时钟周期至少有两个LFSR进行移位,有可能3个LFSR都进行移位。

A5/1算法的工作过程可以分为两个阶段:初始化阶段和密钥生成阶段。

在初始化阶段中,3个LFSR首先清零,然后加密密钥Kc的每一比特(从最低位开始)分别与3个LFSR的最低位进行异或,并在64个时钟控制下与加密密钥Kc初始化3个LFSR(此时停-走判决器不工作);以同样方式,在22个时钟控制下再用帧号累加器Fc初始化3个LFSR。

接下来的100个时钟内,3个LFSR在“停-走”判决器的控制下工作,但不输出。

之后在密钥生成阶段的228个时钟控制下,3个LFSR的最高位输出进行异或,作为密钥输出。

输出的228bits密钥分成两个114bits的密钥流,分别用于加/解密上行和下行链路的数据。

A5/1算法的安全性不高,1999年12月,以色列的密码研究人员AlexBiryukov 和美国的DavidWagner宣布攻破A5/1算法,他们的攻击方法比较简单,只需要一台个人计算机,如果他们获得两分钟的A5/1算法输出,那么他们就可以用1s获得加密密钥Kc;如他们获得2s的A5/1输出,则可以在几分钟内获得加密密钥。

相关文档
最新文档