密码学入门(4):公钥密码
公钥密码用公钥加密,私钥解密。
密钥配送问题
在对称密码中,由于加密和解密的密钥都是相同的,因此必须向接收者配送密钥。而在Alice将密钥发送给Bob时,会被Eve窃听,因此Eve就能像Bob一样完成密文的解密。
Alice感到一筹莫展。不发送密钥吧,接收者Bob无法解密;发送密钥吧,连窃听者Eve也可以解密了。密钥必须要发送,但又不能发送,这就是对称密码的密钥配送问题。
解决密钥配送问题的方法
- 通过事先共享密钥来解决:这是最简单的一种解决方法,就是事先用安全的方式将密钥交给对方,这称为密钥的事先共享。
- 问题:假设一个公司有 1000 1000 1000名员工需要彼此加密通信,因此每个人需要 999 999 999个通信密钥。所以整个公司需要的密钥数量为 1000 × 999 ÷ 2 = 499500 1000 \times 999 \div 2 = 499500 1000×999÷2=499500。全公司要生成 49 49 49万 9500 9500 9500个密钥,这是不现实的。
- 通过密钥分配中心来解决:在公司中配置一台充当密钥分配中心的计算机,其中保存了公司中每个员工的密钥。当Alice要与Bob通信时:
- Alice向密钥分配中心发出希望与Bob进行通信的请求。
- 密钥分配中心随机生成一个会话密钥,是本次通信中的临时密钥。
- 密钥分配中心将会话密钥分别加密后发送给Alice和Bob(密钥分配中心有Alice和Bob的密钥)。
- Alice得到会话密钥后,用它对消息进行加密,然后发送给Bob。
- Bob得到会话密钥后,用它对消息进行解密,得到Alice发送的消息原文。
- Alice和Bob删除会话密钥。
- 问题
- 随着员工数量的增加,密钥分配中心的负荷也回随之增加。
- 密钥分配中心如果发生故障,全公司的加密通信就会瘫痪。
- 主动攻击者Mallory可以直接对密钥分配中心下手。
- 通过Diffie-Hellman密钥交换来解决:在Diffie-Hellman密钥交换中,进行加密通信的双方需要交换一些信息,根据所交换的信息,双方可以各自生成相同的密钥。而这些信息即使被窃听者Eve窃听到,也无法生成相同的密钥。
- 通过公钥密码解决:公钥密码中加密密钥和解密密钥是不同的。接收者只需要事先将加密密钥发送给发送方,这个加密密钥即使被窃听者获取也没有问题。发送者使用加密密钥对通信内容进行加密并发送给接受者,而只有拥有解密密钥的人(即接收者本人)才能进行解密。
公钥密码
公钥密码(public-key cryptography)中,密钥分为加密密钥和解密密钥。发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。
加密密钥和解密密钥的区别:
- 发送者只需要加密密钥。
- 接收者只需要解密密钥。
- 解密密钥不可以被窃听者获取。
- 加密密钥被窃听者获取也没问题。
由于加密密钥可以任意公开,因此该密钥被称为公钥(public key)。而解密密钥时绝对不能公开的,因此称为私钥(private key)。公钥和私钥是一一对应的,一对公钥和私钥统称为密钥对(key pair)。
公钥通信的流程:
在这个过程中,Alice和Bob之间传输的信息只有Bob的公钥和用Bob的公钥加密的密文。由于Bob的私钥没有出现在通信内容中,因此窃听者Eve无法对密文进行解密。
公钥密码无法解决的问题:
- 会受到中间人攻击。
- 处理速度慢,只有对成密码的几百分之一。
公钥密码除了能保证数据传输的机密性,还能用作数字签名,提供认证功能。例如,假设现在Alice希望把一个数字签署的信息 M ′ M' M′发送给Bob,那么:
- Alice可以用私钥加密信息 M ′ M' M′,得到数字签名 σ \sigma σ。
- Alice把消息/签名对 ( M ′ , σ ) (M', \sigma) (M′,σ)发送给Bob。
- Bob收到 ( M ′ , σ ) (M', \sigma) (M′,σ)后,他可以利用Alice的公钥解密 σ \sigma σ,如果解密后的数据与 M ′ M' M′相同,就能证实消息确实来自Alice。
RSA
RSA是一种公钥密码算法,它的名字是由它的三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏首字母组成的(Rivest-Shamir-Adleman)。
RSA的加密和解密: