密码哈希在Windows商店应用程序

本文关键字:应用程序 Windows 哈希 密码 | 更新日期: 2023-09-27 17:50:06

我正在为我的应用程序编写认证服务。客户端将通过HTTP连接到此认证服务以注册或连接。在它们连接之后,它们将收到一个会话密钥,它们可以使用加密TCP/UDP数据包发送到辅助服务器。这仍然是在制品,所以,只是给你一个大局观。

服务器端,我使用BCrypt来哈希传入的密码。并将其存储在数据库中。在服务器端,我还使用BCrypts验证方法来检查存储散列的任何传入密码。这就可以了。

然而,我自然不想在网上传输一个未散列的密码。Windows Store应用程序没有BCrypt,但我发现了一些MSDN示例代码,演示如何使用Windows Store应用程序的新加密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对密码客户端进行哈希是否"足够",如上面代码中所示。

密码哈希在Windows商店应用程序

在没有TLS保护的情况下执行任何类型的身份验证都会给您带来漏洞。Bcrypt服务器端可以为您提供有限的保护,防止对被盗数据库的攻击。然而,不受保护地发送(散列)密码应该被认为是一种安全风险。


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

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