ASP Classic中密码的最慢(因此最好)哈希算法是什么?
编辑:对于那些不知道的人,当散列密码时,较慢的散列比较快,以帮助减缓彩虹表式攻击。
EDIT2:是的,当然速度并不是哈希选择的唯一有效问题。我的问题是在散列密码时假设所有其他条件相同,the slowest hash method is preferred。虽然碰撞/逆向工程当然也是一个问题,但我在这个问题中优先考虑速度,因为它可以说是比较流行的哈希算法用于密码时最关键的考虑因素。
谢谢!
答案 0 :(得分:12)
很多人似乎在喋喋不休地问问题,因为他正在寻找缓慢的哈希函数。实际上,在所有其他方面相同的情况下,较慢的散列函数比较快的散列函数更安全。这是因为较慢的哈希函数导致生成较慢的彩虹表,并且较慢的暴力强制或字典攻击密码。
来自{Pricek http://www.securityfocus.com/blogs/262的Thomas Ptacek,正如Coding Horror article所述:
问题是 MD5很快。所以 是现代竞争对手,如SHA1 和SHA256 。速度是设计目标 一个现代的安全哈希,因为哈希 是几乎每个人的基石 密码系统,通常得到 需求 - 按每个数据包执行或 基于每个消息。
速度正是你不想要的 在密码哈希函数中。
现代密码方案受到攻击 增量密码破解程序。
增量破解者没有 预先计算所有可能的破裂 密码。他们考虑每个密码 哈希单独,他们喂他们的 字典通过密码哈希 功能与PHP登录方式相同 页面会。彩虹表饼干 像Ophcrack使用空间来攻击 密码;增量破解者喜欢 开膛手John,Crack和LC5工作 随着时间的推移:统计和计算。
密码攻击游戏得分 破解密码X的时间。用 彩虹表,那个时间取决于 你的桌子需要多大以及如何 你可以快速搜索它。同 增量破解者,时间取决于 你可以多快地输入密码 哈希函数运行。
您可以更好地优化您的 密码哈希函数,速度更快 你的密码哈希函数得到了, 你的计划越弱。 MD5和SHA1, 甚至像传统的分组密码一样 DES,设计得很快。 MD5, SHA1和DES是弱密码 哈希值。在现代CPU上,原始加密 像DES和MD5这样的构建块可以 比特,矢量化和 并行化以进行密码搜索 闪电快。游戏结构FPGA 实现只需几百个 元。
有些comments on the PHP MD5 documentation也讨论了对缓慢的偏好。
要回答你的问题,看起来像BCrypt是要走的路。但是,我还没有找到ASP Classic的任何实现。如果这是真的,我会坚持像SHA512这样的常规哈希函数。
答案 1 :(得分:5)
我会忽略缓慢的部分,而是选择“好”部分。
我建议您使用带盐的SHA-512来打败字典和彩虹表攻击。我不相信SHA-512存在任何已知的漏洞。
答案 2 :(得分:3)
如果您试图打败暴力攻击,最好执行一些失败的尝试窗口/计数,而不是依赖哈希(或哈希比较)机制的速度来使攻击成功的时间更长。在失败窗口中进行一定数量的失败尝试后锁定帐户,并且仅在经过大量时间后才进行新的尝试。
这可能让你对一个众所周知的(管理)帐户进行DOS攻击,但你可以从锁定策略中豁免某些帐户,或者使用安全问题/答案的另一种方式登录到在重置期过后,锁定帐户。
[编辑]为了帮助击败彩虹攻击 - 攻击者已经检索到您的哈希密码并找到散列到相同值的合适匹配 - 请考虑使用每个用户的哈希密码所特有的随机盐和固定盐是算法的一部分,而不是数据。例如:
testHash = computeHash( user.salt + "98hloj5674" + password );
if (testHash == user.hashedPassword)
{
valid = true;
}
这应该使彩虹表失效,因为即使知道用户的盐和哈希算法,攻击者的彩虹表中的值也不会映射到您的哈希密码,因为在算法中添加了固定盐。
使用ASP Classic,您必须在库中而不是在页面上执行此操作,以确保用户无法看到您的固定盐。
答案 3 :(得分:2)
Dim sPassword, sSalt
sPassword = "Lorem"
sSalt = "Ipsum"
With CreateObject("CAPICOM.HashedData")
.Algorithm = 0 ' CAPICOM_HASH_ALGORITHM_SHA1
.Hash sPassword & sSalt
Response.Write "Here is your hash: " & .Value
End With
算法是以下任何一种:
CAPICOM_HASH_ALGORITHM_SHA1 = 0
CAPICOM_HASH_ALGORITHM_MD2 = 1
CAPICOM_HASH_ALGORITHM_MD4 = 2
CAPICOM_HASH_ALGORITHM_MD5 = 3
CAPICOM_HASH_ALGORITHM_SHA_256 = 4 - Not supported on Windows XP or 2000
CAPICOM_HASH_ALGORITHM_SHA_384 = 5 - Not supported on Windows XP or 2000
CAPICOM_HASH_ALGORITHM_SHA_512 = 6 - Not supported on Windows XP or 2000
答案 4 :(得分:0)
实际上,最好的哈希函数是不产生任何聚合的函数,并且不会对彩虹表攻击造成影响。
这意味着:添加一个Salt(最好是每个用户使用不同的Salt),并考虑使用SHA2 Hash函数(或者RIPE-MD,我没有看过那么多):
SHA-256的一个实现在这里(我喜欢他们称之为“单向加密”):
http://www.freevbcode.com/ShowCode.Asp?ID=2565
虽然没有测试过,但Classic ASP肯定有SHA2实现。
答案 5 :(得分:0)
我个人更喜欢Whirlpool algorithm来满足我的所有哈希需求。它产生512位输出,因此与SHA-512具有相同的空间要求。遗憾的是,我不能权威地说一个人是否比另一个人更安全,但在第三版的惠而浦(Whirlpool)中似乎没有任何明显的弱点。
参考实现属于公共领域,这很好,因为我很少发现它默认在各种工具和语言中实现。
(如果有人知道为什么SHA应该比惠而浦更受青睐,请告诉我。)
答案 6 :(得分:-4)
最慢方法的伪代码:
function hashPassword(password)
sleep for 10 seconds
return password
end function
这肯定不是最安全的(或根本没有),但它很慢......
(我只是指出让它变慢不是答案......)