Postuver è uuid_generate_v4 di Postgres in modo sicuro?

16

Sto utilizzando uuid_generate_v4 di Postgres in una colonna chiave uuid primaria per generare token di autenticazione monouso sicuri. Va bene? Postgres usa un'origine di numeri casuali sicura per generare questi UUID o dovrei generarli usando un'origine casuale sicura sul lato dell'applicazione prima di inserirli nel database?

    
posta glittershark 14.07.2015 - 16:01
fonte

1 risposta

19

La documentazione di PostgreSQL dice che la generazione dell'UUID si basa su Libreria OSSP . Uno sguardo al codice sorgente di OSSP (versione 1.6.2) mostra che il codice usa /dev/urandom su sistemi di tipo Unix ( CryptGenRandom() su Windows), e anche un PRNG molto più debole basato sul tempo corrente, l'ID di processo e la libreria C rand() funzione. Fortunatamente, le due uscite sono XORed insieme, quindi l'uso di /dev/urandom è sufficiente per garantire una strong casualità, indipendentemente da quanto debole possa essere l'altro PRNG. Sfortunatamente , se l'apertura di /dev/urandom fallisce per qualsiasi motivo (ad es. il processo aveva esaurito i descrittori di file liberi in quel momento), la libreria ricade solo per usare il PRNG debole, senza preavviso .

Quindi, mentre UUID v4 generato da PostgreSQL dovrebbe di solito includere 122 bit di casualità crittograficamente strong, c'è sempre una possibilità di degradazione in un comportamento molto più debole, senza un metodo affidabile per testare tale occorrenza . Inoltre, niente di tutto ciò sembra davvero documentato, quindi potrebbe cambiare in altre versioni di libreria. Pertanto, cautela consiglia non di fare affidamento sulla strong casualità dell'UUID generata da PostgreSQL, e invece utilizzare esplicitamente una fonte casuale strong sul lato dell'applicazione (in genere /dev/urandom , ma non nascondere gli errori di accesso).

    
risposta data 14.07.2015 - 16:17
fonte

Leggi altre domande sui tag