File tree Expand file tree Collapse file tree 2 files changed +12
-6
lines changed Expand file tree Collapse file tree 2 files changed +12
-6
lines changed Original file line number Diff line number Diff line change @@ -595,18 +595,20 @@ def _windll_getnode():
595
595
596
596
def _random_getnode ():
597
597
"""Get a random node ID."""
598
- # RFC 4122, $4.1.6 says "For systems with no IEEE address, a randomly or
599
- # pseudo-randomly generated value may be used; see Section 4.5. The
600
- # multicast bit must be set in such addresses, in order that they will
601
- # never conflict with addresses obtained from network cards."
598
+ # RFC 9562, §6.10-3 says that
599
+ #
600
+ # Implementations MAY elect to obtain a 48-bit cryptographic-quality
601
+ # random number as per Section 6.9 to use as the Node ID. [...] [and]
602
+ # implementations MUST set the least significant bit of the first octet
603
+ # of the Node ID to 1. This bit is the unicast or multicast bit, which
604
+ # will never be set in IEEE 802 addresses obtained from network cards.
602
605
#
603
606
# The "multicast bit" of a MAC address is defined to be "the least
604
607
# significant bit of the first octet". This works out to be the 41st bit
605
608
# counting from 1 being the least significant bit, or 1<<40.
606
609
#
607
610
# See https://en.wikipedia.org/w/index.php?title=MAC_address&oldid=1128764812#Universal_vs._local_(U/L_bit)
608
- import random
609
- return random .getrandbits (48 ) | (1 << 40 )
611
+ return int .from_bytes (os .urandom (6 )) | (1 << 40 )
610
612
611
613
612
614
# _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 `.
You can’t perform that action at this time.
0 commit comments