¿Qué tiene GUID, que un hash Whirlpool, MD5 o SHA-2 no?

7

Estoy tratando de entender el uso del GUID y lo que siempre me ha dejado preguntándome es qué tiene de especial el tema que debería considerar usarlos en lugar de lanzar mi propio tipo de identificación única. En otras palabras, ¿por qué no puedo usar un hash de Whirlpool como:

4bec4b25ff46e09f7d7adb5b4e6842f871d7e9670506d1a65af501cf96ddf194d0132b85e66c1baaeb5319f2030b607121aae2a038458d32b4d4b03dfd46d5ea 

en lugar de un GUID, MD5 o SHA2 por la misma razón?

Incluso podría adaptar la longitud utilizando subcadenas de un hash de Whirlpool y calcular la probabilidad de colisión por mí mismo en lugar de estar restringido por la especificación GUID.

    
pregunta dendini 12.04.2013 - 14:03
fuente

3 respuestas

8

Primero, una función hash tiene una entrada : hash algo . GUID (en realidad UUID ) no tiene ninguna entrada. Para generar "identificadores únicos" con una función hash, simplemente no usas una función hash; tienes que definir lo que realmente hash.

Hay varios métodos estándar para generar UUID; todos estos métodos tienen como objetivo lograr la "singularidad" de los identificadores generados. El método 3 utiliza la función de hash MD5: usted genera el UUID al copiar algunos datos que ya son inherentemente únicos en todo el mundo (por ejemplo, una URL), pero más largos que los 16 bytes de un UUID. Este método se asemeja mucho a lo que sugieres, excepto que define claramente lo que está descifrado (o al menos, indica en palabras sencillas que cuando hash, hash algo y tu UUID no será más único que lo que hash). El método 5 es como el método 3, pero con SHA-1 en lugar de MD5 (la salida se trunca a 128 bits).

Otros métodos utilizan elementos físicos o de configuración de la máquina local (por ejemplo, la dirección MAC y la hora actual para el método 1). La mayoría de los métodos son "cooperativos": aseguran la singularidad, pero se pueden predecir nuevos valores UUID. Para muchos protocolos relacionados con la seguridad, cuando necesita una ID única, realmente necesita una ID que no coincida con la ID anterior (o que lo haga solo con una probabilidad insignificante) los atacantes no pueden predecir y ; para eso, necesita el "método 4": el UUID de 128 bits contiene 122 bits aleatorios, generados a partir de un PRNG criptográficamente fuerte . Este método proporcionará identificadores "fuertemente únicos" y es mejor que cualquier construcción casera.

    
respondido por el Tom Leek 12.04.2013 - 14:40
fuente
3

Un GUID es un identificador único aleatorio que generas y luego asignas a algo. "oh, eres tan lindo, creo que te llamaré Charlotte" (solo Charlotte es aleatoria).

Una suma de comprobación MD5 es algo ya inherente al objeto que cualquiera puede identificar. "Oye, mira, según esta escala, Charlotte pesa 25 libras".

Un UUID es intercambiable en algunos círculos con GUID, pero por lo general un UUID tiene una semilla base.

SHA-1 genera una ID muy larga similar a MD5, pero como no predetermina la longitud de la salida, la trunca. Algo así como pi, pero solo hasta el décimo lugar.

    
respondido por el Brandon Cunningham 12.11.2015 - 19:40
fuente
2

Voy a asumir que la pregunta es sobre "GUID versus cualquier otra forma de generar una cadena de longitud hexadecimal de longitud arbitraria", en lugar de "GUID vs hashing algo", ya que tiene mucho más sentido. (Si mi suposición es incorrecta, eliminaré esta respuesta)

Realmente, se trata de estándares. Dependiendo de cómo pretenda usar este identificador, podría ser más fácil y rápido almacenar un GUID que una cadena. Por ejemplo, la mayoría de los sistemas de bases de datos tienen tipos GUID / UUID específicos que lo almacenan como un número de 128 bits en lugar de una cadena, que se almacenará carácter por carácter. Además, la mayoría de los sistemas que tratan con GUID tienen mecanismos para generar nuevos, que no tendrán para cadenas aleatorias arbitrarias.

    
respondido por el Mike Caron 18.01.2017 - 07:26
fuente

Lea otras preguntas en las etiquetas