【问题标题】:Rijndael algorithm alternative for password hashingRijndael 算法替代密码散列
【发布时间】:2016-10-21 05:30:38
【问题描述】:

当我选择密码加密时,我发现 Rijndael 算法是最好的加密算法之一,无法通过暴力攻击破解。

所以我选择了 Rijndael 算法来加密用户密码。

现在我已经确定,哈希(不可逆)比加密(可逆)更安全[如果我错了,请纠正我]

我的问题是,

  1. 我可以使用现有的 Rijndael 算法实现吗
  2. 如果我不应该做加密,哪一个应该是最好的散列算法。

我在实现 Rijndael 算法时参考了以下网站。

http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndael(v=vs.110).aspx

How to generate Rijndael KEY and IV using a passphrase?

http://www.obviex.com/samples/encryption.aspx

【问题讨论】:

标签: c# algorithm security encryption hash


【解决方案1】:

OWASP 列出了一些good practices for password storage

您基本上应用 protection_function 将凭据转换为受保护的形式: [protected form] = [salt] + protect([protection func], [salt] + [credential]);

您还添加了盐,因此同一凭据的两个版本具有不同的存储形式。

他们还列出了您应该选择散列函数的顺序(是的,散列比加密更好,因此即使网站所有者也无法对密码进行逆向工程)。 Argon2 和 PBKDF 通常是protection_function 的不错选择。

也请阅读指南的其余部分。还有this related Security SE post,为什么 AES(即 Rijndael)加密的密码存储甚至比不那么强的哈希更糟糕(@Salvador 的评论)。

【讨论】:

  • 你的回答与他的问题有什么关系?他问了 Rijindael 算法,你只是给了他 owasp 链接。
  • @SalvadorDali OP 说:If I should not do encryption, Which one should be a best hashing algorithm。 OP 不应该使用加密,OP 应该散列并且 OP 应该使用我提供的最佳实践。
【解决方案2】:

加密的问题在于,当攻击者得到密钥后,他可以立即解密数据库的所有密码,从而知道可以在其他站点上尝试的原始密码。

由于散列是不可逆的(无法取回原始密码),攻击者无法使用散列,即使他控制了服务器。网站所有者也是如此。

今天推荐的算法是 BCrypt、PBKDF2 和 SCrypt,它们都有一个成本因子来控制计算单个哈希所需的时间。它需要的时间越长,暴力破解就越困难。

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 2021-11-26
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多