seegongsik
安全

公钥加密 怎么工作

上一课看了用一把钥匙上锁、开锁的对称加密。它又快又利落,却留下一道作业:怎样把这把钥匙悄悄交给远方的人?可如果上锁的钥匙和开锁的钥匙不是同一把呢?上锁的钥匙发给全世界也无妨,只有开锁的钥匙握在自己一个人手里。公钥加密就是从这个想法里诞生的。

01

钥匙有两把

对称加密只有一把钥匙。公钥加密则成对地生成两把钥匙一起用。一把是公钥,顾名思义,发给谁都行;另一把是私钥,只留在自己手里,绝不交出去。公钥可以印在名片上、挂在网站上,私钥却要像家门钥匙一样贴身保管。
两把钥匙在数学上是配对的,但知道公钥,也算不出私钥。因为它们建立在一类数学难题上,就像分解一个极大的数的质因数那样,一个方向很容易,反过来却几乎不可能。

点一下钥匙看看它的角色

把两把钥匙一个个点开,看看各自的角色。公钥发给任何人,私钥只在自己手里。

公钥摊开放着也没关系,私钥却得深深藏好。是同一对,角色却正好相反:一把公之于众,一把守密到底。
那么有了两把钥匙,上锁用哪一把,开锁又用哪一把?先看上锁这一边。

02

用公钥上锁

想给某人发秘密消息,先拿到他的公钥。公钥谁都可以有,很容易得到。用这把公钥给消息上锁。
用公钥上锁,就像把对方分发的一把打开的挂锁扣在消息上。谁都能把挂锁扣上,可一旦扣上,连扣锁的人自己也打不开了,因为公钥只能上锁,不能开锁。这有点像邮局门口的信箱:谁都能把信投进去,只有拿着钥匙的人才能打开取信。

HELLO消息
公钥
谁都能用手里的公钥上锁。

点“用公钥上锁”。用谁都有的公钥,给消息扣上一把挂锁。

消息锁上了,变成了认不出来的样子。上锁用的是公钥,而不是什么秘密,所以上锁这件事真的谁都能做。
可锁上之后,连上锁的人自己也打不开了。打开公钥锁上的挂锁的钥匙,另有其物。

03

只有私钥打得开

用公钥锁上的挂锁,只有和它配对的私钥才能打开。同一对的私钥一插就开,别的钥匙纹丝不动;就连上锁时用的那把公钥也打不开。
所以只有握着私钥的那一个人才能读这条消息。就算全世界都有这把公钥,能读的也只有私钥的主人。哪怕攻击者截下了整条锁住的消息,又拿到了公钥,也只能对着密文干瞪眼。

对一把钥匙开挂锁

把钥匙一把把试一试。只有配对的私钥能打开挂锁,上锁的公钥和错的私钥都会失败。

只有插上配对的私钥时才打开。这种不对称正是公钥加密的核心:谁都能上锁,只有一个人能开锁。上锁的权力敞开着,只有开锁的权力牢牢锁住。
正因为这个性质,上一课的作业就解开了,因为根本不需要再偷偷交钥匙。

04

密钥分发问题解开了

用对称加密时,两个人得拿着同一把钥匙,所以偷偷交钥匙成了头疼事。公钥加密没有这个烦恼:收信人的公钥谁拿走都行,拿它只能上锁。
用来开锁的私钥,从一开始就不离主人的手。根本没有要偷偷交出去的钥匙,危险的递送环节也就整个消失了。这就好比把打开的挂锁放在门口任人取用,钥匙却始终揣在自己口袋里。

点一下方式对比步骤
点一下方式对比步骤

点“对称密钥”和“公钥”,比一比步骤。对称加密夹着秘密递送的环节,公钥加密没有这个环节。

两种方式并排一放,区别就很明显:对称加密总夹着秘密递送这个危险环节,公钥加密却没有。不过公钥加密计算量大,用来整块锁住大数据会很慢。
所以实际上,会用公钥加密安全地递送一把短短的对称密钥,数据则用快速的对称加密来锁。还剩一道作业:要确认收到的公钥真是那个人的,没有在半路被人调包。这个问题后面会用证书来讲。

05

小结

归纳起来是这样:公钥加密用成对的两把钥匙。公钥发给任何人,私钥只归自己。用公钥锁上的东西,只有配对的私钥才能打开:谁都能上锁,只有一个人能开锁。
所以公钥公开也安全,根本没有要偷偷交出去的钥匙。对称加密的密钥分发问题就这样解开了。公钥像人人可取的挂锁,私钥像只有自己才有的那把钥匙。

1两把钥匙
2用公钥上锁
3只有私钥能开
4密钥分发问题解开

依次点要点回顾一下。(两把钥匙 → 用公钥上锁 → 只有私钥打得开 → 密钥分发问题解开)

现在你知道了两把钥匙的魔法:用一把分发出去的钥匙和一把自己专属的钥匙,安全地交换秘密。这一对钥匙倒过来用,还能做出无法伪造的签名,这会在数字签名那一课里讲。
在那之前,下一课先看密钥交换:两个人完全不寄钥匙,也能一起做出同一把秘密钥匙。

一句话总结公钥加密用成对的两把钥匙。公钥发给谁都行,私钥只归自己。用公钥锁上的东西,只有配对的私钥才打得开,连上锁的公钥也打不开;从公钥也算不出私钥。所以收信人的公钥公开给全世界也安全,谁用它锁上寄来,都只有私钥的主人能打开。困扰对称加密的密钥分发问题就消失了。不过它计算量大,所以实际上会先用公钥加密递送对称密钥,数据再用对称加密来锁;而确认收到的公钥是不是真的,则交给证书。
← 安全
如果有帮助,请支持我们