2016-05-24 23 views
0

Betrachten von UUIDs generiert als Primärschlüssel von Postgres definiert durch RFC 4122, ISO/IEC 9834-8: 2005 (Quelle http://www.postgresql.org/docs/9.1/static/datatype-uuid.html). Können wir bedenken, dass diese Zahlen auf ihrer ganzen Länge homogen zufällig sind?Sind postgres UUID-Nummern homogen zufällig?

Vor diesem UUID:

a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

Können wir davon ausgehen, dass objektiv a0eebc99 und bd380a11 ebenso zufällig sind? Wenn nicht, warum?

Antwort

1

UUIDs im Allgemeinen sind so gemeint und optimiert, dass sie einzigartig sind. Sie bieten keine garantierte Zufälligkeit. Sie sollten UUIDs nicht als Geheimnisse und/oder Zufallszahlengenerator verwenden.

Es gibt verschiedene Versionen, wie UUIDs generiert werden, die meisten sind nicht zufällig, sondern eher vorhersehbar. Siehe die Wikipedia article on UUIDs und die verschiedenen Versionen.

Wenn Sie Kollisionen für IDs vermeiden möchten, verwenden Sie UUIDs, wenn Sie Geheimnisse verwenden möchten, verwenden Sie starke kryptografische (P) RNGs.

Beachten Sie auch, dass die Variante in der UUID selbst codiert ist, also zumindest dieser Teil der UUID ist nicht zufällig überhaupt.

EDIT: Es gibt eine interessante article von Raymond Chen in seinem berühmten Blog "Old New Thing" über fast genau diese Frage.

+0

Ich verstehe. Ihre Antwort beantwortet die Frage perfekt, aber vielleicht war meine Frage nicht klar. Bedeutet dies, dass die 8 ersten Ziffern und die 8 letzten Ziffern der gesamten UUID die gleiche Wahrscheinlichkeit haben, auf ihren jeweiligen Teil eine Kollision zu treffen? –

+1

Eigentlich gibt es einen sehr guten Artikel von Raymond Chen über genau diese Frage: https://blogs.msdn.microsoft.com/oldnewthing/20120523-00/?p=7553 –