Mar*_*old 6 security encryption passwords hash bcrypt
我存储密码,如果您是开发人员,那么以实际上最好的方式存储密码很容易。所以我想知道,2021年哪个最好?对我来说,调整我的代码以使其成为最好的代码很容易。
是的- 我研究并阅读了 Stack Overflow 和其他网站上的许多文章,所有这些文章都提供了最好的建议,并且我已经遵循了它,所以这个问题不会重复其他线程。
我目前所做的事情的高级概述:
这是我从读过的所有文章和主题中“学到”的智慧。
但是,就在最近,有人告诉我,实际上上述内容在 2021 年应该被认为是不安全的。虽然这个人有很好的资格,但我仍然对在对话中进行任何安全更改保持警惕,而且我不是安全专家,所以我之前想我做出改变然后我必须测试它。
而且,我想不出比 Stack Overflow 更好的地方了,我知道如果它值得的话,它会立即被切成碎片!我不是安全专家,但我问这个问题听起来很可信。
所以我带着一些惶恐的样子问,并跟随一些我相信的白痴,以下......是的,我问这个不是其他人。请找出我所提出的逻辑,然后我向您展示......哎呀!:
Users您的数据库表已被泄露,那么您存储的 SALT 也已被泄露(从我所读到的内容来看,这是普遍接受的)因此,使用bcrypt 或类似工具生成随机 SALT更加安全,因为工具已经发展到了这一点。盐实际上不再有任何区别,正如基本上所预期的那样。
问题 1: 以上情况是否属实? (我个人完全不知道)
显然,推荐的 2021 年解决方案如下:
分析
就像一个可能的独特盐示例:
encrypted_real_user_password = Bcrypt ( SHA3_512 (
SHA1_256(static_password_stored_on_server) +
SHA2_512(plain_text_user_provided_password) +
CRC_32 ( (static_password_stored_on_server) + (plain_text_user_provided_password) ) +
SHA3_256(dynamic_password_stored_in_DB) ))
Run Code Online (Sandbox Code Playgroud)
问题 2: 我是白痴吗? (请告诉我我是否……我知道你会的!)
综上所述
我真的不知道反应会是什么,尽量表现得友善(尽可能),我希望最终如果由此产生任何小的变化以使我的密码存储更加安全,那么这是值得的。
终于终于
按照上述方式以编程方式存储加密密码或“密码令牌”很简单。一行代码就可以按照上面的方式加密和解密密码。
但它更安全吗?
您的很多研究都是正确的,并且在 2021 年仍然适用,因此使用 BCrypt 仍然是安全的(它通常为每个密码生成自己的随机盐)。好的密码散列算法有 Argon2、SCrypt 和 BCrypt,它们都提供了控制必要时间的成本因素。
但也存在一些误解。
散列后可以进行额外的加密,这甚至是比使用胡椒更好的选择。我试图在关于安全存储密码的教程的末尾解释它。
如果我们谈论的是我们自己的密码,那么存储密码的最佳方法就是记住它,而不是把它写在任何地方,无论是在密码管理器中、纸上还是其他地方。
如果您必须以数字方式或纸质形式存储密码,那么我会在存储密码之前使用私人密码 - 例如书本密码。
如果您的密码存储被黑客入侵,包含密码的秘密笔记本被盗等等,那么小偷仍然不知道真正的密码,也不知道用于加密它的书。
如果我们谈论的是其他人的密码,那么您应该只存储一个无法逆转的加密版本,并且要求密码足够长,需要很长时间才能暴力破解并将每个密码的盐存储在另一个密码上,更安全的服务器。您选择的密码加密算法永远不应该是可逆的。
最佳情况下,您应该将身份验证过程外包给值得信赖的供应商,而不是自己存储任何加密密码、盐或种子。