安全协议与密码学的关系
安全性——数据安全性、通信安全性、信息安全性等——就像一条链子,整个系统的安全性由最脆弱的连接的安全性所决定。因此链子上每一处都必须安全,才能保证整个链子的安全:加密算法、协议、**管理、使用规范等,任何一环出了问题,都会危及整个链子。
除了提供对消息的保护外,密码学在网络安全中通常还有其它的作用:
认证:消息的接收者应该能够确认消息的来源;入侵者不可能伪装成他人。
完整性:消息的接收者应该能够验证在传送过程中消息没有被修改;入侵者不可能用假消息代替合法消息。
抗抵赖:发送者事后不可能虚假地否认他发送的消息。
密码算法
**用K表示。K可以是很多种数值里的任意值。**K的可能值的范围叫做**空间。加密和解密运算都使用这个**(即运算都依赖于**,并用K作为下标表示),这样,加/解密函数现在变成:
对称密码算法
对称密码算法有时又叫传统密码算法,就是加***能够从解***中推算出来,反过来也成立。在大多数对称算法中,加密解***是相同的。这些算法也叫秘***算法或单**算法,它要求发送者和接收者在安全通信之前,商定一个**。
(1) 明文:原始信息。
(2) 加密算法:以**为参数,对明文进行多种置换和转换的规则和步骤,变换结果为密文。
(3) **:加密与解密算法的参数,直接影响对明文进行变换的结果。
(4) 密文:对明文进行变换的结果。
(5) 解密算法:加密算法的逆变换,以密文为输入、**为参数,变换结果为明文。
非对称密码算法
非对称密码术也被称作公钥密码术,其思想是由W.Diffie和Hellman在1976年提出的。不同于以往的加密技术,非对称密码术是建立在数学函数基础上的,而不是建立在位方式的操作上的。更重要的是,与只使用单一**的传统加密技术相比,它在加/解密时,分别使用了两个不同的**:一个可对外界公开,称为“公钥”;一个只有所有者知道,称为“私钥”。公钥和私钥之间具有紧密联系,用公钥加密的信息只能用相应的私钥解密,反之亦然。
其加密算法有如下特性:
EK1(M)=C
DK2©=M
DK2(EK1(M))=M
其中,M表示消息;k1表示公匙;k2表示私匙;C是加密后的消息;E是加密函数;D为解密函数。
加解密的过程为:
(1) A查找B的公钥。因为公钥的公开不会影响到通信的保密性,B可以将自己的公钥公布在公共数据库,由其它人取用,或以普通电子邮件等方式通过非安全信道发送给A。
(2) A采用公钥加密算法以B的公钥作为加***对原始信息进行加密。
(3) A通过非安全信道将密文发送给B。
(4) B收到密文后,使用自己持有的私钥对其解密,还原出明文。
优点:
(1) 通信双方事先不需要通过保密信道交换**。
(2) **持有量大大减少。
(3) 非对称密码技术还提供了对称密码技术无法或很难提供的服务:如与Hash函数联合运用可组成数字签名,可证明的安全伪随机数发生器的构造,零知识证明等。
缺点:
加/解密速度慢、耗用资源大。
Hash算法
Hash算法也称Hash函数,Hash函数具有名称多样性,最常用的是哈希函数、散列函数、消息摘要函数、单项函数、压缩函数、缩短函数等等。
在计算机安全系统中广泛用于数字签名、消息的完整性认证、消息的起源认证等。
一个安全的Hash算法H必须具有以下属性:
(1) H能够应用到大小不一的数据上。
(2) H能够生成大小固定的输出。
(3) 对于任意给定的x,H(x)的计算相对简单。
(4) 对于任意给定的代码h,要发现满足H(x)=h的x在计算上是不可行的。
(5) 对于任意给定的块x,要发现满足H(y)=H(x)而y=x在计算上是不可行的。
(6) 要发现满足H(X)=H(y)的(X,y)对在计算上是不可行的。
一次一密乱码本
一次一密乱码本本质上是一个大的不重复的真随机**字母集,这个**字母集可以被写在几张纸上,并一起粘成一个乱码本。
每个**仅对一个消息使用一次。发方对所发的消息加密,然后销毁乱码本中用过的一页或用过的磁带部分。
收方有一个同样的乱码本,并依次使用乱码本上的每个**去解密密文的每个字符。
利用密码算法建立安全信道
对称密码技术
A发送加密的信息给B的过程:
A和B协商用使同一密码系统;
A和B协商使同一**;
A用加密算法和选取的**加密她的明文信息,得到密文信息;
A发送密文信息给B;
B用同样的算法和**解密密文,然后得到明文信息。
对称密码算法存在下面的**问题:
分配:**必须秘密地分配,**比任何加密的信息更有价值,因为知道了**意味着知道了所有信息。
泄漏:如果**被损害(被偷窃,猜出来,被逼迫交出来,受贿等等),那么E就可以用该**去解密所有传送的信息,也可以假装是几方中的某一方,产生虚假信息去欺骗另一方。
数量:假设网络中每对用户使用不同的**,那么**总数随着用户数的增加迅速增多。N个用户的网络需要n(n-1)/2个**。
公开**密码技术
A使用公开**密码发送信息给B(第一个协议):
(1) A和B选用一个公开**密码系统;
(2) B将他的公钥传送给A;
(3) A用B的公钥加密她的信息,然后传送给B;
(4) B用他的私钥解密A的信息。
每一用户有自己的公钥和私钥,并且公钥在某些地方的数据库中都是公开的,现在这个协议就更容易了(第二个协议):
(1) A从数据库中得到B的公钥;
(2) A用B的公钥加密信息,然后送给B;
(3) B用自己的私钥解密A发送的信息。
混合密码系统
在大多数实际的实现中,公开**密码用来保安全和分发会话**。这些会话**用在对称算法中,对通信消息进行保密。有时称这种系统为混合密码系统。
把公开**密码用于**分配解决了很重要的**管理问题。对对称密码而言,数据加***直到使用时才起作用。
B将自己的公开**EB发给A:EB->A
A产生随机会话**K,用B的公开**加密K,并把加密后的**EB(K)送给B:EB(K)->B
B用自己的私钥解密A的消息,恢复出会话**:
DB(EB(K))= K
两人用同一会话**K对他们的通信信息进行加密。
Hash算法的使用–数字签名
为了对计算机文件进行有效的签名,需要利用加解密知识才能产生所谓的"数字签名",以确保计算机上文件的有效性。
数字签名是目前电子商务、电子政务中应用最普遍、技术最成熟、可操作性最强的一种电子签名方法。
它包括普通数字签名和特殊数字签名,其中普通数字签名用到的算法有RSA、E1Gama1、DES/DSA、椭圆曲线数字签名算法等;特殊数字签名有盲签名、代理签名、群签名、门限签名等。
手写签名使人重视的原因是:
签名是可信的。签名使文件的接收者相信签名者是慎重地在文件上签字的;
签名不可伪造。签名证明是签字者而不是其他人的签字;
签名不可重用。签名是文件的一部分,不法之徒不可能将签名移到不同的文件上;
签名的文件内容是不可改变的。在文件签名后,文件不能改变;
签名是不可抵赖的。签名和文件是物理的东西。签名者事后不能声称他没有签过名。
算法以及术语
有许多数字签名操作过程中使用的算法都采用公钥算法,用秘密信息对文件签名,用公开信息去验证。这时的签名过程也叫“用私钥加密”,验证过程也叫“用公钥解密”。
签名的生成过程:
签名的认证过程:
数字签名原理–发方:
数字签名原理–收方:
使用对称密码系统和仲裁者的文件签名
签名协议过程如下:
(1) A用KA加密她准备发送给B的信息,并把它传送给T;
(2) T用KA解密信息;
(3) T把这个解密信息和他收到A信息的声明,一起用KB加密;
(4) T把加密的信息包传给B;
(5) B用KB解密信息包,他就能读A所发的信息和T的证书,证明信息来自A。
如果B想把A签名的文件给C阅读,他不能把自己的秘***交给她,他还得通过T:
(1) B把信息和T关于信息是来自A的声明用KB加密,然后送回给T;
(2) T用KB解密信息包;
(3) T检查他的数据库,并确认原始信息是从A那里来的;
(4) T用他和C共享的**KC重新加密信息包,把它送给C;
(5) C用KC解密信息包,她就能阅读信息和T证实信息来自A的证书。
数字签名树
Ralph Merkle提出了一种基于秘***密码的数字签名方案,该方案利用树型结构产生无限多的一次性签名。这个方案的基本思想是在某些公开文档中放入树的根文件,从而认证它。根节点对一个信息签名,并认证树中的子节点,这些节点的每一个都对信息签名,并对它的子节点认证,一直延续下去。
使用公钥密码对文件签名
使用公钥密码签名文件的基本协议是:
(1) A用自己的私钥对文件加密,从而对文件签名;
(2) A将签名的文件传给B;
(3) B用A的公钥解密文件,从而验证签名。
这个协议也可以满足我们期待的签名特征:
(1) 签名是可信的。当B用A的公钥验证信息时,就知道是由A签名的;
(2) 签名是不可伪造的。只有A知道她的私钥;
(3) 签名是不可重用的。签名是文件的函数,并且不可能转换成另外的文件;
(4) 被签名的文件是不可改变的。如果文件有任何改变,文件就不可能用A的公钥验证;
(5) 签名是不可抵赖的。B不用A的帮助就能验证A的签名。
用公钥密码和单向Hash算法对文件签名
在实际的实现过程中,采用公钥密码算法对长文件签名效率太低。为了节约时间和成本开销,数字签名协议经常和单向Hash算法一起使用。这种情况下签名者A并不是对整个文件签名,而只是对文件的Hash值签名。
协议
(1) A产生文件的单向Hash值;
(2) A用她的私钥对Hash值加密,凭此表示对文件签名;
(3) A将文件和Hash值加密的结果送给B;
(4) B用A发送的文件产生文件的单向Hash值,然后用A的公钥对签名的Hash值进行解密。如果接收到的签名Hash值与自己运算产生的Hash值匹配,签名就是有效的。
多重签名方案
如果不用单向Hash算法,有两种选择。
第一种选择是A和B分别对文件的副本签名,结果签名的信息是原文的两倍。
第二种选择就是A首先签名,然后B对A的签名再进行签名,这是可行的,但是在不验证B的签名的情况下就验证A的签名是不可能的。
如果采用单向Hash算法,则采用下述协议过程进行多重签名:
(1) A对文件的Hash值签名;
(2) B对文件的Hash值签名;
(3) B将他的签名交给A;
(4) A把文件、她的签名和B的签名发给C;
(5) C验证A和B的签名。
抗抵赖的数字签名
签名者否认对文件的签名和任何其他的用她的私钥签名的文件,这叫做抵赖。
一般采用时间标记可以限制这种欺骗。
采用数字签名文件的接收者持有签名的时间标记的方案就能解决这个问题。
一般的协议过程是:
(1) A对信息签名;
(2) A产生一个报头,报头中包含有认证信息。她把报头和签名的信息连接起来,对连接的信息签名,然后把签名的信息发给T;
(3) T验证外面的签名,并确认认证信息。他在A签名信息中增加一个时间标记和认证信息。然后对所有的信息签名,并把它发给B和A;
(4) B验证T的签名、认证信息和A的签名;
(5) A验证T发给B的信息。如果她的却没有发起并签名这个信息,她很快就会发现。