エンドツーエンド暗号化と Signal プロトコル

通信路上のサーバを含む第三者が平文を読めないようにする暗号化方式。サーバは暗号文をリレーするだけで、鍵を持つ端末同士でしか復号できない。Signal / WhatsApp が代表例。_moc-cryptography

暗号の階層: プリミティブとプロトコル

  • プリミティブ = 部品。ハッシュ(SHA-3)、共通鍵暗号、署名など単機能の構成要素。
  • プロトコル = それらを組み合わせた合意。TLSSignal 等。
    • 例: Signal ≈ Curve25519(鍵交換) + AES-256/ChaCha20(暗号化) + HMAC-SHA256(認証)。

C.I.A. トライアド

セキュリティの 3 目標。サイバー空間は敵対的(adversarial)前提で設計する。

  • Confidentiality 機密性 / Integrity 完全性 / Availability 可用性

E2EE を構成する要素

  • 非対称暗号 (公開鍵暗号): 公開鍵 pk と秘密鍵 sk のペア。ただし暗号化できる長さに制限があり低速。
  • AEAD (認証付き暗号): 暗号化と改竄検知を同時に行う。例 XChaCha20-Poly1305 = ストリーム暗号 ChaCha20 + MAC Poly1305X は extended nonce。→ symmetric-cipher-attacks
  • DH 鍵交換: 共有秘密を作る。現在は楕円曲線版 X25519 が主流。→ ecdh-key-exchange
  • 署名: なりすまし防止。Ed25519(エドワーズ曲線、)。
  • KDF (鍵導出関数): パスワード等の秘密を PRF でマスターキー化。例 Blake2b(SHA-3 最終選考に残ったハッシュ)。

ハイブリッド暗号

公開鍵暗号は遅く短いメッセージしか扱えないため、現実には鍵交換でセッション鍵を作り、本文は AEAD で暗号化する。ephemeral(儚い)鍵を使い捨てにするのが要点。

前方秘匿性 (Forward Secrecy)

鍵が漏洩しても、漏洩以前に交換された通信は復号できないことを保証する性質。素朴な「鍵交換 + AEAD」だけだと sk 漏洩で過去全てが読まれる(PGP の弱点)。これを防ぐため鍵を継続的に更新する Double Ratchet Algorithm が Signal の核心。

E2EE 構築の役割分担(実装例)

役割アルゴリズム用いる鍵
署名Ed25519identity keypair
暗号化XChaCha20-Poly1305(KDF 出力)
鍵交換X25519prekey / ephemeral key
鍵導出Blake2b

identity_keypair(署名用)と prekey(鍵交換用)を登録し、メッセージごとに ephemeral 鍵で前方秘匿性を確保する。メモリ上の鍵は zeroize で使用後に消去する。

限界

  • Replay 攻撃: 暗号文丸ごとの盗聴・再送には弱い。
  • prekey のローテーション、prekey bundle の管理が必要。

関連