第四章 公钥
回顾第一章的场景:
小强与小红加密约会后,他需要订餐,但是他与餐厅客服没有见过面,不可能事先约定好密钥,虽然小强也可以使用与小红的密钥加密,但是餐厅客服也不清楚小强与小红之间的密钥“1999111120000520”,那通过邮件把密钥发送给餐厅客服?不行,这样也会被窃听者小白获取到。所以密钥怎么给别人?何时给别人?这个就是密钥配送问题了,由于加密与解密使用的是相同的密钥,所以称为对称密码。如果与其他人通信均使用相同的密钥,那么这个密钥其实也就没有那么的保密了,所以现代密码技术引入一个解决密钥配送的方法,叫做公钥密码。
4.1 什么是公钥密码
密钥分为加密密钥和解密密钥两种,发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。加密密钥是任意公开的,因此加密密钥称为公钥,解密密钥绝对不能够公开,因此解密密钥称为私钥。同时,公钥和私钥是一对,由公钥进行加密的密文,必须使用该公钥对应的私钥才能够解密,也就是说公钥和私钥之间具有数学上非常密切的关系。
4.2 公钥密码的流程
公钥密钥的流程如下图:
1、接收者餐厅客服生成一对密钥,一个公钥,一个私钥,私钥必须保密,自己保管好;
2、接收者餐厅客服公布公钥,可以全世界公布,也可以谁要给谁,注意这里是餐厅客服的公钥,不是小强的公钥,也不是私钥;
3、发送者小强使用餐厅客服的公钥和算法(算法一般都是公开了)对“晚上6点,情侣套餐”这个信息进行加密;
4、发送者小强发送密文,就是发邮件;
5、接收者餐厅客服收到密文后,使用自己的私钥,即餐厅客服私钥和算法对密文进行解密。
以上就是基本的流程,与正常理解有点不同,最需注意的一点:谁接收,用其钥。
那算法是什么?密钥对是什么?能够通过公钥破解出私钥吗?接下来我们以最常见的公钥密钥算法RSA为例进行讨论。
4.3 RSA
1977年的一天,阳光明媚,普照大地,三位麻省理工学院的数学家罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起设计了一种算法,可以实现非对称加密,这个算法用他们三个人的名字命名,叫做RSA算法。直至今日,在公开密钥加密和电子商业中RSA被广泛使用。从提出到现今的四十多年里,经历了各种攻击的考验,逐渐为人们接受。
1、密钥对的生成过程
第一步:随机选择两个不相等的质数p和q,注意p和q越大,就越难破解。我们这里为了演示方便,选择p=17,q=19。
第二步:计算p和q的乘积n。
第三步:计算n的欧拉函数φ(n)。
上一章我们介绍了: