secp256k1 vs ed25519:暗号資産の楕円曲線
目次
すべての暗号資産トランザクションにはデジタル署名が必要です --- 資金を送る人が実際にそのアカウントを制御しているという数学的証明です。この署名は楕円曲線の性質に依存するアルゴリズムによって生成されます。ブロックチェーンの世界を支配する2つの曲線はsecp256k1とed25519です。同じ基本的な目的を果たしますが、設計、パフォーマンス特性、採用の歴史は大きく異なります。
このガイドでは、楕円曲線が暗号学で何をするか、secp256k1とed25519がどう異なるか、その違いが鍵生成、ウォレットセキュリティ、使用するブロックチェーンに何を意味するかを説明します。
楕円曲線とは?¶
暗号学の文脈では、楕円曲線はy^2 = x^3 + ax + b(secp256k1のような曲線)または関連する形式(ed25519のような曲線)の方程式で定義される数学的構造です。楕円曲線暗号(ECC)のセキュリティは楕円曲線離散対数問題(ECDLP)に基づいています:曲線上の点Pと点Q = k * P(kはスカラー、*は点乗算)が与えられたとき、PとQだけからkを決定することが計算的に不可能です。
暗号資産の用語では:
QとkによるTr署名の両方を知っていれば、QがkPと一致することを検証できますが、Qからkを抽出することはできません。これが公開鍵(およびそこから導出されるアドレス)を共有しながら秘密鍵を秘密に保つことが安全な理由です。
ECCはRSAと同じセキュリティをはるかに小さい鍵サイズで提供します。256ビットの楕円曲線鍵は、およそ3,072ビットのRSA鍵と同等のセキュリティを提供します。このコンパクトさは、トランザクションのすべてのバイトにストレージと帯域幅のコストがかかるブロックチェーンに不可欠です。
secp256k1:BitcoinとEthereumの曲線¶
secp256k1はBitcoin、Ethereum、およびそのエコシステムのほとんどのブロックチェーンで使用される楕円曲線です。名前は次のように分解されます:
- sec --- Standards for Efficient Cryptography
- p --- 曲線が素数体上で定義
- 256 --- 素数が256ビット長
- k --- Koblitz曲線(計算効率の利点がある特定のクラス)
- 1 --- 標準におけるこのタイプの最初の(唯一の)曲線
曲線方程式は:y^2 = x^3 + 7(素数p = 2^256 - 2^32 - 977で定義される有限体上)。
サトシ・ナカモトは2009年にBitcoinのためにsecp256k1を選びました。当時は珍しい選択でした。ほとんどのシステムはNIST P-256曲線(secp256r1とも呼ばれる)を使用していました。secp256r1の「r」はパラメータに検証可能なランダムシードを使用することを示しますが、secp256k1のパラメータはランダム性ではなく計算効率のために選ばれました。一部の暗号学者はNIST曲線がNSAの影響を受けたパラメータを持つ可能性を長く懸念してきました --- 2013年に明らかになったDual_EC_DRBGスキャンダルで増幅された懸念です。secp256k1はパラメータが単純で透明なため、この疑いを完全に回避します:a = 0, b = 7。
署名:ECDSA¶
BitcoinとEthereumでsecp256k1と組み合わされる署名アルゴリズムはECDSA --- 楕円曲線デジタル署名アルゴリズムです。BitcoinやEthereumトランザクションを送信する際、ウォレットはECDSAを使用して秘密鍵とトランザクションハッシュから署名を生成します。ネットワークの検証者が公開鍵を使用してこの署名を検証します。
secp256k1でのECDSA署名は64バイト(2つの32バイト値、通常rとsと呼ばれる)に、一部の実装で含まれるリカバリバイトを加えたものです。RFC 6979を使用する場合は決定論的(BitcoinとEthereum両方が使用)で、同じメッセージと秘密鍵は常に同じ署名を生成します --- 署名時にランダム性は不要です。
ECDSAの特性の一つは署名の可鍛性です:有効な署名(r, s)が与えられると、ペア(r, -s mod n)も有効です。BitcoinはBIP66(厳密なDERエンコーディング)と後のSegWitでこれに対処しました。Ethereumはsの正規形を強制することで解決しています。
パフォーマンス¶
最適化された実装(Bitcoin Coreで使用されるlibsecp256k1など)でのsecp256k1検証は高速です:最新ハードウェアで毎秒数千回の検証。しかし、ECDSAの署名と検証は速度のためにゼロから設計されたEdDSA(ed25519と組み合わされるアルゴリズム)より本質的に複雑です。
ed25519:Solanaの現代的な選択¶
ed25519はDaniel J. Bernsteinと共同研究者によって設計された楕円曲線です。2011年にBitcoinの立ち上げから2年後に発表され、セキュリティとパフォーマンスの両方を優先する新世代の曲線設計を代表します。
名前は素数体2^255 - 19(したがって「25519」)上のEdwards曲線形式を指します。使用される特定の曲線は「edwards25519」と呼ばれるtwisted Edwards曲線で、Curve25519(SignalやTLS 1.3などの鍵交換で広く使用)と双有理同値です。
Solanaは署名曲線としてed25519を選びました。他のいくつかの現代ブロックチェーンも同様です。この選択はed25519のスループットの面での利点を反映しています --- Solanaの高性能アーキテクチャにとって重要な関心事です。
署名:EdDSA¶
ed25519と組み合わされる署名アルゴリズムはEdDSA --- Edwards曲線デジタル署名アルゴリズムです。具体的にSolanaはEd25519(edwards25519とのEdDSA)を使用し、64バイトの署名を生成します。
EdDSAはECDSAの落とし穴を回避するように設計されました:
- 署名時にランダム性不要。 EdDSA署名は本質的に決定論的 --- ノンスは秘密鍵とメッセージからハッシュにより導出されます。ECDSAの場合、署名時の不良な乱数生成器は秘密鍵を完全に漏洩させる可能性があります(2010年にSonyのPS3署名鍵で発生)。
- 署名の可鍛性なし。 EdDSA署名は単一の正規形を持ちます。
- 高速なバッチ検証。 複数のEd25519署名を個別に検証するより同時に高速に検証できます --- 高スループットブロックチェーンにとって大きな利点です。
- よりシンプルな実装。 アルゴリズムのエッジケースと分岐条件が少なく、サイドチャネル攻撃の攻撃面を削減します。
パフォーマンス¶
Ed25519はベンチマークでECDSA-secp256k1より一貫して高速です。署名は約2-3倍高速で、単一署名の検証はおおよそ同等ですが、バッチ検証でEd25519が真に輝きます --- 数百の署名を1つずつ検証するより大幅に高速に検証できます。ブロックに数千のトランザクションを含められるSolanaでは、このパフォーマンス差は重大です。
ECDSA vs EdDSA:直接比較¶
| 属性 | ECDSA (secp256k1) | EdDSA (ed25519) |
|---|---|---|
| 曲線タイプ | Short Weierstrass | Twisted Edwards |
| 鍵サイズ | 256ビット | 256ビット |
| 署名サイズ | 64-65バイト | 64バイト |
| セキュリティレベル | ~128ビット | ~128ビット |
| 署名速度 | 高速 | より高速 (2-3x) |
| 検証速度 | 高速 | 同等 (単一)、より高速 (バッチ) |
| 決定論的署名 | オプション (RFC 6979) | 組み込み (設計上) |
| 署名の可鍛性 | あり (実際には緩和) | なし |
| ノンス脆弱性 | あり (不良RNGが鍵を漏洩) | なし (ノンスは鍵+メッセージから導出) |
| 採用 | Bitcoin, Ethereum, BNB Chain, Tron, Dogecoin, Litecoin | Solana, XRP (部分), Cardano, Polkadot |
両アルゴリズムとも約128ビットのセキュリティを提供し、攻撃者が鍵を破るのに約2^128回の演算が必要です。これは現在または予見可能な古典コンピューターの能力をはるかに超えています。違いは生のセキュリティ強度ではなく、実装の安全性とパフォーマンスにあります。
鍵セキュリティが実際にどう機能するかの詳細は秘密鍵セキュリティのベストプラクティスを参照してください。
どのチェーンがどちらを使う?¶
曲線の選択はブロックチェーンが下す最も根本的なアーキテクチャ決定の1つです。主要ネットワークの内訳です:
secp256k1チェーン¶
- Bitcoin --- 元祖。標準トランザクションにsecp256k1とECDSAを、TaprootにSchnorr署名(同じくsecp256k1上)を使用。
- Ethereum --- secp256k1とECDSA。すべてのEVM互換チェーンがこの選択を継承。
- BNB Chain --- EVM互換、secp256k1使用。
- Polygon --- EVM互換、secp256k1使用。
- Arbitrum と Optimism --- Ethereum L2、secp256k1を継承。
- Tron --- ECDSAとsecp256k1を使用。
- Dogecoin --- Bitcoinのフォーク、secp256k1使用。
- Litecoin --- Bitcoinのフォーク、secp256k1使用。
- Avalanche (C-Chain) --- EVM互換、secp256k1使用。
ed25519チェーン¶
- Solana --- Ed25519を独占使用。Solanaが毎秒数千トランザクションを処理できる核心的な理由。
- XRP --- secp256k1とed25519の両方をサポート。鍵生成時にどの曲線を使用するか選択可能。
- Cardano --- Ed25519(具体的にはEd25519-BIP32、拡張バリアント)を使用。
- Polkadot --- 主にSr25519(Ristretto25519上のSchnorr)を使用し、ed25519と密接に関連。
分離は大部分が世代的です。2015年以前に設計されたブロックチェーンはsecp256k1を使用する傾向があります(Bitcoinの先例に従って)。2017年以降に設計されたブロックチェーンはed25519または関連曲線をますます好みます。
鍵生成への影響¶
楕円曲線の選択は鍵とアドレスの生成方法に直接影響します。SafeSeedのツールを使えば違いは自動的に処理されますが、内部で何が起こっているかを理解するのは有益です。
secp256k1鍵生成¶
- ランダムな256ビット数(秘密鍵)を生成。1から
n - 1の間でなければならず、nはsecp256k1の位数(~2^256)。 - 公開鍵を計算:secp256k1の生成点Gに秘密鍵を乗算。結果は曲線上の点(x, y)。
- 非圧縮公開鍵は65バイト(04プレフィックス + 32バイトx + 32バイトy)。圧縮形式は33バイト(02または03プレフィックス + 32バイトx)。
- 公開鍵をハッシュしてアドレスを生成(BitcoinはSHA-256 + RIPEMD-160、EthereumはKeccak-256)。
secp256k1鍵はBitcoin Private Key GeneratorまたはEthereum Private Key Generatorで生成できます。
ed25519鍵生成¶
- ランダムな32バイトシード(BIP39シードとは別 --- 生の鍵素材)を生成。
- シードをSHA-512でハッシュして64バイトを生成。最初の32バイト(特定ビットがクランプされる)が署名に使用されるスカラーになる。後半の32バイトは署名時のノンス生成に使用。
- 公開鍵を計算:edwards25519の基点Bにスカラーを乗算。結果は32バイトの圧縮ポイント。
- アドレス形式はチェーン固有。Solanaでは公開鍵自体(Base58エンコード)がアドレス。
ed25519鍵はSolana Private Key Generatorで生成できます。
クロスカーブの影響¶
secp256k1とed25519は数学的に互換性がないため、一方の曲線で有効な秘密鍵は他方の鍵と意味のある関係を持ちません。BitcoinとSolanaの両方をサポートするウォレットでシードフレーズを復元すると、ウォレットは同じマスターシードから2つの完全に別の導出プロセスを実行します --- Bitcoin/Ethereumアカウントにはsecp256k1、SolanaアカウントにはEd25519を使用。共有されたシードが唯一のつながりです。
これが導出パスにコインタイプが含まれる理由です:Bitcoinのパス(m/44'/0'/0'/0/0)とSolanaのパス(m/44'/501'/0'/0')はコインタイプレベルで分岐し、各ブランチはそれぞれの曲線を使用します。導出パスがチェーン間でどう機能するかの詳細はHDウォレットと導出パスの解説を参照してください。
量子コンピューティングは?¶
secp256k1とed25519は、Shorのアルゴリズムを実行する十分に強力な量子コンピューターに対して同等に脆弱であり、離散対数問題を多項式時間で解くことができます。どちらの曲線も他方より「量子耐性が高い」わけではありません。暗号学コミュニティは耐量子署名スキームを開発していますが、主要なブロックチェーンはまだ移行していません。現在の評価は量子コンピューティングと暗号資産の脅威を参照してください。
適切なツールの選択¶
ユーザーとして、secp256k1とed25519の間で直接選択することはありません。使用するブロックチェーンがその選択を行います。BitcoinとEthereumはsecp256k1を必須とします。Solanaはed25519を必須とします。選択できるのは、チェーンが要求する曲線を正しく実装するツールを使用することです。
SafeSeedの生成器はこれを自動的に処理します。Bitcoin Seed Phrase Generatorはsecp256k1鍵を導出します。Ethereum Seed Phrase Generatorも同様です。Solana Seed Phrase Generatorはed25519鍵を導出します。すべて完全にクライアントサイドで実行され、ブラウザのWeb Crypto APIを使用して安全な乱数を生成します。秘密鍵素材はデバイスを離れません。
ブロックチェーンの下にある曲線を理解しても、日常的なウォレット使用方法は変わりません。しかし、SolanaアドレスがEthereumアドレスと異なって見える理由、Solanaの秘密鍵をEthereumで使用できない理由、資金の背後にあるセキュリティの仮定がなぜそれほど強力なのかを理解するのに役立ちます。これらの曲線は暗号資産所有権の数学的基盤 --- 通常の使用では見えませんが、絶対的に根本的なものです。