Що таке декодування UUID?
Декодування UUID — це процес аналізу UUID для отримання інформації про:
- Версію: Яка версія UUID (1-8) на основі 4 бітів у позиції 48-51
- Варіант: Який варіант UUID (зазвичай RFC 4122) на основі бітів 64-65
- Компоненти: Видобуток часової мітки, ID вузла або інших даних залежно від версії
- Час створення: Для UUID на основі часу (v1, v6, v7)
Приклад: d4e5f6a7-b8c9-11e9-b456-789abcdef012
— це UUID Версії 1, створений 2020-01-14 08:15:27 UTC.
Огляд структури UUID
Формат | Опис |
---|---|
8-4-4-4-12 | 32 шістнадцяткових цифри, згруповані дефісами |
Біти версії | Біти 48-51 (13-та цифра) |
Біти варіанту | Біти 64-65 (17-та цифра) |
Номер версії відображається як перша шістнадцяткова цифра в третій групі (наприклад, 123e4567-e89b-12d3-a456-426614174000
для версії 1).
Декодування за версією UUID
Версія | Що можна декодувати |
---|---|
UUID v1 |
|
UUID v3/v5 |
|
UUID v4 |
|
UUID v6 |
|
UUID v7 |
|
ULID |
|
Видобуток часових міток з UUID
Тип UUID | Метод видобутку часу | Епоха |
---|---|---|
UUID v1 | Об'єднання бітів 0-31, 32-47 та 48-59, перевпорядкування компонентів часової мітки | 15 жовтня 1582 року |
UUID v6 | Видобуток бітів 0-59 (вже в правильному порядку) | 15 жовтня 1582 року |
UUID v7 | Видобуток бітів 0-47 (мілісекунди Unix) | 1 січня 1970 року |
ULID | Декодування перших 10 символів Base32 для отримання 48-бітного Unix-часу в мілісекундах | 1 січня 1970 року |
Правила валідації UUID
- Перевірка формату: 8-4-4-4-12 шістнадцяткових цифр з дефісами
- Перевірка версії: 13-й символ має бути 1-8
- Перевірка варіанту: 17-й символ має бути 8, 9, A або B (для RFC 4122)
Регулярний вираз для базової валідації UUID:
^[0-9a-f]8-[0-9a-f]4-[1-8][0-9a-f]3-[89ab][0-9a-f]3-[0-9a-f]12$
Практичні застосування
- Криміналістичний аналіз: Визначення, коли були створені ідентифікатори
- Налагодження: Відстеження поведінки системи через часові мітки ідентифікаторів
- Аудит: Перевірка хронологічної цілісності
- Аналіз безпеки: Виявлення підроблених чи маніпульованих ідентифікаторів
- Відновлення даних: Реконструкція часових взаємозв'язків
- Міграції систем: Розуміння деталей реалізації успадкованих UUID
Видобуток MAC-адреси (v1/v6)
Для UUID v1 та v6 часто можна видобути ідентифікатор вузла (MAC-адресу), якщо він не був рандомізований під час генерації:
- Видобудьте останні 12 шістнадцяткових цифр (48 бітів) з UUID
- Форматуйте з двокрапками як XX:XX:XX:XX:XX:XX
- Перевірте, чи MAC-адреса справжня чи випадкова, перевіривши біт групової розсилки
Якщо перший байт має встановлений біт 0x01, швидше за все, це рандомізований ідентифікатор вузла, а не справжня MAC-адреса.
Часті запитання
Чи можу я точно визначити, коли було створено UUID v4?
Ні. UUID v4 повністю випадковий без інформації про часову мітку. Час створення неможливо визначити з значення UUID v4.
Наскільки точні часові мітки в UUID на основі часу?
Часові мітки UUID v1/v6 мають точність 100 наносекунд. UUID v7 та ULID мають точність до мілісекунд. Однак фактична точність системного годинника може відрізнятися.
Чи можу я конвертувати між версіями UUID?
Ні, ви не можете конвертувати безпосередньо між версіями, зберігаючи те саме значення ідентифікатора. Різні версії мають фундаментально різні структури.
Чи можу я ідентифікувати комп'ютер, який згенерував UUID v1?
Якщо ідентифікатор вузла не був рандомізований, UUID v1 може містити MAC-адресу системи, що генерувала. Однак багато сучасних реалізацій рандомізують це з міркувань конфіденційності.
Як можна визначити, чи UUID дійсний?
Перевірте формат (8-4-4-4-12 шістнадцяткових цифр), переконайтеся, що цифра версії (13-й символ) становить 1-8, і підтвердіть біти варіанту (17-й символ — 8, 9, A або B для UUID RFC 4122).