我的同事和我正在就密码安全进行拳头文明讨论.请帮助我们解决分歧.
我们其中一个人认为:
除了单向散列版本之外,存储使用公钥加密的密码是可以的,并且在合并或获取的情况下将来可能对与其他身份验证系统的集成有用.
只有首席执行官/首席技术官才能访问私钥,并且只在必要时使用.通过哈希密码仍然可以进行常规登录验证.
我以前曾经在以前的公司做过这样的事情,并且有许多网站都做到了这一点,并且之前已经幸免于财富500强公司的安全审计.
这是一种普遍的,公认的做法,即使对金融机构也是如此,因此无需在隐私政策中明确说明这一点.
像Mint.com这样的网站就是这样做的.
我们中的另一个人采取以下观点:
即使以加密形式存储密码也是不必要的安全风险,最好避免首先暴露于此风险.
如果私钥落入坏人之手,那么在多个站点上使用相同密码的用户可能会面临所有登录受到侵害的风险.
这违反了我们用户的信任,如果实施这种做法,他们应该明确告知这一点.
这不是一个行业范围的做法,没有大牌网站(谷歌,雅虎,亚马逊等)实现这一点.Mint.com是一个特例,因为他们需要代表您对其他网站进行身份验证.此外,他们只将密码存储到您的金融机构,而不是密码存储到Mint.com本身.
这是审计中的一面红旗.
思考?评论?你是否曾在一个实施这种做法的组织工作过?
存储可恢复版密码的第一种做法是完全错误的.无论大型网站如何做到这一点.这是错误的.他们错了.
我自动不信任任何存储密码的网站.谁知道如果这家大公司的员工决定玩得开心会发生什么?有一个案例来自雅虎偷走并出售用户电子邮件.如果有人用我的电子邮件和密码窃取/销售整个数据库怎么办?
您无需知道我的原始密码即可执行身份验证.即使您稍后决定拆分系统,添加新系统或与第三方集成,您仍然可以使用密码的哈希值.
CEO为什么要比其他人更可靠/更值得信赖?有一些高级政府人员丢失机密数据的例子.
常规站点没有理由存储密码,而不是单个密码.
如果将来这些私钥可能被破坏会发生什么?如果使用的密钥是弱密钥,就像刚刚在Debian中发生的那样.
最重要的是:为什么人们会冒这么大的风险,几乎没有任何好处.大多数公司都不需要加密密码.
以可逆形式存储密码是不必要且有风险的.
在我看来,安全漏洞似乎比合并密码表的可能性要大得多.此外,安全漏洞的成本似乎远远高于实施迁移战略的成本.我相信不可逆地散列密码会更安全.
在公司合并的情况下,用于散列密码的原始算法可以在组合密码表中记录,并且调用不同的例程来验证由该标识符确定的不同用户的密码.如果需要,此时也可以更新存储的散列(及其标识符),因为在登录操作期间用户的明文密码将可用.这将允许逐渐迁移到单个散列算法.请注意,密码应该在一段时间后过期,因此这将是迁移所需时间的上限.
攻击加密密码有几种方法:
解密密钥管理者可能已损坏.他们可以解密密码并窃取密码.监护人可以自己做这件事,或者他可以被其他人贿赂或勒索.没有经过特殊培训的高管也特别容易受到社会工程的影响.
也可以对用于加密的公钥进行攻击.通过用自己的一个替换真实公钥,任何应用程序管理员都可以收集密码.如果只有CEO拥有真正的解密密钥,那么很长一段时间都不可能发现这一点.
假设这场战斗失败了,密码是加密的,而不是哈希,我会争取几个让步:
至少,解密密钥应该需要多人的合作才能恢复.像Shamir的秘密共享算法这样的密钥共享技术将非常有用.
还需要采取措施保护加密密钥的完整性.存储在防篡改硬件令牌上,或使用基于密码的MAC可能会有所帮助.
并且可能有助于将来与其他身份验证系统集成
如果没有立即需要以可逆加密格式存储密码,请不要.
我在金融机构工作,这里的交易是:没有人应该知道用户的密码,因此在任何地方使用的默认和实施的策略是:一种方法使用强哈希算法对密码进行哈希处理.
我曾经支持这个选项:你不想遇到丢失双向加密密码或者有人偷了它并且可以读取存储密码的情况.
如果有人丢失了密码,你只需更改密码并将其交给他们.如果公司需要合并,他们必须保持散列密码的方式:安全性高于一切.
这样考虑一下:你是否将你的家庭钥匙存放在一个锁上钥匙的盒子里,或者你最好每次都把它们随身携带?在第一种情况下:每个人都可以使用正确的钥匙或电源来打开盒子,在第二种情况下让你的钥匙成为一个潜在的破坏者应该威胁到你或以某种方式从你身上带走他们......与密码相同,如果它们在锁定的数据库上进行哈希处理,就像没有人拥有它们的副本一样,因此没有人可以访问您的数据.
当密码是单向散列并且不是问题时,我不得不在站点之间移动用户帐户(可能在合并或收购中发生).所以我不明白这个论点.
即使两个应用程序使用不同的哈希算法,也会有一种简单的方法来处理这种情况.