0Pricing
Cryptology Academy · レッスン

BLS署名と集約署名方式

BLS12-381ペアリング、署名集約、Ethereum 2.0がBLSによってバリデーターの負荷を軽減する仕組みを学びます。

「BLS署名と集約署名方式」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

双線形ペアリング:数学的基盤

BLS署名は、楕円曲線上の数学的演算である双線形ペアリングに依存しています。ペアリング e: G1 x G2 -> GT は、2つの群(G1、G2)から点のペアを取り、対象群GTの要素へ写像します。重要な性質は双線形性です。つまり、スカラーa、bと点P、Qに対して e(aP, bQ) = e(P, Q)^(ab) が成り立ちます。これにより、離散対数を知らなくても群要素間の関係を検証できます。暗号で最も広く使われるペアリング曲線はBLS12-381です。128ビットの安全性レベル、小さな群要素サイズ(G1では48バイト、G2では96バイト)、効率的なペアリング計算を備えていることから選ばれています。

BLS署名の構成

BLS(Boneh-Lynn-Shacham)署名は、次のように機能します。鍵生成では、秘密鍵xをランダムなスカラーとし、G2の生成元をGとすると、公開鍵PK = x * Gを計算します。署名では、メッセージmに対してG1上のH = hash-to-curve(m)を計算し、sigma = x * Hとします。署名sigmaは単一のG1上の点です(BLS12-381では48バイト)。検証では、e(sigma, G) == e(H, PK)を確認します。双線形性により、e(x*H, G) = e(H, G)^x = e(H, x*G) = e(H, PK)が成り立ちます。安全性はco-CDH仮定に依存しています。つまり、Hとx*Gが与えられたとき、xを知らずにx*Hを計算することは困難です。

署名集約:主要な革新

BLS署名は非対話型集約をサポートします。公開鍵PK_1, ..., PK_nを持つ署名者が、メッセージm_1, ..., m_nに対する署名sigma_1, ..., sigma_nを生成した場合、集約者は楕円曲線上の点の加算によってsigma_agg = sigma_1 + sigma_2 + ... + sigma_nを計算します。集約署名は、nの値に関係なく単一の48バイト値になります。検証にはn+1回のペアリング演算が必要で、e(sigma_agg, G) == product(e(H_i, PK_i))を確認します。すべての署名者が同じメッセージに署名する一般的な場合、検証は2回のペアリングに簡略化され、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) Proof of Possession(PoP):各署名者が登録時に自分の公開鍵へ署名し、秘密鍵を知っていることを証明します。(2) メッセージ拡張:各署名者の公開鍵をその署名対象メッセージに含めます。(3) Delinearization(BGLS):集約前に各公開鍵へhash(PK_i, all_PKs)を掛けることで、攻撃を可能にする線形性を壊します。Ethereumは、バリデーターの登録にPoPを使用します。

Ethereum 2.0におけるBLSの利用

Ethereumのコンセンサスレイヤー(Beacon Chain)は、BLS12-381の集約を大規模に利用しています。各スロットでは、約400,000以上のアクティブなバリデーターがチェーンヘッドにアテステーションを行います。集約しない場合、すべての署名を保存するには約400,000 * 96バイト = 38 MBがスロットごとに必要です。通常は512バリデーターで構成される委員会ごとにBLS集約を行うと、各委員会は96バイトの集約署名を1つ生成するため、署名データの合計をスロットごとに数キロバイトまで削減できます。Beacon Chainのブロックボディには集約アテステーションが含まれます。そこには、参加したバリデーターを示すビットフィールドと、委員会ごとに1つの集約BLS署名が格納されます。

BLSとECDSAの性能比較

BLS署名の処理性能は、ECDSAとは異なる特性を持ちます。BLSの署名生成には、1回のhash-to-curveと1回のスカラー倍算が必要です(最新のハードウェアで約1 ms)。BLSの検証には2回のペアリング演算が必要です(1回あたり約3~5 ms、合計で約6~10 ms)。ECDSAの署名生成には1回の点倍算が必要です(約0.2 ms)。検証には2回の点倍算が必要です(約0.4 ms)。BLSの検証は1署名あたりでは遅くなりますが、集約時にははるかに高速です。集約された1000個のBLS署名の検証は合計約10 msで済むのに対し、1000個のECDSA署名を個別に検証すると約400 msかかります。逆転点はおよそ2~3個の署名です。

しきい値BLS署名

しきい値BLSは、集約の概念を秘密分散へ拡張したものです。(t, n)しきい値方式では、BLSのスカラー体上でShamirの秘密分散を使い、秘密鍵をn個のシェアに分割します。各シェア保持者iは、sigma_i = sk_i * H(m)という部分署名を生成します。任意のt個の部分署名を、ラグランジュ補間係数を使ってsigma = sum(lambda_i * sigma_i)として結合できます。結果は元の鍵で生成した署名と同一ですが、単一の参加者が完全な鍵を保持することはありません。しきい値BLSは、分散バリデーター技術(DVT)、MPCウォレット、FireblocksやWeb3Authなどのしきい値署名サービスで使用されています。

FilecoinネットワークにおけるBLS

Filecoinは、ストレージ証明システムとトランザクション署名にBLS署名を使用します。ストレージマイナーは複数の証明をBLS集約によってまとめ、オンチェーン検証のコストを削減します。Filecoinのメッセージプールも複数のトランザクション署名を単一の集約署名にまとめ、ブロックサイズを削減します。Filecoinの実装は、IETF BLSドラフト標準(RFC 9380に準拠したhash-to-curve、BLS12-381曲線)をminimum-pubkey-sizeバリアントで使用しています。このバリアントでは公開鍵がG1(48バイト)、署名がG2(96バイト)に配置され、Ethereumの方式とは逆になっています。

ZcashとプライバシープロトコルにおけるBLS

Zcashは主にGroth16 zk-SNARK証明を使用しますが、BLSペアリングは多くのペアリングベースのゼロ知識構成の基盤となっています。Groth16の検証式はペアリングチェックであり、e(A, B) = e(alpha, beta) * e(vk, C)となります。ここでA、B、Cは証明要素です。KZG多項式コミットメント(EthereumのEIP-4844 blobトランザクションやさまざまなZKロールアップシステムで使用されます)もBLS12-381ペアリングに依存しています。多項式f(x)へのコミットメントはC = f(tau)*Gであり、評価証明はペアリングによって検証されます。BLS12-381は、効率的なペアリング演算と128ビットの安全性を備えていることから、特に選ばれました。

BLS以外の集約可能な署名

BLSだけが集約可能な署名方式ではありません。Schnorr署名は鍵集約をサポートしており、MuSig2(Bitcoin Taprootで使用されます)では、複数の署名者が単一の署名者による署名と区別できない1つのSchnorr署名を生成できます。FROST(Flexible Round-Optimized Schnorr Threshold)は、2ラウンドで動作するしきい値Schnorr署名を提供します。ただし、Schnorrの集約には署名者間の対話が必要です(BLSの非対話型集約とは異なります)。そのため、大規模なバリデーター集合にはあまり適していません。BLSは、非対話型集約と効率的なバッチ検証を利用できるため、ブロックチェーンのコンセンサスでは引き続き好まれています。

BLSのポスト量子時代の展望

BLS署名は楕円曲線ペアリングに基づいているため、Shorのアルゴリズムを実行する量子コンピューターに対して脆弱です。十分な性能を持つ量子コンピューターが登場すると、BLS12-381における離散対数を計算できるようになり、既存のBLS署名がすべて破られ、Ethereumのコンセンサスの安全性が失われる可能性があります。時期は不確実ですが、NISTは暗号にとって実用的な量子コンピューターが登場するまで15~20年かかると見積もっています。Ethereumやその他のBLS依存チェーンは、この脅威が現実化する前に、ポスト量子署名方式(CRYSTALS-Dilithium/ML-DSAまたはSPHINCS+/SLH-DSA)へ移行する必要があります。移行には、バリデーター登録、アテステーション形式、集約検証に関するプロトコルレベルの変更が必要です。

BLS集約クイズ

Ethereumのコンセンサスレイヤーにおいて、BLS署名集約がもたらす主な利点は何ですか?

BLS署名の振り返り

BLS署名は、BLS12-381曲線上の双線形ペアリングを使用します。Ethereumの規約では、署名は48バイトのG1上の点であり、公開鍵は96バイトのG2上の点です。非対話型の集約では、n個の署名を1つの48バイト値にまとめ、n+1回のペアリングで検証します。ローグキー攻撃は、バリデーター登録時にProof of Possessionを使用することで緩和されます。EthereumはBLSを使用して、スロットごとに40万件を超えるバリデーターのアテステーションをキロバイト単位に圧縮しています。Threshold BLSにより、単一の鍵保有者を必要としない分散型バリデーターが可能になります。BLSはペアリングベースであり、ポスト量子安全ではないため、将来的な移行が必要です。

よくある質問

「BLS署名と集約署名方式」レッスンは無料ですか?

はい。「BLS署名と集約署名方式」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「BLS署名と集約署名方式」で何を学びますか?

BLS12-381ペアリング、署名集約、Ethereum 2.0がBLSによってバリデーターの負荷を軽減する仕組みを学びます。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「BLS署名と集約署名方式」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Proof-of-Stakeの暗号メカニズム
  2. BFTプロトコル:PBFTとTendermint
  3. コンセンサスにおける検証可能なランダム関数
  4. BLS署名と集約署名方式
← Cryptology Academyに戻る