Perché UUID v4 ha il formato xxxxxxxx-xxxx-4xxx-zxxx-xxxxxxxxxxxx? [chiuso]

0

Sono molto curioso del perché il formato sia xxxxxxxx-xxxx-4xxx-zxxx-xxxxxxxxxxxx? Perché il 4 è lì, e perché z è sempre 8, 9, A, B? E anche, perché le diverse lunghezze delle stringhe tra i trattini? Qual è la logica alla base di tutto ciò e ha delle implicazioni per la generazione di stringhe crittograficamente sicure?

EDIT: ho fatto l'ipotesi (erroneamente), che UUID v4 sia necessariamente crytopgrahically secure. Stavo cercando la logica relativa alla sicurezza per il suo formato. Ma, sì, posso capire che in senso stretto questa non è una domanda di sicurezza. Ad ogni modo, è a mia conoscenza che gli UUID creati con CSPRNG possono essere crittograficamente forti.

    
posta jack 16.08.2016 - 11:20
fonte

1 risposta

9

Varianti e versioni:

Un UUID ha varianti e versioni .

Il 4 in questo caso ti dice che è la versione 4. Altre versioni vanno da 1 a 5.

Quelle versioni hanno varianti 8, 9, A e B, quindi la z nel tuo UUID ti dice quale variante è.

La variante viene utilizzata per indicare quale layout ha l'UUID. Le varianti sono importanti anche quando si tratta di compatibilità con le versioni precedenti.

Lunghezza delle stringhe:

Per quanto riguarda il motivo per cui le stringhe hanno lunghezze diverse, un UUID ha alcune parti, che puoi usare per generare un UUID in base a vari parametri:

UUID =  time-low "-" 
        time-mid "-" 
        time-high-and-version "-" 
        clock-seq-and-reserved | clock-seq-low "-" 
        node

time-low ha 16 bit, time-mid ha 8 bit, ... Le lunghezze sono state storicamente costruite in modo da adattarsi allo schema seguente:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          time_low                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       time_mid                |         time_hi_and_version   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|clk_seq_hi_res |  clk_seq_low  |         node (0-1)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         node (2-5)                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Quindi questo dovrebbe darti un'idea, perché le lunghezze delle stringhe sono diverse.

UUID e sicurezza:

Normalmente gli UUID sono not secure: link ... e vedi il commento di Michael Kjörling per ulteriori esempi e spiegazioni.

Gli UUID non sono stati creati per essere crittograficamente sicuri, quindi dovresti usare qualcos'altro creato appositamente per questo scopo.

L'RFC per gli UUID ha anche una sezione sulla sicurezza, che avvisa gli utenti di utilizzare gli UUID in modo errato per questo:

  1. Security Considerations

    Do not assume that UUIDs are hard to guess; they should not be used as security capabilities (identifiers whose mere possession grants access), for example. A predictable random number source will exacerbate the situation.

Vedi la RFC per i dettagli tecnici: link

    
risposta data 16.08.2016 - 11:34
fonte

Leggi altre domande sui tag