首先,关于MD5安全性问题
目前MD5并没有被破解,大家误解王小云院士的工作了。
王小云院士多年来主要从事密码理论及相关数学问题的研究工作,提出了密码哈希函数的碰撞攻击理论,并实践破解了一部分国际通用哈希函数算法。
在2004年的国际密码讨论年会(CRYPTO)上,王小云及其研究同事展示了MD5、SHA-0及其他相关散列函数的散列冲撞。
也就是说,王小云院士只是否定了MD5的抗碰撞性。
实际上,王小云的研究成果如下:
即给定消息M1,能够计算获取M2,使得M2产生的散列值与M1产生的散列值相同。并不是说扔给王小云一个MD5散列值,然后她马上就能算出一个原明文M来[1]。
如此,MD5的抗碰撞性就已经不满足了,使得MD5不再是安全的散列算法。这样一来,MD5用于数字签名将存在严重问题,因为可以篡改原始消息,而生成相同的Hash值。
其次,关于MD5破解网站的问题
由于存储密码的表很容易被窃取,所以以纯文本形式储存密码是非常危险的。因此大多数数据库会储存用户密码的加密摘要。在这种系统内,即使是认证系统本身都无法简单地通过查表来获得用户密码,这就是MD5的常见用途,即敏感信息加密。
黑客在盗取到散列后的密码表时,并不能仅凭借输入散列后的用户的加密摘要来获取权限(使用加密摘要作为输入密码并不可行,因为认证系统会把加密摘要再次进行散列,产生一个与储存的加密摘要不匹配的消息摘要)。为了获取用户的密码,黑客必须找到一个能产生相同加密摘要的密码。
理论上来讲,MD5的明文M是无穷的,但实际而言,用户的可能输入字符组合相对于随机的字符组合来说非常集中,例如,集中在自己的生日,身份证,银行卡号,姓名缩写/大小写等一些信息,换句话说,也就是信息熵其实是很低的。
因此,暴力破解法和字典攻击法是一种破解MD5最为直观且简单的方法,也就是遍历所有可能性尝试,或者通过包含“明文->密文”对应关系的一个大型数据库对其进行攻击。
但是,存储所有的明文密码对需要的空间过大,替代方法是使用预先计算的哈希链表[2],因此便提出了彩虹表,其比暴力破解使用的时间更少,空间更多;但与储存密码空间中的每一个密码及其对应的哈希值实现的查找表相比,其花费的时间更多,空间更少[3]。
因此,MD5一些的破解网站只是通过查表来确定而已,并不是多么强大的破解技术,只是一个正向破解密码散列值的过程,做不到已知一个MD5值,寻找具有这个值明文字符串。
此外,使用加盐的密钥派生函数可以使彩虹表攻击难以实现。
接着,关于自己设计一个编码方式的问题
现行的加密算法和哈希算法,其安全性和复杂度都是通过严格的数学演算来论证的。
表面上来看,加密算法是一个你追我躲的游戏,实际上来看,加密算法是一个严格意义上的数学游戏,密码学一直以来都指的是一个数学概念。
一个加密算法是否可靠,不是以保密算法本身为安全保证的,而是取决于针对这段密文的密钥是否安全。因而那些真正能够为大家所认可的加密解密算法,都不是能够轻易创造出来的。
MD5的算法公开并不对其安全性造成威胁,相反,如果系统的安全取决于算法的保密性,那么一旦被逆向还原,则整个系统付出的代价便太大了,而且,算法的保密性在现实世界实难行通。
但是,如果算法公开,安全性取决于密钥,那么维护密钥的保密性以及更换密钥,就相对而言是更容易的事情了,付出的代价也小。
最后,一个有趣的思考
如果我不用通用的MD5,自己弄个编码方法,是不是加密特性更高了呢?
首先,安全性绝不取决于你是否公开算法,这和代码逆向有关系,前文谈到过。因而无需知道加密算法,也可能构造出解密算法。
其次,如果答主不公开算法,不接受公开的分析和批评,以及顶级专家的钻研,怎么证明算法的强度,或者其是否留有后门?
毕竟,公开的RSA还被怀疑NSA在其中安置后门呢。
安全与否是后天赋予的,也是理论证明的,你无法自己声称,大家也不可能同意。
如果不服,大可公开算法给世人来挑战,当全世界也无法证实其不安全时,算法的安全性自然有人站台和担保。
我的思考大致如上,谢谢阅读~
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有