第6章对称密码的其他内容3.docx

上传人:b****6 文档编号:6230355 上传时间:2023-01-04 格式:DOCX 页数:11 大小:525.16KB
下载 相关 举报
第6章对称密码的其他内容3.docx_第1页
第1页 / 共11页
第6章对称密码的其他内容3.docx_第2页
第2页 / 共11页
第6章对称密码的其他内容3.docx_第3页
第3页 / 共11页
第6章对称密码的其他内容3.docx_第4页
第4页 / 共11页
第6章对称密码的其他内容3.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

第6章对称密码的其他内容3.docx

《第6章对称密码的其他内容3.docx》由会员分享,可在线阅读,更多相关《第6章对称密码的其他内容3.docx(11页珍藏版)》请在冰豆网上搜索。

第6章对称密码的其他内容3.docx

第6章对称密码的其他内容3

第6章对称密码的其他内容

6.1多重加密与三重DES算法

6.1.1双重DES

为了提高DES的安全性,并利用实现DES的现有软硬件,可将DES算法在多密钥下多重使用。

使用两个密钥为K1和K2,密文为

C=Ek2[Ek1[P]]

解密时,以相反顺序使用两个密钥:

P=Dk1[Dk2[C]]

如果已知一个明文密文对(P,C),攻击的实施可如下进行:

首先,用256个所有可能的K1对P加密,将加密结果存入一表并对表排序,然后用256个所有可能的K2对C解密,在上述表中查找与C解密结果相匹配的项,如果找到,则记下相应的K1和K2。

最后再用一新的明文密文对(P’,C’)检验上面找到的K1和K2。

用K1和K2对P’两次加密,若结果等于C’,就可确定K1和K2是所要找的密钥。

二重DES会受到中间人的攻击。

6.1.2使用两个密钥的三重DES

加密:

C=Ek1[Dk2[Ek1[P]]]

解密:

P=Dk1[Ek2[Dk1[C]]]

6.1.3使用三个密钥的三重DES

加密:

C=Ek3[Ek2[Ek1[P]]]

解密:

P=Dk1[Dk2[Dk3[C]]]

有些基于Internet的应用已经采纳了这种三重DES。

6.2分组密码的工作模式

DES算法是提供数据安全的基本构件。

为了将DES应用于实际,人们定义了五种工作模式(FIPS81).这些模式也可用于包括3DES和AES在内的任何分组密码。

(1)电码本(ECB)模式

ECB(electroniccodebook)模式是最简单的运行模式,它一次对一个64比特长的明文分组加密,而且每次的加密密钥都相同,如图3-10所示。

当密钥取定时,对明文的每一个分组,都有一个惟一的密文与之对应。

因此形象地说,可以认为有一个非常大的电码本,对任意一个可能的明文分组,电码本中都有一项对应于它的密文。

图3-10 ECB模式示意图

如果消息长于64比特,则将其分为长为64比特的分组,最后一个分组如果不够64比特,则需要填充。

解密过程也是一次对一个分组解密,而且每次解密都使用同一密钥。

图3-10中,明文是由分组长为64比特的分组序列P1,P2,…PN构成,相应的密文分组序列是C1,C2,…,CN。

ECB模式特别适合于数据较少的情况,比如加密密钥。

ECB的最大特性是同一明文分组在消息中重复出现的话,产生的密文分组也相同。

ECB用于长消息时可能不够安全。

(2)密码分组链接(CBC)模式

为了解决ECB的安全缺陷,可以让重复的明文分组产生不同的密文分组,CBC(Cipher block chaining)模式就可满足这一要求。

图3-11是CBC模式示意图,它一次对一个明文分组加密,每次加密使用同一密钥,加密算法的输入是当前明文分组和前一次密文分组的异或,因此加密算法的输入不会显示出与这次的明文分组之间的固定关系,所以重复的明文分组不会在密文中暴露出这种重复关系。

图3-1l CBC模式示意图

第一块明文可以和一个初始矢量(IV)异或后再加密。

IV必须为收发双方共享。

为了增加安全性,IV应该和密钥一样加以保护,比如用ECB加密来保护IV。

CBC模式对加密长于64比特的消息非常合适,亦可用于认证。

(3)密码反馈(CFB)模式

如上所述,DES是分组长为64比特的分组密码,但利用CFB(cipherfeedback)模式或OFB模式可将DES转换为流密码。

流密码不需要对消息填充,而且运行是实时的。

因此如果传送字母流,可使用流密码对每个字母直接加密并传送。

流密码具有密文和明文一样长这一性质,因此,如果需要发送的每个字符长为8比特,就应使用8比特密钥来加密每个字符。

如果密钥长超过8比特,则造成浪费。

图3-12是CFB模式示意图,设传送的每个单元(如一个字符)是j比特长,通常取j=8,与CBC模式一样,明文单元被链接在一起,使得密文是前面所有明文的函数。

加密时,加密算法的输入是64比特移位寄存器,其初值为某个初始向量IV。

加密算法输出的最左(最高有效位)j比特与明文的第一个单元P1,进行异或,产生出密文的第1个单元C1,并传送该单元。

然后将移位寄存器的内容左移j位并将C1送入移位寄存器最右边(最低有效位)j位。

这一过程继续到明文的所有单元都被加密为止。

CFB模式除能获得保密性外,还能用于认证。

(4)输出反馈(OFB)模式

OFB(outputfeedback)模式的结构类似于CFB,见图3-13。

不同之处如下:

OFB模式是将加密算法的输出反馈到移位寄存器,而CFB模式中是将密文单元反馈到移位寄存器。

OFB模式的优点是传输过程中比特错误不会被传播。

(6)计数器模式

见课本P148图6.7.

计数器模式有如下优点:

●硬件效率高:

与三种链接模式不同,CTR模式能够并行处理多块明文(密文)的加密(解密)。

●软件效率高

●预处理

●随机访问:

密文的第i个明文组能够用一种随机访问的方式处理。

●可证明安全性:

能够证明CTR模式至少和本节讨论的其他模式一样安全。

●简单性:

只用加密算法。

 

模式

描述

典型应用

电码本(ECB)

用相同的密钥分别对明文组加密。

●单个数据的安全传输(如一个加密密钥)

密码分组链接(CBC)

加密算法的输入是上一个密文组和下一个明文组的异或。

●普通目的的面向分组的传输

●认证

密码反馈(CFB)

一次处理j位。

上一个分组密文作为产生一个伪随机数输出的加密算法的输入,该输出与明文异或,作为下一分组的输入。

●普通目的的面向分组的传输

●认证

输出反馈(OFB)

与CFB基本相同,只是加密算法的输入是上一次DES的输出

●噪声通道上的数据流的传输(如卫星通信)

计数器(CTR)

每个明文组是与加密的计数器的异或。

对每个后续的组,计数器是累加的。

●普通目的的面向分组的传输用于高速需求

6.3流密码和RC4

6.3.1流密码的结构:

一个典型的流密码每次加密一个字节的明文,当然流密码也可被设计为每次操作一比特或者大于一个字节的单元。

图6.8给出了一个典型的流密码的结构图。

在该结构中密钥输入到一个伪随机数(比特)发生器,该伪随机数发生器产生一串随机的8比特数。

一个伪随机流就是在不知道输入密钥的情况下不可预知的比特流。

发生器的输出称为密钥流,通过与同一时刻一个字节的明文流进行异或操作产生密文流。

明文

密钥流

------------

密文

解密需要使用相同的伪随机序列:

密文

密钥流

------------

明文

●设计流密码需要考虑的主要因素:

1.加密序列的周期要长。

伪随机数发生器实质上使用的是产生确定的比特流的函数。

该比特流最终将出现重复。

重复的周期越长,密码分析的难度就越大。

2.密钥流应该尽可能地接近于一个真正的随机数流的特征。

例如,1和0的个数应近似相等。

若密钥流为字节流,则所有256种可能的字节的值出现频率应近似相等。

密钥流的随机特性越好,则密文越随机,密码分析就越困难。

3.伪随机数发生器的输出取决于输入密钥的值。

为了防止穷举攻击,密钥应该足够长,对于分组密码也要有同样的考虑。

因此,从目前的软硬件技术发展来看,至少应当保证密钥长度不小于128比特。

流密码的主要优点是其相当于分组密码来说,往往速度更快而且需要编写的代码更少。

表6.2PentiumII上对称密码的速度对比

密码

密钥长度

速度(Mb/s)

DES

56

9

3DES

168

3

RC4

可变

45

分组密码的优点是可以重复使用密钥,然而如果用流密码对两个明文加密中使用相同的密钥,则密码分析就会相当容易,因为对两个密文流进行异或,得出的结果就是两个原始明文的异或。

应用:

对于需要对数据流进行加密解密的应用,比如通过一个数据通信信道或者网页浏览连接,流密码就是很好的解决方案。

而对于处理成块的数据,比如文件传输,电子邮件和数据库,分组密码则更为适用。

6.3.2RC4算法

RC4是RonRivest为RSA公司在1987年设计的一种流密码。

它是一个可变密钥长度、面向字节操作的流密码。

该算法以随机置换作为基础。

分析显示该密码的周期大于10100。

每输出一个字节的结果仅需要8条到16条机器操作指令。

RC4算法:

用从1到256个字节(8~2048比特)的可变长度密钥初始化一个256个字节的状态向量S,S的元素记为S[0],S[1],…,S[255],从始到终置换后的S包含从0~255所有的8比特数。

对于加密和解密,字节K由S中255个元素按一定方式选出一个元素而生成。

每生成一个K的值,S中的元素个体就被重新置换一次。

初始化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的所有元素都被赋值。

这些操作可被概括如下:

/*Initialiation*/

fori=0to255do

S[i]=i;

T[i]=K[imodkeylen];

然后用T产生S的初始置换,从S[0]到S[255],对每个S[i],根据由T[i]确定的方案,将S[i]置换为S中的另一字节:

/*InitialPermutationofS*/

j=0;

fori=0to255do

j=(j+S[i]+T[i])mod256;

Swap(S[i],S[j]);

因为对S的操作仅是交换,所以惟一的改变就是置换。

S仍然包含所有值为0~255的元素。

密钥流的生成

矢量S一旦完成初始化,输入密钥就不再被使用,密钥流的生成是从S[0]到S[255],对每个S[i],根据当前S的值,将S[i]与S中的另一字节置换。

当S[255]完成置换后,操作继续重复从S[0]开始:

/*StreamGeneration*/

i,j=0;

while(true)

i=(i+1)mod256

j=(j+S[i])mod256;

Swap(S[i],S[j]);

t=(S[i]+S[j])mod256;

K=S[t];

加密中,将k的值与下一明文字节异或;解密中,将k的值与下一密文字节异或。

关于分析RC4的攻击方法有许多公开发表的文献,但没有哪种方法对于攻击足够长度密钥(如128比特)的RC4有效。

 

思考题:

1.分组密码的工作模式有哪几种?

各种模式的特点是什么?

2.二密钥三重DES如何复用同一密钥?

(用公式表示)。

对二密钥三重DES的穷举攻击代价是多少?

3.请列出设计流密码要考虑的重要因素。

4.为什么流密码的密钥不能重复使用?

5.RC4中用到的基本操作是什么?

6.实验题:

(1)*利用java加密包编程实现二密钥三重DES算法。

(2)*编程实现RC4算法。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1