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.

È stato utile?

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. "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top