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

时间:2011-01-21 06:32:01

标签: c# .net encryption

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

我特别要求,因为维基百科中的EFS entry表明了

  

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

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

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

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

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

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

[Edit2] 正如谷歌所揭示的那样,管理员无法只是以任何用户身份登录而不首先重置/更改密码。所以我的问题似乎仍然相关......

3 个答案:

答案 0 :(得分:17)

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

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

  1. 您必须选择一个强大的算法并很好地实施它。
  2. 你需要一把钥匙。它会在哪里?
  3. 您将密钥存储在驱动器上的某个文件中。
  4. 这个密钥很敏感,很明显,你会想加密它
  5. 转到1
  6. DPAPI做得好1到3分。 4和5是没有实际意义的。如果Windows密码不足以保护数据,请问问自己为什么首先CRUD数据就足够了。

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

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

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

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

答案 1 :(得分:4)

this article on DPAPI Security。基本上,它与您的Windows密码一样安全 - 如果您的密码被管理员重置,则解密密钥将丢失。您需要查看的主要攻击媒介是:

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

答案 2 :(得分:1)

DPAPI可以使用和不使用可选熵。只有两种方法DPAPI blob 没有可选熵可能会受到影响:

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

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

  3. 如果您使用可选熵,那么任何人都无法解密数据。熵可以从启动应用程序所需的密码中获得。如果没有该值,数据将永远丢失。

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