UUID_GENERATE(3)

NAZWA
uuid_generate, uuid_generate_random, uuid_generate_time, uuid_generate_time_safe - tworzy nową, unikalną wartość UUID

SKŁADNIA

#include <uuid.h>

void uuid_generate(uuid_t out);
void uuid_generate_random(uuid_t out);
void uuid_generate_time(uuid_t out);
int uuid_generate_time_safe(uuid_t out);
void uuid_generate_md5(uuid_t out, const uuid_t ns, const char *name, size_t len);
void uuid_generate_sha1(uuid_t out, const uuid_t ns, const char *name, size_t len);

OPIS

Funkcja uuid_generate() tworzy nowy uniwersalnie unikalny identyfikator (UUID). Wartość uuid będzie wygenerowana na podstawie losowości o wysokiej jakości pozyskanej z getrandom(2), /dev/urandom lub /dev/random, jeśli są one dostępne. Jeśli są niedostępne, uuid_generate() użyje alternatywnego algorytmu, który korzysta z bieżącego czasu, lokalnego adresu ethernetowego MAC (jeśli jest dostępny) oraz losowych danych wygenerowanych przez generator pseudolosowy.

Funkcja uuid_generate_random(3) wymusza użycie w pełni losowego formatu UUID, nawet jeśli generator liczb losowych o wysokiej jakości nie jest dostępny; wówczas zostanie zastąpiony generatorem pseudolosowym. Proszę zauważyć, że korzystanie z generatora pseudolosowego może naruszyć unikalność wygenerowanych w ten sposób UUID-ów.

Funkcja uuid_generate_time() wymusza użycie alternatywnego algorytmu, który korzysta z bieżącego czasu oraz lokalnego adresu ethernetowego MAC (jeśli jest dostępny). Algorytm ten był niegdyś domyślnym używanym do generowania UUID-ów, lecz z powodu używania adresu MAC ethernetu, może powodować wyciek informacji na temat czasu i miejsca wygenerowania UUID-u. W pewnych zastosowaniach może to być problematyczne pod względem prywatności, dlatego funkcja uuid_generate() korzysta z tego algorytmu tylko, jeśli źródło losowości o wysokiej jakości jest niedostępne. Aby zagwarantować unikalność UUID-ów generowanych przez równolegle działające procesy, biblioteka uuid korzysta z globalnego licznika stanu zegara (jeśli proces ma uprawnienia do uzyskania wyłącznego dostępu do tego pliku) i/lub demona uuidd(8), jeśli taki już działa lub może być przywołany przez proces (jeśli jest zainstalowany, a proces ma wystarczające uprawnienia do jego uruchomienia). Jeśli nie da się wykorzystać żadnego z opisanych dwóch mechanizmów synchronizacji, teoretycznie może się zdarzyć, że dwa równolegle działające procesy uzyskają ten sam UUID. Aby sprawdzić, czy UUID został utworzony w bezpieczny sposób, proszę użyć uuid_generate_time_safe(3).

Funkcja uuid_generate_time_safe(3) jest podobna do uuid_generate_time(3) z tą różnicą, że zwraca wartość wskazującą, czy użyto któregoś z mechanizmów synchronizacyjnych (zob. wyżej).

UUID jest wartością 16-bajtową (128 bitową), co daje około 3.4x10^38 unikalnych wartości (zgodnie z książką Kosmos Carla Sagana we wszechświecie jest około 10^80 cząstek elementarnych). Nowy UUID można zatem rozsądnie uważać za unikalny pośród wszystkich UUID-ów utworzonych w lokalnym systemie oraz pośród UUID-ów utworzonych w innych systemach w przeszłości i w przyszłości.

Funkcje uuid_generate_md5(3) i uuid_generate_sha1(3) tworzą (przewidywalne) UUID-y korzystające ze skrótów MD5 i SHA1, używając znanego, zdefiniowanego UUID-u wskazującego przestrzeń nazw i dowolnego łańcucha binarnego. UUID-y są zgodne z UUID-ami V3 i V5 z

WARTOŚĆ ZWRACANA

Nowo tworzone UUID-y są zwracane do położenia pamięci, na które wskazuje out. uuid_generate_time_safe(3) zwraca zero, jeśli UUID wygenerowano w bezpieczny sposób lub -1 w innym przypadku.

ZGODNE Z

Biblioteka tworzy UUID-y kompatybilne z OSF DCE 1.1, oraz UUID-y V3 i V5 powstałe w oparciu o skrót, kompatybilne z

AUTORZY

Theodore Y. Ts’o

ZOBACZ TAKŻE

uuidgen(1), uuid(3), uuid_clear(3), uuid_compare(3), uuid_copy(3), uuid_is_null(3), uuid_parse(3), uuid_time(3), uuid_unparse(3), uuidd(8)

ZGŁASZANIE BŁĘDÓW

Problemy należy zgłaszać w

DOSTĘPNOŚĆ

Biblioteka libuuid jest częścią pakietu util-linux od wersji 2.15.1. Można go pobrać ze strony