是Python吗uuid.uuid4足够强大的密码重置链接?

2024-04-29 01:55:47 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我用来为我的应用程序生成密码重置链接的代码:

def create_unique_code():
    return str(uuid.uuid4())

够结实吗?我用一两天的有效期。在


Tags: 代码应用程序密码returnuuid链接defcreate
2条回答

是的,UUID4是完全随机的,它的长度足以排除暴力强迫或侥幸猜测。所以只要RNG uuid.uuid4()提供足够好的随机性,你就可以了。在

但是,考虑使用例如加密签名的令牌(itsdangerouslib可以处理它)-不仅可以在生成时指定过期时间,还不必在服务器上存储有关令牌的任何内容。在

在CPython,是的。可能在其他Python实现中,但是您可能需要再次检查是否使用了加密的强随机性源来生成UUID。在


在判断某种生成安全随机令牌的方法(如uuid)是否“足够强大”时,您可能会关心两个因素:

  1. 有没有足够的可能价值让它不会被粗暴地强迫?在
  2. 是否使用了随机性来源cryptographically secure?在

既然there are 2122 version 4 UUIDs(略高于5万亿万亿万亿),那么第一点的答案肯定是“是的”,在本例中。所有可能的uuid的空间不会很快就被野蛮强制执行。在

{3}表示当前使用的是强^安全性^或不使用。实际上,uuid4()的整个文档只是:

Generate a random UUID.

显然没有安全保障。在

UUID specification也没有解决这个问题,它没有要求在UUID生成中使用加密的强随机性源,并且确实在安全考虑部分明确考虑了使用“可预测随机数源”来生成UUID的可能性。在

但是,我们可以看看https://github.com/python/cpython/blob/master/Lib/uuid.py的实现:

def uuid4():
    """Generate a random UUID."""
    return UUID(bytes=os.urandom(16), version=4)

因为它使用os.urandom作为随机源,所以它是安全的。请参阅位于https://docs.python.org/3/library/os.html#os.urandom的文档,其中注意os.urandom返回:

a string of size random bytes suitable for cryptographic use.

相关问题 更多 >