File tree Expand file tree Collapse file tree 3 files changed +16
-6
lines changed Expand file tree Collapse file tree 3 files changed +16
-6
lines changed Original file line number Diff line number Diff line change @@ -257,6 +257,10 @@ The :mod:`uuid` module defines the following functions:
257
257
non-specified arguments are substituted for a pseudo-random integer of
258
258
appropriate size.
259
259
260
+ By default, *a *, *b * and *c * are generated by a non-cryptographically
261
+ secure pseudo-random number generator (CSPRNG). Use :func: `uuid4 ` when
262
+ a UUID needs to be used in a security-sensitive context.
263
+
260
264
.. versionadded :: 3.14
261
265
262
266
Original file line number Diff line number Diff line change @@ -656,18 +656,20 @@ def _windll_getnode():
656
656
657
657
def _random_getnode ():
658
658
"""Get a random node ID."""
659
- # RFC 4122, $4.1.6 says "For systems with no IEEE address, a randomly or
660
- # pseudo-randomly generated value may be used; see Section 4.5. The
661
- # multicast bit must be set in such addresses, in order that they will
662
- # never conflict with addresses obtained from network cards."
659
+ # RFC 9562, §6.10-3 says that
660
+ #
661
+ # Implementations MAY elect to obtain a 48-bit cryptographic-quality
662
+ # random number as per Section 6.9 to use as the Node ID. [...] [and]
663
+ # implementations MUST set the least significant bit of the first octet
664
+ # of the Node ID to 1. This bit is the unicast or multicast bit, which
665
+ # will never be set in IEEE 802 addresses obtained from network cards.
663
666
#
664
667
# The "multicast bit" of a MAC address is defined to be "the least
665
668
# significant bit of the first octet". This works out to be the 41st bit
666
669
# counting from 1 being the least significant bit, or 1<<40.
667
670
#
668
671
# See https://en.wikipedia.org/w/index.php?title=MAC_address&oldid=1128764812#Universal_vs._local_(U/L_bit)
669
- import random
670
- return random .getrandbits (48 ) | (1 << 40 )
672
+ return int .from_bytes (os .urandom (6 )) | (1 << 40 )
671
673
672
674
673
675
# _OS_GETTERS, when known, are targeted for a specific OS or platform.
Original file line number Diff line number Diff line change
1
+ :mod: `uuid `: when the MAC address cannot be determined, the 48-bit node
2
+ ID is now generated with a cryptographically-secure pseudo-random number
3
+ generator (CSPRNG) as per :rfc: `RFC 9562, §6.10.3 <9562#section-6.10-3 >`.
4
+ This affects :func: `~uuid.uuid1 ` and :func: `~uuid.uuid6 `.
You can’t perform that action at this time.
0 commit comments