阿里妹导读:谁都不想在通信过程中被别人“窃取”小秘密。本文借助一对情侣与八卦女、猥琐男的斗智故事,为大家讲述科普密码学基础知识。既有料又有趣,深入浅出,相信你会喜欢。
事情是这样的,Alice 和 Bob 是一对 CP。两人之间难免要说一些 secret,又不想被别人偷听,怎么办呢?本文就是讲述这对 CP 之间如何安全隐秘地聊天。如何跟无(wěi)聊(suǒ)份子们斗智斗勇的故事。先介绍一下将要登场的各个角色:
刚开始时,Alice 和 Bob 没有安全意识。平时说话聊天没有什么防范措施,经常被 Eve 偷听。但碍于情面又不好直说,为此烦恼不已。偷听过程如下:
Bob 是个技术男,想到一个办法。既然有人偷听,那我为什么不加密呢?说干就干,他事先和 Alice 商定一个密钥(key),是个随机值,别人猜不出来。从此这对 CP 之间聊天就用这个 key 进行加密保护,如下:
从图中可以看到,Alice 在说话前,先用 key 对消息内容进行加密。发送消息时,不再直接传递“我刚买了个包包”这么直白的明文,而是 “*&2#%/Qw@##” 这种谁都看不懂的密文。即使被 Eve 窃听,她也完全看不懂神马意思,只能表示 WTF。Bob 收到密文后,先用 key 对其进行解密,得到原始的消息内容“我刚买了个包包”。
旁白:
言归正传,一切看起来是那么完美。Alice 和 Bob 以为可以高枕无忧了,却没想到道高一尺,Eve 高一丈。
自从 Alice 和 Bob 使用了“加密”这种秘密武器之后,Eve 什么都听不到了。为此她寝食难安,没有八卦的生活还有神马意义!? 还好,Eve 不是普通的 Eve,她并不只是一个八卦女,她是个懂科技的 girl。思考几天之后,Eve 意识到这对 CP 肯定是用了加密的。一不做二不休,Eve 找到了破解办法,请看下图。
Eve 观察到那对 CP 之间为了安全性,会经常更换 key。为此,她寻找一个合适的时机,把 key 窃取到手。之后,Eve 又可以愉快的窃听了,终于可以睡个安稳觉。窃听过程如下:
有 key 在手,Eve 截获消息之后,就可以像 Bob 一样把消息明文解密出来。
不过好景不长,相对于 Eve 来说,Bob 才是掌握核心科技的。他很快发现 Eve 的这一行为,想到另一个办法: 非对称加密。具体过程如下:
另外,这种方式还有个显著优点。假使 Bob 还有很多别的女友(严重抨击这种行为),他可以把同一个公钥 pub 都发给她们,各个女友都用这个 pub 和 Bob 进行通信。构成“多对一”的通信关系,却不用担心女友 A 窃听到女友 B 和 Bob 之间的聊天内容,因为 pub 无法解密。而在对称密码中,Bob 必须为每个女友都分发一个不同的 key,这很难保管。
旁白:
好了,现在信道安全问题已经解决啦,不用再担心 secret 被 Eve 偷听。但是情场多艰,猥琐男 Mallory 现在隆重登场。
文章开头说了,Mallory 是个专业搞破坏 20 年的男人,这次也不例外。请看下图:
Mallory 并不是八卦小女生,他对偷听秘密没有任何兴趣。生而不羁,他决定搞一些恶作剧,篡改一下消息吧。于是他把 “我刚买了个包包” 改成“我决定跟你分手”,但 Bob 却不知道已被篡改,还以为是 Alice 的原话。那么问题来了,求此刻 Bob 的心理阴影面积。
经过一番狗血的情感纠葛之后,Alice 表示还是爱他的,Bob 终于意识到有人在从中作梗。这还得了,之前我们一直强调,Bob 是个掌握核心科技的 boy,他很快就想到了应对措施。请看下图(为了简单起见,本例仅展示防篡改的情况,没有对 message 做加密):
图中的 MAC 指的是 消息认证码(Message Authentication Code),你现在不需知道它的原理,只要记住 :(1)传入两个参数 message 和 key,进行一系列计算后得到一个值叫 MAC。(2)只有 message 和 key 相同的情况下,才能得到相同的 MAC。
旁白:
Mallory 还有个小伎俩,那就是冒充身份,恰好 MAC 也可以对付这个。且看下图:
Mallory 发一个消息给 Bob,说“亲爱的,我是 Alice 哦,balabala...”。如果没有校验措施,Bob 可能就中招了。同样的,Bob 可以用以下方式进行防范:
只有 Alice 和 Bob 拥有相同的 key,所以 Bob 只有在校验 MAC 成功时才会相信对方是 Alice。而 Mallory 没有这个 key,伪造的 MAC 肯定会校验失败的,所以计谋不能得逞。
旁白:
MAC 虽好,但是遇到和对称密码同样的问题:密钥如何交换。
其中一个解决方式就是 数字签名,这个“签名”你基本可以想象成现实生活中的手写签名,具有类似的作用。原理上和非对称加密有点像,但有个很大的区别,发送方是用 私钥进行签名,而接收方用 公钥 进行验签,这跟加密情况正好相反。
Bob 可以用数字签名来校验消息是否被篡改,请看下图:
原理上和图 6 差不多,但区别在于:由 Alice 事先生成一对公钥 pub 和私钥 pri,并把 pub 发送给 Bob,前者用 pri 加签,后者用 pub 验签。验签失败说明消息被篡改。
也可以用于身份校验,请看下图:
Mallory 没有 Alice 的 pri,所以无论如何他也没法冒充 Alice 的身份。
看到这里,大家可能都松了一口气,以为这小俩口终于没事儿了。但情场多变,万一哪天 Alice 变心了呢,她给 Bob 发了一条消息,说“分手吧”,如下图:
可是发完之后又有点后悔,但他们使用的不是 钉钉,并没有消息撤回功能。怎么办?所以说 Alice 还是有点 too naive,她妄想可以矢口否认,把 shit 盆子扣到破坏小王子 Mallory 身上,声称“刚才那句话是 Mallory 说的” 等云云。
Mallory 虽然猥琐,但也是个讲“原则“的 man,你扣盆子也要讲基本法啊!于是他跳出来说, “表冤枉我,我又没有 Alice 的私钥”。
这是什么意思呢?原来数字签名还具有“抗否认”的神奇功效,Alice 讲的话里带有她的签名,是不能否认的(是不是有点类似现实生活中的手写签名?)。任何不讲基本法的栽赃陷害都是无效的...
如果你以为 Eve 和 Mallory 就此屈服于非对称加密和数字签名的威力,那你就真的是图样了。所谓 “两汪战一虎,四汪沉航母。六汪戏上帝,八汪创世纪”,他们决定联合起来,找出公钥机制的破绽。伟大友谊自然会有效果,他们果真找到了破解之法(绝对不是剧情发展需要...)。
没错,就是 伪造公钥。我们先拿公钥加密来举例子,图4 中讲到,Bob 需要事先生成公钥 pub 和私钥 pri ,然后把 pub 分发给 Alice。那么攻击过程就从这入手:
这是个“偷天换日”的过程,Eve 通过伪造公钥(中间人攻击),不光窃听到 Alice 的消息,还能保证整个过程中 Alice 和 Bob 都没有察觉!
再来看一下 Mallory 怎样用伪造公钥的方式来冒充身份。图10 中讲到,Alice 需要事先把自己公钥发给 Bob,所以攻击过程就从这入手:
这个过程中,Mallory 通过伪造 Alice 公钥,成功冒充了 Alice 的身份。
这种伪造公钥的攻击方式让 Bob 很头疼,思考了很久,终于想到一个办法。这次他找来了帮手 —— Trent。文章开头有介绍过,Trent 非常具有权威性,而且能保证自身不受攻击(或者别人不敢攻击),就像现实生活中的公安局。
Eve 不是喜欢伪造公钥吗,Bob 这次就要请 Trent 为自己的公钥注册一张 “身份证” —— 数字证书。见证如见人,哦不对,见证如见公钥!以下是注册数字证书的过程:
Eve 不可能找 Trent 为她办一个 Bob 的数字证书,因为 Trent 不会同意的,就像警察蜀黍不会给我办一张别人的身份证一样。所以,Eve 无法伪造 Bob 的公钥。
同理,为了防止 Mallory 伪造公钥来冒充身份,Alice 也需要向 Trent 注册自己的公钥,得到一个数字证书,用于防止别人伪造公钥。
旁白:
关于我们
城市大脑X实验室是国家城市大脑项目的主要搭建与落地团队,承载了实现城市大数据的融合与治理工作,为城市的发展提供必要的土壤,依托阿里云强大的算力,用强大的智能算法解决交通、公安、司法、治安等问题。团队在高速发展与成长过程中,需要大量的深度学习、机器学习算法大牛的加入,
欢迎访问:https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP061909
看看是否有您热衷的职位。
每天一篇技术文章,
看不过瘾?
关注“阿里巴巴机器智能”微信公众号
发现更多AI干货。