- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的应用程序编写身份验证服务。客户端将通过 HTTP 连接到此身份验证服务以进行注册或连接。连接后,他们将收到一个 session key ,他们可以使用加密的 TCP/UDP 数据包发送到辅助服务器。这仍然是 WIP,只是为了给您一个大的概览。
服务器端,我使用 BCrypt 来散列传入的密码。并将其存储在数据库中。在服务器端,我还使用 BCrypts Verify 方法使用存储的哈希检查任何传入的密码。这样基本上就可以了。
但是,我自然不想通过网络传输未经哈希处理的密码。没有适用于 Windows 应用商店应用程序的 BCrypt,但我找到了一些 MSDN 示例代码,演示了如何使用适用于 Windows 应用商店应用程序的新密码学 API 来散列字符串,如下所示:
public static string Hash(string password)
{
HashAlgorithmProvider provider =
HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha512);
CryptographicHash hash = provider.CreateHash();
IBuffer buffer = CryptographicBuffer.ConvertStringToBinary(password, BinaryStringEncoding.Utf16BE);
hash.Append(buffer);
IBuffer hashedBuffer = hash.GetValueAndReset();
return CryptographicBuffer.EncodeToBase64String(hashedBuffer);
}
我计划让各种客户端连接到该服务,不仅是 Windows 应用商店应用(还有传统的 Windows 桌面应用)。所以很自然地我想要“一种”方式来散列密码客户端。
我需要关于我应该实现的其他安全机制的建议,如果使用 SHA512 对密码客户端进行哈希处理(如上面的代码所示)在将其传输到服务器时“足够”(在存储之前再次对其进行哈希处理和加盐)。
最佳答案
在没有 TLS 保护的情况下执行任何类型的身份验证会给您留下漏洞。 Bcrypt 服务器端可以为您提供有限的保护,以防止对被盗数据库的攻击。然而,通过线路发送不 protected (散列)密码应被视为安全风险。
至少应该可以向客户端引入一个salt和一个work factor。这些参数可以从服务器端检索,因为它们需要保持不变。然后你可以使用 brypt 客户端。你说它在 API 中不可用,但这不应该让你担心。 Bcrypt 只是一种算法,将会有在线可用的实现。
蛮力攻击和字典攻击仍然可供攻击者(窃听者)使用,但它们将更难完成,为具有中等强度密码的用户提供有限的保护(如果客户端代码可以信任)。
关于c# - Windows 商店应用程序中的密码散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14069739/
我是一名优秀的程序员,十分优秀!