È generalmente noto che metodi come il metodo array_rand()
in PHP non sono considerati crittograficamente sicuri. Sto cercando di capire in quali situazioni i risultati generati potrebbero essere prevedibili.
Se conosco il seme, i valori nell'array, un singolo valore generato e quante volte il metodo è stato chiamato prima che quel valore sia stato generato, so che posso facilmente calcolare tutti i valori restituiti successivamente. Posso farlo scrivendo il mio script che usa lo stesso seme e genera lo stesso numero di risultati, mettendolo quindi nello stesso stato.
Supponendo che non conosca il seme o il numero di valori precedentemente generati, quali sono le mie possibilità / quanto in basso posso ottenere la probabilità di prevedere i valori futuri.
Per definire un esempio più concreto e rendere la domanda meno teorica, supponiamo di utilizzare array_rand
per generare token alfanumerici senza distinzione tra maiuscole e minuscole con una lunghezza di 12. Ciò viene ottenuto acquisendo 12 valori da un array di caratteri mediante chiamare array_rand 12 volte, rendendo così il token [A-Z\d]{12}
. So di avere uno dei mille token generati consecutivamente, ma non in quale posizione è stato generato.
Posso prevedere il prossimo token (presumo che non abbia generato l'ultimo token)? Suppongo che questo non possa essere previsto con una precisione del 100%, ma quali sono le possibilità che i brute forzino tutte le possibilità per il prossimo token, e quanti sarebbero?
Supponendo che io possa convalidare se un token è valido, quanto sa che 2 gettoni consecutivi (24 valori) restringono le mie possibilità di prevedere il 3 °, ecc.
Ho visto alcune ricerche sul cracking dello stato di rand
ma gli articoli in genere non hanno a che fare con intervalli vincolati / troncati.
P.S. Sto cercando di capire la prova / matematica dietro perché è insicuro, non alla ricerca di suggerimenti di approcci più sicuri.