自制的加密哈希是否足够强大以存储网站密码?
Can a home-brewed cryptographic hash be strong enough for storing website passwords?
我正在开发一个包含用户帐户的网站的一部分,并且已经自制了我自己的加密哈希算法来存储用户密码。
我已经尽可能多地研究密码学主题,我觉得我对如何以非常安全的方式加密用户密码有相当不错的理解——尽我所能告诉.
我本质上是在使用带有进一步索引哈希的盐+胡椒方法(不确定那里的命名),最后通过 PHP 的 hash()
函数和 'sha512'
哈希选项。
推断我的算法的索引散列部分:本质上,每个用户条目都有一个随机生成的对应字典。然后,之前用 salt+pepper 加密的密码的每个字符都用作该字典的 key/index,连接每个索引值以创建一个几乎唯一的编码值。我在这里说 mostly-uniquely 是因为我没有验证每个用户字典都是唯一的,因为有数千个可能的值可供选择来创建字典。
算法总结:
- 盐+胡椒值
- 编码(索引哈希)
- PHP
hash('sha512', $value)
在我的测试中,存储的密码似乎非常独特(使用相同的字符串输入了多个测试密码,但哈希值却大不相同),并且我能够通过网站验证输入的密码与存储在数据库,即不存储明文密码,用户输入的散列密码与数据库中的密码相匹配。
基本上,在不透露更多算法细节的情况下,我想知道这是否足够安全以存储用户密码。
- 您为什么要开发自己的加密哈希?
- 为什么要避免泄露算法的细节?
这两件事都是加密和安全方面的巨大危险信号,所以不,你的算法不够安全。 没有合格的专业人士进行认真的密码分析,任何算法都不够安全,而这两件事都相当于没有让您的自制哈希暴露于认真的密码分析。
请使用标准算法。
可以,但如果您只是密码学的初学者,则可能性趋于 0。每个人都能够设计出一种他们自己无法破解的算法。 Schneier's Law(感谢 r3mainer!)
没有必要尝试通过模糊方式来实现这种安全性。有关详细信息,请参阅 Kerkhoffs' principle。
只需按降序使用一种已建立且广泛接受的密码散列方法,例如 Argon2、scrypt、bcrypt 或 PBKDF2。始终为每个用户使用高工作因数和随机盐。参见 How to securely hash passwords?
我正在开发一个包含用户帐户的网站的一部分,并且已经自制了我自己的加密哈希算法来存储用户密码。
我已经尽可能多地研究密码学主题,我觉得我对如何以非常安全的方式加密用户密码有相当不错的理解——尽我所能告诉.
我本质上是在使用带有进一步索引哈希的盐+胡椒方法(不确定那里的命名),最后通过 PHP 的 hash()
函数和 'sha512'
哈希选项。
推断我的算法的索引散列部分:本质上,每个用户条目都有一个随机生成的对应字典。然后,之前用 salt+pepper 加密的密码的每个字符都用作该字典的 key/index,连接每个索引值以创建一个几乎唯一的编码值。我在这里说 mostly-uniquely 是因为我没有验证每个用户字典都是唯一的,因为有数千个可能的值可供选择来创建字典。
算法总结:
- 盐+胡椒值
- 编码(索引哈希)
- PHP
hash('sha512', $value)
在我的测试中,存储的密码似乎非常独特(使用相同的字符串输入了多个测试密码,但哈希值却大不相同),并且我能够通过网站验证输入的密码与存储在数据库,即不存储明文密码,用户输入的散列密码与数据库中的密码相匹配。
基本上,在不透露更多算法细节的情况下,我想知道这是否足够安全以存储用户密码。
- 您为什么要开发自己的加密哈希?
- 为什么要避免泄露算法的细节?
这两件事都是加密和安全方面的巨大危险信号,所以不,你的算法不够安全。 没有合格的专业人士进行认真的密码分析,任何算法都不够安全,而这两件事都相当于没有让您的自制哈希暴露于认真的密码分析。
请使用标准算法。
可以,但如果您只是密码学的初学者,则可能性趋于 0。每个人都能够设计出一种他们自己无法破解的算法。 Schneier's Law(感谢 r3mainer!)
没有必要尝试通过模糊方式来实现这种安全性。有关详细信息,请参阅 Kerkhoffs' principle。
只需按降序使用一种已建立且广泛接受的密码散列方法,例如 Argon2、scrypt、bcrypt 或 PBKDF2。始终为每个用户使用高工作因数和随机盐。参见 How to securely hash passwords?