密码技术(七、二)之单向散列函数

单向散列函数
  ——获取消息的“指纹”

单向散列函数具体例子

MD4、MD5

 MD4是由Rivest 于1990年设计的单向散列函数,能够产生128比特的散列值。不过,虽则Dobbertin提出寻找MD4散列碰撞方法,现在它已经不安全了。
 MD5是由Rivest于1991年设计的单向散列函数,能够产生128比特的散列值。MD5的强抗碰撞性已经被攻破,也就是说,现在已经能够产生具备相同散列值的两条不同的消息,因此它也已经不安全了。
MD4和MD5的MD是消息摘要(Message Digest)的缩写。

SHA-1、SHA-256、SHA-384、SHA-512

 SHA-1是由NIST(National Institue of Standards and Technology ,美国国家标准计算研究所)设计的一种能够产生160比特的散列值的单向散列函数。1993年别作为美国联邦信息处理标准规格发布的是SHA,1995年发布修订版FIPS PUB 180-1称为SHA-1。在《CRYPTREC密码清单》中,SHA-1已经被列入“可谨慎运用的密码清单”,即除了用于保持兼容性的目的以外,其他情况都不推荐使用。
 SHA-256、SHA-384和SHA512都是由NIST设计的单向散列函数,它们的散列值长度分别为256比特、384比特和512比特。这些单向散列函数合起来统称为SHA-2,它们的消息长度也存在上限(SHA-256的上限近于264比特,SHA-384和SHA-512的上限接近于2128比特 )。这些单词散列函数式于2002年和SHA-1一起作为FIPS PUB 180-2发布的。
 SHA-1的强抗碰撞性已于2005年被攻破,也就是说,现在已经能够产生具备相同散列值的两条不同消息。不过SHA-2还尚未被攻破。
6种版本SHA-2

6种版本的SHA-2.png

RIPEMD-160

 RIPEMD 是与1996年由Hans Dobbertin、Antoon Bosselaers 和Bart Preneel 设计的一种能够产生160比特的散列值单向散列函数。RIPEMD-160是欧盟RIPE项目所设计的RIPEMD单向散列函数的修订版。这一系列的函数还包括RIPEMD-128、RIPEMD-256、RIPEMD-320等其他一些版本。在《CRYPTREC密码清单》中,RIPEMD已经被列入“可谨慎运用的密码清单”,即除了用于保持兼容性的目的以外,其他情况都不推荐使用。
 RIPEMD的强碰撞性已于2004年被攻破,但RIPEMD-160还尚未被攻破。比特币中使用的就是RIPEMD-160。

SHA-3

 SHA-3(Secure Hash Algorithm-3)是一种作为新标准发布的单向散列函数算法,用来替代在理论上已经被找出攻击方法的SHA-1算法。全世界的企业和密码学家提交了SHA-3的候选方案很多,经过5年的选拔,最终在2013年正式确定了将Keccak算法作为SHA-3的标准。
Keccak最终被选为SHA-3的理由如下:

  • 采用了与SHA-2完全不同的结构
  • 结构清晰,易于分析
  • 能欧适用于各种设备,也适用于嵌入式应用
  • 在硬件上的实现显示出了很高的性能
  • 比其他最终候选算法安全性边际更大

Keccak

 Keccak是一种被选定为SHA-3标准的单向散列函数算法。
 Keccak可以生成任意长度的散列值,但是为了配合SHA-2的散列值长度,SHA-3标准中共规定了SHA3-224、SHA-3-256、SHA3-384、SHA3-512这4个版本。在输入数据的长度上限方面,SHA-1为264-1比特,SHA-2为2128-1比特,而SHA-3则没有限制。
 此外FIPS202中还规定了两个可输出任意长度散列值的函数(extendable-output function,XOF),分别为SHAKE128和SHAKE256。据说SHAKE这个名字取自Secure Hash Algorithm 与Keccak这几个单词。

Keccak的结构

 Keccak采用了海绵结构,输入的数据在进行填充后,要经过吸收阶段挤出阶段,最终生成输出的散列值。
并且作为海绵结构的变形, Keccak中还提出了一种双共结构。
这里关于 Keccak的结构,不做过多解读,想详细了解,请参考原著;

应该使用哪种单向散列

  • 首先MD5是不安全的,因此不应该使用。
  • SHA-1除了用于对过去生成散列值进行校验外,不应该被用于新的用途,而是应该迁移到SHA-2。
  • SHA-2有效应对了SHA-1的攻击方法,因此是安全的,可以使用。
  • SHA-3 是安全的,可以使用。
    和对称密码一样,我们不应该使用任何自制算法。

对单向散列函数的攻击

暴力破解
任何文件中都或多或少存在具有一定的冗余性。利用文件的冗余性生产具有相同散列值的另一个文件,这就是一种针对单向散列函数的攻击。
在对密码进行暴力破解时,我们就是按照顺序改变密钥,如0、1、2、3.....然后分别用这些密钥进行解密的,对单向散列函数进行暴力破解也是如此,即每次都稍微改变一下消息的值,然后对这些消息求散列值。
现在我们在寻找的是一条具备特定散列值的消息,具备相同散列值的另一条不同的消息。这相当于一种试图破解单向散列函数的“弱碰撞性”的攻击 。在这种情况下,暴力破解需要尝试的次数,可以根据散列值的长度计算出来,以SHA3-512为例,由于它的散列值长度为512比特,因此最多只需要尝试2^512次就能找到目标消息了,如此多的尝试次数在现实中是不可能完成的。
由于尝试次数纯粹是由散列值的长度决定的,因此散列值的长度越长的单向散列函数,其抵御暴力破解的能力也就越强。
找出具有指定散列值的消息的攻击方式分为两种,即“原像攻击”和“第二原像攻击”。原像攻击(Pre-Image Attack)是指定一个散列值,找出具有该散列值的任意消息;第二原像攻击(Second Pre-Image Attack)是指定一条消息1,找出另外一条消息2,消息2的散列值和消息1相同。

生日攻击
要找到散列值相同的两条消息,而散列值则可以是任意值。这样的攻击,一般称为生日攻击(birthday attack)或是冲突攻击(collision attack),这是一种试图破解单向散列函数的“强碰撞性”攻击。
我们以512比特的散列值为例,对单向散列函数进行暴力破解所需要的尝试次数2^512 次,而对同一单向散列函数进行生日攻击所需要尝试的次数2^256次,因此和暴力破解相比,生日攻击所尝试的次数要少的多。

单向散列函数无法解决的问题

单向散列函数能够辨别出“篡改”,但无法辨别出“伪装”。
当我们不仅需要确认文件的完整性,同时还需要确认这个文件是否真的属于他的,我们还需要认证。


该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图来源于原著

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

推荐阅读更多精彩内容