长度扩展攻击

✍ dations ◷ 2025-07-01 22:39:39 #长度扩展攻击

在密码学和计算机安全中,长度扩展攻击(Length extension attacks)是指一种针对特定加密散列函数的攻击手段,攻击者可以利用H(消息1)和消息1的长度,不知道消息1内容的情形下,将攻击者控制的消息2计算出H(消息1 ‖ 消息2)。

该攻击适用于在与的长度已知的情形下,所有采取了 H( ∥ ) 此类构造的散列函数。MD5和SHA-1等基于Merkle–Damgård构造(英语:Merkle–Damgård_construction)的算法均对此类攻击显示出脆弱性。注意,由于密钥散列消息认证码(HMAC)并未采取 H( ∥ ) 的构造方式,因此不会受到此类攻击的影响(如HMAC-MD5、HMAC-SHA1)。SHA-3算法对此攻击免疫。

对此类攻击脆弱的散列函数的常规工作方式是:获取输入消息,利用其转换函数的内部状态;当所有输入均处理完毕后,由函数内部状态生成用于输出的散列摘要。因而存在着从散列摘要重新构建内部状态、并进一步用于处理新数据(攻击者伪造数据)的可能性。如是,攻击者得以扩充消息的长度,并为新的伪造消息计算出合法的散列摘要。

一个用于向指定地点的用户递送指定种类华夫饼(即下面代码中的waffle)的服务器,可处理如下格式的请求:

原始数据: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo原始签名: 6d5f807e23db210bc254a28be2d6759a0f5f5d99

当且仅当该用户给出的签名对于其当前请求(向指定地点的用户1递送10个Eggo华夫饼)而言合法时,服务器才会实际处理该业务。该签名是一个消息认证码(MAC),由某个攻击者不可知晓的密钥签发。(事实上,这个例子对于重放攻击同样脆弱,攻击者亦可能通过二次发送同样的请求和签名来实施攻击。)

攻击者可能篡改该请求,在上述例子中,假设某攻击者把华夫饼的种类从“eggo”改为“liege”,这可以借助于消息格式本身的灵活性达到:对于请求字符串中重复的参数域,总是处理最后的参数。这样的灵活性并不能算作是消息格式本身的安全漏洞,因为消息格式在设计之初并未以安全性为前提;安全性需要通过签名算法的辅助来达到。

攻击者希望篡改的新数据: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggo&waffle=liege

为了给此新信息加上合法的签名,攻击者通常需要知道用于签名信息的密钥,并由此密钥生成一个新的MAC来作为新签名。然而,借助于长度扩展攻击手段,攻击者可以将散列(如上给出的签名)传递给散列函数作为原始状态,而从原请求处开始继续处理,这只需知道原请求的长度即可;在该请求中,原密钥的长度为14字节,这可以通过试探不同长度的伪造请求、并检查何种长度的请求被服务器接受而得到。

传递给散列函数的信息通常是填充(Padding)后的,因为许多算法只接受长度为指定大小倍数的输入。填充的内容是由采用的散列函数决定的。攻击者在新信息中除了包含原信息和伪造信息之外,还应当包含必需的填充位。因而,攻击者利用填充规则可以构造出如下信息:

新数据: count=10&lat=37.351&user_id=1&long=-119.827&waffle=eggox80x00x00          x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00          x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00          x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00          x00x00x00x02&waffle=liege

该信息包含了散列函数中添加到原消息的填充位(在此示例中,是一个0x80,随后是若干0x00,最后是消息长度)。攻击者知道原消息的散列密钥/消息对所对应的状态直到最后一个“&”为止,均和新消息是相同的;攻击者此时亦知道其散列摘要,这意味着散列函数的内部状态已经被完全伪造。此时,初始化一个散列算法就非常简单了,给定剩余的字符串作为输入,即可生成一个用于签名的新摘要,而根本无须知晓原密钥。

新签名: 0e41270260895979317fff3898ab85668953aaa2

通过连接新签名和新数据成为一个新请求,服务器将把该伪造的请求视作一个有效的请求,因为其签名和在知道密码情况下生成的签名完全等效。

该攻击主要用于伪造已签名的消息,但亦可能存在其他用途。

目前实现该类型攻击的工具并不多。一个借助于OpenSSL实现了针对多种散列函数的攻击的工具是 HashPump (页面存档备份,存于互联网档案馆)。该工具支持针对MD5、SHA1、SHA256和SHA512的长度扩展攻击。SHA224和SHA384受此攻击的影响相对较小,由于这两个函数的输出分别是更长的散列函数(分别是256及512位)的前224位和前384位,因此其输出并不包含散列内部状态的全部长度,不能直接使用散列值进行长度扩展攻击。然而,SHA224和SHA384毕竟输出了更长散列的很大一部分,因此攻击者仍然可以轻易地首先穷举得到剩下的部分(缺失长度仅为32位和128位)后,再实施长度扩展攻击。因此,不能依赖截取部分散列来实现消息验证码。

相关

  • 脱衣舞俱乐部脱衣舞俱乐部(Strip club)是脱衣舞表演者提供成人娱乐的场所,他们主要会表演脱衣舞等艳舞。脱衣舞俱乐部通常都是以夜总会或酒吧模式经营,但也可能会采用卡巴莱或剧场模式。二战
  • 祭礼祭祀,(英语:祭:sacrifice;祀:ritual;韩语:한국의 제사,罗马化:Jesa)是指以线香、酒水、肉类、蔬果,或布帛和玉(传统儒教祭祀)等供品向神灵、圣徒或者亡魂奉献、祈祷的一种行为。中国古代
  • 金玟哉金玟哉(韩语:김민재,1996年11月15日-),常被误译为金敏在,为韩国职业足球运动员,现效力于中超联赛球队北京中赫国安,司职中卫,亦为韩国国家足球队成员。2016年,金玟哉从延世大学退学,加入
  • 乘风破浪的姐姐《乘风破浪的姐姐》是2020年中国芒果TV推出的明星女团竞演真人秀节目。节目邀请30位年龄在30岁以上的已出道的女艺人,通过封闭式训练和比赛,最终组成全新女团。本节目由黄晓明
  • 浅野琉璃浅野琉璃(日语:浅野 るり,2月18日-),日本女性声优。岐阜县出身。
  • 微波头微波头也称微波磁控管头,在工业微波领域通称为微波头。英文为Magnetron head。微波头是微波发生器的重要构成部分。通常微波发生器由专用微波电源和微波头,加上相应的控制部分
  • 伊娃·卡斯迪伊娃·卡斯迪(Eva Marie Cassidy,1963年2月2日-1996年11月2日),美国通俗音乐歌手。1992年她出版了首张唱片《The Other Side》,这是一张与go-go乐手Chuck Brown的二重唱。1996年,她出版了自己的独唱专辑《Live at Blues Alley》。尽管她获得了the Washington Area Music Association的奖励,但是除了她居住的华盛顿特区,外人对她一无所知,直到她1996年因黑色素瘤死去。四年之后,一个偶然的机会,她的唱
  • 费代丽卡·切萨里尼费代丽卡·切萨里尼(意大利语:Federica Cesarini,1996年8月2日-),意大利女子赛艇运动员。她曾代表意大利参加2020年夏季奥林匹克运动会赛艇比赛,获得女子轻量级双人双桨金牌。
  • 壮族舞蹈壮族舞蹈是指壮族中流传的舞蹈。有的舞蹈源于土著越人传统,比如“蚂舞”、“女巫舞”、“铜鼓舞”、“扁担舞”、“弄腊”、“绣球舞”、“捞虾舞”等。这些舞蹈或源于骆越先民的生活、生产方式,风悄习俗,或源于土著民族部落的图腾、祖先或神灵崇拜。在其发展演变的过程中,受外民族文化影响较少,至今仍保留着浓重的越文化色彩,流传于桂西北和桂西南的偏僻山乡。如天峨县蚂节中表演的“蚂系列舞”,较全面地反映了壮族先民祭把、征战、生产和生活的情景,残留着一些母系社会和青蛙崇拜的遗风。其中某些人型舞蹈场面和舞蹈姿态造型与左江崖
  • 黄香黄香(68年-122年)(汉明帝永平十一年至延光元年),字文强,江夏云梦人(今湖北省孝感市云梦县)。东汉时期著名大臣,历任尚书郎、左丞、尚书令,官至魏郡太守,后被免官。为《二十四孝》中扇枕温衾的主角。黄香九岁时,母亲便死了,黄香对她非常思念、悲哀,整日都十分憔悴,丧事甚至办得有过礼节,乡里都称他孝顺至极。而黄家家贫,黄香辛勤工作,尽心尽力照顾父亲。当时夏天暑热,黄香用扇煽凉父亲的枕席;到冬天寒冷,黄香便以身体的温度暖和被席。父亲患病,黄香更加无微不至到十二岁时,当地太守刘护听到他的孝行便召募他为门下孝子,