【问题标题】:Encrypting using user's password使用用户密码加密
【发布时间】:2011-11-11 05:08:05
【问题描述】:

我想在使用 WINAPI 的 Windows 机器上使用登录用户的密码加密给定数据。我一直在寻找一个使用令牌(或类似的东西)的函数,但我找不到。

有人知道怎么做吗?

谢谢! :-)

【问题讨论】:

  • 只是为了说明这一点:您希望最终能够恢复您正在加密的数据,对吗?您不是在尝试存储用户的密码,而是使用它来派生加密密钥,对吧?

标签: c++ windows winapi encryption


【解决方案1】:

Windows Data Protection API 听起来像是您需要的。 CryptProtectData and CryptUnprotectData 函数使用当前用户的登录凭据执行加密。

【讨论】:

  • 我想知道:系统上的管理员能否恢复足够的信息来“取消保护”受系统上任何用户保护的数据?文章说凭据本质上只是一个密码哈希。
  • @Kerrek:它使用登录凭据。可选的熵参数很好,可选。管理员可以模拟任何人,但 DPAPI 在模拟下不起作用(因此我不得不放弃使用它)。它可以被哄着工作,但它需要一些努力。
  • 我的意思是更底层一点:由于加密只是使用密码哈希作为密钥的一些众所周知的密码,管理员可以从系统中检索所有哈希并解密 blob直接,不是?
  • @Kerrek:像往常一样,答案是肯定的,他们可以,这取决于他们愿意付出多少努力。可选的熵为您提供了另一层保护。
  • @Martinho,为了更好地理解,EFS 是否使用密码的 hash 进行加密?如果是这样,我必须承认我有点惊讶。
【解决方案2】:

我之前写过这个答案,但后来重新考虑,因为我以前没有听说过 DPAPI。但是,经过进一步考虑,我想提出以下意见。不过,这里重要的前言是这一切都取决于您的需求。我想到了两种相互矛盾的可能性:

  1. 您希望为您的用户提供完整的保护和加密,用户可以信任只有她才能在任何情况下解密。

  2. 您是一名企业 IT 经理,并且对所有员工都束手无策。您希望他们将业务数据加密作为其工作流程的一部分,这样他们就无法看到彼此的数据,但管理员可以愉快地读取每个人的数据。

如果您处于情况 (2),那么现在停止阅读并使用非常适合这种情况的 DPAPI。如果您更喜欢场景(1),请阅读下面我的原始答案。


这可能不是一个好主意。原因如下:

实际密码不会存储在系统上(除非您有 Windows 3.11 或类似的系统)。相反,只会存储密码的哈希值,并且在登录时用户输入的密码会被哈希并与存储的哈希值进行比较。

所以充其量你可以从系统中检索存储的哈希(如果你有管理员权限,比如说)。但是,如果这是您可以继续使用的唯一数据,那么您制作的任何加密密钥都将来自该哈希,而不是来自实际密码。因此,任何有权访问系统的人都可以获取存储的哈希,并从那里相对容易地导出加密密钥。

简而言之,不要。要求用户为您的数据提供一个专用的新密码,并仅用于此目的。

【讨论】:

  • 您可以使用 DPAPI 并仍然要求用户提供专用密码。这就是 CryptProtectData 中可选的熵参数的用途。
  • 是的,但是 OP 似乎想专门使用登录密码。当然,您可以使用 DPAPI 作为 (1) 的实现。
  • 同意。让我强调一下你的最后一段:要求一个专用密码,而不是登录密码,并说清楚。请不要训练用户在被要求的任何地方输入他们现有的密码。
  • 呵呵 - 是的,在一个理想的世界里 :-) 虽然你是如履薄冰,但你宁愿重复使用密码还是在键盘下贴上所有唯一密码的便利贴?您重复使用的密码是否存储在 LeetBlogz 纯文本数据库中?多么雷区……
【解决方案3】:

使用 Kerberos(基于 Linux 的身份验证服务器,或使用 Kerberos 的其他服务器)/LDAP 框架(Windows 服务器),而不是设计自己的登录算法。

Windows 平台 SDK 和第 3 方库具有与这些框架的连接器。

MSDN 中有关 Kerberos 的更多信息:http://msdn.microsoft.com/en-us/library/ff649429.aspx

【讨论】:

    【解决方案4】:

    【讨论】:

    • 问题是关于加密数据,而不是存储密码。
    猜你喜欢
    • 2010-10-23
    • 2015-03-14
    • 2011-04-09
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多