security - newguid - ¿Con qué facilidad puede adivinar un GUID que podría generarse?
uuid generator (6)
"Se garantiza que los GUID sean únicos y eso es todo". Los GUID no están garantizados como únicos. Al menos los generados por CoCreateGuid: "Con un alto grado de certeza , esta función devuelve un valor único: ninguna otra invocación, en el mismo o en cualquier otro sistema (en red o no), debe devolver el mismo valor".
Los GUID se usan mucho para crear claves de sesión para aplicaciones web. Siempre me he preguntado sobre la seguridad de esta práctica. Dado que el GUID se genera en función de la información de la máquina y el momento, junto con algunos otros factores, qué tan difícil es adivinar los posibles GUID que surgirán en el futuro. Digamos que comenzó 1000 o 10000 sesiones nuevas para obtener un buen conjunto de datos de los GUID generados. ¿Esto facilitaría la generación de un GUID que podría usarse para otra sesión? Ni siquiera tendría que adivinar un GUID específico, sino simplemente seguir probando los GUID que podrían generarse en un período de tiempo específico.
.NET Web Applications llama a Guid.NewGuid () para crear un GUID que a su vez termina llamando a la función COM CoCreateGuid() un par de cuadros más profundos en la pila.
Desde la biblioteca de MSDN:
La función CoCreateGuid llama a la función RPC UuidCreate , que crea un GUID, un entero global de 128 bits único. Use la función CoCreateGuid cuando necesite un número absolutamente único que usará como identificador persistente en un entorno distribuido. Con un alto grado de certeza, esta función devuelve un valor único: ninguna otra invocación, en el mismo sistema o en cualquier otro (en red o no), debe devolver el mismo valor.
Y si revisas la página en UuidCreate :
La función UuidCreate genera un UUID que no se puede rastrear a la dirección de anillo ethernet / token de la computadora en la que se generó. Tampoco se puede asociar con otros UUID creados en la misma computadora.
La última oración contiene la respuesta a tu pregunta. Entonces, diría que es bastante difícil de adivinar a menos que haya un error en la implementación de Microsoft.
Aquí hay algunas cosas de Wikipedia ( fuente original ):
Los GUI de V1 que contienen una dirección MAC y la hora se pueden identificar con el dígito "1" en la primera posición del tercer grupo de dígitos, por ejemplo {2f1e4fc0-81fd-11da-9156-00036a0f876a}.
En mi entender, en realidad no lo ocultan.
Los GUID V4 usan el último algoritmo, que es un número pseudoaleatorio. Estos tienen un "4" en la misma posición, por ejemplo {38a52be4-9352-453e-af97-5c3b448652f0}. Más específicamente, el patrón de bits ''data3'' sería 0001xxxxxxxxxxxx en el primer caso y 0100xxxxxxxxxxxx en el segundo. El criptoanálisis del generador de GUID de WinAPI muestra que, dado que la secuencia de GUID de V4 es pseudoaleatoria, dado el estado inicial, se pueden predecir hasta los próximos 250 000 GUID devueltos por la función UuidCreate Wikipedia . Esta es la razón por la que los GUID no deben usarse en criptografía, por ejemplo, como claves aleatorias.
Depende Es difícil si los GUID se configuran con sensatez, por ejemplo, usando hashes seguros y salados, y usted tiene un montón de bits. Es débil si los GUID son cortos y obvios.
Es posible que desee tomar medidas para evitar que alguien cree 10000 nuevas sesiones de todos modos debido a la carga del servidor que esto podría generar.
Se garantiza que los GUID son únicos y eso es todo. No se garantiza que sea aleatorio o difícil de adivinar.
Para responder a su pregunta, al menos para el algoritmo de generación de GUID de V1, si conoce el algoritmo, la dirección de MAC y la hora de la creación, probablemente podría generar un conjunto de GUID, uno de los cuales sería el que realmente se generó. Y la dirección MAC si se trata de un GUID V1 se puede determinar a partir de GUID de muestra de la misma máquina.
Tidbit adicional de wikipedia:
El algoritmo especificado por OSF para generar nuevos GUID ha sido ampliamente criticado. En estos GUI (V1), la dirección MAC de la tarjeta de red del usuario se usa como base para el último grupo de dígitos GUID, lo que significa, por ejemplo, que un documento puede rastrearse hasta la computadora que lo creó. Este orificio de privacidad se utilizó para ubicar al creador del gusano Melissa. La mayoría de los otros dígitos se basan en el tiempo al generar el GUID.
Si alguien sigue golpeando un servidor con un flujo continuo de GUID, sería más un ataque de denegación de servicio que cualquier otra cosa.
La posibilidad de que alguien adivine un GUID es casi nulo.