散列用MD5保护敏感数据的密码是否安全?
我一直在和这个安全人员讨论。 他可能是我能为我的新项目买得起的最多钱。 无论如何,这是一项保存敏感数据(密码,PIN码)的服务,可以通过电话向用户请求。 用户有一个密码(4位数字),用于访问敏感数据。 安全人员告诉我,他会使用MD5来散列用于访问敏感数据的密码。 这里的讨论开始了,正如我认为的那样,并且非常确定,MD5由于已经被破解/碰撞而导致太脆弱了。
散列法应该用于散列密码以保护敏感信息? 我有一种感觉,这项服务可能会成为黑客的高价值目标,所以我真的很担心。 我开始担心整体质量,特别是安全人员要提供的服务安全性,但不知道在哪里寻找其他人。
我在这里看到一些问题。
首先,如果一个四位密码是阻止访问您的超级敏感数据,那么您遇到了麻烦。 我希望还有其他的安全措施,因为手动强制10,000组合是微不足道的,更不用说某种脚本。
其次,我不确定你是否理解散列密码的问题。 我怀疑你会从10,000种可能性中获得散列冲突,但当密码被强制使用时,这基本上是无关紧要的。 你所要完成的只是一些有读权限的人的混淆。
第三,密码散列算法的需求与其他散列算法的需求不同。 你需要的算法很慢,通常意味着不得不重复运行它,并且你需要在那里有盐,以便密码不能从查找表派生。 据说,河豚不错。 我发现PostgreSQL的pgcrypto文档有一个很好的解释。
虽然MD5被破坏,但这些漏洞不会影响密码散列。 所以MD5而不是更好的散列函数在这里不是问题。 不过我通常建议使用更好的散列函数。
通常使用一些方法来散列较慢并添加一个盐。 检查关键衍生函数的维基百科。 PBKDF2和bcrypt是KDFs的流行选择。
但我可以想象没有办法保护4位数的密码。 只有10'000个不同的密码。 暴力是微不足道的。 即使盐和KDFs也不会帮助你。
使用低熵PIN的系统依赖于检查服务器/硬件永远不会受到影响。 所以他们可以在一些错误的尝试后锁定攻击者。 但是,如果攻击者获得对密码哈希的访问权限,则不能这样做。
想想看,为什么你要密码? 因为即使数据库被盗,入侵者也无法根据散列找到密码。 但是:如果您的密码空间是4位数(10000个组合),则需要多长时间才能找到与给定MD5散列匹配的密码? 一毫秒? 使用任何现代哈希函数都会遇到同样的安全漏洞(现在MD5不被认为是安全的)。
你需要用非常长的盐来腌制。 为每个用户创建一些随机数据(称为盐)并计算散列(密码+盐)。 你显然没有存储密码,但是你会为每个用户存储散列和盐分。 第二个想法:使用盐的4位数字密码仍然不安全 - 您所得到的只是入侵者必须为每个用户暴力破解密码,但对于10K密钥空间,这仍然是微不足道的。 我不知道任何其他方法可以保护这么短的密码。
链接地址: http://www.djcxy.com/p/3671.html上一篇: Is it safe to hash passwords that protect sensitive data with MD5?
下一篇: client & server