为什么对 UUID 进行 MD5 处理不是一个好主意?

2024-01-09

PHP 有一个uniqid() https://www.php.net/manual/en/function.uniqid.php生成某种 UUID 的函数。

在使用示例中,它显示了以下内容:

$token = md5(uniqid());

但在评论中,有人这么说 https://www.php.net/manual/en/function.uniqid.php#91126:

从唯一 ID 生成 MD5 是 幼稚并降低了很多价值 唯一的ID,以及提供 显着的(可攻击的)限制 MD5 域。那是一个深深的 破碎的事情要做。正确的 方法是使用唯一 ID 它自己的;它已经准备好了 不碰撞。

如果是的话,为什么这是真的?如果 MD5 哈希对于唯一 ID 而言(几乎)是唯一的,那么对 uniqid 进行 md5 处理有什么问题呢?


UUID 为 128 位宽,并且其生成方式具有固有的唯一性。 MD5 哈希值的宽度为 128 位,不保证唯一性,仅保证较低的冲突概率。 MD5 哈希不小于 UUID,因此它对存储没有帮助。

如果您知道哈希值来自 UUID,则攻击会更容易,因为如果您了解有关生成 UUID 的机器的任何信息,则有效 UUID 的域实际上是相当可预测的。

如果您需要提供安全令牌,那么您需要使用加密安全的随机数生成器。 http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator(1) UUID 并非旨在加密安全,仅保证唯一。由唯一机器标识符(通常是 MAC)和时间限制的单调递增序列仍然是一个完全有效的 UUID,但如果您可以从令牌序列对单个 UUID 进行逆向工程,那么它是高度可预测的。

  1. 加密安全 PRNG 的定义特征是给定迭代的结果不包含足够的信息来推断下一次迭代的值 - 即生成器中存在一些未在数字中显示且无法推断的隐藏状态通过检查 PRNG 中的数字序列。

    如果您了解数论,您可以找到从生成值序列猜测某些 PRNG 内部状态的方法。梅森扭转者 http://en.wikipedia.org/wiki/Mersenne_twister是此类生成器的一个示例。它具有隐藏状态,它曾经获得很长的周期,但它在加密上并不安全 - 您可以采用相当小的数字序列并使用它来推断内部状态。完成此操作后,您可以使用它来攻击依赖于对该序列保密的加密机制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么对 UUID 进行 MD5 处理不是一个好主意? 的相关文章

随机推荐

  • Vue.js 将 items 中的 item 作为 prop 传递给组件:我会修改 prop 吗?

    Vue js 新手 从文档中 一个简单的示例是使用组件呈现列表中的每一项 如下所示
  • 如何在 tkinter python gui 中查找鼠标点击附近的标签

    我如何识别鼠标点击附近的标签 这里我的定义 识别 应该识别非常接近鼠标点击的标签 from Tkinter import root Tk f Frame root f grid w Canvas f line1 w create line
  • git-svn dcommiting 单个 git 提交

    给定多个未推送git承诺 是否有可能git svn dcommit只有其中一项提交 例如我已经提交了 foo bar 和 baz 但现在我只想让 bar 最终出现在 svn 存储库中 这可能吗 以下假设您的工作正在进行master 首先 重
  • 构建ndk库出错

    我有一个带有本机部分的 Android 项目 现在我试图让 eclipse 编译所有东西 但在本机编译期间它给了我这个错误 sh ndk build all ERROR You are using a non Cygwin compatib
  • 删除数据库文件和 sqllocaldb 后,底层提供程序在打开时失败

    我正在调查我的经历问题在这里 https stackoverflow com questions 13001441 delete mdf file from app data causes exception cannot attach t
  • 如何使用列表视图的 onitemclicklistener 更改仅选定列表视图行的布局

    我需要创建ListView like Samsung Contact List 我需要显示该行的自定义布局 而该行是swiped 并且还需要在该行的背景中显示联系方式 请给我一些想法或参考 谢谢 list setOnItemClickLis
  • 使用 CSS 进行水平对齐

    我有以下代码 div class one p Test p p span style color Green span p div 我认为这是一个非常简单的问题 但我不懂CSS 如何使段落在中心水平对齐 这里有两个问题 将包含该段落的 DI
  • 使用 asp.net 和 iis 在 geoserver 中进行身份验证

    我不知道这是否是一个愚蠢的问题 但是如何将 asp net 身份验证与 openlayers 结合 我创建了一个登录页面来在 openlayers 中进行身份验证 在 c 中 服务器端 这是我的代码 Uri uri new Uri http
  • 防止缓存单个js文件

    我的资产目录中有一个 js erb 文件 这会读取一些特定于区域设置的配置 但是 当底层配置更改时 新文件不会提供给我的浏览器 我得到 304 未修改 如果我通过添加空格来更改 js erb 文件 则新文件将正确提供 每次添加配置时都这样做
  • Laravel 队列工作者与 cron

    我试图让我的网站在每次有人新注册时发送确认电子邮件 我在阅读完相关内容后按照下面的方式做了 但我仍然不相信这是最好的方法 在我的 cron 中每分钟运行并调用php artisan schedule run 在我的控制台 内核中 prote
  • 在 Vue 中显示基于 prop 的条件文本的其他方式?

    我有一个根据用户成员资格状态呈现文本的组件 我想根据该 prop 值更改插值文本 除了一堆 div p 标签之外 是否有更有效的方法来根据 prop 显示不同的文本v if or v show 不断有一堆堆叠的 div 只是大量的文本 任何
  • AngularJS - 使用 ENTER 键接受 ui.bootstrap 模式

    问题 我无法使用 ENTER 键接受模态窗口 我已经修改了默认的 Plunker 来向您展示我从现在开始所做的事情 gt Here http plnkr co edit 8OeJyEOBxm7B2aVHMyQ6 p preview 我拥有的
  • Discord.js 禁用“交互失败”

    如果交互 例如点击按钮 没有得到回复 discord 会在客户端显示 交互失败 他们希望你做什么 inter reply stuff 我想做的事 inter channel send stuff 这不是一个错误 我只是想防止出现 交互失败
  • 无法将视图放置在 RecyclerView 下方

    我无法放置Adview低于一个RecyclerView 目前RecyclerView占据了布局的其余部分并且Adview没有显示 我在网上找到的解决方案都没有解决我的问题 通常layout weight or layout below解决了
  • 蟒蛇姜戈。如何实时更新消息和通知徽章中的计数[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 i m currently working on app where users can send messages to each
  • 错误:jarfile sbt/sbt-launch-0.13.5.jar 无效或损坏

    我一直在尝试使用安装sparktutorial http blog prabeeshk com blog 2014 10 31 install apache spark on ubuntu 14 dot 04 每次运行命令 sbt sbt
  • UIMenuController 隐藏键盘

    我目前有一个用于聊天的应用程序 我使用 UItextField 作为输入框 使用气泡来显示消息 比如系统短信 我想在消息气泡 标签 上启用复制粘贴 问题是 当我想显示 UIMenuController 时 我需要复制的标签需要成为第一响应者
  • 如何在 Windows 中设置 MCR_CACHE_ROOT

    我知道这可能是一个简单的问题 但如何在 Windows 中设置 MCR CACHE ROOT 可以给我详细的步骤吗 我应该在哪里指向 MCR CACHE ROOT 的路径以加快编译的应用程序启动时间 对于 Windows 7 您可以将其设置
  • 获取 NSTableView 中内容的高度

    有没有办法获得内容的高度NSTableView 在 iOS 中 您可以使用 contentSize的方法UIScrollView 但是 那 contentSize的方法NSScrollView似乎只返回可见部分的高度NSScrollView
  • 为什么对 UUID 进行 MD5 处理不是一个好主意?

    PHP 有一个uniqid https www php net manual en function uniqid php生成某种 UUID 的函数 在使用示例中 它显示了以下内容 token md5 uniqid 但在评论中 有人这么说