|
|
发表于 2006-11-26 22:21:03
|
显示全部楼层
基于非对称密钥的加解密过程我总结为以下几种方式:
1. 只使用公钥的加密方式
( A为发起方 B为接受方)
A用B的公钥加密 ,B用自己的私钥解密
协议实现比较简单,但是用公钥加密全部明文效率太低。
2. 公钥和对称密钥相结合的加密方式
双方通信前先交换一个会话密钥,用于对称加密双方的明文,这个密钥是对称密钥。为什么这样做呢?用公钥来加密明文会耗费大量时间,效率太低。但如果用公钥来加密会话密钥就会提高效率(典型的会话密钥,如DES,一般密钥为56位,每次只需用公钥加密这些位即可,否则要用公钥加密全部明文!),然后用会话密钥加密明文效率又会高很多(因为会话密钥是对称密钥算法,对称密钥算法比非对称算法效率高很多)。加密过程理解了,解密只是加密的逆运算。
上述方式除了效率问题,还有很大的安全问题:无法验证对方身份,无法防止伪造篡改。也无法防止对方抵赖。
比如C可以截取A的消息,伪造一份传给B,B无法验证究竟是不是A。要验证身份,就要用签名。于是又有了下面的加密方式:
3. 数字签名方式
这又分为:
1)只使用公开密钥的认证方式
A用A的私钥加密明文,B用A的公钥解密。
这种也是协议实现简单,能验证A的身份,即确实是A发送了该消息,但同样效率无法接受。
2)公钥和对称密钥相结合的认证方式
A的明文先用散列函数摘要一下(常见的散列算法如md5或SHA-1 )得到一个128或160位的固定长度的摘要,把摘要用A的私钥进行签名然后和明文一起传输(当然是不安全的,这里只是为了说清楚这种认证方式的原理,便于理解下面要介绍的方法)
B受到数据后,用A的公钥解密签名,恢复出摘要,并用相应的散列函数对明文摘要一下,两个摘要比较一下,如果相等则说明确实是A发过来的,并且没有经过篡改;如果不相等,就说明对方身份不可信。
上面几种方式只是点,单方面无法实现安全有效的安全通信。把它们组合一下就可以实现比较安全的通信。
其中一个比较完整的,相对安全的综合方式如下:(画的不好,大家体谅一下)
A 明文 —————————————→ 1.密文 ————————会话密钥解密出明文
↓ ↑ ↑ ↓
md5摘要 ———————————→ 2.数字签名 —————————→ 验证是否相等
↑ | | ↑—A的公钥解密出签名
A用私钥对摘要签名 |——— 3.会话密钥(加密明文) ←————B用自己的私钥解密会话密钥
↑
A用B的公钥对会话密钥加密
PS: 1,2,3是A发给B的内容。
安全协议利用的就是上面各种方式的组合进行通信 ,比如SSL, 只是实现在不同层上,如果研究一下这些协议,会得到更深刻的理解。
最后说明一下:你用软件进行加密,可以根据你的安全需要来选择。安全永远和效率成反比,如果安全性不高,可以用简单的协议。 |
|