密码盐如何帮助抵御彩虹表攻击?

2024-01-12

我在理解密码盐的用途时遇到一些困难。据我了解,主要用途是阻止彩虹表攻击。然而,我所见过的实现这一点的方法似乎并没有真正使问题变得更加困难。

我看过很多教程建议盐的使用方式如下:

$hash =  md5($salt.$password)

原因是散列现在映射的不是原始密码,而是密码和盐的组合。但是说$salt=foo and $password=bar and $hash=3858f62230ac3c915f300c664312c63f。现在,拥有彩虹表的人可以反转哈希并得出输入“foobar”。然后,他们可以尝试所有密码组合(f、fo、foo、... oobar、obar、bar、ar、ar)。获取密码可能还需要几毫秒,但除此之外就没什么了。

我见过的另一个用途是在我的 Linux 系统上。在 /etc/shadow 中实际存储的是哈希密码with盐。例如,“foo”的盐和“bar”的密码将散列为:$1$foo$te5SBM.7C25fFDu6bIRbX1。如果黑客以某种方式能够获得这个文件,我不知道盐有什么作用,因为反向哈希te5SBM.7C25fFDu6bIRbX已知包含“foo”。

感谢任何人都可以阐明这一点。

EDIT: 谢谢您的帮助。总结一下我的理解,盐使散列密码更加复杂,从而使其不太可能存在于预先计算的彩虹表中。我之前误解的是,我假设所有哈希都存在彩虹表。


公共盐会not在破解单个密码时使字典攻击变得更加困难。正如您所指出的,攻击者可以访问散列密码和盐,因此在运行字典攻击时,她可以在尝试破解密码时简单地使用已知的盐。

公共盐有两件事:使破解大量密码变得更加耗时,并且使使用彩虹表变得不可行。

要理解第一个,请想象一个包含数百个用户名和密码的密码文件。如果没有盐,我可以计算“md5(attempt[0])”,然后扫描文件以查看该哈希值是否出现在任何地方。如果存在盐,那么我必须计算“md5(salt[a] .attempt[0])”,与条目 A 进行比较,然后计算“md5(salt[b] .attempt[0])”,与条目 B 进行比较等等。现在我有n多倍的工作要做,在哪里n是文件中包含的用户名和密码的数量。

要了解第二个,您必须了解什么是彩虹表。彩虹表是常用密码的预先计算的哈希值的大型列表。再次想象一下没有盐的密码文件。我所要做的就是遍历文件的每一行,提取散列密码,然后在彩虹表中查找它。我从来不需要计算单个哈希值。如果查找比散列函数快得多(可能是这样),这将大大加快破解文件的速度。

但如果密码文件是加盐的,那么彩虹表必须包含预散列的“盐.密码”。如果盐足够随机,这种情况就不太可能发生。我的常用预哈希密码列表(彩虹表)中可能会包含“hello”、“foobar”和“qwerty”等内容,但不会包含“jX95psDZhello”或“LPgB0sdgxfoobar”或“dZVUABJtqwerty”已预先计算。这将使彩虹表变得非常大。

因此,盐将攻击者减少到每次尝试每行一次计算,当与足够长、足够随机的密码相结合时,(一般来说)是不可破解的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

密码盐如何帮助抵御彩虹表攻击? 的相关文章

  • AES:如何检测输入的密码是否错误?

    A text s已加密 s2 iv Crypto Cipher AES new Crypto Hash SHA256 new pwd digest Crypto Cipher AES MODE CFB iv encrypt s encode
  • 检查 canAuthenticateAgainstProtectionSpace 中的公钥

    我被要求根据已知值检查公钥canAuthenticateAgainstProtectionSpace 委托回调NSURLConnection http developer apple com library mac documentatio
  • 将 JavaScript 中的大字符串与哈希进行比较

    我有一个带有文本区域的表单 其中可以包含使用多个第三方富文本编辑器之一编辑的大量内容 例如博客文章 我正在尝试实现类似自动保存功能的功能 如果内容发生更改 它应该通过ajax 提交内容 然而 我必须解决这样一个事实 我作为选项的一些编辑器不
  • 使用 Ruby OpenSSL 库时公钥无效

    我正在尝试在 Ruby 中生成 RSA 密钥对 主要使用来自这篇博文 http stuff things net 2009 12 11 generating rsa key pairs in ruby 这是我稍微修改过的代码 def gen
  • 兼容 C# 和 javascript 的 AES 加密和解密

    我正在尝试用 C 和 Javascript 编写两个类 我可以在整个项目中使用它们在交换数据时使用 AES 加密或解密数据 使用 AES 我将 Salt 32 字节 和 IV 16 字节 嵌入到加密结果中 这在测试时分别适用于这两个类 将
  • 如何使用 Node JS 对包含小数/尾随零的数据生成哈希

    在尝试验证 Node JS 中的 Authorize net webhook 通知时 我遇到了以下与小数 尾随零有关的问题 Authorize net 使用 HMAC SHA512 以及 Webhook 通知正文和商家的签名密钥形成哈希 该
  • 在 C# 中解析 Cryptocompare API Json 数据

    我正在加载数据 这是返回 Response Success Type 100 Aggregated false Data time 1504979760 high 14 26 low 14 26 open 14 26 volumefrom
  • 对于范围从 0 到最大值的 uint64_t 键,最佳哈希函数是什么?

    假设我们有一组元素并希望将它们存储在哈希映射中 例如std unordered set 并且每个元素都有一个 type 的键uint64 t其值可以从 0 到最大可能值变化 使用简单哈希函数 其中键的哈希值就是键本身 是最佳选择吗 它是否取
  • 我从 clojure 和 python 中得到的 hmac 签名略有不同

    我从 python 实现和 clojure 实现中获得的 HMAC SHA1 签名略有不同 我很困惑什么会导致这种情况 Python实现 import hashlib import hmac print hmac new my key my
  • 使用哈希检查具有 $_POST 值的页面是否已刷新

    当将表单发布到同一个PHP页面时 正确的方法是什么来查找页面是否被意外刷新而不是再次提交 这是我现在正在使用的 tmp implode POST myHash md5 tmp if isset SESSION myHash SESSION
  • Oh-my-zsh 哈希(井号)符号错误模式或未找到匹配项

    我很确定是与我的 Oh my zsh 配置相关的东西 但我不知道它是什么 当我在 git 命令中使用 符号时 但也适用于其他所有命令 例如 ls 2 我收到 错误模式 错误或 找不到匹配项 我猜是要计算一些东西 但我找不到在哪里配置它 I
  • 在节点上生成 AES 密钥

    我正在处理一个使用自定义协议来加密通信的遗留应用程序 随机 AES 密钥在旧版 Java 应用程序中生成 如下所示 keygen KeyGenerator getInstance AES keygen init 128 keygen gen
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 如何对定义的字符集python中的所有可能的字符串进行加密?

    我试图加密定义的字符集中所有可能的字符串 然后将它们与用户输入给出的哈希进行比较 这就是我目前拥有的 import string from itertools import product import crypt def decrypt
  • RSA 私有指数确定

    我的问题是关于 RSA 签名 如果是 RSA 签名 加密 gt y x d mod n 解密 gt x y e mod n x gt 原始消息 y gt 加密消息 n gt 模数 1024 位 e gt 公共指数 d gt 私有指数 我知道
  • 如何使用 DUKPT 加密在读卡器中生成密文?

    For BDK 0123456789ABCDEFFEDCBA9876543210 KSN FFFF9876543210E00008 生成的密文如下 C25C1D1197D31CAA87285D59A892047426D9182EC11353
  • 在 ASP.NET 中加密 cookie

    我想在 ASP NET 中加密 cookie 我已关注本文的方法 http www codeproject com KB web security HttpSecureCookie aspx 但它有一个缺点 那就是在内部方法上使用反射 这导
  • 在 Swift 中使用 CommonCrypto 解密时出现问题

    我在一家Swift only加密 解密Extension for String and NSData 并且 crypt 部分的工作基于 Zaph 在链接问题中提供的答案 在 Swift 中使用 CCCrypt CommonCrypt 时出现
  • iPhone 和加密库

    我想我必须在我的 iPhone 应用程序中使用加密库 我想问你有关苹果公司实施的加密货币出口政策的影响 我需要做一些额外的事情吗 例如填写表格等 1 如果我使用 MD5 进行哈希处理 2 如果我使用对称加密 Thanks EDIT 2009
  • 比较 ruby​​ 哈希值[重复]

    这个问题在这里已经有答案了 可能的重复 如何比较两个哈希值 https stackoverflow com questions 4928789 how do i compare two hashes 我有两个 ruby 哈希值 本质上是模型

随机推荐