Che cosa ha GUID, che un hash Whirlpool, MD5 o SHA-2 non lo fa?

7

Sto cercando di capire l'uso del GUID e quello che mi ha sempre lasciato a chiedermi è che cosa c'è di così speciale in loro che dovrei prendere in considerazione l'idea di usarli invece di girare il mio tipo di ID univoco. In altre parole, perché non posso usare un hash Whirlpool come:

4bec4b25ff46e09f7d7adb5b4e6842f871d7e9670506d1a65af501cf96ddf194d0132b85e66c1baaeb5319f2030b607121aae2a038458d32b4d4b03dfd46d5ea 

invece di un GUID, MD5 o SHA2 per lo stesso motivo?

Potrei persino adattare la lunghezza usando le sottostringhe di un hash Whirlpool e calcolare io stessa la probabilità di collisione invece di essere limitato dalle specifiche GUID.

    
posta dendini 12.04.2013 - 14:03
fonte

3 risposte

8

Prima di tutto, una funzione di hash ha un input : hai hash qualcosa . GUID (in realtà UUID ) non ha alcun input. Per generare "identificatori univoci" con una funzione di hash, non utilizzare semplicemente una funzione di hash; devi definire cosa stai effettivamente facendo.

Esistono diversi metodi standard per generare UUID; tutti questi metodi mirano a raggiungere "l'unicità" degli identificatori generati. Il metodo 3 utilizza la funzione hash MD5: si genera l'UUID eseguendo il hashing di alcuni dati che sono già intrinsecamente unici in tutto il mondo (ad esempio un URL), ma più lunghi dei 16 byte di un UUID. Questo metodo assomiglia molto a quello che suggerisci, tranne che definisce chiaramente cosa è l'hash (o almeno, afferma in parole semplici che quando si esegue l'hashing, si hash qualcosa e il tuo UUID non sarà più unico di cosa hai hash). Il metodo 5 è come il metodo 3, ma con SHA-1 anziché MD5 (l'output è troncato a 128 bit).

Altri metodi usano elementi fisici o di configurazione della macchina locale (ad esempio indirizzo MAC e ora corrente per il metodo 1). La maggior parte dei metodi sono "cooperativi": garantiscono l'univocità ma possono essere previsti nuovi valori UUID. Per molti protocolli relativi alla sicurezza, quando è necessario un ID univoco, è effettivamente necessario un ID che non colliderà con l'ID precedente (o lo farà solo con una probabilità trascurabile) e non possono essere previsti dagli autori di attacchi; per questo, hai bisogno del "metodo 4": l'UUID a 128 bit contiene 122 bit casuali, generati da un PRNG crittograficamente strong . Questo metodo fornirà identificatori "univoci" ed è migliore di qualsiasi costruzione fatta in casa.

    
risposta data 12.04.2013 - 14:40
fonte
3

Un GUID è un identificatore univoco casuale che generi e poi assegna a qualcosa. "oh, sei così carino, penso che ti chiamerò Charlotte" (solo Charlotte è casuale).

Un checksum MD5 è qualcosa di già intrinseco all'oggetto che può essere identificato da chiunque. "Ehi guarda, secondo questa scala, Charlotte pesa 25 sterline".

Un UUID è intercambiabile in alcune cerchie con GUID, ma in genere un UUID ha un seme di base.

SHA-1 genera un ID molto lungo simile a MD5, ma poiché non predeterminerà la lunghezza dell'output, lo tronca. Un po 'come il pi, ma solo per il decimo posto.

    
risposta data 12.11.2015 - 19:40
fonte
2

Ho intenzione di supporre che la domanda riguardi "GUID rispetto a qualsiasi altro modo di generare una stringa di lunghezza arbitraria di cifre esadecimali", piuttosto che "GUID rispetto all'hashing qualcosa", poiché ciò ha molto più senso. (Se la mia ipotesi non è corretta, allora rimuoverò questa risposta)

In realtà, si tratta di standard. A seconda di come si intende utilizzare questo identificatore, potrebbe essere più semplice e veloce memorizzare un GUID di una stringa. Ad esempio, la maggior parte dei sistemi di database ha tipi GUID / UUID specifici che lo memorizzano come un numero a 128 bit anziché una stringa, che verrà memorizzata carattere per carattere. Inoltre, la maggior parte dei sistemi che gestiscono i GUID dispongono di meccanismi per generarne di nuovi, che non avranno per stringhe casuali arbitrarie.

    
risposta data 18.01.2017 - 07:26
fonte

Leggi altre domande sui tag