有人能解释一下盐应该如何存储在数据库中吗?盐的使用过程如何?
我在一本书中读到盐应该存储在哈希表数据库的旁边。但是,如果攻击者同时窃取哈希表和盐分值,会发生什么呢?我们应该用多少盐值?
发布于 2016-09-19 13:17:47
我们应该用多少盐值?
盐类的思想是使密码散列是唯一的,因此攻击者不能重复使用从破解一个密码到另一个密码的计算,因此您确实应该在每个密码哈希中使用一个唯一的salt。
但是,如果攻击者同时窃取哈希表和盐分值,会发生什么呢?
攻击者将能够暴力强制表中所有用户的密码。这可能允许他恢复一些密码,如果密码是弱的和/或如果使用弱密码散列功能。在攻击者恢复密码后,他可能会尝试在其他服务中重用这些密码,在这些服务中,用户使用的用户名类似/相同。如果两个散列共享相同的盐分,并且恰好是相同的密码(例如"123456"),那么攻击者只破解其中一个用户就可以有效地恢复两个用户的密码。
盐的使用过程如何?
通常,您将salt与密码和散列一起输入到密码散列函数中,这将告诉您密码对此散列和salt是否有效。更好的方案(如Argon2)支持所谓的模块式墓穴格式,它是密码哈希的编码,其中还包括关键参数和每个密码哈希的新(随机)盐(base64 64编码)。如果您可以使用这种格式,这是一个一次性的解决方案,因为您可以只要求工具/后端生成一个新条目(对于给定的密码)并立即存储它,当您有一个登录时,您获取这个字符串并将它传递给验证引擎,您就完成了。
有人能解释一下盐应该如何存储在数据库中吗?
在某个地方,您可以直接将每个盐类映射到相应的密码哈希。这可能是直接与散列在同一条目,在不同的列,甚至是在不同的表中。
https://crypto.stackexchange.com/questions/40071
复制相似问题