Windowsapp store中的密码哈希

我正在为我的应用程序编写身份validation服务。 客户端将通过HTTP连接到此身份validation服务以进行注册或连接。 连接后,他们将收到一个会话密钥,他们可以使用加密的TCP / UDP数据包发送到辅助服务器。 这仍然是WIP所以,只是为了给你一个大图概述。

在Serverside中,我使用BCrypt来哈希传入的密码。 并将其存储在数据库中。 在Serverside中,我还使用BCrypts Verify方法检查存储哈希的任何传入密码。 所以这基本上有效。

但是,我自然不想通过线路传输未加密的密码。 Windows Store应用程序没有BCrypt,但我发现了一些MSDN示例代码,演示了如何使用新的Cryptography API for Windows Store应用程序来散列字符串,如下所示:

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); } 

我计划让各种客户端连接到该服务,而不仅仅是Windowsapp store应用程序(也是传统的Windows桌面应用程序)。 所以很自然地我想要“一种”方式来散列密码客户端。

我需要有关我应该实现的其他安全机制的建议,如果使用SHA512对密码客户端进行散列,如上面的代码中所示,在将其传输到服务器(在存储之前再次散列并加盐)时“足够”。

在没有TLS保护的情况下执行任何类型的身份validation都会使您遇到漏洞。 Bcrypt服务器端可以为您提供有限的保护,防止对被盗数据库的攻击。 但是,在线路上不受保护的发送(散列)密码应被视为安全风险。


应该可以向客户端引入至少盐和工作因子。 这些参数可以从服务器端检索,因为它们需要保持不变。 然后你可以使用brypt客户端。 你说它在API中不可用,但这不应该与你有关。 Bcrypt只是一种算法,并且将在线提供它的实现。

攻击者(窃听者)仍然可以使用暴力攻击和字典攻击,但是它们将更难完成,为具有中等强度密码的用户提供有限的保护(如果客户端代码可以信任)。