哈希上的多次迭代:这不会减少熵吗?

2024-05-19

我看到在很多地方(包括堆栈)都推荐了这种技术,而且我无法摆脱这种技术会减少熵!毕竟,您正在再次对已经被散列过并且有碰撞机会的东西进行散列。碰撞机会大于碰撞机会会不会导致更多的碰撞机会?经过研究,似乎我错了,但为什么呢?


既然您标记了 md5,我将使用它作为示例。从维基百科 http://en.wikipedia.org/wiki/Md5#Collision_vulnerabilities:

如果可以构造具有相同散列的两个前缀,则可以向两者添加一个公共后缀,以使冲突更有可能被使用它的应用程序接受为有效数据。此外,当前的冲突查找技术允许指定任意前缀:攻击者可以创建两个以相同内容开头的冲突文件。攻击者生成两个冲突文件所需的只是一个包含 128 字节数据块的模板文件,在 64 字节边界上对齐,可以通过冲突查找算法自由更改该边界。两个消息相差 6 位的 MD5 冲突示例如下:

然后他们给出的示例明文长度为 256 字节。第128章 128byte数据块,哈希摘要只有128bits,在第一次迭代之后,碰撞攻击成功的风险实际上并没有增加 - 也就是说,您无法真正影响在第一次哈希之后发生碰撞的可能性。

还要考虑哈希的熵是前面提到的 128 位。即使考虑到总碰撞几率仅为 2^20.96(再次来自维基百科 http://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions),需要大量迭代才能导致两个输入发生冲突。我认为您成为受害者的第一眼推理是:

  • 任意两个输入都有 x% 的碰撞机会。
  • 第一个哈希的输出本身就是两个这样的输入。
  • 因此,每次迭代都会使碰撞机会增加 x%。

这可以很容易地通过反例来反驳。再考虑MD5:

  • 两个输入发生冲突的几率是 1:2^21(从维基百科对 MD5 的密码学分析中获取最坏的情况)
  • 再次哈希会导致同等概率的碰撞复合,因此第二轮碰撞的概率为 1:2^20
  • 因此,对于任意两个输入,哈希次数等于摘要熵的次数一定会发生冲突。

MD5任意两个输入连续128次,你会发现这不是真的。您可能不会在它们之间找到单个重复的哈希值 - 毕竟,您只从可能的 2^128 个哈希值中创建了 256 个,还剩下 2^120 个可能性。每轮之间发生碰撞的概率为独立的 http://www.mathgoodies.com/lessons/vol6/independent_events.html所有其他回合。

有两种方法可以理解为什么会这样。首先,每次迭代本质上都是试图击中一个移动的目标。我认为您可以根据生日悖论构造一个证明,即散列迭代次数出人意料地少,您可能会看到一个输入的一个散列摘要与另一个输入的散列摘要相匹配。但它们几乎肯定会发生在不同的迭代的步骤。一旦发生这种情况,它们在同一迭代中永远不会有相同的输出,因为哈希算法本身是确定性的。

另一种方法是认识到哈希函数在运行时实际上会增加熵。考虑到空字符串与任何其他输入一样具有 128 位摘要;如果在算法步骤中不添加熵,这种情况就不可能发生。这实际上是加密哈希函数的必然部分:必须销毁数据,否则可以从摘要中恢复输入。对于比摘要更长的输入,是的,熵总体上丢失了;它必须是为了适合摘要长度。但也增加了一些熵。

我没有其他哈希算法的确切数字,但我认为我提出的所有观点都可以推广到其他哈希函数和单向/映射函数。

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

哈希上的多次迭代:这不会减少熵吗? 的相关文章

  • 您可以将操作直接应用于map/reduce/filter 中的参数吗?

    map and filter通常可以与列表理解互换 但是reduce并不那么容易被交换map and filter 此外 在某些情况下我仍然更喜欢函数语法 但是 当您需要对参数本身进行操作时 我发现自己正在经历语法体操 最终必须编写整个函数
  • 如何创建包含多列MD5的GENERATED列?

    我尝试在 PostgreSQL 14 3 中添加下表 CREATE TABLE client cache id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY request VARCHAR
  • 根据哈希值确认文件内容

    我需要 检查完整性 content文件数量 文件将写入 CD DVD 可能会被复制多次 这个想法是识别正确复制的副本 在从 Nero 等中删除它们之后 我对此很陌生 但快速搜索表明Arrays hashCode byte http down
  • md5 哈希冲突。

    如果从 1 数到 X 其中 X 是第一个与前一个数字发生 md5 冲突的数字 那么 X 是哪个数字 我想知道如果我使用 md5 作为序列号 在发生冲突之前我可以期望能够枚举多少个单元 Theoretically you can expect
  • mysql 使用什么样的哈希?

    我正在编写类似于 phpMyAdmin 的自己的代码 但我需要用户能够使用 mysql 数据库中的用户名和密码登录 我需要知道mysql数据库使用什么样的哈希来存储每个用户的密码 我检查了 dev mysql com 寻找答案 但除了以 开
  • 哈希密码字段使用什么数据类型以及长度?

    我不确定密码哈希是如何工作的 稍后将实现 但现在需要创建数据库模式 我正在考虑将密码限制为 4 20 个字符 但据我了解 加密后哈希字符串的长度将有所不同 那么 如何将这些密码存储在数据库中呢 更新 仅使用哈希函数不足以存储密码 你应该阅读
  • 在java中迭代日期

    我需要遍历一系列日期 不确定如何在 for 循环中获取第二天 我在用java util Date So plusDays 1 不能在 for 循环中用于获取下一个日期 Used date1 new Date date1 getTime 10
  • ASP.NET 成员资格 HashAlgorithmType 默认为 HMACSHA256,那么密码是哈希键控的吗?

    我有一个 ASP NET 4 5 Web 应用程序 它使用SqlMembershipProvider 在开发过程中 有人把passwordFormat Clear 在配置中导致密码以明文形式保存 我想删除它并启用密码散列 但我想确保散列不是
  • 数字签名(PKCS#7 - 延迟签名)/自应用签名以来文档已被更改或损坏

    我已经浏览了所有类似的问题 但找不到应用 itextsharp 延迟签名的情况 基本上 我的应用程序使用以下方式签署 pdf 文档PKCS 7由远程 Web 服务创建的签名 我的应用程序向此 Web 服务发送原始文档的哈希值 添加空签名字段
  • 合并两个地图的最佳实践是什么

    如何将新地图添加到现有地图 地图具有相同的类型Map
  • 如何使用多个 { 'not find' } 来干燥方法?

    我正在尝试优雅地处理以下错误的 JSON 其中Hash fetch似乎不是一个选择 使用 Hash fetch 优雅地处理错误的 JSON https stackoverflow com questions 25193627 handle
  • 在 Perl 中将整个文件读入哈希值

    我在 Perl 中将文件读入哈希时遇到一些问题 Chr1 supercontig 000000000 1 500 PILOT21 588 1 3 14602 59349 1 Chr1 supercontig 000000001 5 100
  • 如果数据库可访问,加盐和散列有什么意义?

    我刚刚学习了散列的概念 嘿 不要忘记盐 并使用盐来确保密码安全 散列它是一种单向加密 实际上不是加密而是散列 因此无法对其进行逆向工程 加盐是在散列之前在密码上添加随机创建的值的前缀或附加值 因为散列 只是散列 的问题是 一些天才提供了字典
  • 当今常用的最强哈希算法是什么?

    我正在构建一个 Web 应用程序 并希望对密码使用最强的哈希算法 sha512 whirlpool ripemd160 和 Tiger192 4 之间有什么区别 如果有 哪一个在密码学上被认为更强 bCrypt 为什么会是一个很长的解释 我
  • 原始数组的现代 for 循环

    原始数组上的 for 循环之间有性能差异吗 Assume double doubleArray new double 300000 for double var doubleArray someComplexCalculation var
  • 如何在没有循环的情况下初始化哈希中的值?

    我正在尝试找出一种无需经过循环即可初始化哈希的方法 我希望使用切片来实现这一点 但它似乎没有产生预期的结果 考虑以下代码 usr bin perl use Data Dumper my hash hash currency symbol B
  • RADIUS 使用 MD5 算法是否会导致允许 RADIUS 身份验证的应用程序无法通过 FIPS 验证?

    问题是 如果您在 Windows 安全策略设置中强制执行 FIPS 验证的加密 则会引发异常 因为 RADIUS 协议使用 MD5 算法对请求身份验证器进行哈希处理 没有经过 FIPS 验证的替代 MD5 算法 因此在提供 FIPS 验证加
  • JavaScript 文件中的快速低冲突非加密哈希

    我正在寻找一种用 JavaScript 实现的低冲突的快速哈希 它不需要是加密哈希 我基本上使用它作为查看给定文件是否已上传 或部分上传 到用户帐户的方式 以节省他们在大型 视频 文件上上传的时间 我正在使用新的 HTML5 文件 API
  • Excel中的MD5哈希函数?

    我想将文档中的多个 Excel 单元格从序列号转换为该序列号的 MD5 哈希值 excel中是否有预编译公式可以做到这一点 或者是我执行VBA的唯一选择 如果是VBA 我该怎么做 问题中的一些链接Excel VBA 的密码哈希函数 http
  • 当条件评估为 true 时获取元素(扩展 ElementArrayFinder)

    我们有一个菜单 表示为ul gt li列表 简化 ul class dropdown menu li class ng scope a href class ng binding Menu Item 1 a li li li ul

随机推荐

  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • Android 设备上的静默安装

    我已经接受了一段时间了 在 Android 上静默安装应用程序是不可能的 也就是说 让程序安装捆绑为 APK 的应用程序 而不提供标准操作系统安装提示并完成应用程序安装程序活动 但现在我已经拿到了 Appbrain 快速网络安装程序的副本
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 为什么 Visual Studio 2008 总是重建我的整个项目?

    我有一个包含大约 60 个 C 源文件的 Visual Studio 项目 我可以进行构建 并且它可以毫无错误地完成 但如果我立即再次按 F7 它总是会重新编译大约 50 个源文件 它不会重新编译所有文件 这很奇怪 我设置了 启用最小重建
  • ASP.net Gridview 分页在 UpdatePanel 中不起作用

    虽然类似的问题已经被问过很多次了 但问题仍然没有解决 这是问题 我有一个GridView它包含在选项卡容器中AJAX控件本身位于UpdatePanel Gridview工作得很好并且其相应的方法被准确地触发 但是当我启用paging 例如
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 通过身份验证保护 CodeIgniter 2 应用程序的正确方法是什么?

    I have Ion Auth http benedmunds com ion auth 正确安装并在我的服务器上运行 我也有默认的代码点火器2 新闻 教程在同一个 CI 安装中工作 我只是在玩 并对使用身份验证系统 封闭 或保护整个应用程
  • 如何将我的 pod 日志存储在持久存储中?

    我已经使用以下命令为我的 Pod 生成了日志kubectl logs pod name 但我想将这些日志保存在一个卷 某种持久存储 中 因为如果 Pod 宕机 容器日志将被清除 有没有办法做到这一点 我必须写某种脚本吗 我已经阅读了很多答案
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • Kubernetes 中可以连接两个集群 IP 服务吗?

    情况是我想连接一个租户内的两个集群IP服务 该租户已经将Traefik作为NodePort 以便这两个服务中的任何一个都可以成为LoadBalancer 因为NodePort由Traefik使用 我尝试连接的两个服务的工作方式如下 第一个服
  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR
  • 防止纸张对话框自动关闭

    Hello 我有一个paper dialog页面中的元素
  • 如何根据 ggplot2 中的汇总数据创建堆积条形图

    我正在尝试使用 ggplot 2 创建堆积条形图 我的宽格式数据如下所示 每个单元格中的数字是响应的频率 activity yes no dontknow Social events 27 3 3 Academic skills works
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • 如何将设备连接到Eclipse?

    我无法解决这个简单的问题 我正在尝试通过 USB 电缆将我的设备连接到 Eclipse 在我的 PC 上 我已经安装了 Eclipse 和 Android SDK 并且在模拟器上运行该程序运行良好 我已在我的电脑上下载并安装了 Samsun
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 逃离 Pig 中的美元符号?

    这在 0 9 2 中不是问题 但在 0 10 中 当我尝试访问地图中带有美元符号的键时 我会遇到没有定义变量的错误 具体来说 blah FOREACH meh GENERATE source json post id id AS post
  • 图像目录中矢量 pdf 的渲染模式设置为模板,但 UIImageView 不会在自定义单元格中对图像进行着色

    我已将所有图像文件迁移到资产目录中 它们都是大小为 1x 的 pdf 向量 它们被设置为呈现为模板 它们的大小和颜色在任何地方都表现得很好 但是有一个来自 xib 的自定义 TableView Cell 我有 6 个 UIImageView
  • 哈希上的多次迭代:这不会减少熵吗?

    我看到在很多地方 包括堆栈 都推荐了这种技术 而且我无法摆脱这种技术会减少熵 毕竟 您正在再次对已经被散列过并且有碰撞机会的东西进行散列 碰撞机会大于碰撞机会会不会导致更多的碰撞机会 经过研究 似乎我错了 但为什么呢 既然您标记了 md5