当初做VPN实现的时候,都是使用开源的软件来做的,并没什么理论基础,基本上都是谷歌所得的。能使用上就行了。很少去讲究一些原理。后来买了本IPSec VPN的书。也没怎么看,就看了一点点。其中有说了关于公钥加密及数字签名的一些工作原理。发上来算是做个笔记吧。
加密算法
加密算法分为两类:
- 对称加密算法:在对称加密算法中,消息的发送方和接收方都知道并使用相同的密钥,发送方使用一个密钥对消息进行加密,而接收方使用同样的密钥进行解密。使用对称加密的主要问题是,找到分发密钥的方法,确保他人无法得到密钥。在传输过程中,任何人截取了密钥的,都可以使用密钥来阅读或修改加密的消息,并从而伪造新消息。常见的对称加密算法包括DES、3DES、AES。
- 非对称加密算法:非对称加密算法也叫做公钥算法,其使用两个密钥,一个用于加密,一个用于解密。加密密钥也被称为公钥,是可以公开的。只有用于解密的私钥需要保密。虽然公钥和私钥在数学上是相关的,但是无法从一个推导出另一个。任何持有公钥的人,都能够将消息加密,但是只有使用私钥才能解密消息,而该密钥只有接收方才知道。因此,不像对称加密算法那样,需要通过安全通信渠道来传输密钥。
公钥加密算法的工作原理如下图所示:
- Alice和Bob就要使用的公钥算法达成一致。
- Bob将其公钥发送给Alice,而Alice将其公钥发送给Bob。
- Alice向Bob发送消息时使用Bob的公钥对其进行加密。
- Bob收到消息后使用自己的私钥对其进行解密。
实际上,公钥加密算法很少用来作为加密消息,因为其加密速度比对称加密慢很多;然而,公钥加密被用来解决对称加密算法中密钥的分发问题,然后再使用对称加密算法对消息进行加密。因此,公钥加密算法不会取代对称加密,而是对后者的补充,使其更安全。
数字签名
公钥加密的另一种用途是用于验证消息,也被称为数字签名。
使用私钥对消息进行加密将创建一个数字签名,这是一种电子验证方式,提供了不可抵赖性。不可抵赖性意味着发送方无法否定它发生了消息,也就是说,数字签名不但证明了消息的内容,还证明了发送方的身份。由于对实际消息进行加密致使认证的效率极低,因此,使用被称为消息摘要的文档散列值。消息摘要的基本思想是,将变长的消息转换为定长的压缩输出——消息摘要。因为根据消息摘要无法重建原始消息,所以这种散列值被称为单向的。
- Alice对其要发送给Bob的文档进行计算,得到一个单相散列值。
- Alice使用其私钥对散列值进行加密,加密后的消息摘要变成了数字签名。
- Alice将文档及数字签名一起发送给Bob。
- Bob使用Alice的公钥对数字签名进行解密,同时计算从Alice收到的文档的单向散列值。如果两个值相同,Bob便能确定文档来自Alice且在传输过程中没有被篡改。只要文档有细微的变化,都将导致两个散列值不相同,进而不能通过验证。
转载请注明: 转载自elkPi.com
本文链接地址: 公钥加密算法工作原理及数字签名