ProtectedData.Protect(DPAPI)的安全性如何?

假设有人访问我的所有硬盘,我想弱点将是我的Windows密码。 在不知道/无法检索到的情况下,数据应该非常安全,不是吗?

我特别要求,因为维基百科中的EFS条目表明了这一点

在Windows 2000中,本地管理员是默认的数据恢复代理,能够解密任何本地用户使用EFS加密的所有文件。

和EFS碰巧使用DPAPI。 这同样适用于我自己使用此保护的数据:

ProtectedData.Protect(plain, null, DataProtectionScope.CurrentUser); 

如果确实如此,我怎么能阻止它呢?

[编辑] NB我正在尝试存储winforms应用程序的凭据,这样用户每次登录时都不必输入密码。 换句话说,如果有人能够以该用户身份登录(即知道用户密码),那么他们也可以读取加密数据。

哪个 – 不是来自Windows背景 – 现在让我想知道 – 无论如何本地管理员都不能像任何本地用户一样登录? 在这种情况下,我不应该担心管理员无论如何都能够检索密码……

[Edit2]谷歌透露,看起来管理员不能像任何用户一样登录而不首先重置/更改密码。 所以我的问题似乎仍然相关……

EFS使用DPAPI,而不是相反。 管理员无法像这样读取您的密钥。

在忘记DPAPI之前,我会考虑其他选择。 如果你自己加密文件,

  1. 您必须选择一个强大的算法并很好地实现它。
  2. 你需要一把钥匙。 它会在哪里?
  3. 您将密钥存储在驱动器上的某个文件中。
  4. 该密钥很敏感,显然,您需要对其进行加密
  5. 转到1

DPAPI做1到3井。 4和5是没有实际意义的。 如果Windows密码不足以保护数据,请问问自己为什么首先对这些数据进行CRUD就足够了。

为了更好的安全性,如果可能的话,您可以考虑不保存数据,而是保存数据(盐渍)。 但它只会使您的数据写入。 例如,如果要validation客户许可证号:

  • 保存它的盐渍哈希值
  • 在要validation的盐渍许可证号上运行相同的哈希,
  • 比较两者。 它们匹配,许可证有效。

如果您必须回读加密数据并且本地加密密钥不够,请考虑使用存储在智能卡上的私钥加密您的应用程序密钥(上面的步骤2)。

无论哪种方式,请记住事情发生。 你总是需要一个备份密钥。

请参阅有关DPAPI安全性的这篇文章 。 基本上,它与您的Windows密码一样安全 – 如果您的密码被管理员重置,则解密密钥将丢失。 您需要查看的主要攻击媒介是:

  • 密码泄露:“肩上冲浪”,粘滞便笺等
  • 捕获计算机的帐户数据库并使用密码破解程序
  • 通过“偷渡式下载”,可移动媒体自动播放等进行在线攻击
  • 捕获密码重置盘,如果你已经创建了一个
  • 密钥记录设备的物理安装或其他“bug”

DPAPI可以在有和没有可选熵的情况下使用。 只有两种方法可以破坏没有可选熵的DPAPI blob:

  1. 域管理员可以随时直接检索任何人的DPAPI主密钥历史记录。 不需要其他任何东西。 这些可用于解密所有blob。 本地管理员无法执行此操作。

  2. 用户的Windows凭据已泄露。

如果您使用可选熵,那么任何不知道该值的都无法解密数据。 熵可以从启动应用程序等所需的密码导出。没有该值,数据将永久丢失。

EFS的工作方式不同。 用户的密钥使用DPAPI保护其配置文件,但文件本身的解密密钥也使用管理员的公钥直接加密。 因此,域管理员可以访问这些文件。