首页
学习
活动
专区
圈层
工具
发布

DPAPI +熵
EN

Stack Overflow用户
提问于 2010-03-11 01:12:34
回答 2查看 1.1K关注 0票数 4

我们有一个WPF应用程序,允许我们的用户下载加密内容,我们希望提供离线解密此内容的能力。我们的想法是下载密钥并使用DPAPI存储它们,但是我在使用熵参数时遇到了问题。

有没有办法在不对DPAPI函数进行硬编码/存储的情况下生成熵以一致地用于DPAPI函数?

谢谢,托尼

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-10 06:59:38

来自Securely Storing Optional Entropy While Using DPAPI

您在本地存储的任何内容都可能被泄露。但是,您可以采取一些步骤来使其变得更加困难。Handling Passwords上有一篇文档,你可以考虑看一看。您可以将Entropy密钥视为特定于您的应用程序的密码。

我将把你的熵作为你的键,因为它在功能上是一个额外的键。

你不想做的是以未加密的格式在本地存储你的密钥。相反,您希望加密您的密钥,或者从另一个不明显的来源派生密钥。当然,如果您加密密钥,那么您需要存储用于加密它的密钥-但通常情况下,这种单一的间接层足以阻止大多数挑战者。

这将是派生密钥的优点。您可以将其派生为其他一些常量数据的散列(需要是不随应用程序的修订而改变的内容)。不过,派生散列的一个技巧是将散列与其他常量值(如GUID或大型随机数)组合在一起,这样其他人就不能简单地组合已知的散列算法并获得您的密钥。与创建自己的散列算法相比,这是一个更好的选择(除非你拥有数学博士学位,否则永远不应该这样做)。

在某些情况下,您将需要在应用程序中硬编码某种类型的密钥。这个密钥或者与散列中的一些其他数据组合在一起,以创建您的熵密钥,或者用于解密熵密钥。实际上,您可以在应用程序的新版本中更改密钥,只要您保留旧密钥以解密现有密钥。然后您可以使用新的密钥或方法对其进行重新加密。

如果您想要最好的安全性,那么您可以将熵密钥存储在计算机之外。这需要internet连接和SSL证书,但是它们的密钥永远不会保存在本地任何地方以供发现。为此,您可以设置一个更健壮的质询响应系统,以便每次请求身份验证都不同,并且密钥通过SSL加密传递,因此不会被截获。一旦密钥被使用,它就会被丢弃。当然,这种情况违背了许多使用DPAPI进行本地安全存储的场景的目的。

无论您做什么,请记住,它将受到损害-当某人拥有对本地计算机和存储在其中的数据的完全访问权限时,总是会发生这种情况。解决这个问题的方法是不断发布更新,这些更新足够改变方法,使得旧的破解不再有效。这会降低破解的发行价值,因为很难找到正确版本的破解。

票数 2
EN

Stack Overflow用户

发布于 2017-06-26 10:29:01

有时,您的使用提供了一个方便的熵值。例如,如果你想加密一个网站的密码(就像浏览器一样),你的熵值可以是网站的url。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2418936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档