Con quale facilità puoi indovinare un GUID che potrebbe essere generato?
Domanda
I GUID vengono molto utilizzati nella creazione di chiavi di sessione per applicazioni Web. Mi sono sempre chiesto della sicurezza di questa pratica. Poiché il GUID viene generato in base alle informazioni fornite dalla macchina e al tempo, insieme ad alcuni altri fattori, quanto sia difficile indovinare i probabili GUID che emergeranno in futuro. Supponiamo che tu abbia avviato 1000 o 10000 nuove sessioni per ottenere un buon set di dati dei GUID generati. Ciò renderebbe più semplice la generazione di un GUID che potrebbe essere utilizzato per un'altra sessione. Non dovresti nemmeno indovinare un GUID specifico, ma continua a provare i GUID che potrebbero essere generati in un determinato periodo di tempo.
Soluzione
Le applicazioni Web .NET chiamano Guid.NewGuid () per creare un GUID che a sua volta finisce per chiamare CoCreateGuid () funzione COM un paio di frame più in profondità nello stack.
Dalla libreria MSDN:
La funzione CoCreateGuid chiama il Funzione RPC UuidCreate , che crea un GUID, un 128 bit univoco a livello globale numero intero. Utilizza la funzione CoCreateGuid quando hai bisogno di un prodotto assolutamente unico numero che utilizzerai come a identificatore persistente in un distribuito ambiente. A un livello molto alto di certezza, questa funzione restituisce a valore univoco: nessun'altra invocazione, attivata lo stesso o qualsiasi altro sistema (in rete o meno), dovrebbe restituire il file stesso valore.
E se controlli la pagina su UuidCreate :
La funzione UuidCreate genera a UUID che non può essere rintracciato in indirizzo ethernet / token ring del computer su cui è stato generato. esso inoltre non può essere associato ad altri UUID è stato creato sullo stesso computer.
L'ultima frase contiene è la risposta alla tua domanda. Quindi direi che è abbastanza difficile indovinare a meno che non ci sia un bug nell'implementazione di Microsoft.
Altri suggerimenti
Ecco alcune cose da Wikipedia ( fonte originale ):
V1 GUID che contengono un indirizzo MAC e il tempo può essere identificato dal cifra " 1 " nella prima posizione del terzo gruppo di cifre, ad esempio {2f1e4fc0-81fd-11da-9156-00036a0f876a}.
Per quanto ne so, non lo nascondono davvero.
I GUID V4 utilizzano l'algoritmo successivo, che è un numero pseudo-casuale. Questi avere un "4" nella stessa posizione, per esempio {38a52be4-9352-453e-af97-5c3b448652f0}. Più specificamente, il bit "data3" il modello sarebbe 0001xxxxxxxxxxxx in il primo caso e 0100xxxxxxxxxxxx nel secondo. Crittanalisi del Il generatore GUID di WinAPI mostra che, poiché la sequenza di GU4 V4 è pseudo-casuale, dato lo stato iniziale si possono prevedere fino a 250.000 successivi GUID restituiti dalla funzione UuidCreate 1 . Ecco perché i GUID non dovrebbe essere usato in crittografia, e. g., come chiavi casuali.
I GUID sono garantiti per essere unici e questo è tutto. Non è garantito che sia casuale o difficile da indovinare.
PER rispondere alla tua domanda, almeno per l'algoritmo di generazione GU1 V1 se conosci l'algoritmo, l'indirizzo MAC e il tempo della creazione, potresti probabilmente generare un set di GUID uno dei quali sarebbe uno che è stato effettivamente generato. E l'indirizzo MAC se è un GUID V1 può essere determinato da GUID di esempio dalla stessa macchina.
Tidbit aggiuntivo da Wikipedia:
L'algoritmo specificato dall'OSF per la generazione di nuovi GUID è stata ampiamente criticato. In questi (V1) GUID, il l'indirizzo MAC della scheda di rete dell'utente è usato come base per l'ultimo gruppo di Cifre GUID, il che significa, ad esempio, a cui è possibile risalire a un documento il computer che l'ha creato. Questo buco della privacy è stato utilizzato durante la localizzazione il creatore del worm Melissa. Maggior parte delle altre cifre si basano sul tempo durante la generazione del GUID.
Se qualcuno continuasse a colpire un server con un flusso continuo di GUID sarebbe più un attacco denial of service che altro.
La possibilità che qualcuno indovini un GUID è quasi nulla.
Dipende. È difficile se i GUID sono impostati in modo ragionevole, ad es. usando hash sicuri salati e hai un sacco di bit. È debole se i GUID sono brevi e ovvi.
Potresti voler prendere delle misure per impedire a qualcuno di creare 10000 nuove sessioni comunque a causa del carico del server che questo potrebbe creare.
" I GUID sono garantiti per essere unici e questo è tutto " ;. I GUID non sono garantiti come unici. Almeno quelli generati da CoCreateGuid: " Ad un livello molto elevato di certezza , questa funzione restituisce un valore unico & # 8211; nessun'altra invocazione, sullo stesso o su qualsiasi altro sistema (in rete o meno), dovrebbe restituire lo stesso valore. "