张三有一对RSA秘钥(公钥和私钥),他也有兄弟李四和王五,他们都在铜锣湾讨生活。
因为职业关系,不能让外人知道他们三个的关系,所以张三要求李四和王五给他写信的时候必须要用他的公钥给信加密,再将加密后的信发给他,原文要立即销毁。
为了做到这点,张三把他的公钥给了李四和王五。
从那以后李四和王五都用张三给的公钥加密发给张三的信,因为只有张三手上的私钥才能解密加密后的信,所以只要张三手上的私钥不泄露,那么李四和王五发给张三的信就是完全的,保密的,即是信落入其他人的手里也无法解密信的内容。
过了几年,张三他们的事业节节高升,但和铜锣湾的同行赵六一伙的矛盾也日益加深,张三为了解决赵六一伙决定分别派李四王五到赵六处卧底,但是卧底之后张三他们就能再见面了,见面会大大增加暴露的风险,最后张三他们想出了一个方法:
- 准备一些只有他们三个人知道的暗语,张三利用这些暗语给李四王五下达指令
- 利用太阳报的三版广告来传递信息
- 李四王五利用公钥将收集到的情报加密并且将加密后的数据在编成二维码刊登在广告上
- 张三收集每期的太阳报并扫描三版上的二维码,用私钥对扫描到的二维码数据进行解密,解密之后成文的即使情报
- 暗语存在被人误用的风险,所以为了确认收到的暗语确实是张三刊登的,必须为暗语签上只有张三才能签署的签名
- 将暗语和签名编程二维码刊登
张三如何对暗语进行签名呢?
其实签名也是一种加密,只是它是用私钥加密,用公钥解密。
这也符合签名的目的,难以伪造,便于验证。签名的私钥很难伪造,所以签名也就难以伪造,公钥能够随意散播,所以只要有公钥的人就能对签名解密,验证签名内容。
签名过程如下:
- 先用Hash算法生成暗语的摘要(Digest)(此步非必须,但是当暗语过大的时候可以用摘要减小签名大小)
- 用私钥对摘要进行加密,加密之后的数据即是“数字签名”
- 将数据签名附加在暗语的最后就是对暗语进行了签名
最后张三将签名后的暗语编成二维码刊登在太阳报上
李四王五扫描二维码获取暗语之后,用公钥解密签名之后,获取张三发送的暗语摘要,然后用Hash算法获取扫描到的暗语摘要,然后对比解密签名获取的摘要和计算暗语获取的摘要进行对比,如果相同那么这份暗语就是张三发送的。
又过了若干年,因为李四王五的卧底,张三扭转了对赵六的颓势,逐渐对赵六形成压制。
但赵六也意识到他们之中出了内鬼,其中王五的嫌疑最大。
但这些破绽都是王五故意露出来的,原来张三李四王五虽然都是兄弟,但是张三和李四的关系更加亲密,而他王五更像是个多余的。眼看着张三李四兄(基)弟(情)情(满)深(满),王五心生怨恨,转而投靠赵六。
王五投靠赵六之后,为他献上一策——斩断张三李四的联系,然后伪造信息,欺骗张三李四,在关键时刻坑死张三李四。
王五也做了一对RSA密钥,并且偷偷用自己的公钥替换掉了李四手中张三的公钥。
然后王五用一根棒棒糖和青梅竹马的恋人如花的人生安全成功将太阳报三版的小编拉入到他们的阵营里,并且要求小编当张三和李四来投稿的时候截下他们的稿件,然后通知王五。
就这样,当李四要把情报传递给张三的时候,王五就用假情报替换掉(也用张三的公钥加密,因为是发给张三的)。当张三要下达指令给李四和王五的时候,王五也同样拦截下指令,并伪造指令,用自己的私钥签名(李四手中公钥已经是王五的了)。
又过了一段时间,被坑了几次之后张三李四也渐渐发现不对,怀疑他们的情报传递系统出了问题。
冒险碰头分析之后,认为应该是李四手上的公钥被人掉包了,同时张三也用公钥验证了“他”刊登在太阳报上的信息,果然是对不上的,而知道这个情报传递系统的只有他们三个,肯定是王五出卖了他们。
最后张三和李四决定不动声色,继续用太阳报传递信息以迷惑王五赵六,私下里改用另一种传递情报的方式。但是这次为了让李四能确认手上的公钥究竟是不是张三的,张三决定找道上最中立公正的大佬“证书中心”(certificate authority,简称CA)为自己的公钥做公正。
证书中心用自己的私钥对张三的公钥和一些相关信息一起进行加密,生成“数字证书”(Digital Certificate)。
张三 拿到数字证书之后,以后再给李四下达指令就在指令暗语的后面同时加上数字签名和数字证书。
李四收到张三的信息之后,使用证书中心的公钥解密数字证书就能拿到真正的张三的公钥,然后就能证明数字签名是不是张三签的,指令是不是张三下达的。
当然这里存在一个问题,如果李四手上证书中心大佬的公钥也是假的呢?这个问题暂时没有好的解决方法,我们这边就假定大佬很牛B,以前凡是假冒过大佬公钥的人都已经做了潜水艇,现在道上已经没人敢假冒大佬的公钥了。
最后的最后,张三李四利用假情报反坑了王五和赵六,把他们送去见关公了。从此以后公主。。。咳咳。。。张三和李四就过上了幸福的生活!
(完)
参考:
数字签名是什么- 阮一峰的网络日志