Soy consciente de la multitud de preguntas aquí así como Raymond excelente (como de costumbre) post. Sin embargo, dado que el algoritmo para crear Guid fue cambiado al parecer, he encontrado que es difícil conseguir mis manos en cualquier up-to-fecha de la información. El MSDN parece tratar y proporcionar poca información como sea posible.
Lo que se sabe acerca de cómo los Guid se generan en .NET 4? Lo que ha cambiado, y cómo afecta a la seguridad («aleatoriedad») y la integridad («singularidad»)?
Un aspecto específico que me interesa: En v1, parece ser imposible generar el mismo GUID en una sola máquina de nuevo, ya que existe una marca de tiempo y el contador de los involucrados. En v4, este no es el caso (me dijeron), por lo que la posibilidad de obtener el mismo GUID en una sola máquina … el aumento de?
Desde Windows 2000 Microsoft utiliza la versión 4 del algoritmo:
Se puede ver que además de un GUID generado en .NET (a partir de Wikipedia):
Una versión 4 UUID constar de 122 bits significativos, dando 2^122 valores distintos que es un muy gran número. Dado un conjunto de H valores, se espera que el número de valores que tenemos que elegir antes de encontrar la primera azar colisión con un 50% de probabilidad puede ser calculada de la siguiente manera (ver Cumpleaños De Ataque en la Wikipedia):
El resultado cumpleaños (obligado) por 2^122 valores diferentes es aproximadamente 2,89 e+18. Esto supone que los valores generados se distribuyen al azar. Obviamente, si los valores se distribuyen de manera desigual, un azar de la colisión se puede encontrar más rápido. Para más detalles véase también Aleatorio UUID probabilidad de duplicados.
1Como cuestión de hecho, el autor de la Melissa gusano podría ser rastreado debido a un GUID generado utilizando una versión 1 algoritmo.
Sí, hubo un cambio en la .NET 4.0, Guid.NewGuid() llama directamente a CoCreateGuid(), un pequeño contenedor de UuidCreate(). Las versiones anteriores de .RED llamada a una función auxiliar en el CLR, GuidNative::CompleteGuid(). Que las llamadas CoCreateGuid. No sé por qué se hizo este cambio, huele a nada más que a un menor de optimización.
En cualquier caso, la misma función de Windows genera el Guid, el algoritmo ha sido el mismo durante los últimos 10 años, es tan fiable como siempre.