Блокчейн

BLS подписи и агрегация

Представьте: 1 000 000 валидаторов Ethereum каждые 12 секунд голосуют за блок. Если каждый голос - отдельная подпись в 65 байт, сеть утонет в мегабайтах подписей. Но что если любое количество подписей можно сжать в одну, размером 48 байт? BLS подписи превращают невозможную задачу масштабирования Proof-of-Stake в реальность.

  • **Ethereum Beacon Chain** - каждый слот агрегирует подписи 128+ валидаторов в одну 48-байтную подпись, экономя ~99.9% трафика
  • **Sync Committees** - 512 BLS подписей агрегируются для лёгких клиентов, позволяя проверять блоки на телефоне без скачивания всей цепи
  • **Zcash Sapling** - BLS12-381 используется для zero-knowledge proofs, обеспечивая приватные транзакции с эффективными pairing-based доказательствами

Предварительные знания

  • Elliptic Curves (ECC)

BLS подписи: точка на кривой

В уроке про ECC мы узнали, что приватный ключ - это число `sk`, а публичный ключ - точка `pk = sk * G` на эллиптической кривой. **BLS** (Boneh-Lynn-Shacham, 2001) идёт дальше: подпись тоже становится точкой на кривой.

Идея: берём сообщение `m`, хешируем его **прямо в точку на кривой** `H(m)`, а затем умножаем на приватный ключ: `σ = sk * H(m)`. Результат - одна точка. Вот и вся подпись.

**Сравнение размеров подписей:** ECDSA (secp256k1) - 64 байта + 1 байт recovery, EdDSA (Ed25519) - 64 байта, **BLS - 48 байт**. BLS подпись самая короткая, потому что это одна сжатая точка на кривой, а не пара чисел (r, s) как в ECDSA.

ПараметрECDSAEdDSABLS
Размер подписи65 байт64 байта48 байт
Размер публичного ключа33 байта32 байта96 байт
ВерификацияБыстраяБыстраяМедленная (pairing)
АгрегацияНетНетДа
ДетерминированностьНет (нужен nonce k)ДаДа

**Ключевой trade-off**: BLS подпись короче, но верификация одной подписи в ~10 раз медленнее, чем ECDSA. Выигрыш BLS проявляется именно при агрегации - когда проверяем сотни подписей разом.

Почему BLS подпись занимает всего 48 байт, в то время как ECDSA - 65 байт?

Агрегация: N подписей -> одна

Самое мощное свойство BLS - **агрегация**. Если у нас есть N подписей σ₁, σ₂, ..., σₙ от разных людей на разные (или одинаковые) сообщения, мы можем **сложить** их в одну подпись: `σ_agg = σ₁ + σ₂ + ... + σₙ`.

Результат - одна точка на кривой, те же 48 байт. Не важно, агрегировали мы 2 подписи или 200 000 - размер один и тот же.

**Batch verification**: при проверке агрегированной подписи мы делаем N+1 pairings вместо 2N. Но есть ещё более быстрый способ - **random linear combination**. Выбираем случайные коэффициенты r₁...rₙ и проверяем: `e(G, Σrᵢσᵢ) == Πe(rᵢ·pkᵢ, H(mᵢ))`. Это снижает вероятность ложного срабатывания до пренебрежимо малой.

Агрегация работает благодаря **линейности** операции умножения точки на скаляр. Если `σᵢ = skᵢ * H(mᵢ)`, то сумма подписей `σ₁ + σ₂ = sk₁ * H(m₁) + sk₂ * H(m₂)`. Bilinear pairing позволяет проверить это равенство, не зная приватных ключей.

**Rogue key attack**: злоумышленник может выбрать свой публичный ключ как `pk' = pk_злоумышленника - pk_жертвы`, и тогда агрегированная подпись будет верифицироваться, хотя жертва ничего не подписывала. Защита: **proof of possession** (PoP) - каждый участник должен доказать, что знает свой приватный ключ, подписав свой публичный ключ.

В блоке Ethereum содержится 128 аттестаций валидаторов. Сколько байт занимают подписи при использовании BLS агрегации?

Bilinear Pairings: математика за кулисами

Всё, что мы описали - короткие подписи, агрегация, верификация без приватного ключа - работает благодаря математической конструкции под названием **bilinear pairing** (билинейное спаривание).

Pairing - это функция `e: G₁ × G₂ → G_T`, которая берёт две точки из двух разных групп на эллиптической кривой и отображает их в элемент третьей группы (мультипликативной). Ключевое свойство - **билинейность**.

Интуиция: pairing работает как «двухвходовой смеситель». Вы кладёте в него две точки с кривой и получаете число. Фокус в том, что если одну из точек умножить на скаляр `a`, результат смешивания изменится ровно так же, как если бы вы умножили на `a` другую точку. Это позволяет проверять подписи: мы видим `σ` и `pk`, но не знаем `sk` - а pairing всё равно подтверждает связь.

**Кривая BLS12-381**: стандарт для BLS подписей в блокчейнах. Число 12 - степень embedding degree (определяет как строится pairing), 381 - размер базового поля в битах. Разработана Шоном Бау (Sean Bowe) в 2017 году специально для эффективных pairing-based протоколов.

ОперацияВремя (BLS12-381)Сравнение
Scalar multiplication G₁~0.5 мсСопоставимо с ECDSA
Scalar multiplication G₂~1.5 мсВ 3 раза медленнее G₁
Pairing e(P, Q)~1.5 мсСамая дорогая операция
Агрегация (сложение точек)~0.01 мсПочти бесплатно
Verify 1 BLS подписи~3 мс2 pairings
Verify 128 агрегированных~5 мс129 pairings, но с оптимизациями

Какое свойство bilinear pairing делает возможной верификацию BLS подписи без знания приватного ключа?

BLS в Ethereum Beacon Chain

Ethereum перешёл на Proof-of-Stake (The Merge, сентябрь 2022), и BLS подписи стали **критической инфраструктурой** сети. На момент 2025 года в сети ~1 000 000 валидаторов. Каждые 12 секунд (один slot) случайный валидатор предлагает блок, а комитет из 128+ валидаторов должен его подтвердить (аттестовать).

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

**Sync Committee** - ещё одно применение BLS в Ethereum. 512 валидаторов выбираются на ~27 часов и подписывают заголовки блоков. Их агрегированная подпись позволяет **лёгким клиентам** (телефоны, браузеры) проверять блоки без скачивания всей цепочки. Без BLS агрегации лёгкие клиенты были бы невозможны при таком количестве валидаторов.

Масштаб: за одну эпоху (32 слота) создаётся ~32 агрегированных аттестации. Каждая включает подписи от десятков тысяч валидаторов. Без BLS агрегации Beacon Chain потребовал бы в сотни раз больше пропускной способности - и Proof-of-Stake с миллионом валидаторов был бы практически нереализуем.

**Оптимизация при одинаковом сообщении**: когда все валидаторы подписывают одно и то же сообщение (аттестацию), верификация упрощается до 2 pairings вместо N+1. Мы агрегируем не только подписи, но и публичные ключи: `e(G, σ_agg) == e(pk_agg, H(m))`. Именно поэтому Ethereum группирует валидаторов в комитеты с одинаковым голосом.

BLS подписи всегда быстрее ECDSA, поэтому Ethereum перешёл на них

Верификация одной BLS подписи медленнее ECDSA в ~10 раз. Преимущество BLS - в агрегации: проверка сотен подписей одним вычислением

Если бы в Ethereum было 100 валидаторов, ECDSA работал бы быстрее. BLS окупается при масштабе: 1 000 000 валидаторов делают сотни тысяч подписей за эпоху, и без агрегации сеть не справилась бы с нагрузкой. BLS выбрали не за скорость отдельной подписи, а за O(1) размер агрегата.

Почему Ethereum группирует валидаторов в комитеты, где все подписывают одно и то же сообщение (аттестацию)?

Ключевые идеи

  • **BLS подпись** - это точка на эллиптической кривой: `σ = sk * H(m)`, размер 48 байт. Короче ECDSA (65 байт), но медленнее в верификации (~10x)
  • **Агрегация** - N подписей складываются в одну: `σ_agg = σ₁ + σ₂ + ... + σₙ`. Размер O(1) вместо O(N). Это ключевое преимущество над ECDSA и EdDSA
  • **Bilinear pairing** `e(G₁, G₂) → G_T` - математическая основа BLS. Свойство `e(a·P, Q) = e(P, a·Q)` позволяет проверять подписи без знания приватного ключа
  • **Ethereum Beacon Chain** агрегирует подписи комитетов валидаторов, превращая задачу «проверить миллион подписей» в «проверить одну». Именно BLS делает Proof-of-Stake с 1 000 000 валидаторов возможным - ту самую задачу из hook, которая казалась невозможной

Связанные темы

BLS подписи стоят на пересечении криптографии эллиптических кривых и протоколов консенсуса:

  • Эллиптические кривые (ECC) — BLS строится поверх ECC - приватный/публичный ключ, скалярное умножение, группы точек
  • Proof-of-Stake — BLS агрегация делает возможным PoS с миллионом валидаторов без взрыва трафика
  • Gasper: консенсус Ethereum 2.0 — Gasper использует BLS для аттестаций в Casper FFG и LMD-GHOST fork choice
  • The Merge — Переход Ethereum на PoS (сентябрь 2022) сделал BLS центральным элементом сети

Вопросы для размышления

  • Если BLS позволяет агрегировать подписи, почему Bitcoin до сих пор использует ECDSA/Schnorr вместо BLS? Какие факторы помимо агрегации влияют на выбор схемы подписи?
  • Pairing-based криптография считается уязвимой к квантовым компьютерам. Как Ethereum может мигрировать на пост-квантовые подписи, если вся архитектура Beacon Chain построена вокруг BLS агрегации?
  • Rogue key attack показывает, что агрегация подписей порождает новые векторы атак. Какие ещё криптографические примитивы могут «ломаться» при переходе от одиночного использования к агрегированному?

Связанные уроки

  • bc-07-ecc — BLS uses pairing-friendly elliptic curves; ECC fundamentals are required
  • bc-06-digital-signatures — BLS is a signature scheme; classical signature concepts are prerequisite
  • bc-09-threshold-crypto — BLS aggregation and threshold signatures are closely related; threshold concepts enrich BLS understanding
  • bc-16-bft — Modern BFT protocols (Ethereum Casper, Hotstuff) use BLS to aggregate validator votes efficiently
  • crypto-26-ecc-math
BLS подписи и агрегация

0

1

Войти