我前几天在企业系统上遇到过一个表--dba_users(oracle)。
我能够在此表中为每位员工找到一个哈希密码,以及他们的用户名。
据我所知(来自谷歌搜索),用户名+密码被连接,然后哈希。
问题:知道“salt”(我自己的用户名),“原始值”(我自己的密码),以及散列值......这里是否存在能够找出哈希值的危险?
此外 - 谷歌搜索oracle 10g哈希 - 似乎有些人认为他们已经想出了哈希算法。我已经阅读了关于“彩虹表”和“离线字典攻击”......最后,我用谷歌搜索了oracle 11g,该版本的一个功能是它们隐藏了dba_users中的哈希密码,因此最终用户可以看不到。
无论如何,我正在摸索为什么我(即最终用户)可以访问此表,以及为什么DBA似乎不太担心它。
答案 0 :(得分:5)
散列密码然后将散列存储到数据库的重点是,如果这样做,您将不必担心谁可以在表中看到密码。
要强调:存储在数据库中的密码的(正确计算的)哈希值在没有原始密码的情况下完全没用。
据我所知,对于像md5这样的算法,没有办法从哈希中反向设计原始密码。这就是为什么现在大多数服务都没有在你点击“我忘记”链接时向你发送密码 - 而是他们提供设置一个新密码(一旦你提供旧密码和服务比较哈希)。
答案 1 :(得分:3)
通过连接(即腌制)每个哈希密码和用户名来详细说明@Goran Jovic所说的内容。这样做没有任何危险。要理解这一点,您必须了解彩虹表的工作原理。使用彩虹表破解一系列密码的方法是将预先计算的一系列密码从密码加载到内存中。然后,搜索与未知密码相关联的哈希表,以查看您是否可以在彩虹表中找到匹配项(您知道密码与特定哈希相对应)。但是,通过使用唯一标识符(即用户名)对哈希进行腌制,您可以抵御此攻击,因为即使已经看过的密码也会根据与之关联的用户进行不同的哈希处理。因此,现在,代替彩虹表必须处理可能的数百万种不同的密码组合,它现在必须包含每个可能的密码加上每个可能的用户名的散列。这种结果空间太大而无法搜索,除非计算技术有了巨大的飞跃,否则无法用暴力战术来打败它。