Подписи BLS и схемы агрегирования подписей
Изучите спаривания BLS12-381, агрегирование подписей и то, как Ethereum 2.0 использует BLS для снижения нагрузки на валидаторы.
«Подписи BLS и схемы агрегирования подписей» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.
Билинейные спаривания: математическая основа
Подписи BLS основаны на билинейных спариваниях — математической операции над эллиптическими кривыми. Спаривание e: G1 x G2 -> GT отображает пары точек из двух групп (G1, G2) в целевую группу GT. Критически важным свойством является билинейность: e(aP, bQ) = e(P, Q)^(ab) для скаляров a, b и точек P, Q. Благодаря этому можно проверять взаимосвязи между элементами групп, не зная их дискретных логарифмов. Наиболее часто используемая в криптографии кривая для спариваний — BLS12-381, выбранная за 128-битный уровень безопасности, небольшой размер элементов групп (48 байт в G1, 96 байт в G2) и эффективное вычисление спариваний.
Конструкция подписи BLS
Подпись BLS (Boneh-Lynn-Shacham) работает следующим образом. Генерация ключей: закрытый ключ x — случайный скаляр; открытый ключ PK = x * G, где G — порождающая точка G2. Подписание: для сообщения m вычисляется H = hash-to-curve(m) в G1, затем sigma = x * H. Подпись sigma представляет собой одну точку G1 (48 байт на BLS12-381). Проверка: проверяется e(sigma, G) == e(H, PK). Благодаря билинейности e(x*H, G) = e(H, G)^x = e(H, x*G) = e(H, PK). Безопасность опирается на предположение co-CDH: вычислить x*H, имея H и x*G, трудно без знания x.
Агрегация подписей: ключевое нововведение
Подписи BLS поддерживают неинтерактивную агрегацию: имея подписи sigma_1, ..., sigma_n для сообщений m_1, ..., m_n, созданные с использованием открытых ключей PK_1, ..., PK_n, агрегатор вычисляет sigma_agg = sigma_1 + sigma_2 + ... + sigma_n (сложение точек эллиптической кривой). Агрегированная подпись представляет собой одно значение размером 48 байт независимо от n. Проверка требует n+1 операций спаривания: проверяется e(sigma_agg, G) == product(e(H_i, PK_i)). В распространённом случае, когда все подписанты подписывают одно и то же сообщение, проверка сводится к двум спариваниям: e(sigma_agg, G) == e(H, sum(PK_i)).
Атака с подменным ключом и защита
Наивная агрегация BLS уязвима для атаки с подменным ключом. Противник регистрирует PK_adv = x_adv*G - PK_honest. Агрегированный ключ PK_agg = PK_honest + PK_adv = x_adv*G, поэтому противник полностью им управляет. Варианты защиты: (1) доказательство владения (PoP): каждый подписант доказывает знание своего закрытого ключа, подписывая собственный открытый ключ во время регистрации; (2) расширение сообщения: открытый ключ каждого подписанта включается в его сообщение; (3) делинеаризация (BGLS): перед агрегацией каждый открытый ключ умножается на hash(PK_i, all_PKs), что нарушает линейность, позволяющую провести атаку. Ethereum использует PoP при регистрации валидаторов.
Использование BLS в Ethereum 2.0
Консенсусный слой Ethereum (Beacon Chain) широко использует агрегацию BLS12-381. В каждом слоте около 400 000+ активных валидаторов подтверждают вершину цепи. Без агрегации для хранения всех подписей требовалось бы примерно 400 000 * 96 байт = 38 MB на слот. При агрегации BLS для каждого комитета (обычно 512 валидаторов) каждый комитет создаёт одну агрегированную подпись размером 96 байт, сокращая общий объём данных подписей до нескольких килобайт на слот. Тело блока Beacon Chain содержит агрегированные подтверждения: битовое поле, указывающее, какие валидаторы участвовали, а также одну агрегированную подпись BLS для каждого комитета.
Производительность BLS и ECDSA
Операции с подписями BLS имеют иные характеристики производительности, чем операции с ECDSA. Создание подписи BLS требует одного хеширования в точку кривой и одного умножения на скаляр (примерно 1 мс на современном оборудовании). Проверка BLS требует двух операций спаривания (примерно 3–5 мс каждая, то есть около 6–10 мс суммарно). Создание подписи ECDSA требует одного умножения точки (примерно 0,2 мс); проверка требует двух умножений точек (примерно 0,4 мс). Проверка BLS медленнее для одной подписи, но значительно быстрее при агрегации: проверка 1000 объединённых подписей BLS требует всего около 10 мс против примерно 400 мс для 1000 отдельных проверок ECDSA. Порог перехода находится примерно на уровне 2–3 подписей.
Пороговые подписи BLS
Пороговые подписи BLS расширяют агрегацию за счёт разделения секрета. В пороговой схеме (t, n) закрытый ключ делится на n долей с использованием разделения секрета Шамира над полем скаляров BLS. Каждый участник i, имеющий долю, создаёт частичную подпись sigma_i = sk_i * H(m). Любые t частичных подписей можно объединить с помощью коэффициентов интерполяции Лагранжа: sigma = sum(lambda_i * sigma_i). Результат идентичен подписи, созданной исходным ключом, но ни одна сторона никогда не владеет полным ключом. Пороговые подписи BLS используются в технологии распределённых валидаторов (DVT), кошельках MPC и сервисах порогового подписания, таких как Fireblocks и Web3Auth.
BLS в сети Filecoin
Filecoin использует подписи BLS в своей системе доказательств хранения и для подписания транзакций. Майнеры хранения объединяют несколько доказательств с помощью агрегации BLS, снижая затраты на проверку в блокчейне. Пул сообщений Filecoin также объединяет несколько подписей транзакций в одну агрегированную подпись, уменьшая размер блоков. Реализация Filecoin использует проект стандарта IETF BLS (хеширование в точку кривой согласно RFC 9380, кривая BLS12-381) с вариантом минимального размера открытого ключа, в котором открытые ключи находятся в G1 (48 байт), а подписи — в G2 (96 байт), то есть расположены противоположно соглашению Ethereum.
BLS в Zcash и протоколах конфиденциальности
Хотя Zcash в основном использует доказательства Groth16 zk-SNARK, спаривания BLS лежат в основе многих конструкций доказательств с нулевым разглашением на основе спариваний. Уравнение проверки Groth16 представляет собой проверку спаривания: e(A, B) = e(alpha, beta) * e(vk, C), где A, B, C — элементы доказательства. Полиномиальные обязательства KZG (используемые в транзакциях Ethereum с большими фрагментами данных EIP-4844 и в различных системах свёртки ZK) также опираются на спаривания BLS12-381: обязательство для полинома f(x) имеет вид C = f(tau)*G, а доказательства вычисления значения проверяются с помощью спаривания. BLS12-381 была специально выбрана за эффективные операции спаривания и 128-битный уровень безопасности.
Агрегируемые подписи помимо BLS
BLS — не единственная схема агрегируемых подписей. Подписи Schnorr поддерживают агрегацию ключей (MuSig2, используемую в Bitcoin Taproot), при которой несколько подписантов создают одну подпись Schnorr, неотличимую от подписи одного подписанта. FROST (пороговая схема Schnorr с гибкой оптимизацией раундов) предоставляет пороговые подписи Schnorr в два раунда. Однако агрегация Schnorr требует взаимодействия между подписантами, в отличие от неинтерактивной агрегации BLS, поэтому она хуже подходит для больших наборов валидаторов. BLS остаётся предпочтительным вариантом для блокчейн-консенсуса благодаря неинтерактивной агрегации и эффективной пакетной проверке.
Постквантовые перспективы BLS
Подписи BLS основаны на спариваниях эллиптических кривых, уязвимых для квантовых компьютеров, выполняющих алгоритм Шора. Достаточно мощный квантовый компьютер сможет вычислять дискретные логарифмы в BLS12-381, взламывая все существующие подписи BLS и лишая безопасность консенсуса Ethereum защиты. Сроки неизвестны, однако NIST оценивает появление криптографически значимых квантовых компьютеров через 15–20 лет. Ethereum и другие зависящие от BLS цепочки должны будут перейти на постквантовые схемы подписей (CRYSTALS-Dilithium/ML-DSA или SPHINCS+/SLH-DSA) до того, как эта угроза станет реальностью. Для миграции потребуются изменения на уровне протокола, затрагивающие регистрацию валидаторов, форматы аттестаций и агрегированную проверку.
Тест по агрегации BLS
Каково основное преимущество агрегации подписей BLS на уровне консенсуса Ethereum?
Повторение темы подписей BLS
В подписях BLS используются билинейные спаривания на кривых BLS12-381. Подписи представляют собой 48-байтовые точки G1, а открытые ключи — 96-байтовые точки G2 в принятом в Ethereum соглашении. Неинтерактивная агрегация объединяет n подписей в одно 48-байтовое значение, которое проверяется с помощью n+1 спариваний. Атака с использованием поддельного ключа предотвращается доказательством владения при регистрации валидатора. Ethereum использует BLS, чтобы сжимать аттестации более 400 000 валидаторов для каждого слота до нескольких килобайтов. Пороговые подписи BLS позволяют создавать распределённых валидаторов без единого держателя ключа. BLS основан на спариваниях и не обеспечивает постквантовую безопасность, поэтому в будущем потребуется миграция.
Часто задаваемые вопросы
Урок «Подписи BLS и схемы агрегирования подписей» бесплатный?
Да — полный текст урока «Подписи BLS и схемы агрегирования подписей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.
Чему я научусь в уроке «Подписи BLS и схемы агрегирования подписей»?
Изучите спаривания BLS12-381, агрегирование подписей и то, как Ethereum 2.0 использует BLS для снижения нагрузки на валидаторы. Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cryptology Academy?
Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Подписи BLS и схемы агрегирования подписей»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cryptology Academy?
Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Криптографические механизмы Proof-of-Stake
- Протоколы BFT: PBFT и Tendermint
- Проверяемые случайные функции в консенсусе
- Подписи BLS и схемы агрегирования подписей