Globálisan egyedi azonosító

álvéletlen szám
(GUID szócikkből átirányítva)

A globálisan egyedi azonosító (Globally Unique Identifier), avagy GUID szoftveralkalmazások által használt álvéletlen szám. Minden generált GUID egyedisége „matematikailag garantált”. Ez azon az egyszerű törvényszerűségen alapszik, hogy az egyedi kulcsok száma annyira nagy ( vagy ), hogy két azonos szám generálásának a valószínűsége gyakorlatilag nulla.

A GUID a Microsoft implementációja az Univerzálisan egyedi azonosító avagy UUID szabványnak, melyet az Open Software Foundation (OSF) specifikált. Ez alapvetően egy 16 bájt hosszú szám, melyet hexadecimális formában írnak le, mint például a következő:

3F2504E0 4F89 11D3 9A 0C 03 05 E8 2C 33 01

A GUID-ot 1 négybájtos szóval, 3 kétbájtos szóval és 1 hatbájtos szóval írják le:

{3F2504E0-4F89-11D3-9A0C-0305E82C3301}

Az adattípus struktúrája:

GUID STRUCT
    Data1   dd
    Data2   dw
    Data3   dw
    Data4   dw
    Data5   db 6
GUID ENDS

A Microsoft COM esetén a GUID-ok egyértelműen megkülönböztetik a különböző szoftverkomponens-interfészeket. Ez azt jelenti, hogy egy komponens két verziójának azonos lehet a neve, de különböznek a felhasználók felé, ha a GUID-ok változtak.

A Microsoft Office programok GUID-ot illesztenek be a dokumentumokba, mert azokat objektumoknak tekintik. Még az audio és video streameket is GUID-dal azonosítják az ASF fájlformátum (WMV, WMA) esetén.

Algoritmus szerkesztés

A GUID a következő részekből áll:

  • Hálózati csomópont
  • Idő érték – 60 bites időbélyeg, ami i. sz. 1582. október 15-e óta eltelt 100 ns-okat reprezentálja. Ez azt jelenti, hogy az értékek i. sz. 3400-ig érvényesek.
  • Óra szekvencia – az óra folyamatosságának elvesztése, például óra újraindítás, átbillenés.
  • Verzió érték – A GUID létrehozására szolgáló algoritmus verziója.

A GUID a következő mezőkből áll:
<time_low>-<time_mid>-<time_hi_and_version>-<clock_seq_hi_and_reserved>-<clock_seq_low>-<node> ahol:

  • A time_low mező az időbélyeg alsó 32 bitje.
  • A time_mid az időbélyeg 32-47 közötti bitjei.
  • A time_hi_and_version mező 12 alsó bitje az időbélyeg 48-59 közötti bitjei. A felső 4 bit a felhasznált GUID algoritmus 4 bites verziószáma.
  • A clock_seq_hi_and_reserved mező alsó 6 bitje az óra szekvencia felső 6 bitje. A felső két bit mindig „01”.
  • A clock_seq_low mező az óra szekvencia alsó nyolc bitje.
  • A node mező az csomópont azonosítót tartalmazza. A csomópont azonosító a hálózati kártya jelenlététől függ.

Ha van hálózati kártya, a csomópont azonosító a NetBIOS-ból származik. Az első 6 bájt az NCB szinkron adapter státusból származik. Ez az IEEE 802 48 bites csomópont címe.

Ha nincs hálózati kártya, a csomópont azonosító egy 48 bites szám (egy 47 bites véletlen szám és 1 bit helyi felhasználásra). A szám nem garantáltan egyedi, még a generáló rendszeren sem, de nem valószínű, hogy megegyezik egy másik gépen generált számmal. Mivel a GUID időből és szekvenciából áll, jó közelítést jelent helyi GUID-ok számára. A visszaadott csomópont azonosító explicit módon átalakított IEEE 802 címmé, így nem fog összeakadni egy „valós” IEEE 802-alapú csomópont azonosítóval. A helyi felhasználású bit 1, ha generált a cím, 0, ha valós cím. A 48 bites szám a következő részekből áll:

  • A számítógép neve
  • A teljesítményszámláló értéke
  • A rendszermemória állapota
  • Az összes bájt és a szabad bájtok száma a C meghajtón
  • A veremmutató értéke
  • A LUID (locally unique ID, helyileg egyedi azonosító)
  • A csomópontazonosító pufferben levő véletlen adat

Biztonság szerkesztés

A GUID-ok létrehozására szolgáló algoritmust széles körben kritizálják. Többek között azért, mert a felhasználó hálózati kártyájának MAC címét használták több GUID számjegyként, ami azt jelentette, hogy a dokumentumok visszakövethetők voltak a számítógéphez, amely létrehozta őket. Ezt a biztonsági rést használták ki a Melissa féreg visszakövetésére is. Emiatt végül a Microsoft megváltoztatta az algoritmust, hogy ne tartalmazza a MAC címet.

Online GUID generátorok szerkesztés

RSS szerkesztés

Az RSS specifikáció szintén tartalmaz egy guid tag-et, ami minden egyes cikk vagy blog bejegyzés esetén egyedi azonosítót tartalmazhat. A guid tartalma bármilyen szöveg lehet, ami a gyakorlatban a küldő URL-jét jelenti.