Tes*_*son 11 python security uuid cryptography
这是我用来为我的应用程序生成密码重置链接的代码:
def create_unique_code():
return str(uuid.uuid4())
Run Code Online (Sandbox Code Playgroud)
那够强吗?我使用一两天的到期时间。
Mar*_*ery 19
在 CPython 中,是的。在其他 Python 实现中,可能,但您可能想要仔细检查是否使用加密的强随机源来生成 UUID。
在判断生成安全随机令牌的某种方式(例如 UUID)是否“足够强大”时,您可能会关心两个因素:
由于有2122个第 4 版 UUID(略高于 5 万亿万亿),因此在这种情况下,第 1 点的答案肯定是“是”。所有可能的 UUID 的空间都不会很快被暴力破解。
上的官方 Python 文档uuid.uuid4()目前没有回答第 2 点,其中没有提及安全性或使用的随机性源是否强。事实上,整个文档uuid4()只是:
生成随机 UUID。
这显然没有提供安全保证。
UUID 规范也没有解决这个问题,该规范不强制要求在 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)
Run Code Online (Sandbox Code Playgroud)
由于这os.urandom用作其随机源,因此是安全的。请参阅https://docs.python.org/3/library/os.html#os.urandom上的文档,其中注意os.urandom返回:
适合加密使用的大小为随机字节的字符串。
是的,UUID4 是完全随机的,并且足够长以排除蛮力或幸运猜测。因此,只要 RNGuuid.uuid4()提供足够好的随机性,您就应该没问题。
但是,请考虑使用例如加密签名的令牌(itsdangerouslib 可以处理它) - 您不仅可以在生成它时指定到期时间,而且您也不必在服务器上存储有关令牌的任何内容。
| 归档时间: |
|
| 查看次数: |
4990 次 |
| 最近记录: |