4

好的,经过大量研究后,我决定使用 bcrypt(随时发表评论)在我的 phonegap 应用程序中散列和存储密码。

几天前,我偶然发现了 Bcrypt.net,它对我来说似乎“足够好”(再次,请随时发表评论)。所以,我的问题是 C# 中还有哪些 bcrypt 的其他替代实现?Bcrypt.net 的实施是否存在严重缺陷?

我的安全模型基本上是这样的:

  1. 用户在客户端输入他的密码/密码/密码
  2. 这通过安全 SSL 发送到我的 .net 应用程序(所以基本上从客户端以明文形式发送)
  3. 使用像 bcrypt.net 这样的库来散列密码并进行存储/比较

还有什么我真的需要考虑的吗?

任何帮助将不胜感激。

4

3 回答 3

3

很高兴看到有人在这里做了一些研究。

我还没有看到你不应该使用 bcrypt 的任何充分理由。通常,在服务器上使用 bcrypt、PBKDF2 或 scrypt 来提供良好的安全层。

一如既往,魔鬼在细节中。您当然需要 SSL,如果可能的话 TLS 1.2 使用 AES 加密。如果您无法做到这一点,请确保您在连接中除了用户名/密码 + 必要的 HTML 之外不允许其他任何内容。

您应该决定密码的字符编码。我建议 UTF-8,可能缩小到可打印的 ASCII 字符。记录使用的字符编码或将其存储在配置中的某个位置。

尝试将所有输入参数与“散列”密码一起存储到 bcrypt。当然不要忘记迭代次数。这使得当用户稍后输入他/她的密码时更容易升级到更高的迭代次数。您需要生成一个 8-16 字节的安全随机盐来存储密码。

此外,您可能希望将额外的 KBKDF(基于密钥的密钥派生方案)应用于上述任何 PBKDF 的输出。这使得将输出bcyrpt用于附加键等成为可能。KBKDF 处理具有足够熵的数据,因此它们通常花费很少的时间(例如,使用 NIST SP 800-108 兼容的计数器模式 KDF)。我想这应该被认为是“专家模式”。

于 2013-07-26T21:27:52.080 回答
1

你对 bcrypt 很好。

来自破解者的出色研究:https : //crackstation.net/hashing-security.htm#faq 来自 sophos 的额外验证:http: //www.sophos.com/en-us/medialibrary/PDFs/other/sophossecuritythreatreport2013.pdf

bcrypt 也是 c# 库的一部分:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa375383 (v=vs.85).aspx

于 2013-07-26T19:55:16.303 回答
1

进行密码散列的主要原因是:

一个。密码明文不会通过线路(主要)传输。
湾。密码明文永远不会保留在服务器上(辅助)

所以你的设置 - 你没有做。而是依靠 SSL。如果可能的话,我认为你仍然应该在客户端散列。为您的未来更改留出更多余地,一般而言,密码应该比您的内容数据具有更高的安全性/保护。

另外,我不知道您可能支持哪种服务器应用程序/可扩展性,因此再次将密码与代码隔离可能仍然是一个额外的问题。

至于进行哈希的实际算法/实用程序 - 我没有安全专业知识:)

于 2013-07-26T20:01:51.527 回答