在所有这些泄露/被盗/被黑客入侵的政府登录名/密码被盗之后,我开始思考。
这些密码怎么可能泄露?或者它们有什么实际用途吗?
所有这些密码不是以某种方式散列或加密的吗?除非密码以明文形式存储,否则一开始就试图窃取密码又有什么意义呢?
在所有这些泄露/被盗/被黑客入侵的政府登录名/密码被盗之后,我开始思考。
这些密码怎么可能泄露?或者它们有什么实际用途吗?
所有这些密码不是以某种方式散列或加密的吗?除非密码以明文形式存储,否则一开始就试图窃取密码又有什么意义呢?
假设我窃取了一个散列密码,我可以取一个随机字符串,对其进行散列,然后查看散列是否匹配。如果他们这样做了,那么我刚刚破解了你的密码。
例如,假设在某个哈希函数下,我们得到以下哈希表:
"cat" --> AA
"dog" --> AB
"elephant" --> AC
...
如果我窃取了密码数据库并看到您的哈希密码是,AB那么我知道明文密码是“dog”。(从技术上讲,多个字符串将散列为“AB”,但由于服务器正在比较散列,而不是原始密码,它们中的任何一个都会让我进入。所以实际上您的帐户有多个密码;任何散列到“AB”的字符串" 是您帐户的有效密码。)。
攻击者可以通过预先计算大量潜在密码的哈希值(通常通过组合字典单词或从先前破解的密码列表中获得)来破解哈希密码,然后将其用作查找表将哈希值转换回明文密码。
彩虹表的一个问题是,为了覆盖任何合理数量的候选密码,这个查找表的大小会增长到 TB,并且需要多个硬盘驱动器来存储它。可以想象,攻击者已经开发了优化反向哈希过程的花哨技巧,因此虽然彩虹表的总体思想很简单,但实际优化的实现很快就会变得非常复杂。
值得一提的是数据库管理员和开发人员针对彩虹表攻击使用的一些常见对策。
加盐是在散列之前将随机字符串(“盐”)附加到原始密码的技巧。每个用户都有一个唯一的盐,这意味着实际上每个用户都使用自己独特的哈希函数,因此攻击者不能重复使用彩虹表,并且必须为每个用户预先计算一个全新的表。
获取密码并通过强加密哈希函数的大量盐和哈希迭代,然后将其存储到数据库中(例如,SHA-2 的 100,000 次迭代),这使得预计算彩虹表。它还使用户登录速度变慢。
使用包含私钥的散列函数(这些散列函数称为HMAC)。这个想法是使用只有服务器知道的私钥来计算哈希,这样就不可能在不知道密钥的情况下计算彩虹表。这样做的问题是,当攻击者有足够的访问权限来窃取整个数据库时,他们通常也可以窃取私钥。
在您的问题中,您还提到存储加密密码。这与 3. 类似,除非您有保护加密密钥的好方法(例如,像HSM这样的专用硬件),否则攻击者将窃取密钥以及数据库。
登录凭据是在其他站点的密码转储中找到的。它们是用户名是 .gov 电子邮件地址的凭据。
令人担忧的是,人们倾向于重复使用密码,而这些网站上使用的密码是他们政府登录凭据的密码。
密码要么以明文形式存储,要么散列密码被猜测/暴力破解。
我认为你遗漏了一些东西——对于 OPM 闯入,问题是他们偷走了现场凭证。这是非常有用的。
话虽如此,请注意没有密码应该是有用的。理论上,每个工作人员都会获得一张智能卡,该智能卡在其个人身份验证卡中托管了 e-auth 4 级身份验证机制。(这是 FIPS 201 的东西,或 HSPD-12。)虽然此时不需要任何系统来删除所有密码(我知道),但所有系统都需要与 PIV 身份验证兼容,这是一个毫无疑问,如果你有这个东西并且需要与它互操作,请继续使用它。(希望有一些 SAML 钩子可以让您在 PIV 不可用但具有相同强度时有替代方案。电话回拨很正常。)