¿Por qué UUID v4 tiene el formato xxxxxxxx-xxxx-4xxx-zxxx-xxxxxxxxxxxx? [cerrado]

0

Tengo mucha curiosidad por saber por qué el formato es xxxxxxxx-xxxx-4xxx-zxxx-xxxxxxxxxxxx? ¿Por qué está el 4, y por qué es z siempre 8, 9, A, B? Y también, ¿por qué las diferentes longitudes de cadena entre los guiones? ¿Cuál es la razón detrás de todo esto, y tiene alguna implicación para generar cadenas criptográficamente seguras?

EDITAR: Supuse (erróneamente) que UUID v4 es necesariamente seguro desde el punto de vista criogénico. Estaba buscando la razón relacionada con la seguridad para su formato. Pero sí, puedo entender que, estrictamente hablando, esto no es una cuestión de seguridad. De todos modos, tengo entendido que los UUID construidos con CSPRNG pueden ser criptográficamente fuertes.

    
pregunta jack 16.08.2016 - 11:20
fuente

1 respuesta

9

Variantes y versiones:

Un UUID tiene variantes y versiones .

El 4 en este caso le dice que es la versión 4. Otras versiones varían de 1 a 5.

Esas versiones tienen variantes 8, 9, A y B, por lo tanto, la z en su UUID le indica qué variante es.

La variante se utiliza para indicar qué diseño tiene el UUID. Las variantes también son importantes cuando se trata de compatibilidad con versiones anteriores.

Longitud de las cadenas:

En cuanto a por qué las cadenas tienen diferentes longitudes, un UUID tiene ciertas partes, que puede usar para generar un UUID dependiendo de varios parámetros:

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

time-low tiene 16 bits, time-mid tiene 8 bits, ... Las longitudes se construyeron históricamente para que encajen en el siguiente esquema:

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)                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Así que esto debería darte una idea, por qué las longitudes de las cadenas son diferentes.

UUID y seguridad:

Por lo general, los UUID no son seguros: enlace ... y vea el comentario de Michael Kjörling para más ejemplos y explicaciones.

Los UUID no se crearon para ser cripto-gráficamente seguros, por lo que debería usar otra cosa hecha especialmente para ese propósito.

El RFC para UUID incluso tiene una sección, sobre seguridad, que advierte a los usuarios de usar mal UUID para eso:

  
  1. Consideraciones de seguridad

         

    No asuma que los UUID son difíciles de adivinar; no deben ser utilizados   como capacidades de seguridad (identificadores cuya mera posesión otorga   acceso), por ejemplo. Una fuente de números aleatorios predecible será   exacerbar la situación.

  2.   

Consulte el RFC para obtener detalles técnicos: enlace

    
respondido por el hamena314 16.08.2016 - 11:34
fuente

Lea otras preguntas en las etiquetas