2021,一个平平无奇的数字( 三 )


在密码传输过程中有两个需要使用密钥的步骤 。 一个是发送者把正常信息加密为旁人看不懂的信息 , 另一个是接收者把这段旁人看不懂的信息解密为正常信息 。 早期人们使用的密码都是对称式密码 , 加密和解密用的是同一个密钥 。 如果你知道如何加密 , 自然就知道如何解密;反过来也是一样 , 知道如何解密 , 自然就知道如何加密 。

2021,一个平平无奇的数字
本文插图



跳舞小人密钥丨图源:一起扣扣网
对称式密码适用于一对一通信 , 但在多对多通信的情形下就很不方便 。 比如说张三、李四、王五三个人互相之间用同一密码通信 , 但有的时候张三想跟李四单独通信 , 内容不想让王五知道 , 这时再用以前的同一密码就不合适了 , 只能另起炉灶采用一套新的密码 。 这还只是三个人互相通信 , 要是全球几十亿人互相通信会更麻烦 。 公钥密码就是为了解决这一问题而设计的 。
在公钥密码里 , 每个用户被分配了两套密钥 , 一套加密密钥 , 一套解密密钥 。 其中加密密钥公开给所有人 , 解密密钥则只有这个用户本人才知道 。 如果张三要给李四发送信息 , 他只需要使用李四的加密密钥来对原始信息加密 , 把加密信息发送给李四 。 那么就只有李四本人才能够用李四的解密密钥来对加密信息解密 。

2021,一个平平无奇的数字
本文插图



用公钥密码还可以实现数字签名 。 比如张三给李四发送一段信息 , 他可以先用张三自己的解密密钥来处理原始信息 , 得到一号加密信息 , 然后再用李四的加密密钥来对一号加密信息加密 , 得到二号加密信息 。 实际发送给李四的是二号加密信息 。 李四收到二号加密信息后 , 需要先用自己的解密密钥来解密二号加密信息 , 得到一号加密信息 , 然后再用张三的加密密钥来处理一下 , 就得到原始信息 。 这样发送出来的二号加密信息 , 就是只有张三才能发送 , 并且只有李四才能解读的 。 于是我们便得到了旁人无法仿造的张三的“数字签名” 。
2021,一个平平无奇的数字
本文插图


公钥密码机制的关键在于 , 从加密密钥很难推断出解密密钥 。 1977年 , 三位麻省理工学院的密码学家Ronald Rivest, Adi Shamir, 和Leonard Adleman提出了RSA公钥密码 , 利用大数分解的困难来实现公钥密码 。 具体而言 , 每个用户被分配了两个大素数 。 这两个大素数的乘积(即一个“半素数”)被公开给了所有用户 , 但只有这个用户本身才知道是哪两个素数 。 解密密钥需要知道这两个素数 , 而加密密钥只需要使用它们的乘积 。
2021,一个平平无奇的数字
本文插图


1983年 , 左起Shamir, Rivest, Adleman 丨图源:imps.mcmaster.ca
在RSA公钥密码里 , 只要使用的两个素数足够大 , 就可以保证密码是安全的 。 在网络时代 , 公钥密码被广泛应用于网络银行、电子商务等场景中 。 读者可能会注意到 , 以前上网 , 浏览器里的地址多半是以http://开头 , 但近年来多半是以https://开头 。 在https协议里就使用了公钥密码 , 比http协议更安全 。 然而 , 在1994年 , Peter Shor提出了一个用量子计算机快速进行大数分解的Shor算法 。 一旦可实用的量子计算机被建成 , RSA公钥密码将不再安全 。 如何设计更安全的密码 , 以及如何破译已有的密码 , 始终是密码学家不懈研究的问题 , 而数论在其中发挥着不可代替的作用 。
当然了 , RSA用到的半素数都是有数百位甚至上千位的大数 , 不会用到2021这么小的数 。 我们的年份2021 , 仍然只是一个平平无奇的数字 。 希望2021年 , 也像这个数字一样平平无奇 , 而不像2020年那样惊心动魄 。
本文经授权转载自微信公众号“普林小虎队” 。

推荐阅读