postgres UUID 数字是否均匀随机?
Are postgres UUID numbers homogeneously random?
查看由 RFC 4122 定义的 Postgres 作为主键生成的 UUID,ISO/IEC 9834-8:2005(来源 http://www.postgresql.org/docs/9.1/static/datatype-uuid.html)。我们可以认为这些数字在其所有长度上都是均匀随机的吗?
鉴于此 UUID :
a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
我们可以客观地假设 a0eebc99
和 bd380a11
同样随机吗?如果不是,为什么?
一般来说,UUID 意味着并优化为唯一的。他们不提供有保证的随机性。你不应该使用 UUID 作为秘密 and/or 随机数生成器。
UUID 的生成方式有多种版本,其中大多数不是随机的,而是可以预测的。请参阅 Wikipedia article on UUIDs 和各种版本。
如果您想避免 ID 冲突,请使用 UUID,如果您想要机密,请使用强加密 (P)RNG。
另请注意,变体是在 UUID 本身中编码的,因此至少 UUID 的这一部分根本 不是 随机的。
编辑:Raymond Chen 在他著名的博客“Old New Thing”中有一个有趣的 article 几乎就是这个问题。
查看由 RFC 4122 定义的 Postgres 作为主键生成的 UUID,ISO/IEC 9834-8:2005(来源 http://www.postgresql.org/docs/9.1/static/datatype-uuid.html)。我们可以认为这些数字在其所有长度上都是均匀随机的吗?
鉴于此 UUID :
a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
我们可以客观地假设 a0eebc99
和 bd380a11
同样随机吗?如果不是,为什么?
一般来说,UUID 意味着并优化为唯一的。他们不提供有保证的随机性。你不应该使用 UUID 作为秘密 and/or 随机数生成器。
UUID 的生成方式有多种版本,其中大多数不是随机的,而是可以预测的。请参阅 Wikipedia article on UUIDs 和各种版本。
如果您想避免 ID 冲突,请使用 UUID,如果您想要机密,请使用强加密 (P)RNG。
另请注意,变体是在 UUID 本身中编码的,因此至少 UUID 的这一部分根本 不是 随机的。
编辑:Raymond Chen 在他著名的博客“Old New Thing”中有一个有趣的 article 几乎就是这个问题。