【问题标题】:Is there any more securely way to protect and store a password than Windows DPAPI do?有没有比 Windows DPAPI 更安全的方法来保护和存储密码?
【发布时间】:2012-09-26 12:55:55
【问题描述】:

有没有比 Windows DPAPI 更安全的方法来保护和存储密码?

我的程序需要存储一个秘密(例如凭据)以在 Windows 上进行自动登录,并且这个秘密必须与其他用户帐户共享,因为该程序可以在不同的帐户上运行但共享凭据。

我需要保护这个秘密不被篡改,以避免攻击者注入他自己的凭据并取得控制权。如果攻击者具有物理访问权限,我知道我们无能为力,但是....目前,存储和保护此秘密的最佳方法是什么?

【问题讨论】:

  • 如果你想自己控制安全,你可以使用你自己的函数实现。这在技术上是对称密钥加密的一个例子,因为用户有一个共享的秘密。请参阅hereherehere
  • 谢谢@Hiroto,但是对于对称密码学,我需要一个密钥来加密和解密数据,并且这个密钥必须存储在计算机中(例如文件),问题是,我怎么能保护这个密钥和文件免受远程篡改?攻击者可以篡改它们(密钥和带有加密数据的文件)。例如,我们可以使用 DPAPI 加密数据,将其存储在文件中并使用 ACL 保护它。但我不太确定这种情况是否最安全。

标签: windows security store


【解决方案1】:

如果您想保护某些东西不被篡改,您可能最好采用多级方法。这样做的缺点是获得访问权限(即使拥有所有机密)是一项天文壮举,并且会增加您的登录时间。

但请记住,系统的安全性取决于其最弱点;您可以将文件放在隐藏的加密卷中,隐藏在更多层的自定义加密之后,但如果您在办公桌旁的便利贴上有密码,那么它很可能不会长期安全。

这同样适用于 Windows 上的安全性。 ACL 和加密仅与您的管理员帐户一样强大。有关安全提示,请尝试Server Fault

就系统本身而言,通过密钥或数字证书以某种方式实施公钥加密(非对称加密)并为每个用户提供自己的个人密钥/ID 是一种更安全且风险更低的替代方案。
Windows 至少从 windows server 2000 开始就支持 pubkey 基础结构;如果您有硬件,您甚至可以使用智能卡登录。

考虑以下几点:
1. 攻击者从用户那里获得私钥(带有保护)。这可以在平均硬件上在一两个小时内打破@2048bit。在此示例中,您只需删除用户的公钥并让他们重新生成新密钥。
2. 攻击者获取了用户的数字证书,那么你有两种选择:

1) Remove their certificate from the Active Directory store, ACL or other certificate store.
2) Issue a revocation on the certificate, and forceably expire it. This assumes your are acting as the certificate authority.

简而言之,这个答案说明了一件事:如果您非常担心密码安全性,那么您不应该使用密码。如果您让您的系统永远崩溃,那么替代路线是密码的僵尸网络暴力破解。

【讨论】:

  • 非常感谢@Hiroto。我同意你的看法。我的系统能够检测到篡改尝试并相应地锁定此帐户,但即使使用此安全系统,我的意图也是尽可能地强化此机密以使篡改工作复杂化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2010-09-21
  • 2011-02-03
  • 2014-05-17
  • 2013-01-18
  • 1970-01-01
相关资源
最近更新 更多