что такое uuid в bios
Вы наверняка уже использовали в своих проектах UUID и полагали, что они уникальны. Давайте рассмотрим основные аспекты реализации и разберёмся, почему UUID практически уникальны, поскольку существует мизерная возможность возникновения одинаковых значений.
Современную реализацию UUID можно проследить до RFC 4122, в котором описано пять разных подходов к генерированию этих идентификаторов. Мы рассмотрим каждый из них и пройдёмся по реализации версии 1 и версии 4.
Теория
UUID (universally unique IDentifier) — это 128-битное число, которое в разработке ПО используется в качестве уникального идентификатора элементов. Его классическое текстовое представление является серией из 32 шестнадцатеричных символов, разделённых дефисами на пять групп по схеме 8-4-4-4-12.
Информация о реализации UUID встроена в эту, казалось бы, случайную последовательность символов:
Значения на позициях M и N определяют соответственно версию и вариант UUID.
Версия
Номер версии определяется четырьмя старшими битами на позиции М. На сегодняшний день существуют такие версии:
Вариант
Это поле определяет шаблон информации, встроенной в UUID. Интерпретация всех остальных битов в UUID зависит от значения варианта.
Мы определяем его по первым 1-3 старшим битам на позиции N.
1 0 0 0 = 8
1 0 0 1 = 9
1 0 1 0 = A
1 0 1 1 = B
Так что если вы видите UUID с такими значениями на позиции N, то это идентификатор в варианте 1.
Версия 1 (время + уникальный или случайный идентификатор хоста)
В этом случае UUID генерируется так: к текущему времени добавляется какое-то идентифицирующее свойство устройства, которое генерирует UUID, чаще всего это MAC-адрес (также известный как ID узла).
Идентификатор получают с помощью конкатенации 48-битного МАС-адреса, 60-битной временной метки, 14-битной «уникализированной» тактовой последовательности, а также 6 битов, зарезервированных под версию и вариант UUID.
Тактовая последовательность — это просто значение, инкрементируемое при каждом изменении часов.
Временная метка, которая используется в этой версии, представляет собой количество 100-наносекундных интервалов с 15 октября 1582 года — даты возникновения григорианского календаря.
Возможно, вы знакомы с принятым в Unix-системах исчислением времени с начала эпохи. Это просто другая разновидность Нулевого дня. В сети есть сервисы, которые помогут вам преобразовать одно временное представление в другое, так что не будем на этом останавливаться.
Хотя эта реализация выглядит достаточно простой и надёжной, однако использование MAC-адреса машины, на которой генерируется идентификатор, не позволяет считать этот метод универсальным. Особенно, когда главным критерием является безопасность. Поэтому в некоторых реализациях вместо идентификатора узла используется 6 случайных байтов, взятых из криптографически защищённого генератора случайных чисел.
Сборка UUID версии 1 происходит так:
Поскольку эта реализация зависит от часов, нам нужно обрабатывать пограничные ситуации. Во-первых, для минимизации коррелирования между системами по умолчанию тактовая последовательность берётся как случайное число — так делается лишь один раз за весь жизненный цикл системы. Это даёт нам дополнительное преимущество: поддержку идентификаторов узлов, которые можно переносить между системами, поскольку начальное значение тактовой последовательности совершенно не зависит от идентификатора узла.
Помните, что главная цель использования тактовой последовательности — внести долю случайности в наше уравнение. Биты тактовой последовательности помогают расширить временную метку и учитывать ситуации, когда несколько UUID генерируются ещё до того, как изменяются процессорные часы. Так мы избегаем создания одинаковых идентификаторов, когда часы переводятся назад (устройство выключено) или меняется идентификатор узла. Если часы переведены назад, или могли быть переведены назад (например, пока система была отключена), и UUID-генератор не может убедиться, что идентификаторы сгенерированы с более поздними временными метками по сравнению с заданным значением часов, тогда нужно изменить тактовую последовательность. Если нам известно её предыдущее значение, его можно просто увеличить; в противном случае его нужно задать случайным образом или с помощью высококачественного ГПСЧ.
Версия 2 (безопасность распределённой вычислительной среды)
Главное отличие этой версии от предыдущей в том, что вместо «случайности» в виде младших битов тактовой последовательности здесь используется идентификатор, характерный для системы. Часто это просто идентификатор текущего пользователя. Версия 2 используется реже, она очень мало отличается от версии 1, так что идём дальше.
Версия 3 (имя + MD5-хэш)
Если нужны уникальные идентификаторы для информации, связанной с именами или наименованием, то для этого обычно используют UUID версии 3 или версии 5.
Они кодируют любые «именуемые» сущности (сайты, DNS, простой текст и т.д.) в UUID-значение. Самое важное — для одного и того же namespace или текста будет сгенерирован такой же UUID.
Обратите внимание, что namespace сам по себе является UUID.
В этой реализации UUID namespace преобразуется в строку байтов, конкатенированных с входным именем, затем хэшируется с помощью MD5, и получается 128 битов для UUID. Затем мы переписываем некоторые биты, чтобы точно воспроизвести информацию о версии и варианте, а остальное оставляем нетронутым.
Важно понимать, что ни namespace, ни входное имя не могут быть вычислены на основе UUID. Это необратимая операция. Единственное исключение — брутфорс, когда одно из значений (namespace или текст) уже известно атакующему.
При одних и тех же входных данных генерируемые UUID версий 3 и 5 будут детерминированными.
Версия 4 (ГПСЧ)
Самая простая реализация.
6 битов зарезервированы под версию и вариант, остаётся ещё 122 бита. В этой версии просто генерируется 128 случайных битов, а потом 6 из них заменяется данными о версии и варианте.
Такие UUID полностью зависят от качества ГПСЧ (генератора псевдослучайных чисел). Если его алгоритм слишком прост, или ему не хватает начальных значений, то вероятность повторения идентификаторов возрастает.
В современных языках чаще всего используются UUID версии 4.
Её реализация достаточно простая:
Версия 5 (имя + SHA-1-хэш)
Единственное отличие от версии 3 в том, что мы используем алгоритм хэширования SHA-1 вместо MD5. Эта версия предпочтительнее третьей (SHA-1 > MD5).
Практика
Одним из важных достоинств UUID является то, что их уникальность не зависит от центрального авторизующего органа или от координации между разными системами. Кто угодно может создать UUID с определённой уверенностью в том, что в обозримом будущем это значение больше никем не будет сгенерировано.
Это позволяет комбинировать в одной БД идентификаторы, созданные разными участниками, или перемещать идентификаторы между базами с ничтожной вероятностью коллизии.
UUID можно использовать в качестве первичных ключей в базах данных, в качестве уникальных имён загружаемых файлов, уникальных имён любых веб-источников. Для их генерирования вам не нужен центральный авторизующий орган. Но это обоюдоострое решение. Из-за отсутствия контролёра невозможно отслеживать сгенерированные UUID.
Есть и ещё несколько недостатков, которые нужно устранить. Неотъемлемая случайность повышает защищённость, однако она усложняет отладку. Кроме того, UUID может быть избыточным в некоторых ситуациях. Скажем, не имеет смысла использовать 128 битов для уникальной идентификации данных, общий размер которых меньше 128 битов.
Уникальность
Может показаться, что если у вас будет достаточно времени, то вы сможете повторить какое-то значение. Особенно в случае с версией 4. Но в реальности это не так. Если бы вы генерировали один миллиард UUID в секунду в течение 100 лет, то вероятность повторения одного из значений была бы около 50 %. Это с учётом того, что ГПСЧ обеспечивает достаточное количество энтропии (истинная случайность), иначе вероятность появления дубля будет выше. Более наглядный пример: если бы вы сгенерировали 10 триллионов UUID, то вероятность появления двух одинаковых значений равна 0,00000006 %.
А в случае с версией 1 часы обнулятся только в 3603 году. Так что если вы не планируете поддерживать работу своего сервиса ещё 1583 года, то вы в безопасности.
Впрочем, вероятность появления дубля остаётся, и в некоторых системах стараются это учитывать. Но в подавляющем большинстве случаев UUID можно считать полностью уникальными. Если вам нужно больше доказательств, вот простая визуализация вероятности коллизии на практике.
Что такое номер UUID в BIOS?
Универсальный уникальный идентификатор (UUID) — это 128-битное число, используемое для идентификации информации в компьютерных системах. Термин глобальный уникальный идентификатор (GUID) также используется, как правило, в программном обеспечении, созданном Microsoft.
Как мне узнать свой UUID в BIOS?
Что такое номер UUID?
Универсальные уникальные идентификаторы или UUIDS — это 128-битные числа, состоящие из 16 октетов и представленные как 32 символа с основанием 16, которые могут использоваться для идентификации информации в компьютерной системе. Эта спецификация была первоначально создана Microsoft и стандартизирована IETF и ITU.
Как мне получить UUID?
Процедура создания UUID версии 4 следующая:
Как мне изменить свой UUID в BIOS?
Изменение UUID виртуальной машины вручную
Что такое Windows UUID?
Структура UUID определяет универсальный уникальный идентификатор (UUID). UUID обеспечивает уникальное обозначение объекта, такого как интерфейс, вектор точки входа менеджера или клиентский объект. Структура UUID является синонимом typedef для структуры GUID.
Действительно ли UUID уникален?
На создание такого количества UUID со скоростью один в секунду потребуется миллиард лет. Таким образом, хотя UUID не являются действительно уникальными, они достаточно уникальны для практических целей, принимая во внимание естественные ограничения продолжительности жизни человека и разделение систем.
Что такое пример UUID?
В каноническом текстовом представлении 16 октетов UUID представлены в виде 32 шестнадцатеричных (base-16) цифр, отображаемых в пяти группах, разделенных дефисами, в форме 8-4-4-4-12, всего 36 символов. (32 шестнадцатеричных символа и 4 дефиса). Например: 123e4567-e89b-12d3-a456-426614174000.
Зачем нужен UUID?
Смысл UUID в том, чтобы иметь универсальный уникальный идентификатор. Обычно есть две причины использовать UUID: вы не хотите, чтобы база данных (или какой-либо другой орган) централизованно контролировала идентичность записей. Есть вероятность, что несколько компонентов могут независимо генерировать неуникальный идентификатор.
Что такое UUID NPM?
Уникальные идентификаторы создаются криптографически стойкими случайными значениями, поэтому это очень безопасно. Он поддерживает кроссплатформенность, такую как Node, React Native, Chrome, Safari, Firefox и т. Д. Команда для установки: npm install uuid. Синтаксис для импорта пакета в локальный файл const = require (‘uuid’)
В чем разница между UUID и GUID?
UUID — это термин, обозначающий универсальный уникальный идентификатор. Точно так же GUID означает глобальный уникальный идентификатор. В общем, два термина для одного и того же. Их можно использовать, как и номер продукта, в качестве уникальной ссылки для академического стандарта или названия содержания.
Как мне найти UUID на моем iPhone?
Как найти UUID вашего iPhone и iPad. Подключите свой iPhone или iPad к компьютеру, а затем откройте iTunes. Щелкните значок устройства вверху. UUID вашего устройства по умолчанию скрыт — нажмите «Серийный номер», и он изменится, чтобы отобразить ваш UUID.
Что такое UUID типа 4?
Что такое UUID версии 4? UUID версии 4 — это универсальный уникальный идентификатор, который генерируется с использованием случайных чисел. UUID версии 4, созданные этим сайтом, были сгенерированы с использованием безопасного генератора случайных чисел.
Изменяет ли vmotion UUID?
Каждой виртуальной машине автоматически назначается универсальный уникальный идентификатор (UUID), который хранится в дескрипторе системной информации SMBIOS. … Пока виртуальная машина не копируется или не перемещается в другое место, этот UUID не изменяется.
Что такое UUID в VMware?
Идентификатор виртуальной машины VMware Workstation 5.0 — UUID. Чтобы гарантировать правильную идентификацию всех виртуальных машин, каждой виртуальной машине автоматически назначается универсальный уникальный идентификатор (UUID).
Как мне найти свой GUID Smbios?
Что такое uuid в bios
Принесли мне старичка Lenovo Thinkpad T400 подготовить перед продажей. К слову, мне всегда нравились старые ThinkPadы, от них веет каким-то величием и надежностью. Может это выветривающийся дух IBM, а может самовнушение, ну да черт с ним. После осмотра и чистки ноута я заметил отсутствие UUID (Universally Unique Identifier) – универсального идентификатора, используется для привязки софта и т.д.. Данная проблема довольно старая, темы на форумах начинаются где-то с 2006, но она актуальна и на новых девайсах.
На фото ниже можно увидеть что значение UUID забито нулями.
Возможные варианты слета или отсутствия серийных номеров и других идентификаторов:
*Замена материнской платы. Платы обычно идут с доноров ( со своими идентификаторами) или чистые, в последнем варианте информация меняется на данные прошлой материнки.
*Перезапись/ Замена Bios. Может происходить при обновлении биоса, замены прошивки с донора в которой данная область затерта и схожих действиях.
* Рандомные глюки софта/железа.
По идее, без серийников можно жить и параноики этому будут даже рады (хотя на леново можно и поинтересней чего зашить, тот же Libreboot, но об этом как-то в другой статье), но все зависит от железа. В некоторых случаях ничего не происходит, в других же возможны проблемы с привязкой софта, рандомными перезагрузками и т.д.
У этого экземпляра слет случился после обновления биоса с довольно старой версии.
Способ восстановления подходит при отсутствии UUID, серийника материнской платы и ноута или при их значении invalid.
Вы делаете все на свой страх и риск, я вас предупредил.
После загрузится красивое лого Thinkpad с варнингом о том, что воровать плохо и появится основное меню:
Нам интересны первый и четвертый пункт.Остальные не очень интересны, но это:
2)Проверка звука
3) Форматирование диска
5)Удаление рекавери раздела
6)Записи при обслуживании.
Выбрав первый вариант Set system identification, мы можем:
1)Добавить серийные номера ноутбука, материнки.
2)Отобразить существующие.Что и сделано на фото.
3)Удалить записанные в памяти.
После перезагрузки и захода в биос все отображается так как должно.
Немного любви с чисткой и ноут прослужит новому владельцу еще пяток лет. Это ведь ThinkPad.
Системный номер раздела диска UUID / GUID / serial number
На чистом диске нет никаких разделов и соответственно нет никаких номеров раздела.
В чем отличие UUID от GUID
UUID (Universally unique identifier «универсальный уникальный идентификатор») — UUID представляет собой 16-байтный (128-битный) номер. В каноническом представлении UUID изображают в виде числа в шестнадцатеричной системе счисления, разделённого дефисами на пять групп в формате 8-4-4-4-12.
GUID (Globally Unique Identifier) — это так называется у Microsoft — фактически это последняя реализация UUID (да, там были свои предыдущие версии и свой зоопарк).
Именно по этому актуальная разметка диска от Microsoft называется GPT (GUID Partition Table), читаем статью
В целом используется как идентификатор (в составе также закодирована дата и время создания):
Почему такая загадочная запись?
Очень удобно переводить двоичные числа в шестнадцатеричный формат (а в десятичный формат — очень неудобно).
Помним, что для половинки байта (4 бита):
Bin | Hex | Dec |
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | A | 10 |
1011 | B | 11 |
1100 | C | 12 |
1101 | D | 13 |
1110 | E | 14 |
1111 | F | 15 |
Т.е. один байт (8 бит) вида 11111111 легко представляется в виде FF = т.е. каждая половинка байта — это F (15 в десятичной системе).
Поэтому 128 бит легко превращаются в номер из 32 цифр в шестнадцатеричной системе счисления, 128/4 = 32
В номере UUID каждые два разряда фактически кодируют один байт.
Посмотрим на структуру номера
xxxxxxxx-xxxx-Mxxx—Nxxx-xxxxxxxxxxxx
4 бита M обозначают версию («version») UUID, а 1-3 старших бита N обозначают вариант («variant») UUID.
Первые две цифры кодируют дату и время создания.
Такое разделение на группы основано на структуре UUID:
Название поля | Длина (в байтах) | Длина (число 16-ричных цифр) | Содержимое |
---|---|---|---|
time_low | 4 | 8 | целое число, обозначающее младшие 32 бита времени |
time_mid | 2 | 4 | целое число, обозначающее средние 16 бит времени |
time_hi_and_version | 2 | 4 | 4 старших бита обозначают версию UUID, младшие биты обозначают старшие 12 бит времени |
clock_seq_hi_and_res clock_seq_low | 2 | 4 | 1-3 старших бита обозначают вариант UUID, остальные 13-15 бит обозначают clock sequence |
node | 6 | 12 | 48-битный идентификатор узла |
Как вытащить дату и время из GUID?
bdb62d89-cede-11e4-b12b-d4ae52b5e909
дата содержится в первых символах, bdb62d89-cede-11e4 которые нужно переставить задом наперед: 11e4-cede-bdb62d89
первый символ отбрасываем, убираем «лишние» знаки «-«(тире)
интервал в десятых долях микросекунд (HEX) получается равным: интервал 16= 1E4CEDEBDB62D89
переводим его в десятичный интервал интервал 10 = HexToDec(интервал 16);в результате получаем: интервал 10 = 136 461 344 788 852 105
находим интервал в секундах: интервал Сек = интервал 10 / 10 000 000;
Делаем сдвиг даты от 15.10.1582 г. + 13 646 134 478 + сдвиг на часовой пояс (Московское время) от «мирового времени» (GMT) = 20.03.2015 16:54:38
Использование UUID / GUID как номера раздела (тома) на диске
В LInux изначально используется UUID как системный номер раздела.
В Windows свой зоопарк.
Для FAT 32 — серийный номер из 4 байт = 8 символов в шестнадцатеричной системе
Для NTFS — серийный номер из 8 байт = 16 символов в шестнадцатеричной системе
Системный номер раздела записан непосредственно на диске — создается при форматировании диска. В серийном номер также закодирована дата и время создания раздела.
ВАЖНО: каждый диск «помнит» дату и время создания на нем конкретного раздела, это фактически записано в номере созданного раздела (при форматировании). Нужна шапочка из фольги…
Этот номер мы можем увидеть в свойствах раздела, который показывают программы для управления разделами.
Номер 4610e64f 10e64611 — 16 цифр в шестнадцатеричной системе
Правую половинку номера тома мы также можем увидеть через команду DIR в режиме командной строки
10e6-4611
Он используется Windows уже для регистрации (например раздела) — как устройства, подключенного к системе, вот на фото ниже (как это красиво называется — «точка монтирования» — Mount point).
Этот номер уже записан в недрах реестра — в отличии от серийного номера раздела, записанного в заголовке тома на диске.
Этот же номер мы можем увидеть в bcdedit — как номер основного диска С для работы системы
Видно, что номер GUID используется также для идентификации текущей операционной системы (т.е. в загрузчике явно указано, какую операционную систему нужно загружать и на каком диске она находится).
Вы можете сохранить ссылку на эту страницу себе на компьютер в виде htm файла
Вы будете видеть наш сайт у себя в ленте
Нажмите «Нравится» или напишите сообщение
Что такое uuid в bios
UUID находится в SMBIOS, некоторые вендоры материнских плат иногда не заполняют это поле.
Microsoft с 1999 начала требовать от OEM-производителей и поставщиков BIOS поддержки данного интерфейса для успешной сертификации Microsoft.
В командной строке жмакни:
wmic CsProduct Get UUID
что сообщает?
UUID то тебе зачем?
wmic CsProduct Get /all /format:table
wmic bios get name,serialnumber, version
wmic csproduct get name,identifyingnumber,uuid
может по ним прояснится.
wmic bios get name,serialnumber, version
wmic csproduct get name,identifyingnumber,uuid
Тоже самое по uuid
FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
Остальные значения показывает.
Возвращаем Lenovo UUID и серийники
Принесли мне старичка Lenovo Thinkpad T400 подготовить перед продажей. К слову, мне всегда нравились старые ThinkPadы, от них веет каким-то величием и надежностью. Может это выветривающийся дух IBM, а может самовнушение, ну да черт с ним. После осмотра и чистки ноута я заметил отсутствие UUID (Universally Unique Identifier) – универсального идентификатора, используется для привязки софта и т.д.. Данная проблема довольно старая, темы на форумах начинаются где-то с 2006, но она актуальна и на новых девайсах.
На фото ниже можно увидеть что значение UUID забито нулями.
Возможные варианты слета или отсутствия серийных номеров и других идентификаторов:
*Замена материнской платы. Платы обычно идут с доноров ( со своими идентификаторами) или чистые, в последнем варианте информация меняется на данные прошлой материнки.
*Перезапись/ Замена Bios. Может происходить при обновлении биоса, замены прошивки с донора в которой данная область затерта и схожих действиях.
* Рандомные глюки софта/железа.
По идее, без серийников можно жить и параноики этому будут даже рады (хотя на леново можно и поинтересней чего зашить, тот же Libreboot, но об этом как-то в другой статье), но все зависит от железа. В некоторых случаях ничего не происходит, в других же возможны проблемы с привязкой софта, рандомными перезагрузками и т.д.
У этого экземпляра слет случился после обновления биоса с довольно старой версии.
Способ восстановления подходит при отсутствии UUID, серийника материнской платы и ноута или при их значении invalid.
Вы делаете все на свой страх и риск, я вас предупредил.
Скачиваем установщик по ссылке http://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles/i7tm31us.exe
Ссылка не очень надежна, если что, ищем IBM / Lenovo ThinkPad Hardware Maintenance Disk v. 1.83 или же по имени файла i7tm31us.exe
Устанавливаем в удобную папку.
При установке будет краткая инструкция, как сделать специальную дискету. Дискету, Карл .
Нас устроит вариант с загрузочной флешкой:
1)Заходим в папку и выбираем USBFMTPW.exe
2)Выбираем нужный нам носитель и нажимаем старт
3) ожидаем и вставляем в нужный ноут
4)выбираем загрузку с флешки
После загрузится красивое лого Thinkpad с варнингом о том, что воровать плохо и появится основное меню:
Нам интересны первый и четвертый пункт.Остальные не очень интересны, но это:
2)Проверка звука
3) Форматирование диска
5)Удаление рекавери раздела
6)Записи при обслуживании.
Выбрав первый вариант Set system identification, мы можем:
1)Добавить серийные номера ноутбука, материнки.
2)Отобразить существующие.Что и сделано на фото.
3)Удалить записанные в памяти.
Серийный номер старой материнки можно найти на коробке или в бумагах к железу. Но можете придумать свои или поискать рандомные в интернете (ebay , барахолки, поиск по фото)
Вернувшись обратно в меню и выбрав 4 пункт Assign UUID ,мы можем увидеть UUID. Либо при отсутствии такового, как в нашем случае, будет сгенерирован новый и посчитана контрольная сумма.
Вот собственно и все.
После перезагрузки и захода в биос все отображается так как должно.
Немного любви с чисткой и ноут прослужит новому владельцу еще пяток лет. Это ведь ThinkPad.
If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.
uuid bios что это
Вы наверняка уже использовали в своих проектах UUID и полагали, что они уникальны. Давайте рассмотрим основные аспекты реализации и разберёмся, почему UUID практически уникальны, поскольку существует мизерная возможность возникновения одинаковых значений.
Современную реализацию UUID можно проследить до RFC 4122, в котором описано пять разных подходов к генерированию этих идентификаторов. Мы рассмотрим каждый из них и пройдёмся по реализации версии 1 и версии 4.
Теория
UUID (universally unique IDentifier) — это 128-битное число, которое в разработке ПО используется в качестве уникального идентификатора элементов. Его классическое текстовое представление является серией из 32 шестнадцатеричных символов, разделённых дефисами на пять групп по схеме 8-4-4-4-12.
Информация о реализации UUID встроена в эту, казалось бы, случайную последовательность символов:
Значения на позициях M и N определяют соответственно версию и вариант UUID.
Версия
Номер версии определяется четырьмя старшими битами на позиции М. На сегодняшний день существуют такие версии:
Вариант
Это поле определяет шаблон информации, встроенной в UUID. Интерпретация всех остальных битов в UUID зависит от значения варианта.
Мы определяем его по первым 1-3 старшим битам на позиции N.
1 0 0 0 = 8
1 0 0 1 = 9
1 0 1 0 = A
1 0 1 1 = B
Так что если вы видите UUID с такими значениями на позиции N, то это идентификатор в варианте 1.
Версия 1 (время + уникальный или случайный идентификатор хоста)
В этом случае UUID генерируется так: к текущему времени добавляется какое-то идентифицирующее свойство устройства, которое генерирует UUID, чаще всего это MAC-адрес (также известный как ID узла).
Идентификатор получают с помощью конкатенации 48-битного МАС-адреса, 60-битной временной метки, 14-битной «уникализированной» тактовой последовательности, а также 6 битов, зарезервированных под версию и вариант UUID.
Тактовая последовательность — это просто значение, инкрементируемое при каждом изменении часов.
Временная метка, которая используется в этой версии, представляет собой количество 100-наносекундных интервалов с 15 октября 1582 года — даты возникновения григорианского календаря.
Возможно, вы знакомы с принятым в Unix-системах исчислением времени с начала эпохи. Это просто другая разновидность Нулевого дня. В сети есть сервисы, которые помогут вам преобразовать одно временное представление в другое, так что не будем на этом останавливаться.
Хотя эта реализация выглядит достаточно простой и надёжной, однако использование MAC-адреса машины, на которой генерируется идентификатор, не позволяет считать этот метод универсальным. Особенно, когда главным критерием является безопасность. Поэтому в некоторых реализациях вместо идентификатора узла используется 6 случайных байтов, взятых из криптографически защищённого генератора случайных чисел.
Сборка UUID версии 1 происходит так:
Поскольку эта реализация зависит от часов, нам нужно обрабатывать пограничные ситуации. Во-первых, для минимизации коррелирования между системами по умолчанию тактовая последовательность берётся как случайное число — так делается лишь один раз за весь жизненный цикл системы. Это даёт нам дополнительное преимущество: поддержку идентификаторов узлов, которые можно переносить между системами, поскольку начальное значение тактовой последовательности совершенно не зависит от идентификатора узла.
Помните, что главная цель использования тактовой последовательности — внести долю случайности в наше уравнение. Биты тактовой последовательности помогают расширить временную метку и учитывать ситуации, когда несколько UUID генерируются ещё до того, как изменяются процессорные часы. Так мы избегаем создания одинаковых идентификаторов, когда часы переводятся назад (устройство выключено) или меняется идентификатор узла. Если часы переведены назад, или могли быть переведены назад (например, пока система была отключена), и UUID-генератор не может убедиться, что идентификаторы сгенерированы с более поздними временными метками по сравнению с заданным значением часов, тогда нужно изменить тактовую последовательность. Если нам известно её предыдущее значение, его можно просто увеличить; в противном случае его нужно задать случайным образом или с помощью высококачественного ГПСЧ.
Версия 2 (безопасность распределённой вычислительной среды)
Главное отличие этой версии от предыдущей в том, что вместо «случайности» в виде младших битов тактовой последовательности здесь используется идентификатор, характерный для системы. Часто это просто идентификатор текущего пользователя. Версия 2 используется реже, она очень мало отличается от версии 1, так что идём дальше.
Версия 3 (имя + MD5-хэш)
Если нужны уникальные идентификаторы для информации, связанной с именами или наименованием, то для этого обычно используют UUID версии 3 или версии 5.
Они кодируют любые «именуемые» сущности (сайты, DNS, простой текст и т.д.) в UUID-значение. Самое важное — для одного и того же namespace или текста будет сгенерирован такой же UUID.
Обратите внимание, что namespace сам по себе является UUID.
В этой реализации UUID namespace преобразуется в строку байтов, конкатенированных с входным именем, затем хэшируется с помощью MD5, и получается 128 битов для UUID. Затем мы переписываем некоторые биты, чтобы точно воспроизвести информацию о версии и варианте, а остальное оставляем нетронутым.
Важно понимать, что ни namespace, ни входное имя не могут быть вычислены на основе UUID. Это необратимая операция. Единственное исключение — брутфорс, когда одно из значений (namespace или текст) уже известно атакующему.
При одних и тех же входных данных генерируемые UUID версий 3 и 5 будут детерминированными.
Версия 4 (ГПСЧ)
Самая простая реализация.
6 битов зарезервированы под версию и вариант, остаётся ещё 122 бита. В этой версии просто генерируется 128 случайных битов, а потом 6 из них заменяется данными о версии и варианте.
Такие UUID полностью зависят от качества ГПСЧ (генератора псевдослучайных чисел). Если его алгоритм слишком прост, или ему не хватает начальных значений, то вероятность повторения идентификаторов возрастает.
В современных языках чаще всего используются UUID версии 4.
Её реализация достаточно простая:
Версия 5 (имя + SHA-1-хэш)
Единственное отличие от версии 3 в том, что мы используем алгоритм хэширования SHA-1 вместо MD5. Эта версия предпочтительнее третьей (SHA-1 > MD5).
Практика
Одним из важных достоинств UUID является то, что их уникальность не зависит от центрального авторизующего органа или от координации между разными системами. Кто угодно может создать UUID с определённой уверенностью в том, что в обозримом будущем это значение больше никем не будет сгенерировано.
Это позволяет комбинировать в одной БД идентификаторы, созданные разными участниками, или перемещать идентификаторы между базами с ничтожной вероятностью коллизии.
UUID можно использовать в качестве первичных ключей в базах данных, в качестве уникальных имён загружаемых файлов, уникальных имён любых веб-источников. Для их генерирования вам не нужен центральный авторизующий орган. Но это обоюдоострое решение. Из-за отсутствия контролёра невозможно отслеживать сгенерированные UUID.
Есть и ещё несколько недостатков, которые нужно устранить. Неотъемлемая случайность повышает защищённость, однако она усложняет отладку. Кроме того, UUID может быть избыточным в некоторых ситуациях. Скажем, не имеет смысла использовать 128 битов для уникальной идентификации данных, общий размер которых меньше 128 битов.
Уникальность
Может показаться, что если у вас будет достаточно времени, то вы сможете повторить какое-то значение. Особенно в случае с версией 4. Но в реальности это не так. Если бы вы генерировали один миллиард UUID в секунду в течение 100 лет, то вероятность повторения одного из значений была бы около 50 %. Это с учётом того, что ГПСЧ обеспечивает достаточное количество энтропии (истинная случайность), иначе вероятность появления дубля будет выше. Более наглядный пример: если бы вы сгенерировали 10 триллионов UUID, то вероятность появления двух одинаковых значений равна 0,00000006 %.
А в случае с версией 1 часы обнулятся только в 3603 году. Так что если вы не планируете поддерживать работу своего сервиса ещё 1583 года, то вы в безопасности.
Впрочем, вероятность появления дубля остаётся, и в некоторых системах стараются это учитывать. Но в подавляющем большинстве случаев UUID можно считать полностью уникальными. Если вам нужно больше доказательств, вот простая визуализация вероятности коллизии на практике.
Системный номер раздела диска UUID / GUID / serial number
На чистом диске нет никаких разделов и соответственно нет никаких номеров раздела.
В чем отличие UUID от GUID
UUID (Universally unique identifier «универсальный уникальный идентификатор») — UUID представляет собой 16-байтный (128-битный) номер. В каноническом представлении UUID изображают в виде числа в шестнадцатеричной системе счисления, разделённого дефисами на пять групп в формате 8-4-4-4-12.
GUID (Globally Unique Identifier) — это так называется у Microsoft — фактически это последняя реализация UUID (да, там были свои предыдущие версии и свой зоопарк).
Именно по этому актуальная разметка диска от Microsoft называется GPT (GUID Partition Table), читаем статью
В целом используется как идентификатор (в составе также закодирована дата и время создания):
Почему такая загадочная запись?
Очень удобно переводить двоичные числа в шестнадцатеричный формат (а в десятичный формат — очень неудобно).
Помним, что для половинки байта (4 бита):
Bin | Hex | Dec |
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | A | 10 |
1011 | B | 11 |
1100 | C | 12 |
1101 | D | 13 |
1110 | E | 14 |
1111 | F | 15 |
Т.е. один байт (8 бит) вида 11111111 легко представляется в виде FF = т.е. каждая половинка байта — это F (15 в десятичной системе).
Поэтому 128 бит легко превращаются в номер из 32 цифр в шестнадцатеричной системе счисления, 128/4 = 32
В номере UUID каждые два разряда фактически кодируют один байт.
Посмотрим на структуру номера
xxxxxxxx-xxxx-Mxxx—Nxxx-xxxxxxxxxxxx
4 бита M обозначают версию («version») UUID, а 1-3 старших бита N обозначают вариант («variant») UUID.
Первые две цифры кодируют дату и время создания.
Такое разделение на группы основано на структуре UUID:
Название поля | Длина (в байтах) | Длина (число 16-ричных цифр) | Содержимое |
---|---|---|---|
time_low | 4 | 8 | целое число, обозначающее младшие 32 бита времени |
time_mid | 2 | 4 | целое число, обозначающее средние 16 бит времени |
time_hi_and_version | 2 | 4 | 4 старших бита обозначают версию UUID, младшие биты обозначают старшие 12 бит времени |
clock_seq_hi_and_res clock_seq_low | 2 | 4 | 1-3 старших бита обозначают вариант UUID, остальные 13-15 бит обозначают clock sequence |
node | 6 | 12 | 48-битный идентификатор узла |
Как вытащить дату и время из GUID?
bdb62d89-cede-11e4-b12b-d4ae52b5e909
дата содержится в первых символах, bdb62d89-cede-11e4 которые нужно переставить задом наперед: 11e4-cede-bdb62d89
первый символ отбрасываем, убираем «лишние» знаки «-«(тире)
интервал в десятых долях микросекунд (HEX) получается равным: интервал 16= 1E4CEDEBDB62D89
переводим его в десятичный интервал интервал 10 = HexToDec(интервал 16);в результате получаем: интервал 10 = 136 461 344 788 852 105
находим интервал в секундах: интервал Сек = интервал 10 / 10 000 000;
Делаем сдвиг даты от 15.10.1582 г. + 13 646 134 478 + сдвиг на часовой пояс (Московское время) от «мирового времени» (GMT) = 20.03.2015 16:54:38
Использование UUID / GUID как номера раздела (тома) на диске
В LInux изначально используется UUID как системный номер раздела.
В Windows свой зоопарк.
Для FAT 32 — серийный номер из 4 байт = 8 символов в шестнадцатеричной системе
Для NTFS — серийный номер из 8 байт = 16 символов в шестнадцатеричной системе
Системный номер раздела записан непосредственно на диске — создается при форматировании диска. В серийном номер также закодирована дата и время создания раздела.
ВАЖНО: каждый диск «помнит» дату и время создания на нем конкретного раздела, это фактически записано в номере созданного раздела (при форматировании). Нужна шапочка из фольги…
Этот номер мы можем увидеть в свойствах раздела, который показывают программы для управления разделами.
Номер 4610e64f 10e64611 — 16 цифр в шестнадцатеричной системе
Правую половинку номера тома мы также можем увидеть через команду DIR в режиме командной строки
10e6-4611
Он используется Windows уже для регистрации (например раздела) — как устройства, подключенного к системе, вот на фото ниже (как это красиво называется — «точка монтирования» — Mount point).
Этот номер уже записан в недрах реестра — в отличии от серийного номера раздела, записанного в заголовке тома на диске.
Этот же номер мы можем увидеть в bcdedit — как номер основного диска С для работы системы
Видно, что номер GUID используется также для идентификации текущей операционной системы (т.е. в загрузчике явно указано, какую операционную систему нужно загружать и на каком диске она находится).
Вы можете сохранить ссылку на эту страницу себе на компьютер в виде htm файла
Вы будете видеть наш сайт у себя в ленте
Нажмите «Нравится» или напишите сообщение
Uuid bios что это
UUID находится в SMBIOS, некоторые вендоры материнских плат иногда не заполняют это поле.
Microsoft с 1999 начала требовать от OEM-производителей и поставщиков BIOS поддержки данного интерфейса для успешной сертификации Microsoft.
В командной строке жмакни:
wmic CsProduct Get UUID
что сообщает?
UUID то тебе зачем?
wmic CsProduct Get /all /format:table
wmic bios get name,serialnumber, version
wmic csproduct get name,identifyingnumber,uuid
может по ним прояснится.
wmic bios get name,serialnumber, version
wmic csproduct get name,identifyingnumber,uuid
Тоже самое по uuid
FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
Остальные значения показывает.
UUID и браузеры. Почему фронтенд живет без страшных айдишников?
Решил я делать свой пет-проект по учету прочитанных книг на PWA. Покорять новые технологии и все такое. Расчет был на то, что с его выложу и установлю на телефон и вот у меня есть мобильное приложение, которое можно использовать оффлайн. Хочу я сгенерировать UUID, чтобы сохранить книгу, а не нахожу API. Предлагаю разобраться почему.
Что такое UUID
UUID — стандарт идентификации данных используемый, преимущественно, для распределенных систем. Его задача позволить генерировать ключи, которые не вызовут конфликтов при сохранении в то, или иное хранилище данных.
UUID представляет собой 16-байтное число в HEX’е формате:
Здесь я не буду вдаваться в подробности, что из этого что означает. С этим вы подробно можете ознакомиться в википедии.
Способы генерации UUID
Все способы генерации UUID сводятся к тому, что мы берем уникальные данные клиента прогоняем через хеш-функцию и получаем наш 128-битный ключик.
1 и 2 версии использовали время с точностью до 0.1 микросекунды + MAC адрес, что гарантировало практически полное отсутствие возможности получить дубликат. Чтобы полностью добить эту вероятность первая версия добавляет рандомную соль, а вторая ничего не делает (вторую версию мы не любим, она вообще может сгенерировать только 64 уникальных id за семь минут).
3 и 5 хешируют пространство имен (Url, FQDN, OID) + само имя. Таким образом в каждый момент времени мы получаем абсолютно идентичные UUID для одних и тех же входных параметров.
Отличие 3 и 5 версии только в том, что 3 использует для хеширования MD-5, а 5 — SHA-1.
4 же версия просто использует рандом ¯_(ツ)_/¯.
Почему его нет в браузере
JS не имеет доступа к данным машины
Мы не можем получить MAC-адрес пользователя, мы не можем получить данные его IP, а так же вообще что-либо с его машины без разрешения пользователя.
Да, мы можем загружать файлы и делать красивые file-инпуты на фронте, но мы можем получить только конкретный файл, который нам предоставит пользователь. Но согласитесь, как бы не шибко удобно запрашивать на каждый UUID по файлу. Неудобно их запрашивать даже каждый раз при входе на сайт.
Сделано же это из благих целей: представьте, что читаете вы Хабр, а тут:
И больше никаких проблем с высшим образованием.
Потому что до недавних пор он был просто не нужен
Браузер для того, чтобы сидеть в интернете.
Через браузер мы заходим на сайт. Если мы зашли на сайт — нам отдали страничку. А раз нам ее отдали — значит мы связаны с сетевым узлом который может сгенерировать UUID и сами мы можем этого не делать. По факту, нам как фронту вообще на ID информации все равно, мы отдали, а дальше это уже проблема принимающей стороны.
Вы можете возразить, что есть PWA, и что оно есть аж с 2007 года. Но так уж вышло, что PWA никому не нужен, примерно, с того же самого времени. (Хотя нынче Play Market позволяет загружать PWA как приложения, но. ). Сами посудите, много вы PWA приложений установили? Я даже Хабр не поставил.
Но осадочек остался.
Какие трудности вас ждут
Точность времени
Я бы не стал называть это большой проблемой.
Мы можем получить время с точностью только до миллисекунды, в то время как первая версия UUID делала это с точностью до 100 наносекунд.
Ну чисто теоретически мы можем получить и с точностью до 1 микросекунды, но это будет время от открытия вкладки (это если мы сейчас про performance.now() ), что уже не так заманчиво.
Идентификация браузера
Браузеры вообще не уникальны и сейчас я вам это докажу.
Для идентификации клиента HTML Living Standard нам предлагает использовать The Navigator object.
А теперь внимание сравним то, что нам предлагают сравнивать
Браузер | appCodeName | appName | platform | product | productSub | vendor | vendorSub |
---|---|---|---|---|---|---|---|
Chrome | Mozilla | Netscape | Win32 | Gecko | 20030107 | Google Inc. | — |
Mozilla 75 | Mozilla | Netscape | Win32 | Gecko | 20100101 | — | — |
Mozilla 45 | Mozilla | Netscape | Win32 | Gecko | 20100101 | — | — |
Internet Explorer | Mozilla | Netscape | Win32 | Gecko | — | — | — |
Microsoft Edge | Mozilla | Netscape | Win32 | Gecko | 20030107 | Google Inc. | — |
Как вам такое? Почувствовали все разнообразие клиентов? Вот и я нет.
Но надо признать, что местами отличаются userAgent и appVersion :
Тут Edge впереди планеты всей, так как он отображает IP, и мы можем использовать его. Но это только в Edge. А так, как видите, многого с навигатором не навоюешь.
Как это реализовал я
Для себя я решил отталкиваться от своих нужд и особенностей архитектуры своего приложения.
Последние 6 байт я беру из SHA-1 хеша логина — можно идентифицировать 281,474,976,710,656 уникальных пользователей (если взять расчет на то, что не будет коллизий). Тоже с запасом (у меня их всего 30).
1 байт у нас отводится на версию (M) и вариант (N).
Оставшиеся 3 байта я солю рандомом.
Если вдруг мое приложение станет супер-пупер популярным и 100,000 и они будут за минуту каждый делать по 100 книг, то за миллисекунду будет генерироваться:
$$
100,000 * 100 / 60,000 = 166
$$
Вероятность того, что совпадут два:
Это очень мало и этого мне хватает
Реализацию можно посмотреть тут.
Предвещая вопрос «А почему же не рандом?»
Да, есть такой легендарный код
В моем случае на бэкенде UUID используется как первичный ключ.
Когда первые байты ключа идут по порядку больше вероятность, что новая запись встанет в конец таблицы. Даже если на клиенте будет запущена синхронизация. Ведь вряд ли юзер выполнит синхронизацию данных внесенных полгода назад и СУБД будет сдвигать половину таблицы.
В случае же с рандомом — данные будут вставляться в табличку куда ни попадя.
Bios компьютера, lenovo биос
Bios компьютера необходимо знать каждому юзеру без исключений. Без хотя бы начального знания bios компьютера просо невозможно выполнять очень многие вещи на компьютере. Например пере установка Windows, хотя и появились как в Windows 7 возможности устанавливать операционную систему из под предустановленной операционной системы, но что делать если предустановленной системы нет или она не запускается ? Вот тут то юзеры начинают судорожно копать интернет у знакомых у кого есть интернет или с мобильного телефона или с другого компьютера. И начинают понимать что без понимания bios компьютера далеко не уедешь …
Итак что же такое этот bios компьютера ? —
Биос бывает разных производителей и с разным интерфейсом, но функционал у всех один и тот же – как в мобильных телефонах – все разные но мы знаем как с ними обращаться и на что нажимать даже если видим впервые.
Как попасть в bios
Для того чтобы попасть в биос вашего компьютера или ноутбука или нетбука например для того чтобы произвести установка Windows 7 на ноутбук – необходимо нажать клавишу входа в биос в момент когда включается компьютер. на всех компьютерах эта клавиша разная – традиционно это клавиша delete. Но бывает и F2 и F1 , также бывает я видел на компьютер Pavilion вход в биос через клавишу F10. Вобщем по нажимаете сами и войдете.
У меня ноутбук Lenovo G550 2 года возраст, поэтому рассмотрим наш вопрос на примере моего Lenovo биос. В Lenovo удобный Lenovo биос от Phoenix – ничего лишнего и все просто. Итак заходим в Lenovo биос, для этого при включении ноутбука как у меня (или компьютера) зажимаем и держим клавишу F2 до тех пор пока не появиться Lenovo биос :