工程师男友如何反窃听?趣聊密码学入门科普

简介:

背景

事情是这样的,Alice 和 Bob 是一对 CP。两人之间难免要说一些 secret,又不想被别人偷听,怎么办呢?本文就是讲述这对 CP 之间如何安全隐秘地聊天。如何跟无(wěi)聊(suǒ)份子们斗智斗勇的故事。先介绍一下将要登场的各个角色:

●  Alice:话唠,严重的倾诉欲,和 Bob 是 CP。
●  Bob:沉默男,理工男,和 Alice 是 CP。
●  Eve:Alice 的室友,热衷于偷听八卦。
●  Mallory:猥琐男,专业搞破坏 20 年。
●  Trent:长者,相当具有权威性,大家都相信他。

如何不被窃听 —— 加密

刚开始时,Alice 和 Bob 没有安全意识。平时说话聊天没有什么防范措施,经常被 Eve 偷听。但碍于情面又不好直说,为此烦恼不已。偷听过程如下:

383ddd30d438aa91e0b477c16c1dfa259accd433

Bob 是个技术男,想到一个办法。既然有人偷听,那我为什么不加密呢?说干就干,他事先和 Alice 商定一个密钥(key),是个随机值,别人猜不出来。从此这对 CP 之间聊天就用这个 key 进行加密保护,如下:

44a60ce04f7c0c33a163cec7b729199997cc5473

从图中可以看到,Alice 在说话前,先用 key 对消息内容进行加密。发送消息时,不再直接传递“我刚买了个包包”这么直白的明文,而是 “*&2#%/Qw@##” 这种谁都看不懂的密文。即使被 Eve 窃听,她也完全看不懂神马意思,只能表示 WTF。Bob 收到密文后,先用 key 对其进行解密,得到原始的消息内容“我刚买了个包包”。

旁白:

●  这种加密方案在密码学里称为对称密码,加密方和解密方使用的是相同的密钥。
●  知名的密码算法有 AES(2001)、Blowfish(1993)、DES(1977),再远一点,有二战时期的恩尼格码(转轮机原理,德国)、紫色密码(转轮机原理,日本),以及著名的凯撒密码(没错就是地中海北岸那个凯撒)、栅栏密码等。后续会写文章专门进行各个算法的性能比较、安全性比较。
●  友情提示: 密码学里的“密码”和现实生活中的“密码”不是一回事儿!后者一般指的是口令(password),比如登录淘宝、QQ、ATA输入的那个东西。顺便说下,有些耿直的 boy 会把自己的口令设置得炒鸡简单,比如 12345678 、helloworld 等。这是万万不能够的,小心被人猜出来。

言归正传,一切看起来是那么完美。Alice 和 Bob 以为可以高枕无忧了,却没想到道高一尺,Eve 高一丈。

如何交换密钥 —— 非对称加密

自从 Alice 和 Bob 使用了“加密”这种秘密武器之后,Eve 什么都听不到了。为此她寝食难安,没有八卦的生活还有神马意义!? 还好,Eve 不是普通的 Eve,她并不只是一个八卦女,她是个懂科技的 girl。思考几天之后,Eve 意识到这对 CP 肯定是用了加密的。一不做二不休,Eve 找到了破解办法,请看下图。

c630e9edbe49262ffbac65a98b7bca0811486598

Eve 观察到那对 CP 之间为了安全性,会经常更换 key。为此,她寻找一个合适的时机,把 key 窃取到手。之后,Eve 又可以愉快的窃听了,终于可以睡个安稳觉。窃听过程如下:

d080095f50f91bbc6ce90615496e6f5eb755f053

有 key 在手,Eve 截获消息之后,就可以像 Bob 一样把消息明文解密出来。

不过好景不长,相对于 Eve 来说,Bob 才是掌握核心科技的。他很快发现 Eve 的这一行为,想到另一个办法: 非对称加密。具体过程如下:

ebba8b4cbbfc3e2fdbb8963998508e5b49b719f8

●  Bob 事先生成一对公钥和私钥,私钥 pri 由自己保管,把公钥 pub 发给 Alice。
●  Alice 使用 pub 对消息内容进行加密,Bob 用 pri 进行解密。
●  需要注意的是, 只有私钥才可以解密,所以即使 Eve 窃取到了 pub(只有 pub 被传输而容易被窃取),她也无法解密。

另外,这种方式还有个显著优点。假使 Bob 还有很多别的女友(严重抨击这种行为),他可以把同一个公钥 pub 都发给她们,各个女友都用这个 pub 和 Bob 进行通信。构成“多对一”的通信关系,却不用担心女友 A 窃听到女友 B 和 Bob 之间的聊天内容,因为 pub 无法解密。而在对称密码中,Bob 必须为每个女友都分发一个不同的 key,这很难保管。

旁白:

●  这种加密方式在密码学里称为非对称密码,所谓“非对称”指的是加密方和解密方用的密钥不一样。
●  知名的非对称算法有:DSA(数字签名算法,只能用于签名,1991)、ECC(椭圆曲线加密,1985)、RSA(公钥加密算法,1977)等。
●  这些算法除了用于加密外,还可以用于 数字签名,本文后面会讲到。
●  非对称算法有个致命弱点: 性能很低。实际应用中一般采用混合加密体制、哈希签名体制,后续会写文章中进行介绍。

好了,现在信道安全问题已经解决啦,不用再担心 secret 被 Eve 偷听。但是情场多艰,猥琐男 Mallory 现在隆重登场。

如何防止数据篡改 —— MAC

文章开头说了,Mallory 是个专业搞破坏 20 年的男人,这次也不例外。请看下图:

96fb56885df1bf0153592c930d8cbc35f21fd1c5

Mallory 并不是八卦小女生,他对偷听秘密没有任何兴趣。生而不羁,他决定搞一些恶作剧,篡改一下消息吧。于是他把 “我刚买了个包包” 改成“我决定跟你分手”,但 Bob 却不知道已被篡改,还以为是 Alice 的原话。那么问题来了,求此刻 Bob 的心理阴影面积。

经过一番狗血的情感纠葛之后,Alice 表示还是爱他的,Bob 终于意识到有人在从中作梗。这还得了,之前我们一直强调,Bob 是个掌握核心科技的 boy,他很快就想到了应对措施。请看下图(为了简单起见,本例仅展示防篡改的情况,没有对 message 做加密):

8afd9329d9244a2702a959e338bcec98926b5c79

图中的 MAC 指的是 消息认证码(Message Authentication Code),你现在不需知道它的原理,只要记住 :(1)传入两个参数 message 和 key,进行一系列计算后得到一个值叫 MAC。(2)只有 message 和 key 相同的情况下,才能得到相同的 MAC。

●  跟对称加密一样,这对 CP 之间会事先协商一个 key。
●  Alice 使用 key 对 message 计算出一个 MAC1,并把 message + MAC1 发给 Bob。
●  Bob 收到之后,用自己的 key 对 message 计算出一个 MAC2,再比较 MAC1 和 MAC2 是否一致。
●  根据 MAC 的性质,如果 message 被篡改,那么计算得到的 MAC2 一定不等于 MAC1,验证失败,Bob 得出结论:有人篡改了消息。
●  由于仅 Alice 和 Bob 拥有 key,所以别人无法篡改 message 后伪造出一个有效的 MAC。
●  在检测篡改方面,还可以用HASH(散列)算法,包括MD5、SHA1/224/256/384/512等。比如版本控制系统GIT就使用SHA1来检查文件是否有修改。

旁白:

●  消息认证码有多种实现方式,其中最常见的是 HMAC(Hash MAC),即使用哈希算法来实现 MAC,还有一种是基于分组密码算法的 MAC,不常见。
●  聪明如你,肯定会想到如果 key 被窃取该怎么办?这就涉及到 数字签名了,后文会讲到。

如何校验身份 —— MAC

Mallory 还有个小伎俩,那就是冒充身份,恰好 MAC 也可以对付这个。且看下图:

a3161f8e08cacd805fd39f84b56066b08280b7c3

Mallory 发一个消息给 Bob,说“亲爱的,我是 Alice 哦,balabala...”。如果没有校验措施,Bob 可能就中招了。同样的,Bob 可以用以下方式进行防范:

251d265b536e488fb549c1756039c0c009b2a90f

只有 Alice 和 Bob 拥有相同的 key,所以 Bob 只有在校验 MAC 成功时才会相信对方是 Alice。而 Mallory 没有这个 key,伪造的 MAC 肯定会校验失败的,所以计谋不能得逞。

旁白:

●  MAC包含几种实现方式:基于 HASH 的 MAC 称为 HMAC,应用比较广泛。
●  有些同学应该接触过阿里云的 Access Key,其实就是 HMAC 的原理。
●  有些同学在两个系统之间API调用时,会使用同一个 key 做 md5 计算来实现 API 鉴权,这称为“加盐HASH”,可以简单理解为 HMAC 的简化版。
●  同样的,如果 key 被窃取该怎么办?这可以用 数字签名来解决。

更进一步 —— 数字签名

MAC 虽好,但是遇到和对称密码同样的问题:密钥如何交换。

其中一个解决方式就是 数字签名,这个“签名”你基本可以想象成现实生活中的手写签名,具有类似的作用。原理上和非对称加密有点像,但有个很大的区别,发送方是用 私钥进行签名,而接收方用 公钥 进行验签,这跟加密情况正好相反。

Bob 可以用数字签名来校验消息是否被篡改,请看下图:

c06aeee0dbc062d9edd51d5c4e6711c00c46e7f1

原理上和图 6 差不多,但区别在于:由 Alice 事先生成一对公钥 pub 和私钥 pri,并把 pub 发送给 Bob,前者用 pri 加签,后者用 pub 验签。验签失败说明消息被篡改。

也可以用于身份校验,请看下图:

8fc40ad11b85b22a232d65b357453311e8bc140f

Mallory 没有 Alice 的 pri,所以无论如何他也没法冒充 Alice 的身份。

看到这里,大家可能都松了一口气,以为这小俩口终于没事儿了。但情场多变,万一哪天 Alice 变心了呢,她给 Bob 发了一条消息,说“分手吧”,如下图:

7b65ebb1cef8297bc048a61d932f4b1afcedd83d

可是发完之后又有点后悔,但他们使用的不是 钉钉,并没有消息撤回功能。怎么办?所以说 Alice 还是有点 too naive,她妄想可以矢口否认,把 shit 盆子扣到破坏小王子 Mallory 身上,声称“刚才那句话是 Mallory 说的” 等云云。

Mallory 虽然猥琐,但也是个讲“原则“的 man,你扣盆子也要讲基本法啊!于是他跳出来说, “表冤枉我,我又没有 Alice 的私钥”。

这是什么意思呢?原来数字签名还具有“抗否认”的神奇功效,Alice 讲的话里带有她的签名,是不能否认的(是不是有点类似现实生活中的手写签名?)。任何不讲基本法的栽赃陷害都是无效的...

公钥的身份证 —— 数字证书

如果你以为 Eve 和 Mallory 就此屈服于非对称加密和数字签名的威力,那你就真的是图样了。所谓 “两汪战一虎,四汪沉航母。六汪戏上帝,八汪创世纪”,他们决定联合起来,找出公钥机制的破绽。伟大友谊自然会有效果,他们果真找到了破解之法(绝对不是剧情发展需要...)。

没错,就是 伪造公钥。我们先拿公钥加密来举例子,图4 中讲到,Bob 需要事先生成公钥 pub 和私钥 pri ,然后把 pub 分发给 Alice。那么攻击过程就从这入手:

● Eve 生成自己的一对公钥 pub' 和 私钥 pri',截获 Bob 的 pub,并用自己的 pub' 冒充 Bob 的公钥发给 Alice。如下图:

913b2d80e069703cf106bd67294a6f534a9595db

●  Alice 用 pub' 加密消息,发送出去。
●  Eve 截获 Alice 的数据,并用 pri' 解密得到消息明文。
●  Eve 伪造一个假数据“干嘛呵呵去洗澡”,并用 pub 加密后发给 Bob。

● Bob 用 pri 解密,拿到伪造的数据,以为是 Alice 发给他的。

ca4234f2a69ca971d0440bd474bbe994518b86ac

这是个“偷天换日”的过程,Eve 通过伪造公钥(中间人攻击),不光窃听到 Alice 的消息,还能保证整个过程中 Alice 和 Bob 都没有察觉!

再来看一下 Mallory 怎样用伪造公钥的方式来冒充身份。图10 中讲到,Alice 需要事先把自己公钥发给 Bob,所以攻击过程就从这入手:

● Mallory 生成自己的公钥 pub' 和 私钥 pri',截获 Alice 的 pub,并用自己的 pub' 冒充 Alice 的公钥发给 Bob,如下图:

c4210753cce09923214df46e75a0fad7487a339d

●  Alice 用正常私钥 pri 进行签名,并发给 Bob。
●  Bob 手里拿的是被伪造的公钥 pub',所以对 Alice 的 sign 会验签失败,认为对方不是 Alice。
●  Mallory 用自己私钥 pri ' 进行签名,并发给 Bob。

● Bob 用被伪造的公钥 pub' 进行验签,可以验签成功,认为对方是 Alice。

fb1a3766e9f9a21a9888c5e8906a69503110f98a

这个过程中,Mallory 通过伪造 Alice 公钥,成功冒充了 Alice 的身份。

这种伪造公钥的攻击方式让 Bob 很头疼,思考了很久,终于想到一个办法。这次他找来了帮手 —— Trent。文章开头有介绍过,Trent 非常具有权威性,而且能保证自身不受攻击(或者别人不敢攻击),就像现实生活中的公安局。

Eve 不是喜欢伪造公钥吗,Bob 这次就要请 Trent 为自己的公钥注册一张 “身份证” —— 数字证书。见证如见人,哦不对,见证如见公钥!以下是注册数字证书的过程:

df7bb85171df0a11e223507fd092d11fcd733463

●  Bob 请求 Trent 为自己的公钥 pub 注册一个证书。
●  Trent 收到请求后,用自己的私钥 pri ' 对 pub(以及身份信息) 进行签名,得到一个 sign。
●  Trent 把证书 certificate = pub + sign 颁发给 Bob。
●  Bob 把自己的证书 pub + sign 发给 Alice。
●  Alice 使用 Trent 的公钥 pub ' 对 sign 进行验签,如果校验成功则说明 pub 的确是 Bob 的公钥,因为她相信 Trent 的权威性。

Eve 不可能找 Trent 为她办一个 Bob 的数字证书,因为 Trent 不会同意的,就像警察蜀黍不会给我办一张别人的身份证一样。所以,Eve 无法伪造 Bob 的公钥。

同理,为了防止 Mallory 伪造公钥来冒充身份,Alice 也需要向 Trent 注册自己的公钥,得到一个数字证书,用于防止别人伪造公钥。

旁白:

●  考虑到非对称算法的效率问题,实际应用中一般是先对数据进行哈希,然后才用私钥对哈希值(摘要)进行签名。
●  Trent 在密码技术领域中一般称为 认证机构(Certification Authority,即 CA)。

● 以数字证书为基础,业界制定了一系列的规范和规格,比如由谁颁发证书、如何进行颁发、如何作废证书等,称为 公钥基础设施(Public-Key Infrastructure,即 PKI)。


原文发布时间为:2018-08-30

本文作者:覃应接

本文来自云栖社区合作伙伴“阿里技术”,了解相关信息可以关注“阿里技术”。

相关文章
|
存储 编解码 Linux
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解
|
存储 NoSQL 关系型数据库
支持中低频量化交易的单机数据平台
支持中低频量化交易的单机数据平台,使用InfluxDB存储实时交易数据,HDF5存储静态历史数据用于回测。
5965 0
|
4月前
|
前端开发 JavaScript 开发者
前端组件库——UIkit 知识点大全(一)
教程来源 UIkit是由YOOtheme开发的轻量级、模块化前端框架,提供30+可组合组件,支持按需加载与深度定制。基于Flexbox,采用Less预处理,uk-前缀避免样式冲突,MIT开源免费,适用于高性能、高定制化Web项目。
|
3月前
|
存储 运维 数据管理
告别“大海捞针”:OSS Vector Bucket 如何赋能媒资管理平台
在 AI 时代,媒资平台面临多模态数据爆炸式增长的管理挑战。阿里云 OSS Vector Bucket 提供统一向量存储与语义检索能力,支持 30 亿级素材秒级精准查找,打破数据孤岛,降低成本,助力内容创作提效降本。
390 11
|
3月前
|
人工智能 运维 自然语言处理
阿里云Agent Infra香港首秀:170+机构到场,1700+人次互动
2025年5月21日,阿里云应邀出席由香港生产力促进局(HKPC)主办的"Innovating Public Services, Driving the AI Transformation" 大型人工智能主题盛会。本次活动汇聚香港政产学研各界力量,聚焦人工智能技术在政府治理、社会服务及产业转型中的创新应用。阿里云作为亚太地区领先的云计算与人工智能全栈服务商,深度参与本次活动,通过展台展示、技术分享及高层对话等多种形式,全面呈现阿里云在Agent Infra及智能体应用领域的最新成果,进一步夯实了阿里云在香港及粤港澳大湾区市场的影响力。
452 2
|
编解码 JavaScript 开发工具
鸿蒙应用开发从入门到实战(二):DevEco Studio工具安装
大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,欢迎关注!
938 1
|
10月前
通义千问Qwen荣获“领先科技奖”
2025年11月6日,通义千问大模型荣膺世界互联网大会“领先科技奖”。凭借卓越性能与开源贡献,其已开源超300个模型,下载量超6亿次,衍生模型超17万,居全球首位。
1383 153
|
弹性计算 负载均衡 网络协议
阿里云SLB深度解析:从流量分发到架构优化的技术实践
本文深入探讨了阿里云负载均衡服务(SLB)的核心技术与应用场景,从流量分配到架构创新全面解析其价值。SLB不仅是简单的流量分发工具,更是支撑高并发、保障系统稳定性的智能中枢。文章涵盖四层与七层负载均衡原理、弹性伸缩引擎、智能DNS解析等核心技术,并结合电商大促、微服务灰度发布等实战场景提供实施指南。同时,针对性能调优与安全防护,分享连接复用优化、DDoS防御及零信任架构集成的实践经验,助力企业构建面向未来的弹性架构。
1124 76
|
机器学习/深度学习 人工智能 搜索推荐
AI技术在医疗领域的应用与挑战
本文深入探讨了人工智能(AI)技术在医疗领域的应用现状、面临的挑战以及未来发展趋势。随着科技的飞速发展,AI技术正逐渐渗透到医疗行业的各个环节,从疾病诊断、治疗方案制定到患者管理等,都展现出巨大的潜力和价值。然而,AI技术的广泛应用也带来了数据安全、伦理道德、法规监管等一系列挑战。本文旨在通过分析AI技术在医疗领域的实际应用案例,揭示其优势与不足,为推动AI技术在医疗领域的健康发展提供参考。
938 23
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
735 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序

热门文章

最新文章