Windows应用商店中的密码哈希

时间:2012-12-28 12:41:46

标签: c# .net hash .net-4.5 windows-store-apps

我正在为我的应用编写身份验证服务。客户端将通过HTTP连接到此身份验证服务以进行注册或连接。连接后,他们将收到一个会话密钥,他们可以使用加密的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);
    }

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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