C# Windows应用商店应用程序中的密码哈希

C# Windows应用商店应用程序中的密码哈希,c#,.net,hash,.net-4.5,windows-store-apps,C#,.net,Hash,.net 4.5,Windows Store Apps,我正在为我的应用程序编写身份验证服务。客户端将通过HTTP连接到此身份验证服务以进行注册或连接。连接后,他们将收到一个sessionkey,可以使用加密TCP/UDP数据包发送到辅助服务器。这仍然是在制品,所以,只是给你一个大的图片概述 服务器端,我使用BCrypt散列传入密码。并将其存储在数据库中。在服务器端,我还使用BCrypts-Verify方法检查任何带有存储哈希的传入密码。所以这基本上是可行的 但是,我当然不想通过网络传输未加密的密码。Windows应用商店应用程序没有BCrypt,但

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

服务器端,我使用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服务器端可以为您提供有限的保护,以防止对被盗数据库的攻击。但是,通过线路发送(散列)未受保护的密码应视为安全风险


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


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

我认为没有SSL就无法确保安全。。。您无法保护它免受中间人攻击者的攻击。为什么不使用非对称密钥@你能详细说明一下吗?你的意思是我应该创建一个不对称的“会话”键?两个(或更多)选项。对所有通信使用非对称,或仅使用非对称传递对称密钥。对称密钥更快。