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

Wal*_*eel 17 .net c# encryption

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

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

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

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

ProtectedData.Protect(plain, null, DataProtectionScope.CurrentUser);
Run Code Online (Sandbox Code Playgroud)

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

[编辑]注:我试图保存凭据WinForms应用程序,使用户不必输入密码每次登录的时间.换句话说,如果有人能够登录为用户(即知道用户密码),那么他们很可能会成为能够读取加密的数据.

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

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

ixe*_*013 18

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

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

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

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

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

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

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

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


Jef*_*tin 5

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

  • 密码泄露:“肩上冲浪”、便签等。
  • 计算机帐户数据库的捕获和密码破解程序的使用
  • 通过“偷渡式下载”、可移动媒体自动播放等方式进行在线攻击。
  • 捕获密码重设盘(如果您已制作)
  • 按键记录设备或其他“错误”的物理安装

  • “如果管理员重置了您的密码,解密密钥将会丢失。” - 不符合[本文](https://msdn.microsoft.com/en-us/library/ms995355.aspx?f=255&MSPPError=-2147217396)。它说“DPAPI 挂钩到密码更改模块,当用户的密码更改时,所有 MasterKey 都会在新密码下重新加密。” (2认同)
  • @Jez,在密码更改(与密码重置不同)中,提供旧密码以便可以解密旧密钥;密码重置盘可以为自重置旧密钥提供备份。对于域帐户,备份密钥也可能存储在域控制器中,但对于本地帐户,密码重置盘是唯一的备份。 (2认同)