Sto implementando un servizio token una tantum. Ognuno di questi token di una volta rappresenta alcuni dati / azioni sul lato server ad esso associati (ad esempio un'azione di conferma dell'email), in modo che il mio servizio Web possa verificare e intervenire quando li riceve senza sessione. (dall'interno del link di conferma di una email, da una scansione del codice qr ...)
Questi token dovrebbero essere molto difficili da indovinare o falsificare. Quindi penso che una lunga stringa casuale (da / dev / urandom) dovrebbe essere abbastanza buona. Ma dal link :
A counterpart to /dev/random is /dev/urandom ("unlimited"[5]/non-blocking random source[4]) which reuses the internal pool to produce more pseudo-random bits. This means that the call will not block, but the output may contain less entropy than the corresponding read from /dev/random. While /dev/urandom is still intended as a pseudorandom number generator suitable for most cryptographic purposes, some people claim /dev/urandom as not recommended[who?] for the generation of long-term cryptographic keys. However this is in general not the case because once the entropy pool is unpredictable it doesn't leak security by a reduced number of bits.
E ho anche letto del codice nella sessione link
def _urandom():
if hasattr(os, 'urandom'):
return os.urandom(30)
return text_type(random()).encode('ascii')
def generate_key(salt=None):
if salt is None:
salt = repr(salt).encode('ascii')
return sha1(b''.join([
salt,
str(time()).encode('ascii'),
_urandom()
])).hexdigest()
Quindi la mia domanda è: tale hash(time()+urandom())
genera più stringhe "casuali" del puro urandom()
? Qual è lo scopo di utilizzare una funzione di hash qui?