应用密码学.docx
- 文档编号:11137384
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:30
- 大小:53.29KB
应用密码学.docx
《应用密码学.docx》由会员分享,可在线阅读,更多相关《应用密码学.docx(30页珍藏版)》请在冰豆网上搜索。
应用密码学
应用密码学
第1章、基础知识
1.1专业术语
1、消息和术语
消息被称为明文。
以某种方法伪装消息以隐蔽它的内容的过程被称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密。
图1.1表明了这个过程。
使消息保密的技术和科学叫做密码编码学。
密码分析者是从事密码分析的专业人员。
密码分析学就是破译密文的科学和技术。
密文用C表示,明文用M(消息)或P(明文)表示,加密函数E作用于M得到密文C,用数学表示为:
E(M)=C.;相反地,解密函数D作用于C产生M,D(C)=M.
先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立:
D(E(M))=M
2、算法和密钥
密码算法也叫密码,是用于加密和解密的数学函数。
(通常情况下,有两个相关的函数:
一个用作加密,另一个用作解密)。
密钥:
通常,加密算法和解密算法都是在一组信息的控制下进行的。
控制加密算法或解密算法的信息分别称为加密密钥(key)或解密密钥。
如加密密钥与解密密钥相同:
EK(M)=C,DK(C)=M,DK(EK(M))=M.
如加密密钥与解密密钥不同:
EK1(M)=C,DK2(C)=M,DK2(EK1(M))=M
密码系统由算法、以及所有可能的明文、密文和密钥组成的。
3、对称算法和公开密钥算法
基于密钥的算法通常有两类:
对称算法和公开密钥算法。
对称算法:
就是加密密钥能够从解密密钥中推算出来,反过来也成立。
在大多数对称算法中,加/解密密钥是相同的。
对称算法的安全性依赖于密钥。
对称算法可分为两类。
一次只对明文中的单个比特(有时对字节)运算的算法称为序列算法或序列密码。
另一类算法是对明文的一组比特运算,这些比特组称为快,相应的算法称为分组算法或分组密码。
对称算法的加密和解密表示为:
EK(M)=CDK(C)=M
公开密钥算法:
用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。
加密密钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥)。
有时消息用私人密钥加密而用公开密钥解密,这用于数字签名。
4、密码分析
密码编码学的主要目的是保持明文的秘密以防止偷听者知晓。
密码分析学是在不知道密钥的情况下。
恢复出明文的科学。
成功的密码分析能恢复出消息的明文或密钥。
对密码进行分析的尝试称为攻击。
攻击类型
攻击者拥有的资源
唯密文攻击
已知:
C1=EK(P1),C2=EK(P2),,CI=EK(Pi)推导出:
P1,P2,,Pi;K或者找出一个算法从Ci+1=EK(Pi+1)推出Pi+1。
已知明文攻击
已知:
P1,C1=Ek(P1),P2,C2=Ek(P2),,Pi,Ci=Ek(Pi),推导出:
密钥k,或从Ci+1=Ek(Pi+1)推出Pi+1的算法。
选择明文攻击
已知:
P1,C1=Ek(P1),P2,C2=Ek(P2),,Pi,Ci=Ek(Pi)其中P1,P2,,Pi是由密码分析者选择的。
推导出:
密钥k,或从Ci+1=Ek(Pi+1)推出Pi+1的算法。
自适应选择明文攻击
这是选择明文攻击的特殊情况。
密码分析者不仅能选择被加密的明文,而且也能基于以前加密的结果修正这个选择。
在选择明文攻击中,密码分析者还可以选择一大块被加了密的明文。
而在自适应选择密文攻击中,他可选取较小的明文块,然后再基于第一块的结果选择另一明文块
选择密文攻击
已知:
C1,P1=Dk(C1),C2,P2=Dk(C2),,Ci,Pi=Dk(Ci),推导出:
k。
这种攻击主要用于公开密钥体制。
选择密钥攻击
当你已知密钥时,这不是一种攻击。
1.2经典密码学
1.2.1代替密码和换位密码
代替密码就是明文中每一个字符被替换成密文中的另外一个字符。
在经典密码学中,有四种类型的代替密码
(1)简单代替密码:
就是明文的一个字符用相应的一个密文字符代替。
(2)多名码代替密码:
它与简单代替密码系统相似,唯一的不同是单个字符明文可以映射成密文的几个字符之一。
例如A可能对应于5、13、25或56,“B”可能对应于7、19、31或42,等等。
(3)字母代替密码:
字符块被成组加密,例如“ABA”可能对应于“RTQ”,ABB可能对应于“SLL”等。
(4)多表代替密码:
由多个简单的代替密码构成,例如,可能有5个被使用的不同的简单代替密码,单独的一个字符用来改变明文的每个字符的位置。
在经典密码学中,密码周期越长越难破译,使用计算机就能够轻易破译具有很长周期的代替密码。
换位密码中,明文的字母保持相同,但顺序被打乱了。
1.2.2计算机算法
计算机密码算法有多种,最通用的有三种:
——DES(数据加密标准)是最通用的计算机加密算法。
DES是美国和国际标准,它是对称算法,加密和解密的密钥是相同的。
——RSA(根据它的发明者命名的,即Rivest,Shamir和Adleman)是最流行的公开密钥算法,它能用作加密和数字签名。
——DSA(数字签名算法,用作数字签名标准的一部分)是另一种公开密钥算法,它不能用作加密,只用作数字签名。
1.2.3一次一密乱码本
一次一密乱码本不外乎是一个大的不重复的真随机密钥字母集,这个密钥字母集被写在几张纸上,并一起粘成一个乱码本。
如果偷窃听者不能得到用来加密消息的一次一密乱码本,这个方案是完全保密的。
给出的密文消息相当于同样长度的任何可能的明文消息。
值得注意的是,密钥字母必须是随机产生的。
第一篇密码协议
第2章协议结构模块
2.1协议介绍
协议是由完成一项任务的一系列步骤所组成,它包括两方或多方。
密码协议是使用密码学的协议。
参与该协议的伙伴可能是朋友和完全信任的人,或者也可能是敌人和互相完全不信任的人。
为了帮助说明协议,列出了几个人作为助手:
表2.1剧中人
Alice所有协议中的第一个参加者
Bob所有协议中的第二个参加者
Carol在三、四方协议中的参加者
Dave在四方协议中的参加者
Eve窃听者
Mallory恶意的主动攻击者
Trent值得信赖的仲裁者
Walter监察人:
在某些协议中保护Alice和Bob
Peggy证明人
Victor验证者
仲裁协议:
仲裁者是在完成协议的过程中,值得信任的公正的第三方,“公正”意味着仲裁者在协议中没有既得利益,对参与协议的任何人也没有特别的利害关系。
“值得信任”表示协议中的所有人都接受这一事实,即仲裁者说的都是真实的,他做的是正确的,并且他将完成协议中涉及他的部分。
仲裁者能帮助互不信任的双方完成协议。
Trent就是值得信赖的仲裁者。
裁决协议:
仲裁协议可以分成两个低级的子协议。
一个是非仲裁子协议,这个子协议是想要完成协议的各方每次都必须执行的;另一个是仲裁子协议,仅在例外的情况下执行的,即有争议的时候才执行,这种特殊的仲裁者叫做裁决人。
裁决者和仲裁之间的不同是裁决者并不总是必需的。
2.2使用对称密码术的通信
Alice发送加密的信息给Bob,他们可以对通信加密,完整的协议比它更复杂。
(1)Alice和Bob协商用同一密码系统。
(2)Alice和Bob协商同一密钥。
(3)Alice用加密算法和选取的密钥加密她的明文信息,得到了密文信息。
(4)Alice发送密文信息给Bob。
(5)Bob用同样的算法和密钥解密密文,然后读它。
位于Alice和Bob之间的窃听者Eve监听这个协议,如果她听到的是在第(4)步中发送的密文,她必须设法分析密文,这是唯密文的被动攻击法;她也想窃听步骤
(1)和步骤
(2),这样她就知道了算法和密钥,她就和Bob知道的一样多。
所以好的密码系统的全部安全性只与密钥有关,和算法没有任何关系。
2.3单向Hash函数
单向函数的概念是计算起来相对容易,但求逆却非常困难。
也就是说,已知x,我们很容易计算f(x)。
陷门单向函数是有一个秘密陷门的一类特殊单向函数。
它在一个方向上易于计算而反方向却难于计算。
但是,如果你知道那个秘密,你也能很容易在另一个方向计算这个函数。
Hash函数就是把可变输入长度串转换成固定长度(经常更短)输出串(叫做hash值)的一种函数。
简单的Hash函数就是对预映射的处理,并且返回由所有输入字节异或组成的一字节。
单向Hash函数既是单向函数,也是Hash函数,从输入串很容易计算其Hash值,但要产生一个串使其Hash值就等于这个特殊值却是很难的。
2.4使用公开密钥密码术的通信
公开密钥密码学就是使用两个不同的密钥:
一个是公开的,另一个是秘密的。
持有公钥的任何人都可加密信息,但却不能解密。
只有持有私钥的人才能解密。
下面描述Alice怎样使用公开密钥密码发送信息给Bob:
(1)Alice和Bob选用一个公开密钥密码系统。
(2)Bob将他的公钥传送给Alice。
(3)Alice用Bob的公钥加密她的信息,然后传送给Bob。
(4)Bob用他的私钥解密Alice的信息。
更一般地说,网络中的用户约定一公钥密码系统,每一用户有自己的公钥和私钥,并且公钥在某些地方的数据库中都是公开的,现在这个协议就更容易了:
(1)Alice从数据库中得到Bob的公钥。
(2)Alice用Bob的公钥加密信息,然后送给Bob。
(3)Bob用自己的私钥解密Alice发送的信息。
2.5数字签名
使用对称密码系统和仲裁者的文件签名
Alice想对数字消息签名,并送给Bob。
Trent是一个仲裁者,他能同时与Alice和Bob通信。
他和Alice共享秘密密钥KA,和Bob共享另一个不同的秘密密钥KB。
(1)Alice用KA加密她准备发送给Bob的信息,并把它传送给Trent。
(2)Trent用KA解密信息。
(3)Trent把这个解密信息和他收到Alice信息的声明,一起用KB加密。
(4)Trent把加密的信息包传给Bob。
(5)Bob用KB解密信息包,他就能读Alice所发的信息和Trent的证书,证明信息来自Alice。
协议特点:
(1)这个签名是可信的,Trent是可信的仲裁者,并且知道消息是从Alice那里来的,Trent的证书对Bob起着证明的作用。
(2)这个签名是不可伪造的。
只有Alice(和Trent,但每个人都相信他)知道KA,因此只有Alice才能把用KA加密的信息传给Trent。
如果有人冒充Alice,Trent在第
(2)步马上就会察觉,并且不会去证明它的可靠性。
(3)这个签名是不能重新使用的。
如果Bob想把Trent的证书附到另一个信息上,Alice可能就会大叫受骗了。
仲裁者就会要求Bob同时提供信息和Alice加密后的信息,然后仲裁者就用KA加密信息,他马上就会发现它与Bob提供的加密信息不相同。
很显然,Bob由于不知道KA,他不可能提供加密信息使它与用KA加密的信息相符。
(4)签名文件是不能改变的。
Bob想在接收后改变文件,Trent就可用刚才描述的同样办法证明Bob的愚蠢行为。
(5)签名是不能抵赖的,即使Alice以后声称她没有发信息给Bob,Trent的证书会说明不是这样。
如果Bob想把Alice签名的文件给Carol阅读,他不能把自己的秘密密钥交给她,他还得通过Trent:
(1)Bob把信息和Trent关于信息是来自Alice的声明用KB加密,然后送回给Trent。
(2)Trent用KB解密信息包。
(3)Trent用他和Carol共享的密钥KC重新加密信息包,把它送给Carol。
(4)Carol用KC解密信息包,她就能阅读信息和Trent证实信息来自Alice的证书
使用公钥密码对文件签名
有几种公钥算法能用作数字签名。
例如RSA,公钥或者私钥都可用作加密。
用你的私钥加密文件,你就拥有安全的数字签名。
基本协议是简单的:
(1)Alice用她的私钥对文件加密,从而对文件签名。
(2)Alice将签名的文件传给Bob。
(3)Bob用Alice的公钥解密文件,从而验证签名。
数字签名经常包括时间标记。
对日期和时间的签名附在信息中,并跟信息中的其他部分一起签名。
用公钥密码和单向Hash函数对文件签名
在实际的实现过程中,采用公钥密码算法对长文件签名效率太低。
为了节约时间,数字签名协议经常和单向Hash函数一起使用。
Alice并不对整个文件签名,只对文件的Hash值签名。
在这个协议中,单向Hash函数和数字签名算法是事先就协商好了的。
(1)Alice产生文件的单向Hash值。
(2)Alice用她的私钥对Hash加密,凭此表示对文件签名。
(3)Alice将文件和Hash签名送给Bob。
(4)Bob用Alice发送的文件产生文件的单向Hash值,然后用数字签名算法对hash值运算,同时用Alice的公钥对签名的Hash解密。
如果签名的hash值与自己产生的Hash值匹配,签名就是有效的。
算法和术语
一般地,提到签名和验证过程通常不包括任何算法的细节。
用私钥K签名信息表示为:
SK(M).用相应的公钥验证信息表示为:
VK(M).在签名时,附在文件上的比特串叫数字签名。
2.7带加密的数字签名
通过把公钥密码和数字签名结合起来,我们能够产生一个协议,可把数字签名的真实性和加密的安全性合起来。
(1)Ailce用她的私钥对信息签名。
SA(M).
(2)Alice用Bob的公钥对签名的信息加密,然后送给Bob。
EB(SA(M)).
(3)Bob用他的私钥解密。
DB(EB(SA(M)))=SA(M).
(4)Bob用Alice的公钥验证并且恢复出信息。
VA(SA(M))=M.
这个协议应该用时间标记来阻止信息的重复使用。
作为收据的重发信息
考虑这个协议附带确认信息的实现情形:
每当Bob接收到信息,他再把它传送回发方作为接收确认。
(1)Alice用她的私钥对信息签名,再用Bob的公钥加密,然后传给Bob。
EB(SA(M)).
(2)Bob用他的私钥对信息解密,并用Alice的公钥验证签名,由此验证确是Alice对信息签名,并恢复出信息。
VA(DB(EB(SA(M))))=M.
(3)Bob用他的私钥对信息签名,用Alice的公钥加密,再把它送回给Alice。
EA(SA(M)).
(4)Alice用她的私钥对信息解密,并用Bob的公钥对验证Bob的签名。
如果接收的信息与她传给Bob的相同,她就知道Bob准确地接收到她所发送的信息。
阻止重发攻击
一般说来,下面这个协议是非常安全的,它使用的是公开密钥算法:
(1)Alice对消息签名。
(2)Alice用Bob的公钥对消息和签名加密(采用和签名算法不同的加密算法),然后将它传送给Bob。
(3)Bob用他的私钥对消息解密。
(4)Bob验证Alice的签名。
2.8随机和伪随机序列的产生
随机序列产生器并不是随机的,因为它们不必要是完全随机的。
计算机中的随机序列产生器(至少,在有限状态机中)是周期性的,周期性的任何东西都是可预测的。
如果是可预测的,那么它就不可能是随机的。
真正的随机序列产生器需要随机输入,计算机不可能提供这种随机输入。
伪随机序列
最好的计算机能产生的是伪随机序列产生器,随机数序列是看起来是随机的序列,序列的周期应足够长,使得实际应用中相当长的有限序列都不是周期性的。
如果一序列产生器是伪随机的,它应有下面的性质:
(1)看起来是随机的,这表明它通过了我们所能找到的所有随机性统计检验
(2)它是不可预测的。
即使给出产生序列的算法或硬件和所有以前产生的比特流的全部知识,也不可能通过计算来预测下一个随机比特应是什么。
(3)它不能可靠地重复产生。
如果你用完全同样的输入对序列产生器操作两次(至少与人所能做到的最精确的一样),你将得到两个不相关的随机序列。
第三章基本协议
3.1密钥交换
会话密钥:
通常的密码技术是用单独的密钥对每一次单独的会话加密,这个密钥称为会话密钥
对称密码的密钥交换
Alice和Bob每人和密钥分配中心(KDC)共享一个秘密密钥,我们的协议中的Trent就是KDC。
(1)Alice呼叫Trent,并请求一个与Bob通信的会话密钥。
(2)Trent产生一随机会话密钥,并对它的两个副本加密:
一个用Alice的密钥,另一个用Bob的密钥加密。
Trent发送这两个副本给Alice。
(3)Alice对她的会话密钥的副本解密。
(4)Alice将Bob的会话密钥副本送给Bob。
(5)Bob对他的会话密钥的副本解密。
(6)Alice和Bob用这个会话密钥安全地通信。
公开密钥密码使用公开密钥数据库的密钥交换
(1)Alice从KDC得到Bob的公开密钥。
(2)Alice产生随机会话密钥,用Bob的公开密钥加密它,然后将它传给Bob。
(3)Bob用他的私钥解密Alice的信息。
(4)他们两人用同一会话密钥对他们的通信进行加密。
中间人攻击
Mallory不仅能监听Alice和Bob之间的信息、还能修改信息、删除信息、并能产生全新的信息。
当Mallory同Alice谈话时,他能模仿Bob,他也能模仿Alice同Bob谈话。
(1)Alice将她的公开密钥传送给Bob。
Mallory截取了这个密钥并将自己的公开密钥传送给Bob。
(2)Bob将他的公开密钥传送给Alice。
Mallory截取这个密钥,并将自己的公开密钥传送给Alice。
(3)当Alice将用“Bob”的公开密钥加了密的信息传送给Bob时,Mallory截取它。
由于信息实际上是用Mallory的公开密钥加密的,他就用自己的私钥解密。
再用Bob的公开密钥对信息重新加密,并将它传送给Bob。
(4)当Bob将用“Alice”的公开密钥加密的信息传送给Alice时,Mallory截取它。
由于信息实际上是用他自己的公开密钥加密的,他用他的私钥解密信息,再用Alice的公开密钥重新加密,并将它传送给Alice。
联锁协议
(1)Alice将她的公开密钥传送给Bob。
(2)Bob将他的公开密钥传送给Alice。
(3)Alice用Bob的公开密钥加密她的报文,并将加密报文的一半传送给Bob。
(4)Bob用Alice的公开密钥加密他的报文,并将加密报文的一半传送给Alice。
(5)Alice将加了密的另一半报文传送给Bob。
(6)Bob将Alice的两半报文合在一起,并用他的私钥解密;Bob将他加了密的另一半报文传送给Alice。
(7)Alice将Bob两半报文合在一起,并用她的私钥解密。
这里重要的一点是:
只有报文的一半,没有另一半,报文是毫无用处的。
Bob只有到步骤(6)步才能读Alice的报文,Alice只有到步骤(7)步才能读Bob的报文。
有很多办法实现它:
(1)如果采用分组加密算法,每一分组的一半(例如,每隔一比特)能在每半个报文中发送。
(2)报文的解密依赖于初始矢量,初始矢量可以在报文的另一半中发送。
(3)首先发送的一半报文可能是加密报文的单向hash函数,并且加密报文本身可能是另一半。
在会话密钥交换协议期间采用数字签名也能防止“中间人攻击”。
Trent对Alice和Bob的公开密钥签名。
签名的密钥包括一个已签名的所有权证书。
当Alice和Bob收到密钥时,他们每人都能验证Trent的签名。
那么,他们就知道公开密钥是哪个人的。
密钥和报文传输
Alice和Bob在交换报文前不需要完成密钥交换协议。
在下面的协议中,Alice在没有任何以前的密钥交换协议的情况下,将报文M传送给Bob:
(1)Alice产生一随机会话密钥K,并用K加密M。
EK(M)
(2)Alice从数据库中得到Bob的公开密钥。
(3)Alice用Bob的公开密钥加密K。
EB(K)
(4)Alice将加密的报文和加密的会话密钥传送给Bob。
EK(M),EB(K)
为了增加安全性,防止“中间人攻击”,Alice可对传输签名。
(5)Bob用他的私钥将Alice的会话密钥K解密。
(6)Bob用会话密钥将Alice的报文解密。
3.2鉴别
利用单向函数的鉴别
(1)Alice将她的通行字传送给计算机。
(2)计算机完成通行字的单向函数计算。
(3)计算机把单向函数的运算结果和它以前存储的值进行比较。
字典式攻击和Salt
字典式攻击:
Mallory编制1,000,000个最常用的通行字表,他用单向函数对所有1,000,000个通行字进行运算,并将结果存储起来。
如果每个通行字大约是8个字节,运算结果的文件不会超过8M字节,几张软盘就能存下。
现在Mallory偷出加密的通行字文件。
把加密的通行字和已加密的可能通行字文件进行比较,再观察哪个能匹配。
Salt是使字典式攻击更困难的一种方法。
Salt:
Salt是一随机字符串,它与通行字连接在一起,再用单向函数对其运算。
然后将Salt值和单向函数运算的结果存入主机数据库中。
如果可能的Salt值的数目足够大的话,它实际上就消除了对常用通行字采用的字典式攻击。
采用公开密钥密码的鉴别
当Alice将她的通行字发给她的主机时,能够进入她的数据通道的任何人都可读取她的通行字。
公开密钥密码能解决这个问题。
主机保存每个用户的公开密钥文件,所有用户保存自己的私钥。
当登录时,协议按下面进行:
(1)主机发送一个随机字符串给Alice。
(2)Alice用她的私钥对此随机字符串加密,并将此字符串他和她的名字一起传送回主机。
(3)主机在它的数据库中查找Alice的公开密钥,并用公开密钥解密。
(4)如果解密后的字符串与主机在第一步中发送给Alice的字符串匹配,则允许Alice访问系统。
安全的身份证明协议采用下面更复杂的形式:
(1)Alice根据一些随机数和她的私钥进行计算,并将结果传送给主机。
(2)主机将一不同的随机数传送给Alice。
(3)Alice根据这些随机数(她产生的和她从主机接收的)和她的私钥进行一些计算,并将结果传送给主机。
(4)主机用从Alice那里接收来的各种数据和Alice的公开密钥进行计算,以此来验证Alice是否知道自己的私钥。
(5)如果她知道,则她的身份就被证实了。
用联锁协议互相鉴别
为防止中间人攻击,DonaldDavies和WynPrice描述了怎样采用联锁协议来挫败这种攻击。
(1)Alice和Bob的交换公开密钥。
(2)Alice用Bob的公开密钥加密PA,并将它的一半传送给Bob。
(3)Bob用Alice的公开密钥加密PB,并将它的一半发送给Alice。
(4)Alice将加密的PA发送给Bob。
(5)Bob将收到的两半组合起来,Alice对PA解密,并验证它的正确性。
(6)Bob将被加密的PB的另一半发送给Alice。
(7)Alice将收到的两半组合起来,Bob对PB解密,并验证它的正确性。
3.3鉴别和密钥交换
Alice和Bob分别坐在网络的两端,他们想安全地交谈。
Alice和Bob怎么交换秘密密钥呢?
他们中的每个人怎么确信他们当时正在同对方交谈而不是同Mallory谈话呢?
Wide-MouthFrog协议
Wide-MouthFrog协议可能是最简单的对称密钥管理协议。
(1)Alice将时间标记TA连同Bob的名字B和随机会话密钥K一起,用她和Trent共享的密钥对整个报文加密。
她将加了密的报文和她的身份A一起发送给Trent:
A,EA(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用 密码学