2011-01-21 55 views
14

假设有人可以访问我所有的硬盘,我猜弱点将是我的Windows密码。不知道/能够检索,数据应该是非常安全的,不是吗?ProtectedData.Protect(DPAPI)的安全性如何?

我问维基百科的EFS entry其中指出

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

和EFS恰好使用DPAPI。那么这同样适用于我自己的使用此保护的数据:

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

如果确实如此,我该如何防止它?

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

哪一个 - 不是来自Windows背景 - 现在让我想知道 - 本地管理员无法登录本地用户吗?在这种情况下,我不应该关心管理员能够检索反正密码...

[EDIT2]随着谷歌透露,它看起来像一个管理员不能只需登录任何用户无需复位/首先更改密码。所以我的问题似乎仍然相关...

+0

鉴于您有物理访问权限,Windows密码非常容易中断。 (这可能在最近的版本中有所变化,尽管不是我所知的,但我很乐意证明是错误的。) – 2011-01-21 06:35:12

+0

@Matthew:任何支持该链接的链接? – 2011-01-21 06:36:54

回答

4

请参阅this article on DPAPI Security。基本上,它和你的Windows密码一样安全 - 如果你的密码被管理员重置,解密密钥将会丢失。你需要在看的主要攻击媒介:

  • 密码泄露:“肩窥”,即时贴等
  • 捕获计算机的帐户数据库,并使用密码破解的
  • 的“偷渡式下载”网上攻击,可移动介质自动播放等
  • 捕获密码重设盘,如果你做了一个按键记录器或其他“错误”
  • 之一
  • 物理安装
15

EFS使用DPAPI,而不是其他方式。管理员无法像这样读取您的密钥。

在忘记DPAPI之前,我会考虑替代方案。如果您自己对文件进行加密,您必须选择一个强大的算法并实施它。

  1. 您将需要一个密钥。它会在哪里?
  2. 您将密钥存储在驱动器某处的某个文件中。
  3. 这关键是敏感的,很明显,你会希望它
  4. 转到1

DPAPI加密功能1〜3井。 4和5是没有意义的。如果一个Windows密码不足以保护数据,问问自己为什么这个数据足以让CRUD摆在第一位。

为了获得更好的安全性,如果可能的话,可以考虑不保存数据,而是保存数据(盐渍)。不过,它只会让你的数据写入。例如,如果您想验证客户许可证编号:

  • 保存
  • 运行的盐腌哈希值在要验证腌制许可证编号相同的散列,
  • 比较两个。它们匹配,许可证有效。

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

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

1

DPAPI既可以使用,也可以不使用可选的熵。只有两种方式DPAPI斑点没有可选的熵会受到影响:

  1. 域管理员可以直接检索DPAPI主密钥的任何人的历史上任何时候。没有其他要求。这些可以用来解密所有的斑点。本地管理员不能这样做。

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

如果使用可选的熵则数据不能被任何人谁不知道这个值被解密。熵可能来自启动应用程序所需的密码等。如果没有该值,数据将永远丢失。

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