非对称加密算法的思考
想跟行外人士讲清楚非对称加密,似乎不是个容易的事情。
大概用快递(或邮寄)来打比方是比较合适的方法。
场景:北京的张小发,要给纽约的李小收发个快递,假设是一块形状不确定的金块,2公斤。
张小发把这块金块用密码箱装好锁好,设置密码为396173(随机的,没有含义),然后把箱子交给快递员,快递员通过公司的系统把箱子发出去。张小发通过电话把密码告诉李小收。李小收在收到箱子之后,用这个密码把箱子打开,拿到完整的金块。完毕。
这是一个正常的完整的顺利的快递流程。
那么,接下来,开始出现可能的问题。
从北京到纽约的快递,中间可能倒过无数次的手,任何人都无法保证“没有人想打开这个箱子看看里面是什么东西这么重”,黑暗森林中任何人都不可相信。
实际上,采用电话告知这种方式,在不破坏箱子的情况下,是安全的,别人解不开这个密码锁(咱不说暴力尝试破解的情况,即使是暴力破解,也是10^6,100,0000次,用手工的方式,基本不可能)(咱不说用挖掘机那种纯暴力破解)。
在互联网上,前面提到的金块,就是信息。密码箱,就是加密算法。装了金块的密码箱,就是经过加密算法包装了的信息。
那么,鉴于双方都是机器,要从北京发往纽约的一段信息,是没有办法通过打电话的方式告知对方密码的,一切都只能靠网络传输。
就相当于在人类的世界中,在电话发明之前,如果你想让对方能够解开密码锁,就只能让快递员转达,或者单独寄一封信,而这封信,也只能通过这个快递员发出去(别提火封),那么就等于这个密码箱对快递员是公开的,可以想象,这是很危险的事情。
所以,人们发明了一种方法。既要送金块,又不让别人看里面的东西。可以想像,历史长河中,人们一定想了很多很多的办法,其中的一些逐渐被淘汰了。最近留下的就是我们的主角,非对称加密算法。
这里可以稍微停一下,如果现在请你来想一个妥善的办法,你会怎样设计这个流程呢?
现假设,咱们世界上的每个人可以制造一种箱子,这种箱子的钥匙,只有箱子的主人本人有,就像你家门钥匙一样,这个就是私钥。
现在,张小发要给李小收发快递,先给李小收寄了一封信,让他发一个箱子过来(也可以是预存在张小发家里的,就像顺丰的快递单;也可以想像成李小收能量巨大,地球上任何地方都可以买到李小收的快递箱,总之任何人都可以获得未上锁的李小收的箱子),这个箱子,只有李小收本人用私钥可以打开。那么,李小收的这种箱子,就是公钥,拿到时必须是未上锁的,一旦东西放进去,盖子合上(公钥加密),就只有李小收能打开了。
一言以蔽之,要给李小收发东西,必须用李小收特制的箱子(公钥),如果你没有他的箱子,就申请一个。他特制的箱子,就只有他能打开,用钥匙(私钥)。
这就是非对称加密算法的形像化过程。