:RU: Криптография в основе блоков Cardano

Перевод статьи The cryptography behind Cardano blocks | Cardanians

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

image

Блоки создаются пулами

В сети Cardano ноды операторов стейк пулов отвечают за производство новых блоков. Каждый оператор пула должен сгенерировать несколько пар ключей и зарегистрироваться в качестве производителя блоков, чтобы стать лидером слота. Время делится на эпохи,и каждая эпоха делится на промежутки. Слот длится одну секунду. В каждой эпохе есть 432 000 слотов, так что эпоха длится 5 дней. Можно настроить частоту создания нового блока с помощью параметра d. В настоящее время он имеет значение, позволяющее сети создавать новый блок примерно каждые 20 секунд. Это означает, что примерно каждые 20 секунд какая-то нода становится лидером слота и может чеканить новый блок. В каждую эпоху создается примерно 21 600 блоков. Из-за случайности, которая реализована в протоколе, на самом деле может быть создано больше или меньше блоков.

В сети Cardano каждый зарегистрированный пул ежесекундно проверяет, является ли он лидером слота в данном слоте. Если да, то он может произвести новый блок и предоставить определенное доказательство, которое проверяется другими нодами сети. Чем выше ставка пула, тем чаще он может стать лидером слота. Выбор лидера слота основан на случайности. В идеальном случае в данном слоте выбирается только один лидер слота. Очевидно, что не может быть возможна ситуация, при которой в слоте может быть создано много новых валидных блоков.

В сетях PoW вычислительная мощность должна быть потреблена для создания нового блока. Все пулы соревнуются друг с другом, чтобы решить сложную головоломку, и очень вероятно, что только один пул преуспеет в данном цикле. В сетях PoW может случиться так, что два валидных блока могут быть произведены в цикле. Назовем их блоком A и блоком В. В следующем цикле пулы должны решить, к какому блоку они захотят добавить новый блок. В большинстве случаев пул начинает работать над новым блоком, как только создается валидный блок. Может случиться так, что несколько пулов захотят построить блок на A, так как они получили его до блока В. Противоположное может произойти с другими пулами, и они строятся на блоке B. Поскольку со временем добавляется несколько новых блоков, более длинная цепочка выигрывает и остается в блокчейне. Остальные блоки (после форка) будут брошенными (т.е. блоки не будут являться частью блокчейна, включая все транзакции). Обратите внимание, что консенсус PoW защищает сеть от создания множества валидных блоков в заданном цикле. Создание блока финансово дорого, так как примерно за 10 минут на решение головоломки тратится много электроэнергии.

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

Безопасность Cardano связана с ключами

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

Криптография используется также для POS консенсуса сети Cardano. Существует два типа ключей: ключи адреса и ключи ноды. В статье мы будем говорить в основном о ключах ноды, так как нас интересует производство блоков.

Операторы стейк пулов должны сгенерировать несколько пар ключей:

  • Пара холодных операционных ключей. Ключ предоставляет право подписывать блоки ключу KES.
  • Пара KES ключей. Ключ используется для подписания нового блока. Срок действия ключа периодически истекает, и генерируется новый.
  • Пара VRF ключей. Ключ используется для определения того, является ли нода лидером слота в текущем слоте. Нода делает это каждую секунду.

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

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

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

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

Когда и как создается новый блок?

Как мы уже говорили, решение какая именно зарегистрированная нода становится лидером слота, принимается рандомно, именно таким образом ей присваивается право производить новый блок. Все зарегистрированные ноды в сети Cardano используют VRF, чтобы автономно узнать, могут ли они создать новый блок в данном слоте. Больше нод могут стать лидерами слотов в данном слоте. Это не проблема, и мы покажем вам позже, как решается этот конфликт. Может случиться так, что за 20 секунд может быть создано больше блоков, так как лотерея - это случайный процесс, и ноды используют VRF независимо друг от друга. Новая фаза лотереи происходит каждую секунду, и новый блок может быть создан, например, в 5-м последующем слоте после добавления последнего. Однако это может занять больше времени, когда выбран новый лидер слота. Также возможно, что это может произойти в 30-м последующем слоте после добавления последнего. Примерно 21 600 блоков должны быть созданы в каждую эпоху, но это количество может быть больше или меньше. Специальный сетевой параметр может быть использован для уменьшения или увеличения скорости выбора лидера слота.

VRF - это своего рода функция, которая принимает несколько входов и производит выход. Функция VRF принимает ID слота, для которого принимается текущее решение, ключ подписи VRF (уникальный для каждой ноды) и nonce. Nonce - это хэш, который создается с использованием первых 2/3 выходов VRF из блоков, созданных в предыдущую эпоху. Эти входные данные обрабатываются функцией VRF и генерируется случайное число. На основе ставки пула вычисляется пороговое значение. Если случайное число меньше порогового значения, то нода является лидером слота. Обратите внимание, что размер ставки пула влияет на скорость, с которой пул становится лидером слота. Чем выше ставка, тем выше шансы.

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

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

Этот механизм защищает сеть от проблемы “ничего не поставлено на карту”. График лидеров слотов наперед неизвестен и не может быть предъявлен заранее. Пулы определяют лидерство слотов самостоятельно, а другие ноды узнают победителей лотереи по выбору лидера слота в момент получения ими новых блоков. Только владельцы пулов знают свои VRF секретные ключи, которые необходимы для определения лидера слота.

В случае, если ключи VRF и KES будут украдены злоумышленником, оператор может использовать операционный холодный ключ и создать новый сертификат. Конечно, после устранения проблемы безопасности и предотвращения очередного взлома ноды. Даже если оператор этого не сделает, срок действия ключа KES истечет. Операторам нужно держать операционный ключ в оффлайне точно так же, как пользователи хранят свои данные на листе бумаги. Не переживайте. Большинство операторов являются профессионалами и хорошо знают, как защитить криптографические секреты.

Злоумышленник не может просто случайно сгенерировать какую-то случайную фальшивую цепочку из одного и того же блока генезиса. Набор лидеров слотов всегда один и тот же от начала и до конца блокчейна, и он динамично развивается. Новый набор лидеров слотов для следующей эпохи может быть вычислен, когда известен nonce. Новый nonce известен только в тот момент, когда заканчивается текущая эпоха, и 2/3 блоков могут быть использованы для его вычисления. Многие мошеннические блоки могут быть созданы с целью попыток затопить сеть, но только блоки, созданные лидерами слотов и подписанные ими, пройдут процесс проверки.

Обратите внимание, что также в сетях PoW можно создать множество мошеннических блоков и затопить сеть. Процесс валидации очень похож. В блокчейн будут добавлены только блоки, содержащие доказательство того, что сложная вычислительная работа разрешена. Разница в том, что в случае с Cardano потребление электроэнергии очень низкое. Криптография используется по-разному для создания доказательства, которое позволяет валидаторам принимать вновь созданный блок. В сетях PoW чтобы создать доказательство должно быть потреблено электричество.

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

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

Предположим, что пул Алисы является лидером слота в слоте X и производит новый валидный блок. Пул Боба становится лидером слота в слоте X+1 и также производит новый действительный блок. Оба блока были произведены в очень похожее время и имеют одинаковый номер блока. Пул Алисы не знал о блоке Боба в момент создания своего собственного блока, и наоборот. Теперь пул Кэрол является лидером слота в слоте X+20 (никто не был лидером слота в слотах от X+2 до X+19). Пул Кэрол будет использовать блок Боба, так как он новее относительно слота. Есть еще одно простое правило, которое определяет победителя. Когда есть более валидные блоки, доступные с тем же номером блока, то нода выбирает блок с более высоким номером слота. Другими словами, самый последний блок. Другой блок будет отброшен.

В том случае, если блок Боба не успеет быстро распространиться по сети по времени и пул Кэрол получит только блок Алисы, то блок Боба будет не принят, несмотря на то, что он имеет более высокий номер слота. Это могло бы гипотетически произойти в нашем сценарии, если бы пул Кэрол узнал, что он является лидером слота в слоте X+3, а пул Алисы был бы географически ближе, чем пул Боба. Таким образом, блок Боба не прибыл бы вовремя в пул Кэрол. Пул Кэрол посчитал бы блок Алисы самым последним. Блок Алисы был бы добавлен в блокчейн, и за ним последовал бы блок Кэрол. Обратите внимание,что блок Кэрол увеличивает номер блока. Блок Боба прибудет в пул Кэрол позже, и он будет выброшен. По мере распространения блока Кэрол по сети блок Боба отбрасывается и другими нодами. Операторы пулов должны следить за тем, чтобы их блоки распространялись как можно быстрее, чтобы избежать ситуации, когда их блоки будут отброшены.

Вывод

Точно так же, как владелец закрытого ключа может подписать транзакцию, чтобы потратить монеты, пул может подписать новый блок. В обоих случаях подпись может быть проверена быстро и просто. Все ноды вынуждены хранить ключи на устройствах с доступом в интернет, и эти ключи могут быть украдены. Не исключено, что это может произойти, но, как вы смогли выяснить, существуют механизмы, которые мешают хакерам повредить сеть или переписать историю блокчейна. Более того, в будущем мы увидим некоторые улучшения, которые сделают Ouroboros PoS еще более безопасным.

// От переводчика: для получения дополнительных переведенных на русский язык статей о Cardano посетите русскоязычный раздел на форуме Cardano. Видеоролики о Cardano на русском можно найти на YouTube канале нашего замечательного амбасадора Тимура Сахабутдинова. Хотите поговорить или задать вопрос о Cardano по-русски? Приглашаем вас в наше уютное сообщество в Telegram . Оставайтесь на связи, все только начинается!