更改预先存在的数据库上的散列函数

时间:2011-09-25 12:17:58

标签: security hash passwords md5 sha

我正在阅读有关密码哈希的一些内容。我见过SHA-256> MD5。 这让我思考应用程序如何处理从一个哈希函数到另一个哈希函数的更改。如果有人使用MD5实现一个哈希密码的应用程序,会发生什么。然后他们决定使用SHA-256。但是,当然存储在数据库中的密码哈希值是在MD5中。

将数据库中的数据从一个散列函数迁移到另一个散列函数的过程是什么?

1 个答案:

答案 0 :(得分:5)

无法“取消”密码(至少不能以一般,有效和可靠的方式 - 您可以猜测某些密码,这是攻击者所做的,并且您希望从MD5正是因为攻击者可能会取得一些成功)。因此,迁移将随着时间的推移而扩展:一些密码将使用MD5进行哈希处理,其他密码将使用SHA-256进行哈希处理。要验证密码时:

  • 如果知道该密码的SHA-256,则使用SHA-256。此密码已经迁移。
  • 否则,MD5用于检查密码。如果它匹配,那么密码是好的,,因为当时应用程序已知密码,该应用程序还使用SHA-256哈希密码并且替换数据库中带有SHA-256哈希的MD5哈希。

因此,密码是动态迁移的;要完全摆脱MD5,你必须等待很长时间和/或销毁长时间未访问过的帐户。您需要能够区分MD5哈希与SHA-256哈希,这很容易,因为它们具有不同的大小(MD5为16字节,SHA-256为32字节)。你也可以添加一面旗帜或任何其他类似的噱头。

请注意使用散列函数的原始单个应用程序散列密码是一种非常糟糕的方法,在安全方面,并且用SHA-256替换MD5并不会真正改善。您对密码进行哈希处理,以便获得对数据库的读访问权限的攻击者不会自己学习密码。要真正阻止攻击者猜测密码,您还需要“盐”(每个密码随机数据,与散列密码一起存储)和适当的哈希函数(即数千,可能数百万的嵌套散列函数调用)。有关详细信息,请参阅this answer。简短的回答:既然您正在构想迁移,请执行智能操作并迁移到bcrypt,而不是SHA-256(请参阅security.stackexchange上的that answer)。