UUID v2 Generator

Generate DCE Security UUID v2 with local domain and ID

Натисніть «Згенерувати» для створення UUID
Примітка:UUID v2 кодує локальний домен та ID у структуру UUID
Note:UUID v2 (DCE Security UUID) — рідкісна спеціалізована версія для аутентифікації DCE/RPC. Замінює частини часової мітки UUID v1 UID/GID POSIX, придатна лише для кількох вузькоспеціалізованих випадків.

Що таке UUID v2?

UUID v2 («DCE Security UUID») — розширення UUID v1, розроблене для аутентифікації DCE (Distributed Computing Environment). Стандартизовано як частину специфікації DCE 1.1 на початку 1990-х.

UUID v2 замінює нижні 32 біти часової мітки UUID v1 32-бітним локальним ідентифікатором (UID або GID користувача POSIX), вбудовуючи інформацію авторизації безпосередньо в UUID.

На практиці UUID v2 вкрай рідко зустрічається за межами застарілих систем DCE.

Структура UUID v2

UUID v2 розділяє більшу частину структури з UUID v1, але замінює поле time_low доменним ідентифікатором:

ПолеБітиПризначення
local_id32Локальний ідентифікатор: 32-бітний домен-специфічний ID (зазвичай UID або GID POSIX). Замінює time_low з UUID v1.
time_mid16time_mid: Біти 32-47 60-бітної Gregorian-часової мітки.
time_hi+version16time_hi_and_version: Біти 48-59 часової мітки + 4-бітна версія (<code>0010</code>).
variant+clock_hi8clock_seq_hi_and_reserved: Біти 8-13 тактового лічильника + біти варіанта <code>10</code>.
local_domain8Локальний домен: 8-бітний ID домену (0 = POSIX UID, 1 = POSIX GID, 2 = DCE Organization).
node48Вузол: 48-бітна MAC-адреса або випадковий ідентифікатор.

Приклад UUID v2:

Note:Заміна нижніх 32 бітів часової мітки знижує її точність приблизно до 7 хвилин замість 100 наносекунд.

Локальні домени

8-бітне поле локального домену визначає тип ідентифікатора:

0POSIX_UID
UID користувача POSIX (0-4294967295). Найчастіше в реалізаціях DCE.
1POSIX_GID
GID групи POSIX (0-4294967295).
2ORG
Ідентифікатор організації DCE — специфічний для реалізації.

Біти 3-255 зарезервовані і не визначені в RFC 4122.

Чому UUID v2 такий рідкісний

UUID v2 практично не зустрічається в сучасному ПЗ:

Специфічний для DCE дизайн

UUID v2 розроблений виключно для механізму DCE/RPC, не застосовний поза цим контекстом.

Зниження точності часової мітки

UUID v2 в одному 7-хвилинному інтервалі на одному хості з однаковим локальним ID будуть ідентичними.

Обмежена реалізація

Більшість UUID-бібліотек не підтримують v2. Пакет <code>uuid</code> npm навмисно його опускає.

Warning:Не використовуйте UUID v2 для загальних цілей. Використовуйте UUID v4 або v7.

Історія та контекст

Розуміння UUID v2 вимагає короткої історії DCE (Distributed Computing Environment).

DCE — набір специфікацій проміжного шару, розроблений OSF наприкінці 1980-х — початку 1990-х:

  • DCE/RPC — механізм віддаленого виклику процедур.
  • DFS — служба каталогів для розподілених ресурсів.
  • Kerberos — служба аутентифікації.
  • UUID — унікальна ідентифікація інтерфейсів і ресурсів RPC.

UUID v2 розроблений для механізму авторизації DCE (PAC). Вбудовуючи UID/GID POSIX у UUID, служба могла перевіряти права без додаткових запитів.

DCE був широко прийнятий у 1990-х, але витіснений HTTP/REST і gRPC на початку 2000-х.

UUID v2 проти UUID v1

Пряме порівняння UUID v2 і UUID v1:

АспектUUID v1UUID v2
ОсноваСтандартний на основі часуРозширює v1
Поле time_low32 біти часової мітки32-бітний локальний ID (UID/GID)
Роздільна здатність часової мітки100 наносекунд~7 хвилин
УнікальністьВисокаОбмежена
Сценарій використанняЗагальний на основі часу UUIDАутентифікація DCE/RPC
Підтримка в сучасних бібліотекахШирокаРідкісна/відсутня
Рекомендований для нових проектівНі (використовуйте v7)Ні

UUID v2 існує з історичних причин. Для нових проектів обирайте UUID v4 або v7.

Приклади коду

Більшість бібліотек не реалізують генерацію UUID v2. Приклади взаємодії з UUID v2:

Виявлення UUID v2 у JavaScript

Python
import uuid, struct, time

def uuid_v2(local_id: int, local_domain: int = 0) -> str:
    """
    Generate a DCE Security UUID (v2).
    local_domain: 0 = POSIX UID, 1 = POSIX GID, 2 = Org
    local_id: 32-bit unsigned integer (e.g. os.getuid())
    """
    # Get a v1 UUID for the time and node fields
    v1 = uuid.uuid1()
    fields = list(v1.fields)  # [time_low, time_mid, time_hi_version, clock_seq_hi_variant, clock_seq_low, node]

    # Replace time_low with local_id
    fields[0] = local_id & 0xFFFFFFFF

    # Replace version nibble: clear lower 12 bits of time_hi, set version 2
    fields[2] = (fields[2] & 0x0FFF) | 0x2000

    # Replace clock_seq_low with local_domain
    fields[4] = local_domain & 0xFF

    return str(uuid.UUID(fields=tuple(fields)))


import os
print(uuid_v2(os.getuid(), local_domain=0))   # POSIX UID
print(uuid_v2(os.getgid(), local_domain=1))   # POSIX GID

Вилучення полів UUID v2 у Python

Go
// The standard "github.com/google/uuid" package does NOT support v2.
// You would need to implement it manually, similar to the Python example above.
// Most Go developers use v4 or v7 for new projects.
import "github.com/google/uuid"

v4 := uuid.New()          // v4 — recommended for most use cases
v7, _ := uuid.NewV7()     // v7 — time-ordered, ideal for database primary keys

Вилучення UUID v2 у Go

UUID v2 розпізнається за версією, поля декодуються вручну:

JavaScript
// Extracting fields from a UUID v2 string
const uuidStr = '000003e8-1234-2abc-8200-a1b2c3d4e5f6'
//               ^^^^^^^^ ^^^^ ^    ^^
//               local_id      ver  variant+clockSeqHi
//                                  ^^ = local_domain (00 = POSIX UID)

const parts = uuidStr.split('-')

const localId     = parseInt(parts[0], 16)       // → 1000 (0x3e8)
const version     = parseInt(parts[2][0], 16)    // → 2
const localDomain = parseInt(parts[3].slice(2), 16) // low byte of octet pair

const DOMAIN_NAMES = ['POSIX UID', 'POSIX GID', 'Org']
console.log(`Local ID: ${localId}`)                       // Local ID: 1000
console.log(`Version:  ${version}`)                       // Version:  2
console.log(`Domain:   ${DOMAIN_NAMES[localDomain]}`)     // Domain:   POSIX UID
Note:Пакет Go google/uuid підтримує генерацію UUID v2 через uuid.NewDCEGroup() та uuid.NewDCEPerson() — один із небагатьох основних бібліотек, що це робить.

Часті запитання

Яка реальна мета UUID v2?
UUID v2 розроблений для аутентифікації DCE/RPC: вбудовуючи UID/GID POSIX, служба авторизації могла перевіряти права без звернення до бази даних.
Чи можу я використовувати UUID v2 як первинний ключ?
Технічно так, але це дуже погана ідея. UUID v2 не унікальні в 7-хвилинних вікнах. Використовуйте UUID v4 або v7.
Чому UUID v2 не реалізований у більшості бібліотек?
DCE вийшов з ужитку. Немає активного варіанту використання, що вимагав би генерації v2.
Як декодувати UUID v2?
Інструмент UUID Decoder автоматично виявляє та декодує UUID v2, вилучаючи версію, локальний домен та ідентифікатор.
Чи є UUID v2 частиною сучасної специфікації UUID?
Він визначений у RFC 4122 (2005), але RFC 9562 (2024) його не згадує — він більше не вважається актуальним.
Чи є UUID v2 безпечним?
Ні: містить MAC-адресу та UID/GID POSIX (конфіденційність). Також ні: обмежена роздільна здатність часової мітки допускає колізії в 7-хвилинних вікнах.