公钥密码
公钥密码可以解决密钥配送问题。
什么是公钥密码
公钥密码(public-key cryptography)中,密钥分为加密密钥和解密密钥两种。发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。要理解公钥密钥,清楚地区分加密密钥和解密密钥是非常重要改的。加密密钥是发送者加密时使用的,而解密密钥则是接收者解密时使用的。
加密密钥和解密密钥的区别:
-
- 发送者只需要加密密钥
- 接收者只需要解密密钥
- 解密密钥不可以被窃听者获取
- 加密密钥被窃听者获取也没关系
业绩就是说,解密密钥从一开始就是由接收者自己保管的,因此只要将加密密钥发给发送者就可以解决密钥配送问题了,而根本不需要配送解密密钥。
公钥密钥中,加密密钥一般是公开的。正是由于加密密钥可以任意公开,因此该密钥被称为公钥(public key)。公钥可以通过邮件直接发送给接收者,也可以刊登在报纸的广告栏上,做成看板放在街上,或者做成网页公开给世界上任何人,而完全不必担心内窃听者Eve窃取。
当然,我们也没有必要非要将公钥公开给全世界所有的人,但至少我们需要将公钥发送给需要使用公钥进行加密的通信对象(也就是给自己发送密文的发送者)。
相对地,解密密钥是绝不能公开的,这个密钥只能由自己来使用 ,因此成为私钥(private key)。私钥不可以被别人知道,也不可以将它发送给别人,甚至也不能发送给自己的通信对象。
公钥和私钥是一一对应的,一对公钥和私钥统称为密钥对(key pair)。由公钥进行加密的密文,必须使用与该公钥配对的私钥才能够解密。密钥对中的两个密钥之间具有非常密切的关系——数学上的关系——因此公钥和私钥是不能分别单独生成的。
公钥密码的使用者需要生成一个包含公钥和私钥的密钥对,其中公钥会被发送给别人,而私钥则仅供自己使用。
公钥的通信流程
假设Alice要给Bob发送一条消息,Alice是发送者,Bob是接收者,窃听者Eve能够窃听到他们之间的通信内容。
在公钥密钥通信中,通信过程是由接收者Bob来启动的。
(1) Bob生成一个包含公钥和私钥的密钥对。
私钥有Bob自行妥善保管。
(2) Bob将自己的公钥发送给Alice。
Bob的公钥被窃听者Eve截获也没有关系。
Bob将公钥发送给Alice,表示Bob请Alice用这个公钥对消息进行加密蹦发送给他。
(3) Alice用Bob的公钥对消息进行加密。
加密后的密文只有用Bob的私钥才能够解密。
虽然Alice拥有Bob的公钥,但用Bob的公钥是无法对密文进行解密的。
(4) Alice将密文发送给Bob。
密文被窃听者Eve截取也没关系。Eve可能拥有Bob的公钥,但是用Bob的公钥是无法进行解密的。
(5) Bob用自己的私钥对密文进行解密。
请参看图5-2,看一看Alice和Bob直接到底传输了哪些信息。其实他们之间传输的信息只有两个:Bob的公钥以及用Bob公钥加密的密文。由于Bob的私钥没有出现在通信内容中,因此窃听者Eve无法对密文进行解密。
窃听者Eve可能拥有Bob的公钥,但是Bob的公钥只是加密密钥,而不是解密密钥,因此窃听者Eve就无法完成解密操作。
相关术语
公钥密钥还有各种不同的称谓,例如非对称密钥(asymmetric cryptography)和公钥密码就表示通一个含义,这一术语是相对于对称密钥而言的。在对称密码中,加密和解密使用相同的密钥,即加密和解密只是用同一密码进行相反的操作而已,因此对称密码中的加密和解密就像照镜子一样,是相互对称的。相对地,非对称密码中,加密和解密使用的是不同的密钥,并不是相互对称的,因此称为非对称密码。
此外,私钥(private key)这个术语也有很多同义的别名,例如个人密钥、私有密钥、非公开密钥等,也有人将其称为秘密密钥(secret key)。不过,秘密密钥这个词也可以指对称密码的密钥,因此在使用时需要注意。出于这个原因,也有人将对称密码的密钥称为共享秘密密钥,将公钥密码的私钥称为私有秘密密钥以示区别。
private key(私钥)是世界上使用最广泛的,也是最不容易引起歧义的名称。
公钥密码无法解决的问题
公钥密码解密了密钥配送的问题,但这并不意味着它能够解决所有的问题,因为我们需要判断所得到的共啊哟是否正确合法,这个问题被称公钥认证问题。
此外,公钥密码还有一个问题就是,它的处理速度只有对称密码的几百分之一。