许多网站( 包括 Adobe,Yahoo,LinkedIn,Gawker等大型网站)不安全地存储用户密码。 可以是纯文本格式的,也可以是加密的(可逆的)格式,或者是使用残破或蛮力的哈希函数。 许多网站的密码存储机制仍然很差。
所以呢? 好吧,如果数据库以某种方式泄漏(很明显它确实发生了,请参见上面的链接),则用户将有麻烦–不仅是他们在有问题的站点上的帐户受到了威胁–由于在网络上,他们在网上的许多帐户也可能受到了威胁用户重用密码的自然趋势。 因此,如果您的网站损坏了,那不仅仅关乎您,还关乎用户的其他帐户,仅此而已就意味着事情很严重。
是的,我们知道如何实现它–使用bcrypt / PBKDF2 / scrypt 。 我们知道,但很多人不知道。 因此,我认为最好给一个好的网站一种方法,向他们的用户证明他们认真对待密码问题。
因此,我创建了SaltedHashed.com (作为一个周末项目)。 它要求网站所有者将其密码存储机制公开为类似REST的API端点,我的服务会定期调用该端点以检查一切是否正常。 调用由随机生成的密码组成,网站必须使用其使用的算法以及存储在数据库中的密码的最终形式进行响应。
成功完成此过程后,站点将获得一个徽章(例如(过去)拥有的“ Valid XHTML”,“ Valid CSS”,“由VeriSign保护”等徽章),上面写着“我们安全地存储密码”,链接到获取网站最新状态并向用户说明为什么这很重要的页面。 我知道不是很多,但是它很少有机会提高对该问题的认识,这很重要。
唯一被认为是安全的算法是Bcrypt,PBKDF2和Scrypt。 SHA-512不是 。 没有简单的哈希函数。 不允许加密(因为它是可逆的,并且如果攻击者掌握了您的密钥,则会显示所有密码)。
解决方案不是防弹的-有人可能会暴露伪造的Bcrypt端点,同时仍然使用纯文本密码,但是如文档中所述 -为什么您不使用已为实现“合规性”而实现的功能”? 总的来说,我认为开发人员为暴露端点所付出的努力是最小的。
该项目在GitHub上 。 它是用Java和Spring MVC编写的。 MongoDB用作数据库。 目前,它已部署在OpenShift(RedHat的PaaS)上,主要是因为它易于安装且免费。 (注意:我显然需要一个更好的设计师来至少修复徽章并减少网站的丑陋程度,即使Bootstrap将像我这样的开发人员所做的更改最小化也可以使它变丑)。 saltedhashed.com上的身份验证仅通过Mozilla Persona进行 –第三方身份验证不需要在我的一端存储密码(我实际上会向所有网站建议这样做)。
我正在尝试解决一个小而重要的问题。 我希望我至少可以帮助改善这种情况。
翻译自: https://www.javacodegeeks.com/2014/03/verifying-secure-password-storage-externally.html