散列密码的意义何在?

信息安全 哈希 密码管理
2021-09-02 13:50:21

即使遵循严格的安全协议,并且用户键入的内容(在这种假设情况下)完全不可能导出,服务器需要比较的密钥仍然存在。即使不是这种情况,服务器管理员或具有该能力的人也可以直接访问该帐户(有权访问该帐户或通过修改系统本身)。

例如,如果我运行了一个电子邮件服务并正确存储了密码,这显然不会阻止我通过 A. 以这种方式启动系统或 B. 对其进行修改以使其以这种方式工作来阻止我进入他们的帐户。

散列的唯一原因是保护用户在其他网站上的帐户,以防万一发生入侵?

4个回答

是的。如需更多分析,请参阅此博客文章:我们存储散列密码是因为会发生部分只读漏洞(如果只是通过错误放置的备份磁带),我们不希望攻击者能够立即将此漏洞升级为完全读写访问权限.

此外,密码是私人数据(很多男人使用他们女朋友的名字作为密码,他们的妻子可能对此不满意),所以应该保护他们免受意外泄露给系统管理员(或他们的实习生)的眼睛。至少,查看散列密码数据库是安全的。

散列的唯一原因是保护用户在其他网站上的帐户,以防万一发生入侵?

不,这不是唯一的原因。这也是为了保护您自己网站上的帐户不被不应访问的人访问。

假设您的站点容易受到 SQL 注入攻击,您可以在其中获取任意用户的数据库密码字段。您不是非常希望该密码字段成为单向哈希吗?也许他们可以对哈希进行耗时的字典攻击,但假设它的密钥加强(例如,bcrypt),除非它是最弱/最常见的密码之一,否则他们不应该能够破解它。

或者假设一个系统管理员被解雇了。您是否希望她/他有权访问所有百万用户名/密码?当然,当他们受雇时,他们可能有权从他们的管理员帐户中查看任何用户的信息,但现在他们不再受雇,他们应该不再有任何访问权限。使用明文密码,他们可能已经记住或窃取了一些密码,他们可以在以后使用这些密码来闯入随机帐户。(此外,您的系统可能需要保存有关谁在何时访问哪些信息的审核日志;因此,管理员查找用户的帐户信息与从系统外部登录的人员使用他们的信息查看自己的信息之间存在很大差异。自己的密码)。如果他们愿意,但这将是可疑的,并且很可能可以追溯到他们。

或者,也许有人找到了您的旧数据库备份之一。您是否希望他们可以轻松访问所有密码?

底线是(a)您应该在您自己的网站上以强大的方式(例如,bcrypt)散列密码以确保安全,并且(b)您不应该在不同的网站上重复使用相同的密码(因为您永远无法确定他们正在使用适当的预防措施)。

在您的基础设施不如您想象的安全的情况下,散列密码可以保护您。

尽管您尽了最大的努力,但您还是在 IT 职业生涯的某个阶段遭到黑客攻击。然后,您的策略从预防(至少在这种情况下不起作用)转向损害控制和灾难恢复。其中一部分是确保即使攻击者通过转储数据库获得了敏感数据,他也无法进一步利用它(至少在您可以对系统进行足够的更改以使该数据无用之前)。

输入哈希密码。散列旨在为仍然可以比较是否相等的唯一消息产生唯一值,但与原始消息没有明显的数学或引用关系(因此当仅给出散列值时不能有效地“逆向工程” )。因此,您的攻击者在外部装甲中发现了一个裂缝,然后蠕虫进入您的网络。他可以访问您的数据库的文件系统并提取您的 MDF 文件。他在自己的本地计算机上打开它,并寻找他可以用来进一步深入的用户帐户数据。好吧,你猜怎么着?他所看到的只是一堆乱码,他的非法密码应该在哪里。攻击者通过查看哈希获得的知识量,假设它们被适当地加盐并使用加密安全的哈希,

现在,破解密码哈希比破解其他哈希消息更容易,因为“通过 20 年的努力,我们已经成功训练每个人使用人类难以记住但计算机容易猜测的密码” . 但是,散列仍然具有价值,尤其是当您使用设计为计算成本高的散列时,例如 BCrypt 或 PBKDF2。当密码哈希需要一秒钟的时间来计算时,即使是一个弱密码(28 位熵)也需要长达 8 年的时间才能通过蛮力猜测,如果你强迫用户定期更改密码,攻击者必须重新开始(每次获得新的数据库转储后)。

正如其他人提到的,散列(不可逆)密码更好,因为您可以在不泄露用户密码的情况下查看数据库并减慢攻击者的速度。但是当密码只有帐户所有者知道时,还有一些其他的可能。

您可以使用随机密钥加密数据。然后使用用户密码对随机密钥进行加密。然后只有该用户可以访问,即使有人更改了数据库中的哈希值。缺点当然是如果用户忘记密码,所有数据都会丢失。

这甚至可以通过证书进行扩展。每个人都可以加密,但是您需要密码(不能从哈希中恢复)才能再次读取它。

如果您存储清晰的密码,这样的系统将被击败。这样的系统并不常见,但肯定是可能的。在这样的系统中,即使具有完全的读写权限,您也必须截获密码或数据才能获取数据,从而更改系统,这需要 a) 大量时间 b) 对系统有很好的了解,并且是因此并不容易。

编辑:Ubuntu 使用用户密码对主目录进行解密/加密,如我所述如果密码以明文形式存储,管理员仍然可以访问数据。当然,当用户登录或系统更改为共享密钥、复制主目录等时,数据不再安全。

但是散列密码就像穿防弹衣一样。你仍然可能被击中头部。