一、引言

对于MD5的好奇,并不是我一时心血来潮,在日常进行银联卡支付信息安全管理合规评估(简称UPDSS评估)时,标准中有这样一条要求:6.3.3.2 登录密码、查询密码等密码类信息,应进行强效加密后存储,防范明文泄露的风险。在UPDSS标准附录中的术语表里,强效加密算法的释义为:使用经过行业测试和认可的加密算法和密钥长度,对数据进行加密保护的方法。包括但不限于 AES (128 位和更高)、TDES/TDEA(最少三倍长的密钥)、RSA(2048 位和更高)、ECC(224 位和更高)以及 DSA/D-H(2048/224 和更高)、SM2(256 位)、SM4(128 位)。可以看到,这一段描述中并未提及MD5算法。而在UPDSS评估的过程中,常常能遇到被评估机构使用MD5算法来保护用户的密码。往往当评估项目工作组提出问题时,被评估机构都会很疑惑:MD5是一个标准的、通用的算法,而且具备不可逆的特性,为什么不能用MD5保护重要数据呢?对此,本文就将从密码学角度和合规角度两方面去探讨MD5的安全性。

二、MD5安全性的基础

关注信息安全的朋友应该都知道,密码学是信息安全的基石,没有密码学就没有信息安全。在信息安全类的合规评估中,对加密算法往往都是重点关注。而当今社会中我们主要使用的是现代密码。现代密码学有三类重要的密码算法,分别是对称密码算法、非对称密码算法和哈希算法。哈希算法,也称散列算法、杂凑算法。哈希函数可以分为两大类,一类是基于分组密码而设计的,另一类是直接构造的。一般会把后一种直接构造的称为标准哈希函数。标准的哈希函数有两大类:MDx系列和SHA系列。今天我们重点关注其中的MD5算法。

百科上对MD5的介绍是:MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。简而言之,就是对于任意一组输入的内容,经过MD5运算后都会输出一个128位的唯一结果。作为一个优秀的哈希函数,MD5的基本安全要求是原像稳固、第二原像稳固和碰撞稳固。原像稳固简单来说就是无法通过已知的MD5输出逆推得到输入;碰撞稳固就是两个不同的输入经过MD5运算后不能产生相同的输出。基于这些安全特性,可将MD5用来保护数据的完整性。在实际应用上,MD5可用于数字签名、MAC码、消息认证等多个场景。

三、针对MD5典型的攻击手段

提及MD5的安全性,王小云教授是一个不得不提的人物。她和他的研究团队在2004年的国际密码学会议上发表了破译MD5、HAVAL-128、MD4和RIPEMD算法的报告。需要注意的是,这里的破译不是原像攻击,而是碰撞攻击,即两个不同的输入在经过MD5运算后会产生相同的输出,这意味着两个截然不同的文件可能会拥有相同的数字签名!一旦找到两个文件可以产生相同的压缩值,就可以伪造签名,给网络安全领域带来巨大隐患。这里王小云教授采用的是差分攻击(差分有异或差分、符合差分和模差分等,差分反应了两个数各位的差别,选择好的差分可以更快地寻找碰撞,引入差分后要确定差分路径,然后利用非线性函数的性质来控制差分路径的充分条件。最后利用消息修改技术和碰撞搜索算法在满足充分条件的消息中进行搜索,根据消息差分得到碰撞消息对。)的方法,得到了MD5消息碰撞对。这种攻击方法主要利用了具体哈希函数存在的结构缺陷或压缩函数的某些特性。MD5算法大致分为两个模块,首先是构造模块,将输入的信息M扩充为长度是512比特倍数的数据串;其次是压缩模块,压缩模块包含4轮,每轮16步,最后得到一个128比特的输出。王小云教授的差分攻击就利用了压缩模块中的缺陷,证明了标准MD5算法的碰撞不稳固。

除此之外还有些通用攻击方法,如穷举攻击法、生日攻击法等。目前在线破解MD5的网站基本都是使用穷举攻击法。这种方法就是事先对原文信息进行MD5运算,得到密码的哈希值,并建立一个原文到哈希值的映射表。当拿到一个哈希值时就去映射表中查询是否存在已知的原文。虽然这种方式没有真正的从哈希值逆推出原文,但是也一定程度上对MD5的原像稳固性造成了冲击。可以看到,标准MD5算法存在着种种问题,原像稳固性和碰撞稳固性都难以保证,进而失去了赖以存在的基础。

四、更换MD5算法刻不容缓

既然标准MD5已经被证实可以攻破,为什么市面上对MD5的使用还是十分普遍呢?其实学术界早已在为取代MD5做准备。2006年,美国国家标准技术研究院(NIST)就颁布了美国联邦机构2010年之前必须停止使用SHA-1的新政策,并于次年向全球密码学者征集新的国际标准密码算法。2010年,中国国家密码管理局发布了全新的哈希算法SM3。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”,王小云教授也参与了SM3算法的设计。然而标准算法的切换总会存在一个缓冲期,但是关乎国计民生的重点领域,比如金融行业,就会有监管部门要求使用更新的、更加安全的密码算法,而是否使用新的标准算法也是合规的要点之一。因此,对于有条件进行密码算法升级的企业,应当选取强度足够的对称和非对称加密算法,如SM2、SM4等去保护需要加密存储的敏感数据。在需要签名、生成摘要时,推荐使用SM3算法。随着《网络安全法》、《电子签名法》、《密码法》等法案的相继发布施行,我国对信息安全的重视程度越来越高,伤痕累累的MD5已经不堪大用,未来必然会被更新更强的算法取代。

孟达,信息安全爱好者,中国金融认证中心工程师。作者邮箱:mengda@cfca.com.cn,欢迎大家提出宝贵的建议!

声明:本文来自网安前哨,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。