Cloudflare представил распределённый генератор случайных чисел

Компания Cloudflare представила сервис League of Entropy, для обеспечения работы которого сформирован консорциум из нескольких организаций, заинтересованных в предоставлении качественных случайных чисел. В отличие от существующих централизованных систем League of Entropy не полагается на один источник и использует для генерации случайной последовательности энтропию, получаемую от нескольких не связанных с собой генераторов, контролируемых разными участниками проекта. Благодаря распределённому характеру проекта компрометация или подлог одного или двух из источников не приведёт к компрометации финального случайного числа.

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

Публичные случайные числа генерируются раз в 60 секунд. Каждое число связывается со своим номером последовательности (round), по которому в любой момент и с любого сервера-участника можно получить когда-то сгенерированное значение. Подобные случайные числа могут применяться в распределённых системах, криптовалютах и блокчейнах, в которых разные узлы должны иметь доступ к единому генератору случайных чисел (например, при формировании доказательства проделанной работы), а также при проведении различных лотерей и для формирования случайных выборок в процессе аудита прохождения выборов.

Для работы с сервисом и для развёртывания собственных узлов предложен инструментарий Drand, написанный на языке Go и поставляемый под лицензией MIT. Drand выполняется в форме фонового процесса, который связывается с участвующими в распределённой сети внешними генераторами и коллективно формирует сводное случайное значение. Сводное значение генерируется с использование методов пороговой криптографии и билинейного сопряжения. Генерация сводного случайного значения может быть выполнена на системе пользователя без привлечения централизованных агрегаторов.

Drand также может применяться для доставки клиентам локально сгенерированных приватных случайных чисел. Для передачи случайного числа применяется схема шифрования ECIES, в рамках которой клиент генерирует закрытый и открытый ключ. Открытый ключ передаётся на сервер с Drand. Случайное число шифруется с использованием данного открытого ключа и может быть просмотрено только клиентом, владеющим закрытым ключом. Для обращения к серверам может использоваться утилита «drand» (например, «drand get public group.toml», где group.toml список узлов для опроса) или Web API (например, можно использовать «curl https://drand.cloudflare.com/api/public» или обращаться из JavaScript при помощи библиотеки DrandJS). Метаданные запроса отправляются в формате TOML, а ответ выдаётся в JSON.

В настоящее время к инициативе League of Entropy присоединились пять компаний и организации, которые предоставили доступ к своим генераторам энтропии. Включённые в проект участники находятся в разных странах и используют разные методы получения энтропии:

  • Cloudflare, LavaRand, случайные значения формируются на основе непредсказуемых потоков жидкости в лавовых лампах, изображения которых подаются в качестве входной энтропии для CSPRNG (Cryptographically Secure PseudoRandom Number Generator);
  • EPFL (Федеральная политехническая школа Лозанны), URand,
    применяется штатный локальный генератор /dev/urandom, использующий в качестве источников энтропии клавиатурный ввод, движение мыши, потоки трафика и т.п.

  • Чилийский университет, UChile, в качестве источника энтропии применяется сеть из сейсмических датчиков, а также данные из радиоэфира, активности в Twitter, изменений блокчейна Ethereum и самодельного аппаратного генератора RNG;
  • Kudelski Security, ChaChaRand, предоставляет CRNG (Cryptographic Random Number Generator) на основе применения шифра ChaCha20;
  • Protocol Labs, InterplanetaryRand, случайные данные извлекаются из уловителей шумов и комбинируются с Linux PRNG и встроенным в CPU генератором псевдослучайных чисел.

В настоящее время независимыми участниками запущено 8 публичных точек доступа к API, через которые можно узнать как текущее сводное случайное число (например, «curl https://drand.cloudflare.com/api/public»), так и определить значение на определённый момент в прошлом («curl https://drand.cloudflare.com/api/public?round=1234»):

  • https://drand.cloudflare.com:443
  • https://random.uchile.cl:8080
  • https://drand.cothority.net:7003
  • https://drand.kudelskisecurity.com:443
  • https://drand.lbarman.ch:443
  • https://drand.nikkolasg.xyz:8888
  • https://drand.protocol.ai:8080
  • https://drand.zerobyte.io:8888

Источник: opennet.ru