gpt4 book ai didi

python-3.x - python中的uuid4和secrets token_bytes有什么区别?

转载 作者:行者123 更新时间:2023-12-04 10:04:50 24 4
gpt4 key购买 nike

检查了 secrets 的 cpython 源代码和 uuid4 .两者似乎都在使用 os.urandom。

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

#secrets.py
def token_bytes(nbytes=None):
"""Return a random byte string containing *nbytes* bytes.
If *nbytes* is ``None`` or not supplied, a reasonable
default is used.
>>> token_bytes(16) #doctest:+SKIP
b'\\xebr\\x17D*t\\xae\\xd4\\xe3S\\xb6\\xe2\\xebP1\\x8b'
"""
if nbytes is None:
nbytes = DEFAULT_ENTROPY
return _sysrand.randbytes(nbytes)

# This is code for randbytes in SystemRandom in random
def randbytes(self, n):
"""Generate n random bytes."""
# os.urandom(n) fails with ValueError for n < 0
# and returns an empty bytes string for n == 0.
return _urandom(n)

IETF 警告不要将 uuid 用于安全功能。请参阅第 6 节 UUID .它说

  1. Security Considerations

Do not assume that UUIDs are hard to guess; they should not be usedas security capabilities (identifiers whose mere possession grantsaccess), for example. A predictable random number source willexacerbate the situation.

如果 secrets 确实使用与 uuid4 相同的 urandom,我们是否可以使用 uuid4 而不是 secrets。使用 secret token_bytes 而不是 uuid4 本身的全部目的是什么?根据 IETF 的标准,api key / token 的 secret 模块真的不安全吗?

最佳答案

您可能会惊讶地发现随机 UUID 并不是完全随机的。准确地说,有 6 位设置为特定值(以指示它是一个随机 UID)。它们被创建为独特(具有很高的确定性)。 UUID 具有特定用途,因此您会发现在其上定义了各种方法。

此外,顾名思义,它们意味着是 secret 。这也可能意味着没有采取申请 secret 的可能保护措施。例如,字符串通常很容易在内存中找到,而 UUID 通常以文本表示形式使用/交流。

token 是不同的东西。它通常被加密并保密。因此,它有不同的用途。当然,UUID 和 token 都可以由随机位和字节组成。然而,这更多的是关于使用正确的工具来完成工作。

如果您要创建 key 而不是 token 或 UUID,我更喜欢 API 特定方法来生成 key 。否则,直接使用 SystemRandom 可能是个好主意,因为 key 既不是 UUID 也不是 token 。

关于python-3.x - python中的uuid4和secrets token_bytes有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61638695/

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