戏说密码学(5):美国的加密标准-AES

先说一说普通百姓对数据加密的误解。

误解:很多人觉得,安全的数据加密就是用一种外人不知道的方法给数据加上密,加密算法最好是独家研发的,别人都不知道。

真相:全世界用的加密方法都是统一的且算法公开的(没想到吧)。国际上用美国的加密标准,中国是特例,用国产的标准。

如果有人说“我们的加密算法是独家研发的,绝~对~安~全~!”,这绝对是在撒谎。秃子头上的虱子,明摆着的事儿。再安全,还能比国家层面推行的加密标准安全?!

很多人会问:算法都公开了,还安全吗?

安全。算法都公开了,也没人能破解,这才是真正安全的算法。没错,就是这么牛!

好的加密就像武林高手:公开接收任何人的挑战,还没有人能赢他,这才是真正的高手。如果整天说自己是高手,又不敢跟别人过招,这都是假高手,吹牛的高手。

所以,只要是没有公开算法的加密方法,都是不安全的。

这么说有点绝对,国产的SM1就没有完全公开,总让人觉得掖着藏着不够自信。


今天重点说美国的分组加密算法AES(Advanced Encryption Standard,高级加密标准),这也是美国军方的加密算法。

咱们再来看一个常见的误解。

误解:美国的加密标准AES算法是美国人发明的。

真相:AES算法是两个比利时人发明的。而且美国最新的SHA-3算法也是欧洲人设计的(欧洲意法半导体和恩智浦的密码学家联合设计),且算法公开。

正因为AES不是美国人和美国政府发明的,所以它全球流行,不用担心美国留后门(流行的原因之一)。

2003年6月,美国政府宣布AES算法可以用于加密机密文件和绝密文件。

在之前的文章“戏说密码学(2):密码破译方法”中我们提到过,20世纪70年代时,商业上(尤其是银行业)对数据加密的强烈要求促使美国推出了全球首个数据加密标准DES。

有人问,别的国家用美国的加密算法,还能安全吗?

这是个好问题!

尽管DES算法最初是IBM公司提供的,但美国国家安全局(NSA)“深度”参与了算法的修改。要知道,NSA是美国的特务机构,不是善男信女,要说它没动手脚没留后门,连美国人都不相信。所以人们担心是有道理的。

DES算法从发布到退役,一直都处在舆论的风口浪尖上。它的发布者,美国的标准局,也备受指责,脊梁骨没少被戳。

这也使得美国标准局痛定思痛,决心摆脱NSA这个声名狼藉的猪队友,创造新的发明了AES算法的选择方式——选秀。

你没看错,我也没写错,AES的确是选秀出身,而且是全球选秀。如今国内的娱乐节目中选秀比比皆是,这么看来,美国的标准局还是很有商业头脑的。

和选秀节目不同的是,AES的选秀过程相当漫长。从1997年1月一直选到2000年10月,来来回回选了近4年的时间。

为什么这么长时间?作为DES算法的继任者,AES算法涉及到美国甚至全球金融、军事、商业等领域的安全,不是长得帅、脸蛋儿白、家里有钱就能蒙混过关的。

最初从全球征集了15个候选算法(不用记,大部分算法都是过眼云烟):CAST-256, CRYPTON, DEAL, DFC, E2, FROG, HPC, LOKI97, MAGENTA, MARS,

RC6, Rijndael, SAFER+, Serpent, 和 Twofish。

密码学家们讨论了每个算法的优缺点,不光要安全,还要在软件、硬件(包括各种处理器架构、智能卡等)上易于实现,速度快。有些算法因安全上的缺陷被否定,有些则因为性能不佳被排除。为此美国标准局在1998年和1999年开了两次研讨会,最终选出了5个算法进入决赛:MARS,RC6,Rijndael,Serpent和Twofish(说来也巧,这几个算法的首字母都靠后)。咱们来看看他们进入决赛时的成绩:

第一名:Rijndael,86票赞成,10票反对;

第二名:59票赞成,7票反对。

第三名:31票赞成,21票反对。

第四名:23票赞成,37票反对。(来自RSA公司的RC6)

第五名:13票赞成,84票反对。(来自IBM的Mars)

最终Rijndael算法胜出,成为AES算法,2001年正式成为美国联邦标准。

Rijndael算法并不是美国人发明的,而是两个比利时人发明的。AES算法的安全性以及选举过程,都得到了好评。发明人之一的Joan Daemen后来又参与设计了SHA-3算法(2012),不愧是加密界的高手高手高高手!

AES是全球最流行的对称加密算法,我们计算机的CPU(包括Intel和AMD)里内置了AES指令。

AES算法是公开的,至今为止,尚未找到有效的破解方式,安全性值得信赖。


AES算法有三种:AES-128, AES-192和AES-256,后面的数字表示密钥的位数。很明显,AES-256是最强壮的,密钥空间是2^256. 它们单次能够加密128比特数据,也就是16字节。

嗯?单次只能加密16字节数据?现在手机随便拍张照片也有好几MB,怎么加密?

这又是个好问题。

有人说,这还不简单,无论多大的文件,按16字节一块,划分成多个块,逐块加密,直到把所有数据都加密完为止。

上面的方法看似可行,其实有很大的安全隐患:因为相同的明文加密后会得到相同的密文。

有人会说:当然!相同的明文加密后肯定得到相同的密文,这很正常啊,有问题吗?

有!而且很严重!

举个例子吧。图1中,左边是原始图片(不是QQ,是Linux),中间是用AES逐块加密后的图片(逐块加密模式被称为ECB模式);右边是用改进的AES-CBC模式加密后的图片。看出逐块加密的问题了吧,尽管加了密,仍能看出其中的企鹅。


图1. (左边)原图片;(中间)AES-ECB逐块加密后的图片;(右边)AES-CBC模式加密后的图片

这是因为白色的背景由相同的数据组成,加密后生成相同的密文。尽管从局部看密文是随机的,但整体上人眼还是能分辨出其中的图案。

用专业的属于讲,问题在于:明文的统计属性在密文中得到了保留。这是加密算法的大忌

怎么办才能让相同的明文加密成不同的密文呢?

还记得我们在“(3)哈希函数与密码破译”中说到hash算法时提到的“加盐”操作吗?简单的说,同样的两杯水,随机往里加点盐,味道就会不一样。这个方法也可以用到AES加密里(瞧,很多看似高深的理论,通常都来源于日常的生活)。最右边的图就是加盐后的加密图片,完全看不出企鹅图形。

往AES算法里加盐的方法有很多,由此产生了若干个AES加密模式,常用的是CBC模式和XTS模式。

CBC模式在软件加密领域非常流行。CBC模式加密前,先要生成一个随机的盐值(学名叫IV,Initial Value,初始值)。加解密过程如下(用文字不好解释,直接看公式):

加密每个文件时,都产生一个随机的IV,这样即使是相同的文件,由于IV不同,加密后的数据也不同。

CBC模式非常流行,但有个问题:密文数据量比明文要大,为什么呢?

首先,密文里要保存盐值(IV);其次,明文不是16字节的整数倍时,要填充到整数倍,导致密文变大。

这对软件来说不算事儿,但对底层的硬磁盘来说,会带来设计上的麻烦。

如果仔细看公式的话,我们会发现CBC模式无法并行加密,但可以并行解密。

XTS模式是为硬磁盘加密量身定制的:在加密数据时,会把数据的扇区地址和块地址作为盐(因此无需额外的IV),且有更好的数据填充机制,使得明文和密文的大小完全相同,不会造成存储空间的浪费。在硬磁盘中,相同数据的扇区地址和块地址不会完全一样,因此不会得到相同的密文。

Windows 10中的BitLocker,macOS(10.7)中的FileVault2用的都是AES-XTS模式。开源软件TrueCrypt和VeraCrypt也用这种模式,国内有些加密软件是基于VeraCrypt的(这个咱们以后再讲)。

现在市面上的加密移动硬盘和加密U盘大多数使用AES-XTS模式,早期的产品也有使用CBC模式的。Win7和Win8/8.1的BitLocker使用的也是AES-CBC模式。

有人会问:既然XTS模式这么好,为何软件上不用呢?

这是个好问题。

原因是,在软件读写数据时,不会涉及到数据在硬磁盘中的扇区地址和块地址的信息。简言之,XTS模式是为硬件存储设备设计的,不是给软件设计的。


那么,怎样才能破解AES算法呢?

答案就藏在中国功夫的精髓里:天下武功,无坚不破,唯快不破

重点:火云邪神手里夹的不是烟头,是子弹!

图2. 《功夫》01:08:08

要破解AES-256,需要多长时间呢?

截止到2018年8月11日,全球最快的超级计算机是美国的“顶点”(Summit),峰值速度是20亿亿次/秒(200PLOPS,即2×10^17)。排名第二的中国神威太湖之光的峰值速度是12.5亿亿次/秒。

假设“顶点”每次运算都能破译一个AES秘钥(实际没有这么快),要破解AES-256,需要1.8×10^52年,大约是(18000亿亿亿亿亿亿年)。

全球现在大概有70亿人口,假设每人都有一台“顶点”,一起破解,仍需要257亿亿亿亿亿年。

所有,不要幻想着去暴力破解AES算法。

举个例子吧,还记得2017年爆发的WannaCry勒索病毒吗?攻击了超过150个国家的电脑。它用的就是AES算法。

再说个破解的误区吧。

想破解别人加密的数据,不一定要破解加密算法。

就好比要想入室盗窃,不要想着刨开几十厘米厚的水泥墙。有很多简单的方法,比如偷钥匙、从窗户进入等等。

无数的事实证明,“坑蒙拐骗偷”通常是最有效的方式。只要想办法拿到密码,就大功告成。

当然,政府是不鼓励“坑蒙拐骗偷”的,尽管各国的间谍乐此不疲。


徐红伟@百香果科技


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 2,335评论 0 6
  • 目录一、对称加密 1、对称加密是什么 2、对称加密的优点 3、对称加密的问题 4、对称加密的应用场景 5、对称加密...
    意一ineyee阅读 61,823评论 8 110
  • 本文主要介绍移动端的加解密算法的分类、其优缺点特性及应用,帮助读者由浅入深地了解和选择加解密算法。文中会包含算法的...
    苹果粉阅读 11,459评论 5 29
  • 概述 之前一直对加密相关的算法知之甚少,只知道类似DES、RSA等加密算法能对数据传输进行加密,且各种加密算法各有...
    Henryzhu阅读 3,008评论 0 14
  • 在网上搜了一些方法和whl文件,cd到文件所在目录,pip install *.whl安装后报错,意思是需要安装c...
    dechuan阅读 664评论 0 1