在“密码”一词中,有些人记得他们的WiFi密码,最喜欢的站点的地址旁边的绿色锁以及进入他人邮件的难度。 其他人则回忆起近年来的一系列漏洞,其中包括语言缩写(DROWN,FREAK,POODLE ...),时尚的徽标和警告,它们会紧急更新浏览器。
密码学涵盖了所有这一切,但
本质不同。 底线介于简单和复杂之间。 有些事情很容易做,但是很难找回:例如,打破鸡蛋。 其他事情很容易做到,但是在缺少一个关键的小关键部分时很难找回来:例如,当“关键部分”成为关键时,打开锁着的门。 密码学研究这些情况以及如何在实践中使用它们。
在过去的几年中,加密攻击的收集已变成了一个充满科学文章公式的浮华徽标动物园,并给人一种普遍沮丧的感觉,那就是一切都坏了。 但是实际上,许多攻击都基于几种通用原则,无休止的公式页面通常归结为易于理解的想法。
在本系列文章中,我们将研究各种类型的密码攻击,重点是基本原理。 一般而言,并不是按顺序排列,但我们将告诉您以下内容:
- 基本策略:蛮力,频率分析,插值,降级和跨协议。
- 品牌漏洞: FREAK,CRIME,POODLE,DROWN,Logjam。
- 进阶策略: Oracle攻击(Woden攻击,Kelsey攻击); 中间相遇法,生日攻击,统计偏差(差分密码分析,积分密码分析等)。
- 第三方攻击及其近亲,失败的分析方法。
- 对公钥密码术的攻击:立方根,广播,相关消息,Coppersmith攻击,Polyg-Hellman算法,数值筛,Wiener攻击,Blechenchenbacher攻击。
这篇特别文章涵盖了以上内容,直至Kelsey的攻击。
基本策略
在没有特殊技术细节的情况下,几乎可以完全解释以下攻击,因此很简单。 我们以最简单的方式解释每种类型的攻击,而无需研究复杂的示例或高级用例。
其中一些攻击大多已失去相关性,并且已多年未使用。 其他人则是老朋友,在21世纪,他们仍然定期爬上毫无戒心的密码系统开发人员。 我们可以假设现代加密技术的时代始于IBM DES的出现,IBM DES是抵御此列表上所有攻击的首个密码。
简单的蛮力

加密方案由两部分组成:1)加密功能,它与密钥结合接收消息(纯文本),然后创建加密的消息-密文; 2)解密函数,它采用密文和密钥并创建明文。 加密和解密都应该易于通过密钥进行计算,而没有密钥则很难。
假设我们看到了密文,并尝试在没有任何其他信息的情况下对其进行解密(这称为仅密文攻击)。 如果我们以某种方式神奇地找到了正确的密钥,那么如果结果是一个合理的信息,我们可以轻松地验证它确实是正确的。
请注意,有两个隐式假设。 首先,我们知道如何执行解密,即密码系统如何工作。 这是讨论密码学时的标准假设。 将入侵者的密码实施细节隐藏起来似乎是一项额外的安全措施,但是一旦入侵者发现了这些细节,这种额外的安全性便会无形地,不可逆地丢失。 这是
凯尔霍夫斯的
原则 :落入敌人之手不应造成任何不便。
其次,我们假设正确的密钥是唯一可以导致合理解密的密钥。 这也是一个合理的假设; 如果密文比密钥长得多并且被很好地读取,则执行该命令。 通常,这是在现实世界中发生的事情,除了
巨大的不切实际的密钥或
其他欺诈之外,最好将其搁置 (如果您不喜欢我们不予理the,请参见定理3.8)。
鉴于以上所述,出现了一种策略:检查每个可能的密钥。 这就是所谓的蛮力攻击,这样的攻击可以保证针对所有实用密码-最后。 例如,蛮力足以破解
Caesar的
密码 ,这是一种古老的密码,其中的密钥是字母中的一个字母,这意味着可能有20个以上的密钥。
不幸的是,对于密码分析者而言,增加密钥大小可以防止暴力破解。 随着密钥大小的增长,可能的密钥数量呈指数增长。 对于现代的密钥大小,简单的蛮力根本不可行。 为了理解我们的意思,让我们以2019年中最快的已知超级计算机:IBM的
Summit为例 ,其峰值性能约为每秒10
17次操作。 如今,典型的密钥长度为128位,这意味着
2,128种可能的组合。 枚举所有密钥需要Summit超级计算机占用大约7800倍的宇宙年龄。
应该将蛮力视为一种历史的好奇心吗? 一点也不:它是密码分析食谱中的必要成分。 很少发现如此弱的密码,以至于只有通过明智的攻击才能破解它们,而无需在某种程度上使用武力。 许多成功的黑客首先使用算法方法来削弱目标密码,然后再进行暴力破解。
频率分析

大多数文本都不是乱码。 例如,在英文文本中,有许多字母“ e”和文章“ the”; 在二进制文件中-很多空字节作为信息之间的占位符。 频率分析是利用这一事实的任何攻击。
易受此攻击攻击的密码的一个典型示例是简单的替换密码。 在此密码中,密钥是替换所有字母的表格。 例如,“ g”被替换为“ h”,“ o”被替换为j,因此,单词“ go”变成了“ hj”。 由于存在太多可能的查找表,因此很难用简单的蛮力破解这种密码。 如果您对数学感兴趣,则有效密钥长度约为88位:
log2(26!) 。 但是频率分析通常可以很快完成工作。
考虑以下使用简单替换密码处理的密文:
XDYLY ALY UGLY XDWNKE WN DYAJYN ANF YALXD DGLAXWG XDAN ALY FLYAUX GR WN OGQL ZDWBGEGZDO
由于
Y
是常见的,包括许多单词的结尾,因此我们可以暂时假定这是字母
e
:
XDeLe ALe UGLe XDWNKE WN DeAJeN ANF eALXD DGLAXWG XDAN ALe FLeAUX GR WN OGQL ZDWBGEGZDO
在几个单词的开头重复
XD
对。 特别是,XDeLe的组合明确暗示了
these
或
there
,因此我们继续:
TheLe ALe UGLe thwnke WN HEAJEN ANF EALth DGLAtWG THAL ALE FLEAUt GR WN OGQL ZDWBGEGZDO
此外,假设
L
对应于
r
,
A
-
a
等。 您可能需要进行几次尝试,但是与完全蛮力相比,此攻击将尽快恢复源文本:
在天地间的比喻中,还有比您的哲学梦想更多的东西
对于某些人来说,解决此类“密码”的方法是一个令人着迷的爱好。
频率分析的想法比乍看起来更基本。 它适用于更复杂的密码。 纵观整个历史,各种密码设计都尝试使用“多字母替换”抵御这种攻击。 在此,在加密过程中,字母替换表以取决于密钥的复杂但可预测的方式更改。 所有这些密码曾经被认为难以破解。 但是适度的频率分析最终击败了所有人。
历史上最雄心勃勃的多字母密码,也许是最著名的,是第二次世界大战中的Enigma密码。 与以前的版本相比,它相对复杂,但是由于长期的辛勤工作,英国密码分析家使用频率分析对其进行了破解。 当然,如上所述,他们无法进行优雅的攻击。 他们必须比较众所周知的开放文本和加密文本对(所谓的“明文攻击”),甚至要挑逗Enigma用户对某些消息进行加密并分析结果(“基于选定明文的攻击”)。 但是,这不利于击败敌人的敌人和沉没的潜水艇的命运。
胜利之后,频率分析从密码分析的历史中消失了。 现代数字时代的密码设计用于位,而不是字母。 更重要的是,这些密码的设计是对后来被称为
Schneier法则的事物有一种阴郁的理解:任何人都可以创建自己无法破解的加密算法。 仅仅使加密系统
看起来复杂还不够:为了证明其价值,它必须经过许多密码分析专家的无情安全审查,他们将尽一切可能破解密码。
初步计算

以人口为200,000的假想城市Precom Heights为例。 这座城市的每个房屋平均有贵重物品,价值30,000美元,但不超过50,000美元,Precom的安全市场由ACME Industries垄断,后者生产传奇的土狼(tm)级门锁。 根据专家分析,只有非常复杂的假设机器才能打破土狼级锁,而这种创建需要大约五年的时间和50,000美元的投资。 这个城市安全吗?
很有可能不会。 最后,一个雄心勃勃的罪犯将出现。 他会这样说:“是的,我将承担大量的前期费用。 五年的耐心期望,和5万美元,但在完成工作后,我将可以使用
这座城市的所有财富 。 如果我正确地打牌,这项投资将获得很多回报。”
同样,在密码学中。 针对特定密码的攻击会遭受成本和收益的残酷分析。 如果该比率合适,则不会发生攻击。 但是立即攻击许多潜在受害者的攻击几乎总能带来回报,在这种情况下,最佳设计实践是假设它们从第一天开始。 本质上,我们是墨菲定律的加密版本:“所有能够真正破坏系统的事物都会破坏系统。”
通过初步计算就容易受到攻击的密码系统的最简单示例是使用恒定算法而不使用密钥的密码。
凯撒密码 (
Caesar cipher)就是这种情况,
该密码只是简单地将字母表中的每个字母向前移动三个字母(表是循环的,因此字母表中的最后一个字母会用第三个字母加密)。 同样,这里又体现出了刻赤霍夫斯(Kerchhoffs)原则:一旦系统被黑客入侵,它就会永远被黑客入侵。
这个概念很简单。 即使是新手密码系统开发人员也可能会意识到威胁并做出相应的准备。 如果您查看密码学的演变,那么这种攻击对于大多数密码都是不合适的,从凯撒密码的第一个改进版本开始,一直到多字母密码的衰落。 此类攻击只是随着现代加密技术的出现才回来的。
该收益归因于两个因素。 首先,最后,出现了相当复杂的密码系统,在这种系统中,黑客攻击后被利用的可能性并不明显。 其次,密码学如此广泛,以至于成千上万的外行人每天都在决定在哪里重复使用密码学以及在哪部分重复使用。 专家们意识到风险并发出警报已经过了一段时间。
记住带有预计算的攻击:在本文的结尾,我们将考虑现实生活中的两个加密示例,它们在其中发挥了重要作用。
插补
这是著名的侦探福尔摩斯,对不幸的沃森博士进行插值攻击:
我立即猜到你来自阿富汗……我的想法是:“这个人按类型是医生,但他有军事力量。 所以是军事医生。 他刚从热带来到这里-他的脸很黑,但这不是他皮肤的自然阴影,因为他的手腕白了很多。 瘦弱的脸显然遭受了很多疾病的折磨。 他的左手受伤-他握着它静止不动,有点不自然。 在热带地区,英国的医生在哪里可以遭受苦难并受伤? 当然,在阿富汗。” 整个思路花了一秒钟。 所以我说你来自阿富汗,你感到惊讶。
从每个证据中,福尔摩斯只能提取很少的信息。 他只有共同研究才能得出结论。 插值攻击的工作原理类似,它探索由于应用相同密钥而获得的已知的公开和加密文本对。 从每对中分别提取观察值,这使我们可以得出关于该键的一般结论。 所有这些结论都是模糊且无用的,直到它们突然达到临界质量并得出唯一可能的结论:无论它多么令人难以置信,它都必须是真实的。 之后,要么打开密钥,要么解密过程变得如此成熟以至于它可以被复制。
我们用一个简单的例子说明插值的工作原理。 假设我们想阅读敌人鲍勃的个人日记。 他借助一个简单的密码系统对日记中的每个数字进行加密,这是他从《密码学的模拟》杂志的广告中学到的。 系统的工作方式如下:Bob选择他喜欢的两个数字:
M 和
N 。 从现在开始,加密任何数字
x 他计算
Mx+N 。 例如,如果Bob选择
M=3 和
N=4 然后那个数字
2 加密为
3∗2+4=10美 。
假设我们在12月28日注意到鲍勃在日记中刮了些东西。 当他完成后,我们静静地接受它并查看最后一个条目:
日期: 235/520
亲爱的日记:
今天是美好的一天。 64
天后,我与住在843
公寓中的爱丽丝约会。 我真的认为她可以26
岁!
由于我们非常认真地打算跟Bob约会(在这种情况下,我们已经15岁了),所以找到日期以及Alice的地址至关重要。 幸运的是,我们注意到鲍勃的密码系统容易受到插值攻击。 我们可能不知道
M 和
N ,但我们知道今天的日期,因此我们有两对“纯文本-密文”。 也就是说,我们知道
12 加密
235 和
27 -在
520 。 我们写的是:
M∗12+N=235
M∗27+N=520
由于我们15岁,所以我们已经知道两个方程组的两个未知数,在这种情况下,这足以找到
M 和
N 没有任何问题。 每个“明文-密文”对都对Bob的密钥施加了约束,而两个约束加在一起就足以完全恢复密钥。 在我们的示例中,答案
M=19 和
N=7 (在 19x+7=26 x=1 ,因此日记中的26
对应于单词“一个”,即“相同”-大约。 。) 。
当然,插值攻击不限于这样的简单示例。 归结为一个易于理解的数学对象和参数列表的每个密码系统都有插值攻击的风险-对象越容易理解,风险就越高。
初学者经常抱怨密码学是“设计尽可能丑陋的事物的艺术”。 插值攻击可能主要归咎于攻击。 鲍勃既可以使用优雅的数学设计,也可以与爱丽丝保持约会的机密性-但是,通常您不能两者兼得。 当我们最终进入公共密钥密码学主题时,这将变得非常清楚。
跨协议/降级

在电影“欺骗的幻觉”(2013)中,一群魔术师试图欺骗腐败的保险业巨头亚瑟·特雷斯勒的整个状态。 要访问Arthur的银行帐户,魔术师必须提供他的用户名和密码,或者让他亲自出现在银行中并参与该计划。
两种选择都非常困难。 这些家伙习惯于在舞台上表演,而不是参加情报行动。 因此,他们选择了第三个选项:其同伙给银行打电话,并假装为亚瑟。 银行询问几个问题以验证身份,例如叔叔的名字和第一个宠物的名字。 在
聪明的社会工程学的帮助下,我们的英雄们
可以轻松地从亚瑟那里获得这些信息 。 从现在开始,出色的密码安全性不再重要。
(根据我们亲自检查并确认的城市传说,密码学家Eli Behem曾经遇到一位银行柜员,他坚持提出一个秘密问题。当收银员问母亲的祖母名字时,比厄姆开始规定:“大写X,小y,三... ”)。
如果并行使用两种加密协议来保护同一资产,则加密方法是相同的,而其中一种则比另一种弱得多。 当攻击较弱的协议而未触及更强的协议时,所得到的系统将容易受到跨协议攻击。
在某些复杂的情况下,仅使用较弱的协议来联系服务器是不够的,并且需要合法客户端的非自愿参与。 这可以使用所谓的降级攻击来组织。 要了解这种攻击,假设我们的魔术师比电影中的任务更艰巨。 假设一个银行雇员(出纳员)和亚瑟有一些无法预料的情况,因此发生了这样的对话:
防盗:您好? 这是亚瑟·特雷斯勒。 我想重设密码。
收银员:很好。 请查看您的个人密码簿,第28页,单词3。以下所有消息都将以该单词作为密钥进行加密。 PQJGH。 LOTJNAM PGGY MXVRL ZZLQ SRIU HHNMLPPPV ...
饼干:嘿,等等。 真的有必要吗? 我们不能像普通人那样说话吗?
收银员:我不建议这样做。
饼干:我只是...听着,我过得很糟糕,好吗? 我是VIP客户,不打算研究这些愚蠢的代码书。
收银员:好。 如果您坚持,特雷斯勒先生。 你要什么
饼干:请,我想把我所有的钱转移给亚瑟·特雷斯勒国家受害者基金。
(暂停)
收银员:好的。 请提供大笔交易的PIN码。
饼干:我是什么?
收银员:根据您的个人要求,这种大小的交易需要输入PIN才能进行大笔交易。 此代码是在开设帐户时提供给您的。
饼干: ...我失去了他。 真的有必要吗? 你不能批准这笔交易吗?
收银员:无。 对不起,特雷斯勒先生。 同样,这是您要求的安全措施。 如果您愿意,我们可以将新的PIN码发送到邮箱。
我们的英雄推迟了手术。 他们听着Tressler的几笔主要交易,希望能听到密码。 但每次对话都变成加密的胡言乱语,然后才发出有趣的声音。 最后,该计划有一天生效。 他们耐心地等待着Tressler必须通过电话完成一项重大交易的那一刻,他接通了电话,然后...
Thressler:您好。 我想发出远程交易。
收银员:很好。 请查看您的个人密码书,第...页
(饼干按下按钮;收银员的声音变成听不见的声音)。
收银员: -#@ $#@ $#* @ $$ @#*将使用此单词作为密钥进行加密。 AAAYRR PLRQRZ MMNJK LOJBAN ...
Thressler:对不起,我不太了解。 再过一次 哪一页? 这个词是什么?
收银员:这是页面@#$ @#* $)#*#@()#@ $(#@ * $(#@ *)。
Thressler:什么?
收银员:字数二十@ $#@ $#%#$。
Thressler:认真! 够了! 您和您的安全协议是某种马戏团。 我知道你可以和我正常交谈。
收银员:我不建议...
Thressler:我也不建议您浪费我的时间。 在解决电话线问题之前,我不想听到更多有关此的信息。 我们可以安排这笔交易吗?
收银员:是的。 好啊 你要什么
Thressler:我想转账$ 20,000到Lord Business Investments,帐号...
收银员:请稍等。 这很重要。 请提供大笔交易的PIN码。
Thressler:什么? 哦当然 1234。
这是坠落攻击。 较弱的协议“只能直接说”是在紧急情况下的
一种选择 。 但是我们在这里。
您可以问一个问题,谁将在他们的正确想法下设计出一个真正的类型为“安全,除非另有要求”,如上所述。 但是,就像一家虚拟银行冒着风险挽救那些不喜欢加密技术的客户一样,整个系统通常也倾向于对安全性无动于衷甚至是公开敌视的要求。
这就是1995年SSLv2发生的故事。 美国政府很早就开始考虑将密码术作为最好远离外部和内部敌人的武器。 这些代码片段已分别获准从美国出口,但经常会故意削弱该算法。 Netscape是最流行的浏览器Netscape Navigator的开发者,仅使用最初易受攻击的512位RSA密钥(对于RC4为40位)提供SSLv2许可。
到本世纪末,规则已经放宽,并且可以广泛使用现代加密技术。 但是,由于相同的惯性可以维持对任何过时的系统的支持,因此客户端和服务器多年来一直支持弱化“导出”密码。 客户认为他们可能会遇到不支持任何其他功能的服务器。 服务器也做同样的事情。 当然,SSL要求客户端和服务器在拥有最佳协议时永远不要使用弱协议。 但是对于提雷斯勒和他的银行来说,同样的前提是有效的。
该理论在Microsoft和
INRIA研究人员发现的2015年又一次动摇SSL协议安全性的两次高调攻击中找到了应用。 首先,在2月,披露了FREAK攻击的详细信息,并在三个月后披露了另一种类似的称为Logjam的攻击,我们将在继续进行公共密钥密码学攻击时对其进行详细讨论。

当研究人员分析客户端/服务器TLS的实现并发现一个奇怪的错误时,便出现了漏洞
FREAK (也称为“ Smack TLS”)。 在这些实现中,如果客户端甚至不要求弱导出密码,但是服务器仍然使用此类密钥进行响应,则客户端说“ Okay”,然后切换到一组弱密码。
当时,每个人都认为出口加密技术已经过时且被禁止使用,因此,这次攻击真是令人震惊,并影响了许多重要领域,包括白宫,美国税务局和国家安全局。 更糟糕的是,事实证明,许多易受攻击的服务器通过重用相同的密钥而不是为每个会话创建新的密钥来优化性能。 降低协议后,这使使用预计算进行攻击成为可能:窃取一个密钥仍然相对昂贵(发布时为100和12个小时),但是攻击连接的实际成本却大大降低了。 从现在起,只需要拾取服务器密钥一次并破解所有后续连接的密码就足够了。
在继续之前,我们需要提到一种高级攻击...
甲骨文攻击
Moxie Marlinspike最出名的是跨平台Signal加密信使之父。
但就我个人而言,我们喜欢他鲜为人知的创新之一- 密码厄运原理(Cryptographic Doom Principle)。稍微说一下,我们可以这样说:“如果协议对来自潜在恶意源的消息执行任何加密操作,并且根据结果而表现不同,则注定要失败。”或者以一种更尖锐的形式:“不要从敌人那里获取信息进行处理,如果必须的话,至少不要显示结果。”抛开缓冲区溢出,指令注入等;它们超出了此讨论的范围。由于该协议的行为完全符合其应有的事实,因此违反“傻瓜原则”会导致严重的密码学破解。例如,采用带有易受攻击的替代密码的虚拟设计,然后演示可能的攻击。尽管我们已经看到使用频率分析攻击替代密码,但是这不仅仅是“破解相同密码的另一种方式”。相反,oracle攻击是更现代的发明,适用于频率分析失败的许多情况,我们将在下一部分中对此进行演示。在这里,选择一个简单的密码只是为了使示例更清楚。因此,爱丽丝和鲍勃使用简单的替换密码进行通信,该密码使用他们唯一已知的密钥。他们对邮件的长度非常严格:它们的长度恰好是20个字符。因此,他们同意,如果有人要发送短消息,则应在消息末尾添加一些虚拟文本,以使其恰好是20个字符。经过一番讨论后,他们决定,他们将只接受以下虚拟文本:a
,bb
,ccc
,dddd
,等。因此,任何所需长度的已知虚拟文本...当爱丽丝或鲍勃收到消息时,他们首先检查消息长度是否正确(20个字符),后缀是否为正确的伪文本。如果不是这种情况,则它们会以相应的错误消息进行响应。如果文本和虚拟文本的长度正确,则收件人将读取消息本身并发送加密的响应。在攻击过程中,攻击者冒充鲍勃,并将假消息发送给爱丽丝。消息-完全废话-攻击者没有密钥,因此他无法伪造有意义的消息。但是,由于该协议违反了厄运原理,因此攻击者仍然可以陷阱Alice,以便她可以泄露有关密钥的信息,如下所示。: PREWF ZHJKL MMMN. LA
: .
: PREWF ZHJKL MMMN. LB
: .
: PREWF ZHJKL MMMN. LC
: ILCT? TLCT RUWO PUT KCAW CPS OWPOW!
, , , C
a
, .: REWF ZHJKL MMMN. LAA
: .
: REWF ZHJKL MMMN. LBB
: .
…
: REWF ZHJKL MMMN. LGG
: .
: REWF ZHJKL MMMN. LHH
: TLQO JWCRO FQAW SUY LCR C OWQXYJW. IW PWWR TU TCFA CHUYT TLQO JWFCTQUPOLQZ.
再次,破解者不知道爱丽丝刚才说了什么,但注意到H必须与b匹配,因为爱丽丝接受了伪文本。依此类推,直到攻击者发现每个角色的含义为止。乍一看,该方法类似于基于选定明文的攻击。最后,攻击者选择了密文,然后服务器乖乖地处理了它们。使这些攻击在现实世界中可行的主要区别在于,攻击者不需要访问实际的解密-只需服务器的响应,甚至与“错误的虚拟文本”一样无害即可。尽管这种特定的攻击是有启发性的,但不应过分关注“虚拟文本”方案的细节,所使用的特定密码系统或攻击者发送的消息的确切顺序。主要思想是爱丽丝如何根据纯文本的属性做出不同的反应,并且在不验证是否确实从受信任方接收到相应的加密文本的情况下进行了此操作。因此,爱丽丝允许攻击者从其响应中提取秘密信息。在这种情况下,有很多更改。爱丽丝会做出反应的字符,行为上的差异甚至所使用的密码系统。但是原理将保持不变,并且整个攻击将以一种或另一种形式保持可行。此攻击的基本实现有助于检测到几个安全错误,我们将很快解决这些错误。但是首先应该学习一些理论教训。如何在能够处理真实现代密码的攻击中使用虚构的“爱丽丝脚本”?即使在理论上,这是否有可能?1998年,瑞士密码学家Daniel Bleichenbacher肯定地回答了这个问题。他使用特定的消息方案在广泛使用的RSA公钥密码系统中演示了oracle攻击。在某些RSA实现中,服务器将根据明文是否与方案匹配来响应不同的错误消息。足以发起攻击。四年后的2002年,法国密码学家Serge Vaudenay演示了一次甲骨文攻击,几乎与上述爱丽丝脚本中描述的攻击相同-只是他破解了一整套颇受人尊敬的现代密码,而不是虚拟密码,使用。特别是,Wodene的攻击目标是在所谓的“ CBC加密模式”中使用具有固定输入大小的密码(“分组密码”)和某种流行的填充方案,该方案基本上等同于爱丽丝脚本中的密码。同样在2002年,Twofish的合著者美国密码学家John Kelsey-在对消息进行压缩然后对其进行加密的系统上提出了各种Oracle攻击。其中最引人注目的是攻击,它利用以下事实:通常可以从密文的长度中得出明文的原始长度。从理论上讲,这允许还原原始原始文本的一部分的oracle攻击。接下来,我们对Woden和Kelsey攻击进行更详细的描述(当我们继续对公钥密码术进行攻击时,我们将对Bleichenbacher攻击进行更详细的描述)。尽管我们付出了所有努力,但案文还是有些技术性。因此,如果以上内容对您而言足够,请跳过接下来的两节。沃登的攻击
要了解Woden攻击,您首先需要更多地讨论分组密码和加密模式。如已经提到的,“块密码”是接受密钥并输入一定固定长度(“块长度”)并产生相同长度的加密块的密码。分组密码被广泛使用并且被认为是相对安全的。现在退休的DES被认为是第一种现代密码,它是块状的。如上所述,当今广泛使用的AES也是如此。不幸的是,分组密码有一个明显的弱点。典型的块大小为128位或16个字符。显然,现代加密技术需要处理更大的输入数据,这就是加密模式出现的地方。加密模式本质上是一种hack:这是一种以某种方式将仅接受特定大小的输入数据的分组密码应用于任意长度的输入数据的方法。Woden攻击的重点是流行的CBC操作模式(密码块链接,密文块耦合模式)。攻击将基本密码视为不可思议的黑匣子,并完全绕过其安全性。这是显示CBC模式如何工作的图:
带圆圈的加号表示XOR操作(异或)。例如,接收到第二个密文块:- 对第二个明文块和第一个密文块执行XOR操作。
- 使用密钥使用块密码对接收到的块进行加密。
由于CBC如此密集地使用二进制XOR操作,让我们花点时间回顾一下它的一些属性:- 幂等: 甲⊕ 0 = 甲
- 可交换性: 甲⊕ 乙= 乙⊕ 甲
- 关联性: 甲⊕ (乙⊕ Ç )= (甲⊕ 乙)⊕ Ç
- 自我可逆性: 甲⊕ 甲= 0
- 字节字节:的字节n (甲⊕ 乙) =(的字节n ) ⊕(第n个字节,乙 )
通常,这些属性意味着,如果我们有一个包含XOR运算和一个未知数的方程,则可以求解该方程。例如,如果我们知道甲⊕ X = 乙具有未知X和著名 和
B,那么我们可以依靠上面的属性来求解X 。
在等式两边应用XOR 我们得到 X = 甲⊕ 乙 。
稍后,所有这些都将变得非常相关。我们的爱丽丝脚本和Woden攻击之间有两个小区别,一个大区别。两个小调:- 在该方案中爱丽丝想到的是,开口端的文字
a
,bb
,ccc
等等。在Woden攻击中,受害者希望明文以字节N结尾N次(即十六进制的01或02 02或03 03 03,依此类推)。这纯粹是外观上的差异。
- 在爱丽丝的脚本中,很容易说出爱丽丝是否已收到消息,以回应“错误的虚构文字”。在Woden攻击中,需要进行更多分析,并且在受害者方面进行准确实施很重要;为了简洁起见,我们认为这种分析仍然是可能的。
主要区别:这是主要区别-理解Woden攻击的最后一个难题,让我们思考一下为什么以及如何组织针对CBC的oracle攻击。假设给出了247个块的CBC密文,我们想对其解密。我们可以像以前将假消息发送给Alice一样,将假消息发送给服务器。服务器将为我们解密消息,但不会显示解密信息-再次,如在Alice的情况下,服务器将仅报告一小部分信息:以纯文本格式是否有效。请注意,在爱丽丝的场景中,我们具有以下关系:我们称其为Alice方程。我们控制了密文;服务器(爱丽丝)合并了关于接收到的明文的模糊信息;这样我们就可以显示有关最后一个因素-键的信息。以此类推,如果我们可以找到CBC脚本的这种连接,那么我们也可以在那里提取一些秘密信息。幸运的是,确实存在可以使用的关系。考虑块密码解密最终调用的输出,并将此数据指定为w ^ 。
也表示明文块 P 1,P 2,。。。和密文块Ç 1,Ç 2,。。。 。
再看一下CBC图表,发现结果如下:C 246 → W = P 247
我们称其为“ CBC方程”。在爱丽丝的场景中,控制密文并观察有关相应明文的信息泄漏,我们能够组织一次攻击,恢复了方程式的第三项-密钥。在CBC场景中,我们还控制密文并观察相应明文中的信息泄漏。如果类推成立,我们可以获得有关w ^ 。
假设我们真的恢复了 W,那又怎样?好了,那么我们就可以立即打印出最后一个纯文本块(P 247)只需输入C 246(我们有)并收到CBC方程中的 W。因此,我们对总体攻击计划持乐观态度,现在该是制定细节的时候了。我们非常注意服务器如何泄漏明文信息。在爱丽丝的脚本中,发生泄漏是因为爱丽丝仅在以下情况下回答了正确的消息:以一行结尾a
(或bb
,以此类推,但意外触发这些条件的机会很小)。与CBC类似,服务器仅当且仅当接受填充Ç 246 ⊕ W¯¯端十六进制。因此,让我们尝试相同的技巧:使用我们自己的假值发送假密文01
C 246,直到服务器接受填充为止。当服务器接受我们的虚假邮件之一的填充时,这意味着:Ç 246 ⊕ w ^ = 上的端部从十六进制01数据
现在使用XOR字节属性:(C 246的最后一个字节 )⊕ (W的最后一个字节 )= 十六进制01
我们认识第一和第三位成员。而且我们已经看到,这使您可以还原剩余的成员-来自w ^ :
(W的最后一个字节 )= (C 246的最后一个字节 )⊕ (十六进制01 )
它还通过CBC方程和byte属性为我们提供了最后一个明文块的最后一个字节。我们最终可能会感到满意,并且对我们攻击了理论上强健的密码感到满意。但实际上,我们可以做的更多:我们可以真正还原整个文本。这需要一定的技巧,该技巧不在Alice的原始脚本中,并且不包含在oracle攻击的前提条件中,但是该方法仍然值得探索。要理解它,首先请注意,由于得出了最后一个字节的正确值W,我们有了新的能力。现在,当伪造密文时,我们可以控制相应明文的最后一个字节。同样,这是由于CBC方程和byte属性:(C 246的最后一个字节 )⊕ (W的最后一个字节 )= P 247的最后一个字节
由于我们现在知道第二个术语,因此我们可以使用对第一个术语的控制来控制第三个术语。我们只是计算:(伪 C 246的最后一个字节)= (P 247的所需最后一个字节 )⊕ (W的最后一个字节 )
我们之前无法执行此操作,因为我们还没有最后一个字节 w ^ 。
这将如何帮助我们?现在假设我们将创建所有密文,以便在相应的明文中最后一个字节相等02
。现在,仅当纯文本以结尾时,服务器才接受填充02 02
。由于我们纠正了最后一个字节,因此只有在纯文本的倒数第二个字节也为02的情况下,才会发生这种情况。我们继续发送伪密文块,更改倒数第二个字节,直到服务器接受其中一个的填充。此时,我们得到:(伪 C 246的倒数第二个字节)⊕ (W的倒数第二个字节 )= 十六进制02
然后我们恢复倒数第二个字节 W与最后恢复的完全相同。我们以同样的方式继续:我们将明文的最后两个字节固定在上,对字节末尾的第三个字节重复此攻击,依此类推,最终完全恢复03 03
w ^ 。
那其余的文字呢?请注意,值W实际上是 。
我们可以放其他任何块 C 247,但攻击仍将成功。实际上,我们可以要求服务器做对于任何数据。至此,游戏结束了-我们可以解密任何密文(再次查看CBC解密图以了解情况;并注意向量IV公开可用)。这种特殊的方法在预言的攻击中起着至关重要的作用,我们将在以后遇到。凯尔西攻击
态度敏锐的约翰·凯尔西(John Kelsey)提出了构成许多可能攻击基础的原则,而不仅仅是针对特定密码的特定攻击的细节。他在2002年的文章中研究了对加密压缩数据的可能攻击。您以为仅进行信息攻击还不够,是否在加密之前对数据进行了压缩?事实证明足够了。这个惊人的结果归因于两个原理。首先,明文的长度和密文的长度之间有很强的相关性;对于许多密码来说,完全相等。其次,在执行压缩时,压缩消息的长度与明文的“噪声”程度(即非重复字符的比例)之间也存在很强的相关性(技术术语为“大熵”)。要了解实际的原理,请考虑两个纯文本:清除文字1: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
清除文字2: ATVXCAGTRSVPTVVULSJQHGEYCMQPCRQBGCYIXCFJGJ
假设两个纯文本都经过压缩然后加密。您将得到两个生成的密文,并且必须猜测哪个密文与哪个明文匹配:密文1: PVOVEYBPJDPVANEAWVGCIUWAABCIYIKOOURMYDTA
密文2: DWKJZXYU
答案很明确。在明文中,只有明文1可以压缩到第二个密文的微薄长度。我们发现压缩算法,加密密钥甚至密码本身一无所知。与可能的密码攻击的层次结构相比,这是一种疯狂。凯尔西进一步指出,在某些异常情况下,该原理也可用于进行预言攻击。特别是,他描述了如果攻击者可以强迫服务器加密表单数据(明文,然后是X,而他控制X并且可以某种方式检查加密结果的长度)。再次,与其他oracle攻击一样,我们具有以下比率:加密(压缩(纯文本后跟X ))= 密文
同样,我们控制一个成员( X),我们看到有关另一个成员(密文)的少量信息泄漏,并尝试恢复后者(明文)。尽管有类推,但与我们看到的其他Oracle攻击相比,这是一种不寻常的情况。为了说明这种攻击如何发挥作用,我们使用了我们刚想到的虚拟压缩方案:TOYZIP。它搜索早先出现在文本中的文本行,并用三个占位符字节替换它们,这些占位符字节指示在哪里可以找到该行的较早实例以及该行出现在其中的次数。例如,与原始的15个字节相比,可以压缩一个长度为13个字节的字符串。假设攻击者试图恢复表单的明文helloworldhello
helloworld[00][00][05]
password=...
密码本身未知的地方。根据Kelsey的攻击模型,攻击者可能会要求服务器进行压缩,然后对表单消息进行加密(明文,然后是X)其中X是自由文本。服务器完成后,它将报告结果的长度。攻击如下:饼干:请压缩并加密纯文本,不要填充任何内容。
服务器:结果长度14.
破解者:请压缩和加密添加的纯文本password=a
。
服务器:结果长度18。
饼干手注意:[原始14] + [替换的三个字节password=
] +a
饼干:请压缩和加密您添加到的纯文本password=b
。
服务器:结果的长度18.
破解者:请压缩和加密添加的明文password=
。
服务器:结果的长度17。
破解者注意:[原始14] + [替换的三个字节password=c
]。假定原始明文包含一个字符串password=c
。也就是说,密码以字母开头c
饼干:请压缩和加密您添加到的纯文本password=a
。
服务器:结果长度18。
饼干手注意:[原始14] + [替换的三个字节password=
] +a
饼干:请压缩和加密您添加到的纯文本password=b
。
服务器:结果长度18。
(...一段时间后...)饼干:请压缩和加密您添加到的纯文本password=
。
服务器:结果的长度17。
破解者注意:[原始14] + [替换的三个字节password=co
]。按照相同的逻辑,破解者得出的结论是密码以字母开头co
,依此类推,直到整个密码还原为止。读者认为这只是纯粹的学术练习而被原谅,这样的攻击情形在现实世界中将永远不会发生。las,正如我们将很快看到的那样,在密码学中最好不要保证。品牌漏洞:CRIME,POODLE,DROWN
最后,在对该理论进行了详细研究之后,我们可以看到这些方法如何用于实际的密码攻击。犯罪
如果攻击针对的是浏览器和受害者的网络,则情况会更简单,而事情也会更复杂。例如,很容易看到受害者的路况:只需与她坐在同一个带有WiFi的咖啡馆里。因此,通常建议潜在的受害者(即每个人)使用加密连接。这将更加困难,但是仍然有可能代表受害人向某些第三方站点(例如Google)执行HTTP请求。攻击者必须使用将发出请求的脚本来诱使受害者进入恶意网页。 Web浏览器将自动提供适当的会话cookie。好像很棒如果Bob已登录evil.com
,则该网站上的脚本是否可以要求Google通过电子邮件将Bob的密码发送给attacker@evil.com
?好吧,从理论上讲,是的,但实际上不是。这种情况称为跨站请求伪造(CSRF)攻击,并且在90年代中期流行。今天,如果你evil.com
尝试这一招,谷歌(或任何有自尊的网站),通常响应:“好吧,但你的CSRF令牌此次交易将是......嗯......
。请重复此号码。”现代浏览器使用一种称为“同源策略”的策略,根据该策略,站点A上的脚本无法访问网站B发送的信息。因此,脚本evil.com
无法将请求发送至google.com
,但无法读取答案或实际完成交易。我们必须强调,如果Bob不使用加密连接,那么所有这些保护都是毫无意义的。攻击者只需读取Bob的流量并恢复Google的会话cookie。有了这个Cookie,他就可以直接打开一个新的Google标签,而无需离开自己的浏览器,并且可以在没有遇到烦人的同源策略的情况下模仿Bob。但是,不幸的是,对于饼干来说,这种情况变得不那么普遍了。整个Internet早就对未加密的连接宣战了,不管鲍勃是否喜欢,鲍勃的传出流量都可能被加密了。另外,从协议实施的最开始起,流量就在加密之前进行了压缩。通常的做法是减少延迟。这就是CRIME发挥作用的地方。(压缩比Infoleak变得容易,压缩比泄漏简单)。安全研究人员Juliano Rizzo和Thai Duong于2012年9月发现了此漏洞。我们已经研究了整个理论基础,这使我们能够了解他们做了什么以及如何做。攻击者可以迫使Bob的浏览器向Google发送请求,然后以压缩的加密形式侦听本地网络上的响应。因此,我们有:Web流量= 加密(压缩(请求和cookie ))
此处,破解者控制请求,并有权访问流量嗅探器,包括数据包大小。凯尔西的虚构场景成为现实。了解这一理论后,CRIME的作者创建了一种利用程序,可以窃取Gmail,Twitter,Dropbox和Github等各种站点的会话cookie。该漏洞影响了大多数现代的Web浏览器,从而发布了一些补丁,这些补丁将压缩功能默默地隐藏在SSL中,因此根本没有使用它。唯一不受此漏洞攻击的人是古老的Internet Explorer,它从未使用过SSL压缩。泡菜
2014年10月,Google安全团队在安全社区引起了轰动。他们能够利用SSL协议中的漏洞,该漏洞已在10年前修复。事实证明,尽管新的TLSv1.2在服务器上运行,但许多版本都不再支持过时的SSLv3,以便与Internet Explorer 6向后兼容。我们已经讨论了降级攻击,因此可以想象发生了什么。井井有条的握手协议破坏活动-服务器已经准备好恢复旧的SSLv3,从本质上取消了最近15年的安全性研究。对于历史上下文,这是Matthew Green之前的版本2的SSL历史记录的简短摘要:Transport Layer Security (TLS) — . [..] , , TLS. [..] TLS TLS. Netscape Communications "Secure Sockets Layer" SSL. , SSL , -. , SSL SSL 2 . , [..] 90-, « ». , , . SSLv2 , — , SSLv2 .
在这些事件之后,1996年,沮丧的Netscape公司从头开始重新设计SSL。结果就是SSL版本3,该版本为其前身修复了几个已知的安全问题。幸运的是,对于薄脆饼干,“很少”并不意味着“一切”。通常,SSLv3提供了发起Woden攻击的所有必要构件。该协议在CBC模式下使用了分组密码,并且使用了不安全的填充方案(这在TLS中已修复;因此,出现了降级攻击)。如果您还记得我们对Woden攻击的原始描述中的填充模式,则SSLv3模式非常相似。但是,不幸的是,对于薄脆饼干,“相似”并不意味着“相同”。 SSLv3填充方案为“ N个任意字节,后跟数字N”。在这种情况下,尝试选择一个虚构的密文块,并经历原始Wodene方案的所有阶段:您会发现攻击成功地从相应的纯文本块中提取了最后一个字节,但没有进一步进行。解密密文的第16个字节是一个绝妙的技巧,但这并不是胜利。面对失败,Google团队采取了极端的选择:他们改用了更强大的威胁模型-CRIME中使用的一种。假设攻击者是一个在受害者的浏览器选项卡上运行的脚本,并且可以提取会话Cookie,那么无论如何,攻击仍然令人印象深刻。尽管更广泛的威胁模型不太现实,但我们已在上一节中看到了这种特定模型的可行性。有了这些更强大的破解功能,攻击现在就可以继续。请注意,攻击者知道加密的会话cookie在标头中的显示位置,并控制在其之前的HTTP请求的长度。因此,它能够操纵HTTP请求,以便根据块的结尾对齐cookie的最后一个字节。现在,此字节适合解密。您只需在请求中添加一个字符,cookie的倒数第二个字节将保留在同一位置,并适合通过相同方法进行选择。攻击将以这种方式继续,直到cookie被完全还原。这称为POODLE:在降级的旧版加密上填充Oracle,以减少过时的加密填充oracle。淹死
正如我们已经提到的,SSLv3有缺陷,但是与以前的版本根本不同,因为泄漏的SSLv2是不同时代的产物。有可能在消息的中间被打断:
转身
;客户端和服务器可以在Internet上见面,建立信任并在攻击者眼前交换秘密,然后攻击者很容易假装两者都是。导出加密也存在问题,我们在考虑FREAK时曾提到过。这些是加密的所多玛和蛾摩拉。2016年3月,来自各个技术领域的一组研究人员汇聚在一起,并得出了惊人的发现:SSLv2仍在安全系统中使用。是的,攻击者无法再将现代TLS会话降级到SSLv2,因为该漏洞在FREAK和POODLE之后被关闭,但他们仍然可以连接到服务器并自行启动SSLv2会话。您问,我们在乎他们在那里做什么?他们的会话脆弱,但这不会影响其他会话或服务器安全性-对吗?好吧,不是真的。是的,理论上应该是这样。但是不会-因为SSL证书的生成会带来一定的负担,因此许多服务器使用相同的证书,并且因此使用相同的RSA密钥进行TLS和SSLv2连接。更糟糕的是,由于这种流行的SSL实现中存在OpenSSL错误,因此选项“禁用SSLv2”实际上不起作用。这使得对TLS的跨协议攻击(称为DROWN)成为可能(使用过时和弱化的eNcryption解密RSA,使用过时的弱加密解密RSA)。回想一下,这与跌倒攻击不同;攻击者无需扮演“中间人”的角色,也不需要与客户进行不安全的会话。攻击者只需与服务器本身发起不安全的SSLv2会话,攻击弱协议并恢复RSA专用服务器密钥即可。该密钥对TLS连接也有效,从现在开始,没有TLS安全性将其保存为免遭黑客攻击。但是黑客攻击需要对SSLv2进行有效的攻击,这不仅使您可以还原特定流量,还可以还原RSA秘密服务器密钥。尽管这是一个复杂的过程,但是研究人员可以选择SSLv2之后完全关闭的任何漏洞。最后,他们找到了一个合适的选择:我们先前提到过的Bleichenbacher攻击,我们将在下一篇文章中对其进行详细说明。 SSL和TLS受到了这种攻击的保护,但是某些随机SSL功能与出口级加密中的短键结合在一起,使得DROWN的特定实现成为可能。在发布DROWN漏洞时,25%的顶级Internet站点受到了影响,并且可以使用适度的资源来进行攻击,即使对于顽皮的单个黑客也是如此。它花费了八小时的计算时间和440美元来检索RSA服务器密钥,而SSLv2的状态从“过时”更改为“放射性”。等一下,Heartbleed呢?
从上述意义上讲,这不是密码攻击;这是缓冲区溢出。休息一下
我们从一些基本方法开始:蛮力,插值,降级,跨协议和预先计算。然后他们研究了一种先进的技术,这也许是现代密码攻击的主要组成部分:这是预言家的攻击。我们已经弄清楚了很长一段时间-不仅了解核心原理,而且了解两种特定实现的技术细节:Wodene对CBC加密模式的攻击和Kelsey对初步压缩的加密协议的攻击。在审查降级攻击并进行初步计算时,我们简要概述了FREAK攻击,它同时使用了这两种方法,因为目标站点会落入弱密钥,然后重用相同的密钥。在下一篇文章中,我们针对公钥算法留下了一个(非常相似的)Logjam攻击。然后,我们研究了应用这些原理的另外三个示例。首先是CRIME和POODLE:这两种攻击都依赖于破解者将任意明文注入目标明文旁边的能力,然后检查服务器的响应,然后使用oracle的攻击方法,利用这种微薄的信息来部分恢复明文。 CRIME采取了Kelsey攻击SSL压缩的方法,而POODLE则以相同的效果使用了针对CBC的Woden攻击。然后,我们将注意力转向DROWN跨协议攻击,该攻击使用过时的SSLv2协议建立与服务器的连接,然后使用Bleichenbacher攻击恢复服务器的秘密密钥。至此,我们已经错过了此攻击的技术细节;像Logjam一样,她将不得不等到我们彻底研究公钥密码系统及其漏洞为止。在下一篇文章中,我们将讨论高级攻击-例如,中间相遇方法,差分密码分析和“生日”攻击。我们将通过第三方渠道对攻击进行短暂的突袭,然后我们将研究最美味的东西-具有公钥的密码系统。