gpt4 book ai didi

php - 为什么 MD5'ing UUID 不是一个好主意?

转载 作者:IT王子 更新时间:2023-10-28 23:59:44 25 4
gpt4 key购买 nike

PHP 有一个 uniqid()生成各种 UUID 的函数。

在使用示例中,显示如下:

$token = md5(uniqid());

但在评论中,someone says this :

Generating an MD5 from a unique ID is naive and reduces much of the value of unique IDs, as well as providing significant (attackable) stricture on the MD5 domain. That's a deeply broken thing to do. The correct approach is to use the unique ID on its own; it's already geared for non-collision.

如果是这样,为什么是这样?如果 MD5 哈希(几乎)对于唯一 ID 是唯一的,那么 md5'ing uniqid 有什么问题?

最佳答案

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

如果您知道哈希来自 UUID,那么攻击会容易得多,因为如果您对生成它们的机器有所了解,那么有效 UUID 的域实际上是相当可预测的。

如果您需要提供安全 token ,则需要使用 cryptographically secure random number generator. (1) UUID 并非设计为加密安全,仅保证唯一。由唯一机器标识符(通常是 MAC)和时间限制的单调递增序列仍然是完全有效的 UUID,但如果您可以从 token 序列中逆向工程单个 UUID,则具有高度可预测性。

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

    如果您进入数论领域,您可以找到从一系列生成值中猜测某些 PRNG 内部状态的方法。 Mersenne Twister就是这种生成器的一个例子。它具有隐藏状态,它曾经获得很长一段时间,但它在密码学上并不安全 - 您可以采用相当小的数字序列并使用它来推断内部状态。完成此操作后,您可以使用它来攻击依赖于对该序列保密的加密机制。

关于php - 为什么 MD5'ing UUID 不是一个好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1293741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com