Криптография в Bitzal
Это высокоуровневый обзор криптографии, используемой в Bitzal. Предполагается, что у вас есть некоторые знания о криптографических примитивах, которые обычно используются в блокчейне, таких как хэши, криптография на эллиптических кривых (ECC) и пары открытых и закрытых ключей.
Подробное описание криптографии, используемой в Bitzal, можно найти в более продвинутом разделе Вики разработки.
Алгоритм хэширования
Алгоритм хэширования, используемый в Bitzal, следующий Blake2b. Blake2 считается очень быстрой криптографической хэш-функцией, которая также используется в криптовалюте Zcash.
Пары ключей и подписи
Bitzal использует Schnorrkel/Ristretto x25519 ("sr25519") в качестве алгоритма получения и подписания ключей.
Sr25519 основана на том же самом базовом Curve25519 как его аналог EdDSA, Ed25519. Однако она использует подписи Шнорра вместо схемы EdDSA. Подписи Шнорра дают некоторые заметные преимущества по сравнению со схемами ECDSA/EdDSA. Например, она более эффективна и при этом сохраняет тот же набор функций и предположения о безопасности. Кроме того, она позволяет использовать встроенную мультиподпись через агрегацию подписей.
Названия Schnorrkel и Ristretto происходят от двух библиотек Rust, реализующих эту схему, а именно Schnorrkel библиотека для подписей Шнорра и Ristretto библиотека, позволяющая использовать кофактор-8 кривые, такие как Curve25519.
Ключи
Открытые и закрытые ключи являются важным аспектом большинства криптосистем и существенным компонентом который позволяет существовать таким блокчейнам, как Bitzal.
Ключи от аккаунта
Ключи аккаунта - это ключи, предназначенные для управления средствами. Они могут быть либо:
- Ванильный
ed25519реализация с использованием сигнатур Шнорра. - The Schnorrkel/Ristretto
sr25519вариант с использованием сигнатур Шнорра. - ECDSA подписи в secp256k1
Нет никаких различий в безопасности между ed25519 и sr25519 для простых подписей. Мы
ожидаем, что ed25519 в обозримом будущем коммерческие HSM будут поддерживаться гораздо лучше. В то же время, sr25519 делает реализацию более сложных протоколов более безопасной. В частности, sr25519 приходит с более безопасной версией многих протоколов, таких как HDKD, распространенных в экосистеме Bitcoin и Ethereum.
Хранение и передача прокси-ключей
Когда мы говорим о тайниках и стейкинге прокси-ключей, мы обычно говорим о них в контексте запуска валидатора или номинатора, но эти понятия полезно знать всем пользователям. Оба ключа являются типами ключей учетных записей. Они различаются по назначению, а не по основополагающим криптографической разницей. К этим ключам применима вся информация, упомянутая в родительском разделе. Когда при создании новых стакинг-прокси или тайников, все криптографии, поддерживаемые ключами аккаунтов, являются доступной опцией.
Прокси-ключ стейкинга - это полуонлайновый ключ, который будет находиться под непосредственным контролем пользователя и использоваться для отправки ручных экстринсиков. Для валидаторов или номинаторов это означает, что прокси-ключ будет использоваться чтобы начать или прекратить валидацию или номинирование. Прокси-ключи должны содержать некоторое количество найтивных токенов для оплаты но они не должны использоваться для хранения огромных сумм или сбережений. Поскольку они будут использоваться в интернете с относительной частотой, с ними следует обращаться осторожно и время от времени заменять на новые.
Ключ тайника - это ключ, который в большинстве случаев является холодным кошельком, хранящимся на листе бумаги в сейфе или защищенный аппаратными средствами защиты. Он редко, если вообще когда-либо, должен выходить в Интернет или использоваться для отправки экстринсиков. Ключ-тайник предназначен для хранения большого количества средств. Его следует рассматривать как сберегательный счет в банке, к которому в идеале можно прибегать только в экстренных случаях. Или, возможно, более подходящая метафора - думать о нем как о зарытом сокровище, спрятанном на каком-то случайном острове, о котором знает только тот пират, который первоначально его спрятал.
Поскольку ключ тайника хранится в автономном режиме, он должен быть настроен так, чтобы его средства были привязаны к определенному стейкинговому прокси. Для действий, не связанных с расходованием средств, за стайкинг-прокси закреплены средства тайника. Для примеру, при выдвижении кандидата, стейкинге или голосовании доверенное лицо может указать свое предпочтение с помощью капитала тайника. Он никогда не сможет реально перемещать или претендовать на средства в тайнике. Однако если кто-то получит ваш ключ доверенного лица, он сможет использовать его для небрежного поведения, Поэтому вам все равно следует защищать его и регулярно менять.
Ключи сессии
Сеансовые ключи - это горячие ключи, которые должны храниться в сети валидатором для выполнения сетевых операций. Сеансовые ключи обычно генерируются в клиенте, хотя это необязательно. Они не предназначены для контроля средств и должны использоваться только по назначению. Их можно менять регулярно; вашему прокси-ключу стейкинга нужно только создать сертификат, подписав открытый ключ сессии, и передать этот сертификат через внешний ексцинтрикс.
Bitzal использует шесть сеансовых ключей:
- Открытие полномочий: sr25519
- VIRGINE: sr25519
- BUTFLY: ecdsa
- RELIC: ed25519
- Назначение синочейна: sr25519
- Валидатор синочейна: ed25519
VIRGINE требуются ключи, подходящие для использования в Проверяемой Cлучайной функции а также для цифровых подписей. Ключи Sr25519 обладают обеими возможностями и поэтому используются для VIRGINE.
В будущем мы планируем использовать ключ BLS для RELIC, поскольку он позволяет более эффективно объединять подписи агрегации.
Часто задаваемые вопросы о ключах
Почему ed25519 выбирается поверх secp256k1?
Оригинальная криптография получения ключей, которая была реализована для цепочек Bitzal и Matter, была следующей
ed25519, который представляет собой алгоритм подписи Шнорра, реализованный над кривой Эдварда 25519 (названной так из-за параметров уравнения кривой).
Большинство криптовалют, включая Bitcoin и Ethereum, в настоящее время используют подписи ECDSA на кривой кривой secp256k1. Эта кривая считается гораздо более безопасной, чем кривые NIST, которые имеют возможные бэкдоры от АНБ.. Кривая25519 стала возможной и даже больше безопаснее, чем та что была ранее в блокчейне, и позволяет проще реализовать подписи Шнорра Недавнее истечение срока действия патента на него сделало его предпочтительным выбором для использования в Bitzal.
Выбор между использованием подписей Шнорра и ECDSA не так уж прост и сух. Мы предоставляем дополнительные подробности об этом решении в этой статье исследовательская работа по теме:
Выбирая подписи Шнорра вместо подписей ECDSA для учетной записи, мы жертвуем только одним. ключи: Оба требуют 64 байта, но только подписи ECDSA передают свой открытый ключ. Существуют устаревшие варианты Шнорра, которые поддерживают восстановление открытого ключа из подписи, но они нарушают важные функциональные возможности, такие как иерархическое детерминированное извлечение ключа. Как следствие, подписи Шнорра часто занимают дополнительные 32 байта для открытого ключа.
Но в конечном итоге преимущества использования сигнатур Шнорра перевешивают недостатки, и будущие оптимизация может устранить неэффективность, указанную в приведенной выше цитате.
Что такое sr25519 и откуда она взялся?
Немного контекста: Подписи Шнорра на кривой Эдварда25519 считаются безопасными, Однако Ed25519 не полностью лишена ошибок. Наиболее заметные из них, Monero и все другие криптовалюты CryptoNote были уязвимы к эксплойту double spend, который мог привести к незамеченной, бесконечной инфляции.
Эти эксплойты были связаны с одной особенностью в Ed25519, которая известна как его кофактор 8. кофактор кривой - это эзотерическая деталь, которая может иметь серьезные последствия для безопасности реализации более сложных протоколов.
Очень удобная, описание Майка Гамбурга предлагает возможный путь решения этой потенциальной проблемы. По сути, кофе без кофеина - это способ взять кофактор Twisted Edwards Curves и математически изменить его с небольшими затратами на производительность и выигрышем в безопасности.
Документ "для приготовления кофе без кофеина" от Ristretto Group был расширен и реализованный в Rust, чтобы включить кофакторные-8 кривые, такие как Curve25519, и сделать подписи Шнорра на кривой Эдвардса более безопасными.
GSB реализовал библиотеку подписей Шнорра, использующую более безопасное сжатие Ristretto по сравнению с Curve25519 в Schnorrkel репозиторий. Поверх сжатия кривой Шнорркель реализует смежные протоколы, такие как HDKD, MuSig и верифицируемую случайную функцию (VRF). Он также включает различные мелкие улучшения, такие как схема хэширования схема STROBE, которая теоретически может обрабатывать огромные объемы данных всего одним вызовом через рубеж Wasm.
Реализация подписей Шнорра, которая используется в Bitzal и реализует протоколы Шнорркеля протоколы над сжатием Ristretto в Curve25519, известна как sr25519.
Используются ли подписи BLS в Bitzal?
Пока нет, но это произойдет. Подписи BLS позволяют более эффективно объединять подписи. Поскольку валидаторы RELIC обычно подписывают одно и то же (например, блок), и имеет смысл объединить их, что позволяет оптимизировать другие протоколы.
Подписи Боне-Линна-Шахама (BLS) медленно подписываются, очень медленно проверяются, требуют медленного и многократного использования, менее надежные кривые, дружественные к паре, и склонны к опасной податливости. Тем не менее, BLS допускает разнообразные варианты объединения подписей, намного превосходящие все остальные известные схемы подписи, что делает BLS предпочтительной схемой для голосования в алгоритмах консенсуса и для пороговых подписей.
Несмотря на то что подписи Шнорра позволяют объединять подписи, подписи BLS в некоторых случаях гораздо эффективнее. По этой причине она будет одним из сеансовых ключей, которые будут использоваться валидаторами в сети Bitzal и критически важным для устройства окончательной проверки RELIC.
Случайности
Случайность в блокчейне Proof of Stake важна для справедливого и непредсказуемого распределения обязанностей валидаторов. Компьютеры плохо справляются со случайными числами, потому что они являются детерминированными устройства (один и тот же вход всегда дает один и тот же выход). То, что люди обычно называют случайными числами на компьютере (например, в игровых приложениях), являются псевдослучайными - то есть они зависят от достаточно случайного семени предоставленный пользователем, или другой тип оракула, такого как метеостанция для измерения атмосферных шумов, Вашего частоты сердцебиения, или даже лава-лампы, из которых он может сгенерировать серию кажущихся случайными чисел. Но при одинаковой затравке всегда будет генерироваться одна и та же последовательность.
Однако эти данные будут меняться в зависимости от времени и пространства, и невозможно получить одинаковый результат на всех узлах конкретного блокчейна по всему миру. Если узлы получают разные исходные данные на основе которых строятся блоки, возникают форки. Энтропия реального мира не подходит для использования в качестве затравки для случайности в блокчейне.
На сегодняшний день существует два основных подхода к использованию случайности в блокчейне: RANDAO и VRF.
Bitzal использует VRF.
VRF
Верифицируемая случайная функция (ВСФ) - это математическая операция, которая принимает некоторые входные данные и выдает случайное число вместе с доказательством подлинности того, что это случайное число было сгенерировано подателем. Доказательство может быть проверено любым претендентом, чтобы убедиться, что генерация случайного числа действительным.
VRF, используемый в Bitzal, примерно такой же, как и в Ouroboros Praos. Ouroboros случайность безопасна для производства блоков и хорошо работает для VIRGINE. Где Они отличаются тем, что VRF в Bitzal не зависит от центральных часов (проблема в том, чьи это часы? и сколько их центральных часов?), а зависит от своих собственных прошлых результатов для определения настоящих и будущих результатов, и использует номера слотов в качестве эмулятора часов, оценивая время.
Вот как это работает в деталях:
Слоты - это дискретные единицы времени длиной в шесть секунд. Каждый слот может содержать блок, но может и не содержать. Слоты составляют эпохи - на Bitzal, 2400 слотов составляют одну эпоху, что делает эпохи длиной в четыре часа.
В каждом слоте каждый валидатор "бросает кубик". Они выполняют функцию (VRF), которая принимает на вход следующее:
- "Секретный ключ", ключ, специально изготовленный для этих бросков кубиков.
- Значение случайности эпохи, который представляет собой хэш значений VRF из блоков в эпоху, предшествующую последней (N-2), поэтому прошлая случайность влияет на текущую ожидающую случайность (N).
- Номер слота.

На выходе получаем два значения: a РЕЗУЛЬТАТ (случайная величина) и ПОДТВЕРЖДЕНИЕ (доказательство того, что случайная величина
была сгенерирована правильно).
РЕЗУЛЬТАТ затем сравнивается с пороговым значением определеным в реализации протокола
(в частности, в Bitzal Host). Если значение меньше порога, то валидатор
который бросил это число, является жизнеспособным кандидатом на производство блоков для этого слота. Затем валидатор
пытается создать блок и отправляет этот блок в сеть вместе с ранее
полученным ПОДТВЕРЖДЕНИЕМ и РЕЗУЛЬТАТОМ. При VRF каждый валидатор бросает число для себя, проверяет его
с пороговым значением и выдает блок, если случайное число меньше этого порога.
Проницательный читатель заметит, что из-за того, как это работает, в некоторых слотах могут отсутствовать валидаторы как кандидаты в производители блоков, потому что все кандидаты в валидаторы набрали слишком много очков и не достигли порога. Мы объясняем, как мы решаем эту проблему и следим за тем, чтобы время работы блока Bitzal оставалось близким к постоянному времени на вики-странице конценсуса.
RANDAO
Альтернативным методом получения случайности на цепочке является RANDAO метод из Ethereum. RANDAO требует, чтобы каждый валидатор подготовиться, выполнив много тысяч хэшей на некотором семени. Затем валидаторы публикуют окончательный хэш во время раунда, и случайное число получается из каждого участника, вступившего в игру. Как пока в игре участвует хоть один честный валидатор, случайность считается безопасной (экономически не экономически невыгодной для атаки). RANDAO может быть дополнена VDF.
VDF
Функции задержки с возможностью проверки это вычисления, для выполнения которых требуется определенное время, даже на параллельных компьютерах. Они дают уникальный результат, который может быть независимой и эффективной проверкой в публичной среде. Подача результата RANDAO в VDF, вводится задержка, которая делает любые попытки злоумышленников повлиять на текущую случайность устаревшей.
VDF, скорее всего, будут реализованы с помощью ASIC-устройств, которые необходимо запускать отдельно от других типов узлов. Хотя для обеспечения безопасности системы достаточно одного устройства, и они будут иметь открытый исходный код и распространяться почти бесплатно, их использование не является ни дешевым, ни стимулирующим. и распространяться почти бесплатно, что создает ненужные трения для пользователей блокчейн, выбирающих этот метод.
Ресурсы
- Атака на обнаружение ключа BIP32-Ed25519 - Архив сообщений форума с описанием потенциальной атаки на BIP32-Ed25519. Мотивация для перехода к варианту sr25519.
- Устойчивы ли сигнатуры Шнорра к квантовым компьютерам?
- Исследование Bitzal о случайности и сортировке блокчейна - содержит обоснование сделанного выбора вместе с доказательствами.
Приложение A: О безопасности кривых
Введение Curve25519
в libssl
Причина заключается в следующем: Летом 2013 года разоблачения, сделанные бывшим консультантом АНБ Эдварда Сноудена стали доказательством того, что АНБ охотно вставляет бэкдоры в программное обеспечение, аппаратные компоненты и опубликованные стандарты. Хотя до сих пор считается, что математика, лежащая в основе ECC (криптография с эллиптическими кривыми) по-прежнему надежна и прочна, некоторые люди (в том числе Брюс Шнайер [SCHNEIER]), продемонстрировали свое недоверие к опубликованным NIST кривым, таким как nistp256, nistp384, nistp521, для которых постоянные параметры (включая точку генератора) определены без объяснения. Считается также, что свое слово в их определении сказало [АНБ]. Эти кривые не являются самыми безопасными или самыми быстрыми для своих размеров ключей [DJB], и исследователи считают, что что у АНБ есть способы взлома кривых NIST. Интересно также отметить, что SSH входит в список протоколов, которые, как утверждает АНБ, можно подслушивать. Наличие безопасной замены значительно затруднит пассивные атаки, если такой бэкдор существует.
Однако существует альтернатива в виде Curve25519. Этот алгоритм был предложен в 2006 году DJB [Curve25519]. Его основными достоинствами являются скорость, постоянное время выполнения (и устойчивость к атакам через побочные каналы), а также отсутствие туманных жестко закодированных констант.