2010-10-20 8 views
10

Nehmen wir an, ich möchte eine Guid als die Assembly Guid meiner Anwendung festlegen. Wie aus dem Internet gesucht, können wir (new Guid()).Next() verwenden, um einen neuen eindeutigen Wert zu erhalten.Wie kann sichergestellt werden, dass eine generierte GUID global eindeutig ist?

Ich kann nicht herausfinden, wie meine Guid gerechtfertigt ist, einzigartig gegen andere zu sein? Bitte erklären Sie, wenn Sie wissen, wie.

+0

könnte dies helfen: http://stackoverflow.com/questions/39771/is-a-guid-unique-100-of-the-time – Reza

Antwort

6

Es ist nicht, aber die Art, wie es erzeugt wird und die Art, wie es dargestellt wird, macht die Wahrscheinlichkeit der Erzeugung von zwei gleichen GUIDs in diesem Millennium fast Null.

See: Simple proof that GUID is not unique

3

Von http://en.wikipedia.org/wiki/Globally_unique_identifier:

Algorithm

In dem OSF-spezifizierten Algorithmus zum Erzeugen neuen (V1) GUIDs, die Netzwerkkarte MAC-Adresse des Benutzers wird als Basis für die letzte Gruppe von GUID Ziffern verwendet, die bedeutet zum Beispiel, dass ein Dokument auf den Computer zurückverfolgt werden kann, der es erstellt hat. Dieses Privacy-Loch wurde verwendet, um den Ersteller des Melissa-Wurms ausfindig zu machen [2]. Die meisten anderen Ziffern basieren auf der Zeit beim Generieren der GUID.

V1 GUIDs, die eine MAC-Adresse und Uhrzeit enthalten, können durch die Ziffer "1" an der ersten Position der dritten Zifferngruppe identifiziert werden, z. B. {2f1e4fc0-81fd-11da-9156-00036a0f876a}.

V4 GUIDs verwenden den späteren Algorithmus, bei dem es sich um eine Pseudozufallszahl handelt. Diese haben eine "4" in der gleichen Position, zum Beispiel {38a52be4-9352-453e-af97-5c3b448652f0}. Genauer gesagt würde das "data3" -Bitmuster im ersten Fall 0001xxxxxxxxxxxx und im zweiten Fall 0100xxxxxxxxxxxx sein. Die Cryptanalyse des WinAPI-GUID-Generators zeigt dies, da die Sequenz von V4-GUIDs pseudozufällig ist; bei voller Kenntnis des inneren Zustands ist es möglich, vorhergehende und nachfolgende Werte vorherzusagen [3].

6

Die einzige Garantie Sie haben, ist diese Wahrscheinlichkeit auf Ihrer Seite ist. 2^128 mögliche GUIDs und etwas Cleverness im Erstellungsprozess machen es sehr unwahrscheinlich, dass Sie jemals ein Duplikat sehen werden.

Es scheint V4 ist die Standard-GUID unter Windows jetzt. Wenn diese rein auf einem Pseudozufallszahlengenerator basiert, wie Wikipedia dies zu zeigen scheint, wird sie von der Birthday problem beeinflusst.

Ich habe mehrere Beispiele mit 128-Bit gesehen, um zu zeigen, dass ein Duplikat fast unmöglich ist. Diese vermissen oft zwei Dinge. Das Geburtstagsproblem und dass eine V4-GUID tatsächlich 124 Bits ist.

Sie benötigen 1/2+sqrt(1/4-2*2^124*ln(0,5)) ≈ 5.4*10^18 GUIDs, um eine 50% ige Chance auf ein Duplikat zu erreichen. Das ist immer noch viel, aber 50% sind vielleicht nicht das Geschäft, nach dem Sie suchen. Sagen wir, Sie möchten, dass es eins zu einer Million ist, um ein Duplikat zu erhalten, dann können Sie sqrt(2*2^124*ln(1/(1-0,000001))) ≈ 6,5 * 10^15 GUIDs haben. Wenn Sie tausend GUIDs pro Sekunde erstellen, können Sie dies fast 206667 Jahre lang tun, bevor Sie ein Risiko von ein bis einer Million erreichen, ein Duplikat zu erhalten. 6,52191054316287e15/(3600*24*365,25*1000) ≈ 206666,874006986

Die Chance, dass alle diese Berechnungen korrekt sind → 0.

Verwandte Themen