ColdFusion中最安全的哈希算法是什么?

3
在 ColdFusion 9(非企业版)中使用的最安全的哈希算法是什么?
根据 CF 文档,以下是可选项:
MD5:(默认)使用 MD5 算法生成一个32字符的十六进制字符串(在 ColdFusion MX 和之前的版本中使用的算法)。
SHA:使用由国家标准和技术研究院(NIST)FIPS-180-2指定的安全哈希标准SHA-1算法生成40个字符的字符串。
SHA-256:使用由 FIPS-180-2 指定的 SHA-256 算法生成44个字符的字符串。
SHA-384:使用由 FIPS-180-2 指定的 SHA-384 算法生成64个字符的字符串。
SHA-512:使用由 FIPS-180-2 指定的 SHA-1 算法生成128个字符的字符串。

但是在这篇文章中提到不要使用MD5或SHA-1。

我对cf文档也有些怀疑。它说编码“SHA-512”使用SHA-1,但企业版的“SHA-512”的描述是“由FIPS 180-2和FIPS 198定义的512位安全哈希算法。”而且SHA-512的输出比SHA-384大。抱歉,我很难理解所有这些不同的编码原则。


4
你先进行过搜索吗?(注意,哈希的主题并不是仅限于CF,因此不要将搜索限制在CF上。)如果你搜索“哈希安全”("hashing security"),就会出现一些已经存在的帖子讨论哈希的各个方面,例如这个帖子。请参考它们。 - Leigh
3
文章表示不要将MD5或SHA-1用于密码。MD5已过时,但SHA-1存在合法的非密码使用情况(例如在速度很重要时)。 - Peter Boughton
3
为了在CF中使用bcrypt/scrypt(Leigh提供的链接中提到的算法),我有一个项目,旨在使其使用起来像“复制一些文件”一样简单,然后只需调用相关函数即可。该项目链接为:http://sorcerersisle.com/projects:cfpassphrase.html, 安装说明可以在这里找到:https://github.com/boughtonp/cfpassphrase/wiki/Installation。使用说明可以在这里找到:https://github.com/boughtonp/cfpassphrase/wiki/Usage。 - Peter Boughton
我意识到这个主题不仅限于CF,但是在CF9中,我只有默认的某些选项,而我不确定哪个是最安全的。 - jessieloo
你已经自己回答了这个问题,不是吗?如果你放弃MD5和SHA-1,你只剩下SHA-256和SHA-384。而在这种情况下,所有事情都是相等的,SHA-384比SHA-256更好。参考:https://en.wikipedia.org/wiki/Secure_Hash_Algorithm(我从谷歌上找到的) - Adam Cameron
显示剩余2条评论
1个回答

3
哈希本身并不安全,任何可以哈希的东西都可以被破解。所以在安全领域中,你可能会想,好吧,我需要多次运行哈希来更加模糊它,但这并不能保护信息,只是意味着某人必须重复相同的过程并多次迭代哈希。如果他们知道你使用的哈希算法,并且假设他们确实知道,那么它就不安全了。除非你试图保护信息,否则Sha-256应该足够用于哈希信息。哈希绝不能单独用于保护信息。仅仅因为它不可读并不意味着它是安全的。
如果您想要保护某些东西,请使用ColdFusion加密函数并确保使用像AES这样的良好算法,因为ColdFusion的默认设置并不安全。然后,您需要使用一些信息熵来确保您拥有一个唯一的加密密钥,这对于某人来说很难猜测或找到。不要在代码中硬编码单个密钥,这将使某人很容易找到并利用所有加密中的模式。
用像bcrypt或scyrpt这样的方法存储密码。我知道它们需要更多的工作才能投入使用,并且需要在ColdFusion中进行Java集成,但它们是存储信息的更安全的方法。请记住,即使使用bcrypt或scrypt,只要有足够的时间和愿意付出解密的努力,信息就可能被泄露。在保护信息时要非常谨慎。

3
“任何可以进行哈希的东西都可以被反哈希”- 嗯?哈希特指一种单向加密算法。你无法反向哈希,只能查找/暴力破解原始值。(对于像 MD5 和 SHA-1 这样的快速哈希,这需要的努力要少得多。) - Peter Boughton
@Peter 虽然对于单个哈希值来说这可能是正确的,但如果您有多个使用相同盐的哈希字符串,则可以找到模式并基本上解密这些值:http://en.m.wikipedia.org/wiki/Hash_Code_cracker - Russ
1
@Peter,这是一个更好的解释,为什么使用CF内置算法的盐哈希可能不够安全:http://www.codinghorror.com/blog/2007/09/rainbow-hash-cracking.html - Russ
2
@Russ 彩虹攻击是检查常见值列表,以查看其哈希形式是否与它们匹配。Peter 是正确的,哈希是单向的,但如果你能猜出答案,就可以通过在你的猜测上运行哈希来验证它。话虽如此,有无限可能的猜测(假设长度无限),它们映射到相同的哈希值,因此如果你不知道原始值是什么,你就不能从哈希中产生它,这就是所谓的“单向”。实际上,密码往往很短且可预测,任何形式的哈希或加密都无法保护它们。 - TheCycoONE
3
暴力查找字典 != 反解哈希值。 - Peter Boughton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接