我最近考虑了一种安全的密码存储机制。
我想问的是,下面的密码存储机制是否能够抵抗具有安全密码的彩虹表,以及攻击者是否知道哈希和盐渍机制。
而不是使用随机生成的盐,盐是从密码派生出来的。因此,salt也不会存储在数据库中。
$password = "MySecurePassword123")$password正在使用sha256 ($hashed_pw = ccf9ac1c9ce02b9bb7810a1fff51e474f37d98c3582f2d3b5036caf559afd9bc)进行散列$password的字符使用sha256进行散列。让我们将产生的散列称为“盐分”。($salt = 52824aa0d517c8d6e24d59e1374ee202e97ba730b00ae577c94cdf157cbc29af)$salt将被附加到hashed_pw中,并再次使用sha256 ($result = sha256($salt + $hashed_pw) = 63617328f94d025f2489f170388b42d954a73391250b0ad29bbfb7ce2f8373e1)进行散列。最后,$result存储在数据库中。
用于生成sha256散列的工具:https://emn178.github.io/online-tools/sha256.html
发布于 2018-01-10 15:02:18
这是一种非常不安全的存储密码的方法。
这里有两个重要因素在起作用:
这意味着攻击者可以相当快地计算output -> password的查找表,并根据查找表检查数据库中的原始值。
粗略的近似:我可以下载1,000万密码列表,并通过您的算法运行每个密码。openssl speed sha256报告说,我的笔记本电脑每秒可以在64个字节块上执行3M操作(上一步的大小)。除以三(您正在执行的sha256操作的数量,尽管有些操作在更小的块上,速度更快),我可以在平均硬件的几秒钟内构建一个10米的查找表。
如果将此方法用于具有数千名用户的站点,则会发现大量用户使用数据库中找到的密码。
这个近似的方法可以在几分钟内实现并运行,并将确定相当一部分用户的密码(取决于它们的性能如何,但即使是一个密码也太多)。注意,这里没有提到彩虹桌。这些是不需要的,因为给定的密码总是导致相同的存储值。
https://crypto.stackexchange.com/questions/54597
复制相似问题