I valori casuali sono cruciali nella programmazione per lo sviluppo di sistemi sicuri che non sono vulnerabili a dannose sovversioni. La crittografia, per esempio, si basa su valori di generazione casuali e la loro riproducibilità in uscita è imprevedibile. I valori casuali giocano inoltre un ruolo fondamentale in molte applicazioni sicure PHP, in molte librerie e framework, sali e come input per altre funzioni.
Un generatore di numeri casuali è un algoritmo che genera una sequenza di numeri apparentemente casuali. Il valore di input per l’inizializzazione di un tale algoritmo è noto come lo è il suo stato iniziale, o il suo seme. Il seme può essere un valore casuale di dati o un valore noto.
In questo articolo si spiega una panoramica di quali valori casuali sono utilizzati e perché sono importanti, così come una sbirciatina sotto il cofano di come vengono generati

L'uso di valori random
I valori casuali o random in PHP sono molto importanti in quanto sono utilizzati per un’ampia varietà di scopi. Le pratiche di codifica sicure richiedono che certe cose, come i token CSRF, le chiavi API, autorizzazioni nonce -In crittografia il termine nonce indica un numero, generalmente casuale o pseudo-casuale, che ha un utilizzo unico. Nonce è infatti la contrazione delle parole inglesi number used once, che significano appunto “numero usato solo una volta”.-, reset delle password e altre cose del genere da essere creati con una grande quantità di imprevedibilità. Dovrebbero essere creati in un modo che sia molto difficile da indovinare per chiunque.
Alcuni degli usi per valori casuali sono:

  • Generazione di sali per la crittografia – Un sale è un valore casuale che viene utilizzato come input per una funzione di cifratura, di solito è una funzione unidirezionale, per le password hashing. Questi dati casuali vengono indicati come i vettori d’inizializzazione per la cifratura.
  • Generazione di identificatori unici quali gli ID di sessione – PHP è utilizzato per lo sviluppo di molte grandi applicazioni web che richiedono sicurezza e persistenza per gli utenti. PHP consente di creare applicazioni personalizzate e siti web più attraenti con il suo supporto di sessione che, attraverso l’uso di ID di sessione, fornisce un modo per mantenere o conservare certi dati per la successiva richiesta.
  • Generazioni difficili da indovinare per le autorizzazioni tokens/nonces – Molte applicazioni in PHP sono tenuti ad effettuare le chiamate API per altre applicazioni e sistemi. Tali chiamate spesso richiede l’uso di token per le autorizzazioni invece di inviare le credenziali dell’utente in rete. Utilizzando token difficili da indovinare è quindi molto importante, e valori casuali hanno un ruolo nella generazione di questi token per garantire la sicurezza.
Generazione casuale di valori
Per generare valori casuali per tali usi, PHP usa generatori di numeri pseudo-casuali. Gli algoritmi disponibili sono:

  • Generatore lineare congruenziale (LCG), utilizzato quando si chiama la funzione lcg_value() function.-In matematica generatore lineare congruenziale è un algoritmo per la generazione di numeri pseudo-casuali vecchio e molto conosciuto.-
  • L’algoritmo Mersenne Twister, più comunemente usato e viene utilizzato quando è chiamato la funzione mt_rand().-È un algoritmo che genera un ottimo insieme di numeri pseudocasuali, supplendo a varie mancanze presenti negli altri algoritmi per generare numeri pseudocasuali oggi diffusi e usati-
  • La funzione rand() function se la funzione C è localmente supportata.

Questi algoritmi non generano numeri casuali reali, ma i numeri che sono distribuiti in modo che si approssima ai numeri casuali reali. L’algoritmo è seminato con un valore casuale per la generazione della sequenza pseudocasuale.ce.

Seminando il generatore
La semina è l’inizializzazione del generatore di numero casuale utilizzando un numero o un vettore che è conosciuto come il seme. L’integrità del valore seme è molto importante con generatori pseudocasuali poiché sarà generato lo stesso insieme di valori pseudo-casuali quando sarà eseguito più volte con lo stesso seme. Se un utente malintenzionato ottiene il seme può prevedere il futuro dell’uscita o output.
In PHP, i dati casuali per seminare il generatore di numeri casuali può essere ottenuta in due modi. Un modo è usare la funzionemt_srand() per impostare manualmente il seme. Questo modo è utilizzato principalmente in sistemi legacy, o unità di test apparentemente casuale. Il secondo modo di ottenere il seme è quello di lasciare a PHPdi generarlo automaticamente. Questo è il modo preferito e utilizzato soprattutto nelle versioni più recenti di PHP (4.2 e oltre). Un algoritmo reinizializza il seme in modo che lo stesso seme non venga utilizzato più e più volte quando viene utilizzatol’algoritmo Mersenne Twister. /dev/urandom utilizzando la funzione mcrypt_create_iv() o openssl_pseudo_random_bytes(). Windows fornisce un generatore pseudo-casuale crittograficamente sicuro ed è possibile accedere utilizzando le estensioni che forniscono le funzioni openssl_pseudo_random_bytes() e mcrypt_create_iv().
Conclusioni
Poiché i valori casuali sono molto importanti per le applicazioni di sicurezza, nonché per il raggiungimento varie attività di programmazione, l’uso di semi di alta qualità per i generatori è un fattore che un programmatore dovrebbe sempre avere in mente. L’uso di un qualsiasi seme per compiti non banali, come l’hashing delle password può comportare un alto rischio di sicurezza. Garantire l’uso di forti generatori casuali e semi di alta qualità.