从《秦时明月》聊聊密码学攻防

1

现在的编剧都懂密码学了?

“哎呀!不要挤了!”

“兄弟,再往里边儿挪挪。”

就这样,我赶上了这班地铁。早高峰的地铁总是很让人抓狂。我的身体随着车一会儿一晃。突然,目光被前方小哥的手机吸引了。我好奇地把头靠过去。这画面好熟悉,这不就是我之前很喜欢的......很喜欢的那个《秦时明月之万里长城》嘛!

我瞄了几眼他的手机,发现刚好演到第 24 集,瞬间被两个逼格满满的道具吸引了注意力——黑龙卷轴、千机铜盘。

640?wx_fmt=jpeg

黑龙卷轴乃大秦帝国最高机密文件,为了防止文件中的秘密泄露出去,里面的内容都是由千机密语编写而成。

千机密语术乃是阴阳家独创的一种高深莫测的语法,千变万化,是解开千机密语的唯一钥匙。千机铜盘天下间一共有两个,一个在咸阳宫嬴政的身边,另一个则被保存在桑海城将军府的千机楼中。

为了防止有人偷窃千机密码铜盘,千机楼周围除了安排重兵把守外,楼房内还设置了特殊机关——血蚕丝阵。血蚕丝每根丝都用剧毒浸泡过,一旦接触,立即毙命。

640?wx_fmt=png

咦?怎么开始讲上故事了。你别急!等我给你小小回顾下剧情,因为我发现了这里竟然有点奥秘。话说,我那会儿看的时候怎么没意识到呢~

故事中盗跖和大铁锤(剧中人物)从秦兵手中夺到了黑龙卷宗,准备交给班大师破解。

为了解开黑龙卷宗,盗跖决定冒险潜入将军府,盗取千机铜盘。他用了一招“电光神行步”越过戒备森严的将军府,凭借一块万年紫水晶,历经层层考验终于成功盗取千机铜盘。帮助班大师解开了黑龙卷宗中的秘密。

640?wx_fmt=png

“你下不下车啊?不下别挡着!”

我:“......”

2

千机密码最强解密

不看后悔的那种

因为想得太入迷,以至于我到站了都不知道。出了地铁我越想越觉得,这里的千机密码似曾相熟。于是我到了公司整理了一下剧情,并把它抽象成下面这幅流程图:

640?wx_fmt=png

细细地品味整个故事的情节,我惊奇地发现,这......这简直就是密码学的简单应用啊!

还顺便完整地讲述了如何对密钥存储管理系统(KMS)进行攻击,并破解密文的整个攻击过程。只是整个过程被涂抹了武侠的色彩,让我们看起来极具神秘感。看来现在的编剧都身怀绝技啊!我打算用密码学的术语把整个情节剖析一下,以此揭开它的神秘面纱。

通信双方:本次通信的双方可以认为是咸阳宫与桑海城,双方使用提前协商的对称密钥(千机铜盘)对通信的内容进行加密,已保证通信内容的机密性。

对称密钥:用于加密通信内容的工具,很明显就是千机铜盘,由于千机铜盘两个是一模一样的,因此可以认为是对称密钥。

KMS(密钥存储管理系统):用于管理密钥,防止攻击者窃取密钥的存储系统,千机楼就是这个密钥存储管理的系统。其实除了千机楼还有一个 KMS,那就是咸阳宫,用于保存另一个千机铜盘(密钥)。

编码:很多人都会觉得奇怪,怎么会突然冒出编码这么个东西!但是上述情节确实是涉及到编码,这个编码便是指经过特殊处理和保护的黑龙卷轴。有人可能会有疑问,为什么不是二次加密,而是编码呢?因为班大师破解的过程中未涉及到任何密钥相关的操作,而且破解的过程与盗取千机铜盘相比要容易的多。而且考虑到传输过程中便利性,我们认为把这个特殊的保护理解为编码更为合适,比如常用的 Base64 编码。

上面关于加密通信的整个过程就比较清晰了,可以抽象为下面这个过程:

640?wx_fmt=png

讲完了通信过程,下面我们就来看看这个密文是如何被破解的,其实就是一场如何攻破 KMS 并获取其中密钥的过程,因为获取传输过程中密文是一个相对简单的过程。

解码:只要了解编码的规则,进行解码是一件相对比较容易的事情。

窃取密钥:从剧情中对于千机楼这个 KMS 的描述可以看出,这个 KMS 的设计还是非常安全的,如果攻击者想要入侵这个 KMS 是非常困难的。如果想要入侵 KMS 就需要知道其内部的薄弱点,或者潜在的漏洞,此时最便捷的方式就是通过社工的方法策反内部人员,这个内部人员就是传说中的“剑圣”盖聂。通过内部人员获取潜在漏洞后,就需要构建 EXP (exploit漏洞利用),这个 EXP 可以认为那个万年紫水晶。通过这个 EXP ,在加上“资深黑客”盗跖,便成功的从 KMS 中获取了加密密钥。

获取密钥后解密密文便是一件相对容易的事情了,总结一下这次攻击之所以能够成功,社工发挥了至关重要的作用,除此之外还有以下两个因素:

a. 密钥存储管理系统(KMS)的设计不够完善,存在漏洞,从而导致系统的防护被绕过。

b. 通信方式的设计不够完善,使用固定的对称密钥加密通信消息的方式是不安全的,如果密钥泄漏,将会导致整个通信消息的泄漏。

3

对称加密该如何操作?

其实密码学早在古代时就有运用,现在的密码学已经成了体系。这其中有一些还与密码学的算法有关。

密码学经历了三个阶段。早期阶段即古典密码,这个时期是对整个加密过程保密的。之后到了现代密码阶段即对称加密,这个时期密码的安全性都依赖加密密匙。最后一个阶段是公钥密码,即非对称加密,这时候加密不用秘密秘密钥仅在解密的阶段使用。

对称加密作为最快速、最简单的一种加密方式,由于其效率高,所以被用在很多加密协议的核心当中。我呢,也来给大家说说这种加密方式。

对称加密:是使用同一密钥完成加密和解密的操作。在发展过程中有两种重要的算法一直沿用至今:DES、AES。

  • DES/3DES

DES 算法在 1977 年 1 月由美国国家标准局公布,是现代第一个对称加密算法。它属于分组密码,明文分组长度为 64 位,产生的密文长度也为 64 位,有效密钥长度为 56 位。

它是这么加密的?

a. 对输入分组进行固定的初始置换,使用 IP 表示,获得640?wx_fmt=png其中640?wx_fmt=png的长度均为 32 位,如下所示:

640?wx_fmt=png

b. 进行 16 轮迭代,迭代的轮密钥 ?i 是密钥 ? 的子串,长度为 48 位,其中? = 1,2,3, ⋯ ,16,获取 640?wx_fmt=png 的方式如下所示:

640?wx_fmt=png

c. 将经过 16 轮迭代得到的结果640?wx_fmt=png输入到 IP 的逆置换来消除初始置换的影响,最终得到 DES 的输出,即加密名的数据:

640?wx_fmt=png

解密过程中使用的轮密钥与加密过程中的相同,只是顺序发生了变化:

640?wx_fmt=png

那它又是如何解密的呢?

a. 将密文输入分组输入到初始置换函数 IP 中,获得640?wx_fmt=png其中640?wx_fmt=png的长度均为 32 位,如下所示:

640?wx_fmt=png

由加密过程可以得知:

640?wx_fmt=png

b. 通过640?wx_fmt=png获取640?wx_fmt=png如下所示:

640?wx_fmt=png

由此可得:

640?wx_fmt=png

c. 同理 640?wx_fmt=png ,进行 IP 逆变换从而获得明文输出分组,如下所示:

640?wx_fmt=png

DES 被认为仅有的最严重的缺点就是密钥长度太短,有效长度只有 56 位,易遭受穷举密钥攻击,即利用一个已知明文或密文对进行穷举测试,直至找到正确的密钥。

为了弥补 DES 的弱点,衍生了 3DES 算法,其原理是对明文先加密,再解密,最名再加密,3 次加解密操作推荐使用不吋的密钥,其有效密钥长度相当于 112 位。


由于 DES 的缺陷,严禁使用 DES 进行加解密操作,虽然 3DES 对 DES 进行了加强,但是其密钥长度仍不能满足安全的需求(要求密钥长度最小为 128 位),因此,除非强制要求,尽量不要使用 3DES。此外,由于需要经过 48 轮的变换,3DES 的加解密效率也比较低。

  • AES 

鉴于 DES 的缺陷,1997 年 1 月 2 日美国国家标准和技术研究所(NIST)宣布征集一个新的对称密钥分组密码算法取代 DES,新算法被命名为高级加密标准(AES)。

1997 年 9 月 12 日开始征集,2000 年 10 月 2 日 NIST 宣布选中 Rijindael 作为 AES,Rijindael 是由比利时密码学家 Daeman、Rijmen 共同设计,这种算法有以下面几个特征:

  • 属于分组密码

  • 分组长度和密钥长度均独立可变

  • 轮变换次数根据密钥及分组长度而定,如长度为 128 位的密钥需进行 10 轮变换,256 位则进行 14 轮变换

  • 轮密钥根据公开密钥表导出,不同轮密钥的长度不同

  • 算法公开

AES 加解密操作依赖 4 个可逆的函数:SubBytes、ShiftRows、MixColumns、AddRoundKey,咱们以密钥长度及分组长度均为 128 位为例说明加解密的过程。过程如下:

a. 生成明文输入分组矩阵,其中640?wx_fmt=png位:

640?wx_fmt=png

b. 生成轮密钥矩阵,其中640?wx_fmt=png位:

640?wx_fmt=png 

c. 进行轮密钥变换,共需要进行 10 轮变换,其中前 9 轮变换如下:

640?wx_fmt=png

最后 1 轮变换如下:

640?wx_fmt=png

d. State 矩阵既表示输入也表示输出,这样经过 10 轮变换,最终获取加密名的分组消息。解密过程中,由于轮变换的内部函数是可逆的,因此轮变换也是可逆的,以 crypto 表示密文分组矩阵,使用 RoundKey2 表示解密轮密钥,只需要通过下面两步运算即可获得明文分组消息。

① FinalRound (crypto, RoundKey2)

② Round (crypto, RoundKey2)

AES 是目前对称加密最常用的加密算法,使用时要求其最小密钥长度为 128 位,随着 AES 的出现,多重加密(如 3DES)变得不再必要,可变的密钥长度及分组长度为各种应用需求提供了可选的安全强度,同时密钥的减少不仅简化了安全协议和系统的设计,也提升了加密与解密的效率。

那么,在使用密码学的过程中应该注意哪些问题呢?使用什么样的密码学算法才是业界的最佳实践呢?了解更多安全漏洞防护知识,这本书可能会帮到你。

☟☟

640?wx_fmt=png

Web安全实用指南

640?wx_fmt=png

扫一扫,京东购

《Web漏洞防护》

作者:李建熠 

书中首先介绍了漏洞演示平台及一些常用的安全防护工具,然后对 OWASP Top 10 2017 中涉及的漏洞防护方式及防护工具进行了说明,接着介绍了如何通过 HTTP 响应头提升 Web 客户端自身对漏洞的防护能力,最后讨论了在无法更改应用程序源码的情况下,如何对应用进行外层的 WAF 防护。

文末畅聊

从事安全方面工作的小伙伴可以来说说,常见的 Web 应用的漏洞有哪些?或者给其他小伙伴安利一些解决 Web 漏洞的小技巧。非安全领域的小伙伴可以说说你知道的世界上著名的密码有哪些?以及那些你用过的最烂的密码。精选留言选出 5 位获得赠书。活动截至2019.6.24。

剧情参考:百度百科——千机密码铜盘

文图来源:《秦时明月之万里长城》豆瓣截图

推荐阅读:

这12本经典技术书,是时候C位出道了!

怕蛇的人如何学Python?

一个高度近视眼的深度学习实践

☟ 更多安全好书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
04-22 31

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值