Что является самым безопасным семенем для генерации случайных чисел?

Каковы наиболее безопасные источники энтропии для генерации генератора случайных чисел? Этот вопрос является независимым от языка и платформы и применяется к любой машине в сети. В идеале я ищу источники, доступные для машины в облачной среде или сервере, предоставляемые хостинговой компанией.

Есть два важных недостатка, о которых следует помнить. Использование времени для отправки генератора случайных чисел является нарушением CWE-337. Использование небольшого пространства семян было бы нарушением CWE-339.

Ответ 1

Вот несколько мыслей. Если вы нетерпеливы, переходите к заключению, в конце.

1. Что такое безопасное семя?

Безопасность определяется только относительно модели атаки. Мы хотим здесь последовательность из n бит, которая имеет n бит энтропии в отношении злоумышленника: простыми словами, что любое из возможных значений 2 n для этой последовательности равновероятно с точки атаки зрения.

Это модель, которая относится к информации, доступной злоумышленнику. Приложение, которое генерирует и использует семена (обычно в PRNG), знает точное семя; независимо от того, является ли семя "безопасным", не является абсолютным свойством семени или даже процесса генерации семян. Важно то, сколько информации, которую атакующий имеет о процессе генерации. Этот уровень информации сильно варьируется в зависимости от ситуации; например в многопользовательской системе (скажем, Unix-like, с аппаратным разделением приложений) точное время доступа к памяти может показать информацию о том, как номинально защищенный процесс считывает память. Даже удаленный злоумышленник может получить такую ​​информацию; это было продемонстрировано (в лабораторных условиях) при шифровании AES (типичные реализации AES используют внутренние таблицы с шаблонами доступа, которые зависят от ключа; заставляет кэш пропускает и обнаруживает их через точное время ответа сервера).

Необходимо учитывать время жизни семян. Семя безопасно до тех пор, пока злоумышленник остается неизвестным; это свойство должно быть истинным впоследствии. В частности, невозможно извлечь семена из выдержек последующего вывода PRNG. В идеале даже получение полного состояния PRNG в какой-то момент не должно давать никаких указаний относительно любых бит, которые PRNG производил заранее.

То, что я хочу сделать здесь, состоит в том, что семя является "безопасным", только если оно используется в контексте, где он может оставаться защищенным, что более или менее подразумевает криптографически безопасный PRNG и некоторое хранилище, устойчивое к несанкционированному хранению. Если такое хранилище доступно, то самым безопасным семенем является тот, который был создан один раз, давным-давно, и используется в безопасном PRNG, размещенном с помощью защищенного от несанкционированного доступа оборудования.

К сожалению, такое оборудование дорого (оно называется HSM и стоит несколько сотен или тысяч долларов), и эта стоимость обычно оказывается трудно оправданной (плохое семя не помешает работе системы, это обычная проблема непроверки безопасности). Следовательно, принято использовать "преимущественно программные" решения. Поскольку программное обеспечение не подходит для обеспечения долговременного конфиденциального хранения, время жизни семян условно сокращается: периодически получается новое семя. В Fortuna такое пересыщение должно происходить не реже одного раза в мегабайт генерируемых псевдослучайных данных.

Подводя итог, в настройке без HSM безопасное семя является тем, которое можно получить относительно легко (поскольку мы будем делать это довольно часто), используя данные, которые не могут быть собраны злоумышленником.

2. Смешивание

Случайные источники данных не генерируют хороших равномерных битов (каждый бит имеет значение 1 с вероятностью ровно 0,5, а битовые значения не зависят друг от друга). Вместо этого случайные источники генерируют значения в наборах, специфичных для источника. Эти значения могут быть закодированы как последовательности бит, но вы не получаете деньги: чтобы иметь n бит энтропии, вы должны иметь значения, которые при кодировании используют гораздо больше, чем n бит.

Здесь используется криптографический инструмент PRF, который принимает вход произвольной длины и производит n-разрядный вывод. Криптографически защищенный PRF такого типа моделируется как случайный оракул: в краткосрочной перспективе нецелесообразно прогнозировать что-либо о выходе оракула на заданный ввод, не пытаясь его выполнить.

Прямо сейчас, хеш-функции, Функции хеширования должны выполнять несколько свойств безопасности, а именно: устойчивость к прообразам, второму прообразу и столкновениям. Обычно мы анализируем хэш-функции, пытаясь понять, как они отходят от модели случайного оракула. Здесь есть важный момент: PRF, который следует за случайной моделью оракула, будет хорошей хэш-функцией, но могут быть хорошие хэш-функции (в смысле сопротивления прообразам и столкновениям), которые тем не менее легко отличить от случайного оракула, В частности, функции

Некоторые компьютеры уже включают аппаратное обеспечение, которое генерирует случайные данные (т.е. использует и измеряет физический процесс, который, насколько может сказать физик, является достаточно случайным). VIA C3 (линейка x86-совместимого CPU) имеет такое оборудование. Как ни странно, Commodore 64, домашний компьютер 30 лет назад, также имел аппаратный RNG (или, как минимум, , по крайней мере).

Запрет специального оборудования, вы должны использовать любые физические события, которые вы можете получить. Как правило, вы будете использовать нажатия клавиш, входящие пакеты ethernet, движения мыши, доступ к жесткому диску... каждое событие поставляется с некоторыми данными и происходит в измеримый момент (современные процессоры имеют очень точные часы, благодаря счетчикам циклов). Эти моменты и данные о событиях могут накапливаться как источники энтропии. Это намного проще для самой операционной системы (которая имеет прямой доступ к оборудованию), чем для приложений, поэтому обычным способом сбора семени является запрос операционной системы (в Linux это называется /dev/random или /dev/urandom [у обоих есть преимущества и проблемы, выберите яд], в Windows вызовите CryptGenRandom()).

В крайнем случае это до 1.2 Java-апплетов, до добавления java.security.SecureRandom; поскольку Java очень эффективна для изоляции кода приложения от аппаратного обеспечения, получение случайного семени было непростой задачей. Обычное решение заключалось в том, чтобы два или три потока выполнялись одновременно и с переключением потоков безумно, так что количество переключений потоков в секунду было несколько случайным (по сути, это пытается извлечь случайность с помощью времени действий планировщика ОС, которые зависят о том, что также происходит на машине, включая связанные с оборудованием события). Это было довольно неудовлетворительно.

Проблема со связанными со временем мерами заключается в том, что злоумышленник также знает, что такое текущее время. Если атакующий имеет аппликативный доступ к машине, он также может прочитать счетчик циклов.

Некоторые люди предложили использовать звуковые карты в качестве источников "белого шума", установив усилитель на максимальный уровень (в то время как даже у серверов есть звук). Другие утверждают, что для включения веб-камер (мы знаем, что видео в веб-камера "шумно" и это хорошо для случайности, даже если веб-камера стоит на стене); но серверы с веб-камерами не являются общими. Вы также можете пинговать внешний сетевой сервер (например, www.google.com) и посмотреть, сколько времени потребуется, чтобы вернуться (но это может наблюдаться злоумышленником, шпионящим по сети).

Красота шага смешения с хеш-функцией заключается в том, что энтропия может накапливаться; нет никакого вреда в добавлении данных, даже если эти данные не являются случайными. Просто как можно больше через хеш-функцию. Хэш-функции довольно быстрые (хорошая реализация SHA-512 будет обрабатывать более 150 МБ/с на обычном ПК, используя одно ядро), и сеяние происходит не так часто.

4. Заключение

Используйте . Они стоят несколько сотен или тысяч долларов, но разве ваши секреты не стоят гораздо больше? HSM включает аппаратное обеспечение RNG, запускает алгоритм PRNG и сохраняет семя с сопротивлением тамперу. Кроме того, большинство HSM уже сертифицированы в отношении различных национальных правил (например, FIPS 140 в США и уровней EAL в Европе).

Если вы настолько дешевы, что не будете покупать HSM, или если вы хотите защитить данные, которые на самом деле не очень полезны, тогда создайте криптографически безопасный PRNG, используя семя, полученное путем хэширования множества физических мер. Все, что исходит от какого-либо оборудования, должно быть хэшировано вместе с мгновенным (чтение "счетчиком циклов" ), по которому эти данные были получены. Здесь вы должны записывать данные на мегабайт. Или, еще лучше, не делайте этого: просто используйте средства, предлагаемые вашей операционной системой, которые уже включают такой код.

Ответ 2

Наиболее безопасным семенем является тот, который имеет самый высокий уровень энтропии (или большее количество битов, которые невозможно предсказать). Время - плохое семя, потому что оно имеет небольшую энтропию (т.е. Если вы знаете, когда произошла транзакция, вы можете угадать временную метку с точностью до нескольких бит). Источники аппаратной энтропии (например, от процессов распада) очень хороши, потому что они дают один бит энтропии для каждого бита семени.

Обычно для большинства потребностей аппаратный источник нецелесообразен, поэтому это приводит к тому, что вы полагаетесь на смешивание нескольких источников энтропии низкого качества для получения более высокого. Обычно это делается путем оценки количества бит энтропии для каждого образца и последующего сбора достаточного количества выборок, чтобы пространство поиска для источника энтропии было достаточно большим, чтобы злоумышленник не искал поиск (128 бит - хорошее правильное правило).

Некоторые источники, которые вы можете использовать, это: текущее время в микросекундах (обычно очень низкая энтропия по 1/2 бит в зависимости от разрешения и насколько легко это возможно для злоумышленника), время между событиями пользовательского интерфейса и т.д.

Источники операционных систем, такие как /dev/random и генератор случайных чисел CAPI Windows, часто предоставляют предварительно смешанный источник этих источников с низкой энтропией, например генератор Windows CryptGenRandom включает в себя:

  • Текущий идентификатор процесса (GetCurrentProcessID).
  • Текущий идентификатор потока (GetCurrentThreadID).
  • Количество тиков с момента загрузки (GetTickCount).
  • Текущее время (GetLocalTime).
  • Различные высокоточные характеристики счетчики (QueryPerformanceCounter).-
  • Хэш MD4 пользовательской среды блок, который включает имя пользователя, имя компьютера и путь поиска. [...] -
  • Высокоточные внутренние счетчики CPU, такие как RDTSC, RDMSR, RDPMC

Некоторые PRNG имеют встроенные стратегии, позволяющие смешивать энтропию из источников низкого качества для получения высококачественных результатов. Один очень хороший генератор - это генератор Fortuna. В нем конкретно используются стратегии, которые ограничивают риск, если какой-либо из источников энтропии будет скомпрометирован.

Ответ 3

Самое безопасное семя - действительно случайное, которое вы можете приблизить в практических вычислительных системах сегодняшнего дня, используя перечисленные в уменьшении степени уверенности:

  • Специальное оборудование
  • Средства, предоставляемые вашей операционной системой, которые пытаются захватить хаотические события, такие как чтение дисков и движения мыши (/dev/random). Другим вариантом этой строки "захватить непредсказуемые события" является использование независимого процесса или машины, который фиксирует, что происходит с ним как пул энтропии, вместо того, чтобы предоставить ОС "безопасный" генератор случайных чисел, например, см. EntropyPool
  • Использование плохого семени (то есть времени) и объединение его с другими известными вам данными (например, хэширование времени тайной и некоторыми другими критериями, такими как PID или внутреннее состояние приложения/ОС, поэтому не обязательно увеличивается и уменьшается в зависимости от времени)

Ответ 4

Как интересное занятие на разовых площадках, всякий раз, когда я занимаюсь шпионажем, у меня есть система, в которой мне нужно всего лишь сообщить несколько писем. Например, в последний раз, когда я продавал секретные планы по созданию тостеров в Герцогство Гранд Фенвик, мне нужно было только шепотом:

enonH

моему конфедерату. Она знала, что получает http://is.gd/enonH- (это безопасный URL-адрес расширителя, который переводит вас на страницу расширения is.gd, которая, в свою очередь, указывает на полностью SFW изображение лягушки). Это дало нам 409 тыс. Бит одноразового прохода или - если я подшучиваю, шепчу "enonH" - она ​​знает, чтобы взять хэш изображения и использовать его в качестве ключа декодирования для моей следующей передачи.

Из-за сжатия в изображениях JPEG они, как правило, являются относительно хорошими источниками энтропии, о которых сообщает ent:

$ent frog.jpg
Entropy = 7.955028 бит на байт.

Оптимальное сжатие уменьшит размер этого файла 51092 байт на 0 процентов.

Квадратное распределение Чи для 51092 образцы составляют 4409,15, и случайным образом превышать это значение 0,01% от раз.

Среднее значение арифметических байтов данных 129.0884 (127.5 = случайный).
Значение Монте-Карло для Pi равно 3.053435115 (ошибка 2,81 процента).
Коэффициент последовательной корреляции составляет 0,052738 (полностью uncorrelated = 0.0).uncorrelated = 0.0).

Объедините это с почти невозможным угадать образ, к которому я направил ее, и мои секретные планы тостера безопасны от Человека.

Ответ 5

Ответ на вопрос: /dev/random на машине Linux. Это очень близко к "реальному" генератору случайных чисел, где при /dev/urandom может генерироваться PRNG, если энтропийный пул работает сухим. Следующая цитата взята из Linux kernel random.c Весь этот файл является красивым чтением, большим количеством комментариев. Сам код был принят из PGP. Его красота не ограничена ограничениями на C, которые отмечены глобальными структурами, обернутыми аксессуарами. Это просто впечатляющий дизайн.

Эта процедура собирает экологические шум от драйверов устройств и т.д., и возвращает хорошие случайные числа, подходит для криптографического использования. Кроме очевидное использование криптографии, эти номера также хороши для посева Номера последовательностей TCP и другие места где желательно иметь числа, которые не только случайны, но трудно предсказать злоумышленником.

Теория работы

Компьютеры - очень предсказуемые устройства. Следовательно, это чрезвычайно сложно для получения действительно случайных чисел на компьютер --- в отличие от псевдослучайные числа, которые могут легко генерируется с помощью алгоритм. К сожалению, это очень легко для злоумышленников угадать последовательность псевдослучайных чисел генераторов, а для некоторых - приложений это неприемлемо. Поэтому вместо этого мы должны попытаться собрать "шум окружающей среды" от компьютерная среда, которая должна быть жестоким для нарушителей на наблюдать и использовать это для генерации случайные числа. В Unix окружающей среды, это лучше всего сделать из внутри ядра.

Источники случайности из окружающей среды включают в себя межклавишные
таймингов, интервалов между прерываниями из некоторые прерывания и другие события которые являются (а) недетерминированными и (б) трудно для внешнего наблюдателя измерять. Случайность от этих источники добавляются к "энтропии" пул ", который смешивается с использованием CRC-подобных функция. Это не криптографически сильный, но адекватно предполагая, что случайность не злонамеренно выбран, и он быстро достаточно, чтобы накладные расходы на это на каждом прерывании очень разумно. Поскольку случайные байты смешиваются с энтропийный пул, оценка того, сколько бит случайность были сохранены в генератор случайных чисел состояние.

Когда требуются случайные байты, они получаются путем принятия SHA хэш содержимого "энтропии" пул ". SHA-хэш избегает разоблачения внутреннее состояние энтропии бассейн. Считается, что вычислительно неосуществимы для вывода любую полезную информацию о ввод SHA с его выхода. Даже если можно проанализировать SHA в какой-то умный способ, если сумма данных, возвращаемых генератором меньше, чем присущая энтропия в
пул, выходные данные полностью непредсказуемы. По этой причине процедура уменьшает ее внутреннюю оценка количества бит "true" случайности "содержатся в энтропийный пул, поскольку он выдает случайные номера.     Если эта оценка равна нулю, подпрограмма может генерировать случайные числа; однако злоумышленник может (при наименее теоретически) иметь возможность вывести будущий выход генератора от предыдущих выходов. Это требует успешный криптоанализ SHA, который не считается осуществимым, но есть отдаленная возможность. Тем не менее, эти цифры должны быть полезный для подавляющего большинства целей.

...

Ответ 6

Напишите клиент интернет-радио, используйте случайную выборку из трансляции. Имейте пул нескольких станций, чтобы выбрать и/или вернуться обратно.

Ответ 7

Если вы читаете криптотеорию, становится очевидным, что самым безопасным семенем будет то, что генерируется хаотическим событием. На протяжении всей истории тайные операции использовали так называемый "Одноразовый блок" , который, как оказалось, невозможно взломать. Обычно они генерируются через ассортимент атмосферных прослушивающих столбов, рассеянных вокруг середины нигде. Атмосферный шум достаточно хаотичен, чтобы считаться случайным. Основная проблема с этим методом заключается в том, что логистика для одноразового прохода значительна.

Мое предложение для вас - найти достаточно хаотичное событие, чтобы каким-то образом извлечь данные из.

Ответ 8

Джеймс прав. Кроме того, есть оборудование, которое вы можете приобрести, что даст вам случайные данные. Не знаю, где я его видел, но я думаю, что я читал, что некоторые звуковые карты поставляются с таким оборудованием.

Вы также можете использовать сайт, например http://www.random.org/

Ответ 9

ОК, полагая, что клиенту требуется сильное семя, а вы используете облачные вычисления, это решение, для некоторых генераторов случайных чисел, которые вы можете посмотреть здесь:

http://en.wikipedia.org/wiki/Hardware_random_number_generator

Итак, это предполагает, что у каждого клиента есть пара открытого/закрытого ключа, где сервер знает открытый ключ для каждого клиента. Чтобы сгенерировать ключ, вы можете использовать что-то похожее на то, что было сделано с помощью PGP, в начале, где вы принимаете разницу во времени между нажатиями клавиш, как кто-то, поскольку это не будет возможным.

Итак, клиент отправляет запрос на случайное число. Сервер использует генератор оборудования, шифрует его с помощью открытого ключа и подписывает его с помощью закрытого ключа сервера. Затем клиент может проверить, откуда он появился, а затем расшифровать его.

Это гарантирует, что вы можете создать случайное число и передать его безопасным образом.

UPDATE:

Лучше всего смотреть в искусстве компьютерного программирования или в любую из книг "Численные методы" или посмотреть, что написал Брюс Шнайер, например, эти ссылки: http://www.schneier.com/blog/archives/2006/06/random_number_g.html http://www.cryptosys.net/rng_algorithms.html http://www.schneier.com/blog/archives/2006/06/random_number_g.html http://www.schneier.com/blog/archives/2006/06/random_number_g.html Предложения по генерации случайных чисел в программном обеспечении, ftp://ftp.rsasecurity.com/pub/pdfs/bull-1.pdf

Вы также можете посмотреть, как Crypto ++ создает поколение, или, по крайней мере, посмотреть, как это сделал Вэй Дай, http://www.cryptopp.com/ p >

Ответ 10

Random.org предлагает настоящий генератор случайных чисел веб-сервис, "засеяны" атмосферным шумом.

Вы получаете 200 000 случайных бит бесплатно каждый день, до 1 миллиона случайных бит, после того, как вы пополняете свою учетную запись, она становится дешевой, как 4 миллиона бит за доллар.

Ответ 11

4 - выбирается очень случайным броском кости.: -)

Ответ 12

Простое решение, если нет дополнительного случайного оборудования.

Используйте миллисекунды, mouseX и mouseY для генерации семени.

Ответ 13

Поскольку консенсус криптографически силен, случайные числа должны быть получены из аппаратного обеспечения. Некоторые процессоры имеют эту функциональность (чипы Intel - другие). Для этого можно использовать звуковые карты, измеряя низкочастотные колебания в a-d преобразователе.

Но из-за аппаратных потребностей нет ответа на язык и платформу. Практически любая более крупная ОС будет поддерживать безопасные случайные числа. Также сложно реализовать хороший генератор случайных чисел с хорошим выходом, так как вам придется отслеживать оставшуюся энтропию в пуле.

Итак, первый шаг - определить, какие языки вы будете использовать. У некоторых есть сильная поддержка случайных чисел - если это не так, вам придется абстрагировать генерацию для вызова случайных источников, зависящих от платформы.

В зависимости от ваших потребностей в области безопасности необходимо утомлять "онлайн" источники, так как человек в середине может стать серьезной угрозой для неавторизованных онлайн-источников.

Ответ 14

Сначала вам нужно определить фактическое использование/назначение генератора случайных чисел и почему вы думаете, что он должен пройти такой высокий уровень безопасности? Причина, о которой я прошу, заключается в том, что вы упомянули о том, чтобы выбрать ее из возможного - если вы используете ее в целях безопасности, то обеспечение источника и канала для его отправки намного важнее любого академического вязания.

Второй элемент - это размер фактических случайных чисел, которые вам нужны - большое семя хорошо, но только если число сгенерировано также велико - иначе вы просто будете читать небольшую часть сгенерированного числа, и это увеличит ваш риск,

Посмотрите на реконфигурируемые шифры, а не на такие вещи, как SHA или AES. Вот две исследовательские статьи, если вы хотите прочитать и проверить, как и почему они работают:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.97.6594&rep=rep1&type=pdf http://www.springerlink.com/index/q29t6v1p45515186.pdf

Или возьмите какой-либо реконфигурируемый исходный код шифрования ГОСТ, который вы найдете в сети, и затем вы либо подаете ему просто базовое семя (например, объединенный "тикер" плюс идентификатор веб-сервера node (если он находится в веб-ферме) плюс часть ответа на любом интернет-новостном сайте, который все время меняет топ-новости, или вы можете накормить его высоко контролируемым начальным семенем (которое вы можете сделать сами по себе) и использовать легкую псевдослучайную последовательность для выбора дальнейших конфигураций шифрования. Даже NSA не может сломать это:-) Так как это всегда другой шифр. Для реальных криптографических целей практически необходимо использовать очень контролируемое начальное семя, чтобы иметь возможность реплицировать последовательность для проверки. То, что мы вернемся к первому элементу - обеспечению источника и распределения.

Ответ 15

Ваши самые безопасные методы придут от природы. То есть, что-то, что происходит за пределами вашей компьютерной системы и за пределами нашей способности предсказывать ее шаблоны.

Например, многие исследователи в Криптографически защищенные PRNG будут использовать радиоактивный распад в качестве модели, другие могут смотреть на фракталы и т.д. Существуют существующие средства создания настоящих RNG

Один из моих любимых способов реализации PRNG - взаимодействие пользователя с компьютером. Например, этот пост не был чем-то, что можно было бы заранее определить форвардной инженерией из моей прошлой серии сообщений. Там, где я оставил свою мышь на экране, очень случайный, след, который он сделал, также случайный. Наблюдение за взаимодействием с пользователем. Злоупотребление средствами предоставления конкретного ввода, которое генерирует определенные числа, может быть смягчено с помощью "рой" пользовательских входов и расчета его "вектора", если у вас нет каждого пользователя в вашей системе в качестве Евы, вы все должно быть в порядке. Это не подходит для многих приложений, так как ваш пул чисел прямо пропорционален пользовательскому вводу. Реализация этого может иметь свои собственные проблемы.

Люди, заинтересованные в RNG, уже сделали такие вещи, как:

  • Используйте веб-камеру, независимо от случайных всплесков на экране хеширования, когда этот грузовик проходит, что все случайные данные.
  • Как уже упоминалось, радиация
  • Атмосфера
  • Взаимодействие с пользователем (как указано)
  • Что происходит внутри системы EDG.

Защищенные семена происходят от природы.

изменить: Основываясь на том, что вы ищете, я бы предложил использовать агрегацию вашего облачного сервера EDG.

Ответ 16

Используйте random.org, которые, как они утверждают, предлагают истинные случайные числа кому-либо в Интернете, а также HTTP API, которые вы можете использовать, Они предлагают как бесплатные, так и платные услуги.

отказ от ответственности: я никоим образом не связан с random.org

Ответ 17

Вы можете зарабатывать случайные числа, генерируемые радиоактивным распадом. Сначала звучит немного странно, но из этого вы получаете реальные случайные числа.

Радиоактивный распад

Другая статья

Ответ 18

В Linux ответ будет /dev/random (в Windows я думаю, что эквивалент называется CryptGenRand).

Однако в облачной среде /dev/random может быть сильно истощен и может не хватить энтропии для ответа на ваш запрос.

Чтобы решить эту проблему, наша компания разрабатывает настоящий генератор случайных чисел, который может обеспечить хорошие случайные числа (квантового происхождения) тысячам серверов и виртуальных машин одновременно. Если устройство установлено в локальной сети вашего облачного центра обработки данных, все, что вам понадобится, - это наш дезамон, работающий на вашем компьютере. Этот деамон контролирует уровень /dev/random entropy и, когда требуется энтропия, делает запрос к устройству (по сети) и помещает полученные случайные данные в пул энтропии ядра.

Если вы хотите узнать больше о нашем решении, посетите наш веб-сайт (www.sqrtech.com) или свяжитесь с нами по адресу [email protected]

Жюльен

Ответ 19

ЭТО УГАДАЕТ! Crypto geeks, пожалуйста, исправьте, если я ошибаюсь

Официальный алгоритм UUID/GUID в этот момент возвращает результат, который запускается через криптографическую хеш-функцию - он принимает известную информацию, такую ​​как время, mac addr и счетчик, чтобы сформировать UUID/GUID, а затем запускает этот через криптографический хеш, чтобы гарантировать, что адрес mac не может быть извлечен.

Я считаю, что вы можете использовать XOR для количества бит, требуемого для семян, с достаточно хорошей гарантией того, что результирующее значение равномерно распределено по номеру, определенному вашим желаемым количеством бит. Примечание. Я не утверждаю, что это безопасно, только то, что это действие должно вызывать значение, которое равномерно распределяется по битовому пространству с течением времени.

Ответ 20

(((Идентификатор текущей ИД потока PI X) X текущий идентификатор процесса)/количество тиков) x pi