ブロックチェーンの暗号技術

article technology medium #blockchain#cryptography#sha256#keccak256#ecdsa#schnorr-signature#bls-signature#hd-wallet#bip32#zero-knowledge-proof#secp256k1
Created: 2026-06-06 Updated:

SHA-256・Keccak-256 等のハッシュ関数、ECDSA/Schnorr/BLS の署名方式、HD ウォレットと BIP-32/39/44 によるアドレス導出、ZKP(SNARK/STARK)・コミットメント・閾値署名など高度な暗号の概要をブロックチェーン固有の視点で体系化。

ブロックチェーンの暗号技術

ブロックチェーンはハッシュ関数・公開鍵暗号・デジタル署名の 3 種の暗号プリミティブを組み合わせることで、中央機関なしに改ざん検知・所有権証明・匿名性を実現している。本記事はブロックチェーン固有の暗号技術を俯瞰する。一般的な暗号・鍵管理の基礎(AES・TLS・KMS 等)は tech-133 を参照のこと。情報カットオフ ~2025-08、confidence: medium 固定(2026-06 時点での外部再検証は未実施)。

ハッシュ関数 — SHA-256・Keccak-256 とその性質

ブロックチェーンの根幹をなすのが暗号学的ハッシュ関数だ。任意長の入力を固定長の出力(ダイジェスト)に変換し、以下の性質を持つ。

  • 一方向性: ダイジェストから元の入力を求めることが計算上困難
  • 衝突耐性: 同一ダイジェストを持つ二つの異なる入力を見つけることが計算上困難
  • Avalanche 効果: 入力の 1 ビット変更でダイジェストが大幅に変化する(≈50% のビット反転)
  • 決定論的: 同一入力は常に同一ダイジェストを生成する

SHA-256(Secure Hash Algorithm 256-bit)は Bitcoin が採用するハッシュ関数で、NSA 設計・NIST 標準化(SHA-2 ファミリー)。ブロックヘッダハッシュの計算(PoW の中心)・Merkle 木のリーフ/内部ノードのハッシュ・Bitcoin アドレス導出に使われる。Bitcoin は SHA-256 を二重に適用(SHA-256(SHA-256(x)) = HASH256)することが多い。

Keccak-256(Ethereum が採用する SHA-3 ファミリー)は Ethereum が採用するハッシュ関数。注意点として Ethereum が採用する Keccak-256 は NIST が最終標準化した SHA3-256 と内部パラメータ(padding)が異なる。Ethereum のトランザクションハッシュ・ブロックヘッダハッシュ・スマートコントラクトアドレス導出・アカウントアドレス(公開鍵の Keccak-256 下位 20 bytes)に使われる。

公開鍵暗号とデジタル署名

ブロックチェーンの「所有権」は秘密鍵によるデジタル署名で証明される。送信者は秘密鍵でトランザクションに署名し、ネットワーク上の誰もが対応する公開鍵で署名を検証できる。

ECDSA on secp256k1: Bitcoin・Ethereum 共に採用する楕円曲線デジタル署名アルゴリズム(Elliptic Curve Digital Signature Algorithm)。secp256k1 は Certicom が定義した楕円曲線パラメータで、256-bit セキュリティを提供する。ECDSA 署名は (r, s) という 2 つの 256-bit 整数からなる。ECDSA は署名ごとに新たな乱数 k を必要とし、k の再利用が秘密鍵漏洩につながるため実装に注意が必要だ。

Schnorr 署名(BIP-340): Bitcoin が Taproot(BIP-341、2021 年 11 月有効化)で導入した署名方式。ECDSA より検証が単純・高速であり、線形性を持つため署名集約(n 個の署名を 1 個に圧縮)が可能だ。MuSig2 プロトコルにより多者の公開鍵と署名をひとつに集約でき、プライバシーとスケーラビリティの向上に寄与する。

EdDSA ed25519: Edwards-curve Digital Signature Algorithm で curve25519 を使用。Solana・Cardano・Stellar 等が採用。ECDSA より高速・定常時間実行・乱数依存なし(決定論的)という特徴を持つ。

BLS 署名(Boneh-Lynn-Shacham): Ethereum 2.0(コンセンサス層)のバリデータが採用。BLS の最大の特徴は集約署名で、多数のバリデータ署名を O(1) の署名に圧縮できる。Ethereum には 1 スロット(12 秒)に数千〜数十万のバリデータがアテステーション署名を出すため、BLS 集約なしには帯域が爆発的に増大する。BLS12-381 曲線のペアリング演算を活用する。

アドレス導出と鍵管理 — HD ウォレットと BIP シリーズ

アドレスは公開鍵から導出されるが、公開鍵をそのまま公開することは望ましくない(量子コンピュータ耐性や二度使用防止の観点)。そのためアドレスはハッシュ変換を経て公開鍵より短くなっている。

Bitcoin アドレス導出: secp256k1 の秘密鍵 → 公開鍵 → SHA-256 → RIPEMD-160 → Base58Check エンコーディング(P2PKH = 1 始まり)または Bech32 エンコーディング(P2WPKH = bc1q 始まり)。Taproot アドレスは Bech32m(bc1p 始まり)。

Ethereum アドレス導出: secp256k1 の秘密鍵 → 非圧縮公開鍵(65 bytes)→ Keccak-256 ハッシュ → 下位 20 bytes(40 hex chars)。EIP-55 によるチェックサム付き大文字小文字混在表記が一般的。

HD ウォレット(BIP-32): Hierarchical Deterministic Wallet の略。1 つのシードから確定的に鍵ツリーを導出する仕組みで、「子鍵は親鍵から算術的に計算できるが逆は計算上困難」という性質を持つ。

  • BIP-32: 鍵導出の基礎的なツリー構造と拡張公開鍵(xpub)の仕様
  • BIP-39: シードを 12〜24 個の英単語(ニーモニックフレーズ / シードフレーズ)で表現する方法。PBKDF2 + HMAC-SHA512 でシードを生成
  • BIP-44: 複数コインに対応する導出パス規約。m/44'/coin'/account'/change/index の形式

HD ウォレットにより「1 つのシードフレーズさえ保管すれば、全コイン・全アドレスを復元できる」体験が実現する。

高度な暗号技術 — ZKP・コミットメント・閾値署名

ゼロ知識証明(ZKP): 証明者が検証者に対し、「主張が正しいこと」を「主張の根拠(証人)」を明かさずに証明できる暗号技術。ブロックチェーンでは主にプライバシー保護とスケーリング(ZK Rollup)に使われる(ZK Rollup の詳細は tech-193 参照)。

  • zk-SNARK(Succinct Non-interactive ARguments of Knowledge): 証明サイズが小さく検証が高速。Groth16・PLONK が代表的なシステム。Zcash のプライバシー保護トランザクションと zkSync Era・Polygon zkEVM 等の ZK Rollup が採用。信頼されたセットアップ(Trusted Setup)を必要とするシステムが多い点が課題。
  • zk-STARK(Scalable Transparent ARguments of Knowledge): 信頼されたセットアップが不要(Transparent)でポスト量子耐性を持つ。証明サイズは SNARK より大きいが検証が速い。StarkNet・Starkware が採用。

コミットメント(Commitment Scheme): 値を「封印」して後で開示する仕組み。Pedersen コミットメントは Blake3 等のハッシュ関数を使い、値を明かさずに「この値を知っている」ことを証明できる。Bulletproof(機密トランザクション)や Mina Protocol(Recursion SNARK でチェーン全体を圧縮)で活用される。

閾値署名と MPC: 秘密鍵を n 人のメンバーに分散し、そのうち t 人以上の協力でのみ署名できる**閾値署名(t-of-n)**は、単一障害点なしにカストディを実現する。**MPC(Multi-Party Computation)**の枠組みでは秘密鍵を実際に再構成せずにオンラインで署名を計算できる。機関投資家向けカストディ(Fireblocks 等)や Layer-2 のブリッジが採用している。

Local graph