Encryption 密码处理最佳实践?

Encryption 密码处理最佳实践?,encryption,passwords,Encryption,Passwords,我们有许多网络服务和web应用程序以不同的方式对用户进行身份验证,其中一些由于非常糟糕的技术原因而具有不同的密码要求。例如,一个系统拒绝签名,直到有人“修复”某些Perl脚本中的字符串处理。另一个系统似乎在解析密码中的签名。另一个系统向用户发送密码,开发者很自豪地向我展示了这是用户名的可逆转换 我知道密码哈希是首选;但我想知道在向基于浏览器的软件过渡的过程中必须牺牲多少。为了我自己的教诲,为改变做准备,有没有关于密码处理和管理的权威参考资料,我可以向我所在部门的人员和负责其他服务的人员展示?设置

我们有许多网络服务和web应用程序以不同的方式对用户进行身份验证,其中一些由于非常糟糕的技术原因而具有不同的密码要求。例如,一个系统拒绝签名,直到有人“修复”某些Perl脚本中的字符串处理。另一个系统似乎在解析密码中的签名。另一个系统向用户发送密码,开发者很自豪地向我展示了这是用户名的可逆转换


我知道密码哈希是首选;但我想知道在向基于浏览器的软件过渡的过程中必须牺牲多少。为了我自己的教诲,为改变做准备,有没有关于密码处理和管理的权威参考资料,我可以向我所在部门的人员和负责其他服务的人员展示?

设置短长度限制和过滤字符是我经常看到的两个错误,这让我很恼火。正确地对密码进行散列应该可以完全消除这样做的需要,这对最终用户来说可能是一个真正的痛苦

我用MD5(Key+关键字)生成我的个人密码-例如,我的银行密码是MD5(“NotTelling”+“bank”)。许多网站似乎用强密码来阻止用户,但这从来没有一个好的理由

很明显,一个好的咸杂烩是最好的选择


有一篇关于最佳实践算法的好文章

对密码中允许哪些字符的限制越少越好-这会增加试图使用暴力的人的搜索空间。理想情况下,没有理由不允许密码中包含任何ASCII字符(除了控制字符和退格/换行符之类的字符)

就长度限制而言,最小限制是好的(在某种程度上,不要通过设置最小长度10来激怒用户),最大限制是坏的。如果有人想要一个50个字符的密码,就让他们来吧——只要你在散列,存储就不应该是个问题,因为散列的长度是恒定的

始终以不可逆散列形式存储密码-理想情况下,是加密安全的形式。没有理由以可逆的形式存储它们(如果有人忘记了密码,只需为他们设置一个新密码,不要试图“检索”它)。不要编写自己的散列算法——很可能你不是密码专家,而且有很多好的、经过验证的散列算法,它们的实现(代码或库形式)几乎适用于任何主流语言

用足够长的每用户盐为哈希加盐,以防止开裂

Pro PHP Security中的第5章和第6章涉及密码的存储和加密:

一些相关条款:


我建议你看看像这样的网站。它们涉及更广泛的web应用程序安全性主题,当然,密码保护是一个关键特性。我相信你会在那里找到更多的信息


也有类似的公司可以向您的开发团队传授最佳实践,并审核您现有的应用程序。

如果您设计了一个处理密码的系统,并且可以使用它获取用户密码,那么该系统就不安全


这是一个更一般的安全必要条件的一部分:设计师不应该破坏系统。

你在“商店”的界限在哪里?在公羊?在磁盘上?跨网络?涉及密码的网络通信通常应使用安全协议(例如,web应用程序的HTTPS)。通常很难避免在RAM中临时使用明文密码,因为用户在散列密码之前会以明文形式发送给您,但这通常不是问题。当密码到达磁盘/dba时,肯定应该对其进行哈希运算。是否有任何经过验证的哈希算法?我的总体印象是,有一些成熟的算法在使用,但它们慢慢地落在数学缺陷或计算能力的简单进步上。启示录9在他的答案中所联系的问题讨论了散列算法:我想我想说的是,我不知道像SHA-256这样的散列的任何“证明”,我还看到了一些减少的回合攻击:直到几个月前,SHA-1可能还被认为是一种成熟的技术。在6月份发布了一些新的攻击之后,许多人决定迁移密钥。我觉得“profed”这个短语在被特别强调时,意味着你可以选择一个安全的散列函数一次,它将继续是安全的;它更多的是为完整性检查而设计的。据我所知,散列方法MD5非常糟糕,我认为它可以被可靠地破坏。它可能比什么都没有更糟糕,因为它给人一种虚假的安全感。我完全同意这一点,而且,我绝不是在提倡MD5s用于站点安全。我只是用它来生成我的个人帐户密码。Md5计算器很容易获得,因此我可以使用该方案,而无需随身携带密码。它会生成带有许多特殊字符的随机长密码。它还让我可以轻松地为我访问的每个站点生成不同的密码。是的,存在一些加密缺陷,但如果一个站点被破坏,那么就不值得在其他地方进行反向使用。作为一个额外的预防措施,我的名字上很少有超过20美元的内容。@nemo-以明文形式存储密码肯定不会比用MD5、“虚假安全感”或“否”存储密码好多少。事实上,使用哈希至少比明文安全一个数量级,如果不是更多的话。我感谢您的建议,这很有用。但我真正想要的是书籍、期刊文章、政府标准,也许还有网页