因此,我正在尝试使用DPAPI存储对称键。一切都很好,但是如何处理熵呢?这个回答的问题 这里 确实没有提供足够的见解。这似乎是一个滑坡 - 我可以使用机器商店存储熵,但是那是什么也阻止某人也无法做到呢?注意:我使用用户范围存储当前键。

所以我的问题是 - 使用DPAPI存储熵的最佳方法是什么?

有帮助吗?

解决方案

您本地存储的任何东西都可能遭到损害。但是,您可以采取一些步骤使它更加困难。有一个文件 处理密码 您可能会考虑查看。您将熵键视为特定于应用程序的密码。

我将您的熵称为您 钥匙, ,因为它是功能上的附加键。

您不想做的是以未加密的格式在本地存储您的密钥。取而代之的是,您想加密密钥,或者是从另一个很明显的来源得出的。当然,如果您的密钥加密,则需要存储用于加密它的密钥 - 但是通常,这种单层间接方向足以阻止大多数挑战者。

那将是推导您的钥匙的优势。您可以将其作为其他恒定数据的哈希来得出(需要随着应用程序的修订而变化)。得出哈希时,一个窍门是将哈希人与其他恒定值(例如GUID或大型随机数)相结合,以便其他人不能仅将已知的哈希算法组合并获取您的键。这是创建自己的哈希算法的更好替代方法(除非您拥有数学博士学位,否则您永远不要这样做)。

在某个时候,您将需要在您的应用程序中进行某种密钥硬编码。该键要么与哈希中的其他数据结合使用以创建熵键,要么用来解密熵键。实际上,只要您保留解密现有密钥的旧密钥,您就可以通过对应用程序进行新的修订进行关键更改。然后,您可以使用新密钥或方法重新加密它。

如果您想要最佳的安全性,则可以将熵键存储在计算机上。这将需要Internet连接和SSL证书,但是随后它们的钥匙永远不会在当地的任何地方持续存在。为此,您可以设置一个更强大的挑战响应系统,因此每次请求身份验证都不同,并且通过SSL加密传递键,因此无法截获。一旦使用键,就将其丢弃。当然,这种情况破坏了您使用DPAPI进行本地安全存储的许多情况的目的。

无论您做什么,请记住,它将被妥协 - 当某人完全访问本地计算机及其存储的数据时,总是会发生这种情况。解决方案是继续释放更新,以使旧裂纹不再起作用。这将使裂纹的分配不那么有价值,因为很难找到合适的版本。

其他提示

首先,让我解决原始帖子问题。它归结为这样的事实,即如果要使用持续的存储,则必须在用户的权限和/或应用程序的权限下存储熵。我想您可以使用包含该应用程序的密钥来加密持久商店中的信息,但是再次,恶意应用程序将能够访问此加密密钥。因此,我认为没有一种方法可以防止您在评论中提到的情况。但是,鉴于您所说的是熵的预期使用,我认为它没有帮助解决您的问题。

听起来好像实际问题正在建立客户端应用程序和服务器之间的安全通信渠道。在您的设计中,您正在交换将用于加密通信的密钥。我认为尝试使用自定义代码解决此问题将导致其他安全漏洞。

鉴于所有这些,我建议创建用于检索敏感信息的WCF(Windows Communication Foundation)服务。显然可以用来检索所有信息,但是最少的更改将是将服务仅限于敏感信息。

使用WCF,您可以配置客户端和服务器以使用安全频道。 WCF有很多选择来建立与服务器的安全通信渠道。

<wsHttpBinding>
    <binding>
        <security mode="Transport">
            <transport clientCredentialType="Windows" />
        </security>
    </binding>
</wsHttpBinding>

一旦拥有安全的频道,其他许多问题都会更简单,例如访问CC数据。如果该数据被从安全的渠道发送下来,它将成为授权的问题,而不是渠道安全性。

如何:创建安全的会话 更多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top