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?

InformationsquelleAutor mafu | 2010-05-03

2 Comentarios

  1. 52

    Desde Windows 2000 Microsoft utiliza la versión 4 del algoritmo:

    Con Windows 2000, Microsoft cambió a la versión 4 Guid, ya que la incrustación de la dirección MAC fue visto como un riesgo para la seguridad. 1

    Se puede ver que además de un GUID generado en .NET (a partir de Wikipedia):

    Versión 4 Uuid tienen la forma xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx con cualquier dígitos hexadecimales para x, pero sólo uno de 8, 9, a, B y. por ejemplo, f47ac10b-58cc-4372-a567-0e02b2c3d479.

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

    Cómo son .NET 4 Guid generado?

    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.

    • +1 – Guid son generados por el sistema operativo subyacente – no .NET. El .NET clases simplemente envuelva el sistema operativo subyacente Api.
    • Gracias por la respuesta y el enlace adicional, aclaró que la mayor parte de mis preguntas. ¿Sabe usted si la suposición es que estoy haciendo en el último párrafo es correcto?
    • Dirk, se puede enfrentar a los que se aplica .NET core así? Es necesario mirar hacia el SO Api para lo que se está ejecutando .NET core con el fin de averiguar el GUID de la generación de la versión?
    • De acuerdo a la msdn.microsoft.com/en-us/library/…, desde Windows 2000 en 1999, «los bits aleatorios para todos los de la versión 4 Guid construido en Windows son obtenidos a través de la Windows CryptGenRandom API criptográfica o el equivalente, en la misma fuente que se utiliza para la generación de claves de cifrado». Así que yo diría que se podría llamar criptográficamente seguro-al menos en la medida de las 122 bits de entropía que proporcionan.
    • Su afirmación puede ser correcta, pero no se debe olvidar que el artículo 6 de RFC4122 es bastante claro acerca de lo que debe suponer sobre la aleatoriedad de los valores UUID (incluida la versión 4): tools.ietf.org/html/rfc4122#section-6 «no asuma que los Uuid son difíciles de adivinar; ellos no deben ser usados como capacidades de seguridad» — por lo que la especificación claramente dice que usted no debe considerar los Uuid criptográficamente segura (incluso si la aplicación de la garantía de que).
    • sí, he visto que el asesoramiento de la RFC citado en otras discusiones similares, pero yo diría que MS de la especificación anula el RFC en este caso, especialmente cuando la pregunta especifica MS .NET v4. Si la pregunta estaba preguntando acerca de la seguridad de GUID/UUID v4 en general, sólo el RFC del consejo sería relevante.

  2. 18

    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.

Dejar respuesta

Please enter your comment!
Please enter your name here