是的,在实践中值得担心。MD5 被严重破坏,以至于研究人员能够伪造与证书颁发机构签署的真实证书相匹配的假证书。这意味着他们能够创建自己的假证书颁发机构,因此可以在完全信任他们的浏览器的情况下冒充他们认为的任何银行或企业。
现在,这需要他们使用 PlayStation 3 集群花费大量时间和精力,并且需要数周时间才能找到合适的碰撞。但是一旦被破坏,哈希算法只会变得更糟,永远不会更好。如果您完全关心安全性,最好选择完整的哈希算法,例如SHA-2 系列之一(SHA-1 也已被削弱,尽管没有 MD5 那样严重损坏)。
编辑:我为您提供的链接中使用的技术涉及能够选择两个任意消息前缀和一个公共后缀,它可以从中为每个前缀生成一个可以插入该前缀和公共后缀之间的数据块,生成与从另一个前缀构造的消息具有相同 MD5 和的消息。我想不出在您描述的情况下可以利用此特定漏洞的方法,并且通常,使用安全设备进行消息身份验证比将其用于数字签名更能抵抗攻击,但我能想到一些您需要注意的漏洞,这些漏洞大多与您选择的哈希无关。
如前所述,您的算法涉及将密码以纯文本形式存储在服务器上。这意味着您很容易受到任何能够在服务器上发现密码的信息泄露攻击。您可能认为如果攻击者可以访问您的数据库,那么游戏就结束了,但您的用户可能更愿意即使您的服务器受到威胁,他们的密码也不会被破坏。由于在线密码的激增,许多用户跨服务使用相同或相似的密码。此外,即使在代码执行或特权升级攻击不存在的情况下,也可能发生信息泄露攻击。
您可以通过将密码存储在使用随机盐散列的服务器上来减轻这种攻击;您将这对存储在<salt,hash(password+salt)>
服务器上,并将盐发送到客户端,以便它可以计算hash(password+salt)
以代替您提到的协议中的密码。但是,这并不能保护您免受下一次攻击。
如果攻击者可以嗅探客户端发送的消息,他可以对客户端的密码进行离线字典攻击。大多数用户的密码具有相当低的熵,一个包含几十万现有密码的好字典加上一些随机排列的时间可以让攻击者从嗅探消息中获得的信息很容易找到密码。
您提出的技术不会对服务器进行身份验证。我不知道这是否是您正在谈论的网络应用程序,但如果是,那么可以执行 DNS 劫持攻击,或在不安全的无线网络上进行 DHCP 劫持的人,或任何类似的,可以做中间人攻击,他们从您的客户那里以明文形式收集密码。
虽然当前针对 MD5 的攻击可能无法针对您描述的协议起作用,但 MD5 已受到严重破坏,并且哈希只会变得更弱,永远不会更强。你想打赌你会发现新的攻击可以用来对付你,并且有时间在你的攻击者有机会利用它之前升级散列算法吗?从目前比 MD5 更强的东西开始可能会更容易,以减少您不得不处理 MD5 被进一步破坏的机会。
现在,如果您这样做只是为了确保没有人在论坛或其他地方伪造来自其他用户的消息,那么可以肯定的是,任何人都不太可能会花费时间和精力来破坏您描述的协议。如果有人真的想冒充其他人,他们可能只需创建一个新的用户名,用 0 代替 O 或使用 Unicode 更相似的东西,甚至不用费心尝试伪造消息和破坏哈希算法。
如果这被用于安全性真正重要的事情,那么不要发明自己的身份验证系统。只需使用TLS/SSL。密码学的基本规则之一是不要发明自己的. 然后,即使在论坛的情况下,它可能并不重要,使用现成的东西比滚动你自己的东西更容易吗?