ガイド
Signal Protocolとは?
暗号化の仕組みを完全解説

現代暗号化のゴールドスタンダードを理解する。

Signal Protocolとは? 暗号化プロトコルの仕組みを完全解説

目次

  1. Signal Protocolの概要
  2. 歴史: OTRからSignal Protocolへ
  3. 鍵の種類と役割
  4. X3DH: 非同期鍵交換
  5. Double Ratchetアルゴリズム
  6. Curve25519楕円曲線暗号
  7. Perfect Forward SecrecyとPost-Compromise Security
  8. Signal Protocolの採用状況
  9. HasheでのSignal Protocol実装
  10. 結論

Signal Protocolは、現代のセキュアメッセージングにおける暗号化のゴールドスタンダードです。Signal、WhatsApp、Google Messages、Hasheなど、数十億人のユーザーを持つアプリがこのプロトコルを採用しています。しかし、その内部の仕組みを理解している人は少数です。

この記事では、Signal Protocolの各コンポーネントを技術的に正確に、しかしわかりやすく解説します。エンドツーエンド暗号化の基礎を理解していると、この記事の内容がより深く理解できるでしょう。

1. Signal Protocolの概要

Signal Protocol(旧称TextSecure Protocol)は、Open Whisper Systems(現Signal Foundation)のMoxie Marlinspikeとトレバー・ペリンによって開発されたエンドツーエンド暗号化プロトコルです。

このプロトコルは以下の特徴を持っています:

  • 非同期メッセージング: 相手がオフラインでも安全にメッセージを送信可能
  • Perfect Forward Secrecy(PFS): 鍵が漏洩しても過去のメッセージは安全
  • Post-Compromise Security: 鍵が漏洩しても将来のメッセージの安全性を回復可能
  • 否認可能性: メッセージの送信者を暗号学的に証明できない(第三者に対して)
  • メッセージごとの鍵更新: 各メッセージが固有の暗号化鍵で保護される

2. 歴史: OTRからSignal Protocolへ

Signal Protocolは真空から生まれたのではなく、暗号化メッセージングの長い歴史の上に構築されています。

PGP(1991年): Phil Zimmermanが開発した公開鍵暗号システム。メールの暗号化に広く使われましたが、鍵管理が複雑で一般ユーザーには扱いにくいものでした。PFSもありません。

OTR(2004年): Off-the-Recordメッセージングプロトコル。PFSと否認可能性を提供しましたが、非同期メッセージング(相手がオフラインの場合)に対応していませんでした。

TextSecure Protocol(2013年): Moxie Marlinspikeが開発。OTRの長所を引き継ぎつつ、非同期メッセージングに対応。これがSignal Protocolの前身です。

Signal Protocol(2016年〜): TextSecure ProtocolをベースにX3DH鍵交換を導入し、WhatsAppが全ユーザーに展開。名称もSignal Protocolに統一されました。

3. 鍵の種類と役割

Signal Protocolでは複数の種類の暗号化鍵が使われます。それぞれが異なる役割を果たしています:

Identity Key(アイデンティティ鍵): 長期的な鍵ペア(公開鍵と秘密鍵)。ユーザーのアイデンティティを表します。アカウント作成時に生成され、アカウントの存続期間中変更されません。安全番号の確認に使われます。

Signed Pre Key(署名済みプレキー): 中期的な鍵。Identity Keyで署名されており、定期的に更新されます。非同期メッセージングを可能にする重要な鍵です。

One-Time Pre Keys(ワンタイムプレキー): 使い捨ての鍵。各鍵は一度だけ使用され、その後破棄されます。初回の鍵交換のセキュリティを強化します。

Session Keys(セッション鍵): 会話ごとに生成される一時的な鍵。Double Ratchetによってメッセージごとに更新されます。

4. X3DH: 非同期鍵交換

X3DH(Extended Triple Diffie-Hellman)は、Signal Protocolの鍵交換プロトコルです。OTRと異なり、相手がオフラインでも安全に鍵交換を開始できるのが最大の特徴です。

X3DHの仕組みを段階的に説明します:

準備段階: ボブがサーバーに以下の鍵を登録します。Identity Key(IKB)、Signed Pre Key(SPKB)、複数のOne-Time Pre Keys(OPKB)。

アリスがメッセージを送る場合:

  1. アリスはサーバーからボブの公開鍵バンドル(IKB、SPKB、OPKB)を取得
  2. アリスは一時的なEphemeral Key(EKA)を生成
  3. 3つ(または4つ)のDiffie-Hellman計算を実行:
    • DH1 = DH(IKA, SPKB) アリスのアイデンティティ鍵とボブの署名済みプレキー
    • DH2 = DH(EKA, IKB) アリスの一時鍵とボブのアイデンティティ鍵
    • DH3 = DH(EKA, SPKB) アリスの一時鍵とボブの署名済みプレキー
    • DH4 = DH(EKA, OPKB) アリスの一時鍵とボブのワンタイムプレキー(利用可能な場合)
  4. これらのDH出力を組み合わせてマスターシークレットを導出
  5. マスターシークレットからDouble Ratchetの初期鍵を生成

この設計により、ボブがオフラインでもアリスは安全にメッセージを送信でき、ボブがオンラインになった時にメッセージを復号化できます。

5. Double Ratchetアルゴリズム

Double Ratchetは、Signal Protocolの心臓部です。X3DHで確立された初期鍵をもとに、各メッセージの暗号化鍵を連続的に更新します。

「ラチェット」とは、一方向にのみ回転する歯車の仕組みです。暗号学では、鍵から次の鍵を導出できるが、次の鍵から前の鍵を逆算できないことを意味します。

Double Ratchetには2つのラチェットがあります:

対称ラチェット(Symmetric Ratchet): 送信チェーンと受信チェーンの2つの鍵チェーンを維持します。各メッセージの送信ごとに、鍵導出関数(KDF)を使って次の鍵を生成します。これにより、各メッセージが固有の鍵で暗号化されます。

非対称ラチェット(DH Ratchet): メッセージの応答のたびに、新しいDiffie-Hellman鍵交換が行われます。これにより、鍵が漏洩した場合でも、次のDHラチェットステップで新しい共有秘密が生成され、セキュリティが回復します。

この二重構造により、Signal Protocolは以下を同時に実現しています:

  • 各メッセージの固有鍵による暗号化(対称ラチェット)
  • 鍵漏洩からの回復(非対称ラチェット)
  • メッセージの順序が入れ替わっても正しく復号化可能

6. Curve25519楕円曲線暗号

Signal Protocolの暗号化は、Curve25519楕円曲線暗号に基づいています。Daniel J. Bernsteinが設計したこの曲線は、セキュリティと性能の優れたバランスを提供します。

Curve25519の特徴:

  • 128ビットのセキュリティレベル(RSA-3072と同等)
  • 32バイトの鍵長(RSAの384バイトと比較して極めてコンパクト)
  • 高速な計算(モバイルデバイスに最適)
  • サイドチャネル攻撃に対する耐性を設計に組み込み
  • NSAの影響を受けていない設計(NIST曲線への懸念に対する回答)

Signal Protocolでは、Curve25519はX25519(Diffie-Hellman鍵交換)とEd25519(デジタル署名)の2つの形式で使用されています。

7. Perfect Forward SecrecyとPost-Compromise Security

Perfect Forward Secrecy(PFS): 長期秘密鍵が将来漏洩しても、過去の通信の機密性が保たれる性質です。Signal ProtocolのDouble Ratchetは、各メッセージの鍵を使用後に破棄するため、過去の鍵を再現することが不可能です。

Post-Compromise Security(PCS): 鍵が漏洩した後でも、将来のメッセージの安全性を回復できる性質です。DHラチェットにより、通信の相手方が応答するたびに新しいDH鍵交換が行われ、漏洩した鍵の影響が限定されます。

これらの性質は、Signal Protocolを他の暗号化プロトコルと区別する最も重要な特徴です。PGPにはPFSもPCSもありません。OTRにはPFSがありますがPCSは限定的です。Signal ProtocolはPFSとPCSの両方を強力に実装しています。

8. Signal Protocolの採用状況

Signal Protocolは以下のアプリとサービスで採用されています:

  • Signal: プロトコルのリファレンス実装。約4,000万人のユーザー。
  • WhatsApp: 2016年に全ユーザーに展開。20億人以上のユーザー。ただしメタデータはMetaと共有
  • Google Messages: RCS(Rich Communication Services)のE2E暗号化にSignal Protocolを採用。
  • Facebook Messenger: 2023年からデフォルトでE2E暗号化を展開。
  • Skype: 「プライベート会話」機能にSignal Protocolを使用。
  • Hashe: Signal Protocolを完全に実装。匿名性、消滅型メッセージ、メタデータ保護と組み合わせ。

Signal Protocolは複数の独立した暗号監査を通過しており、その安全性は学術的にも検証されています。

9. HasheでのSignal Protocol実装

DEVOLIMチームによるフランス製、HasheはSignal Protocolを核心に据えつつ、プロトコル単体では対処しきれない領域もカバーしています。

完全なSignal Protocol実装: X3DH鍵交換、Double Ratchetアルゴリズム、Curve25519楕円曲線暗号、AES-256対称暗号化、HMAC-SHA256メッセージ認証。

Signal Protocolを超える保護:

  • Sealed Sender: メタデータの保護(Signal Protocolの範囲外)
  • 設計による消滅型メッセージ: 受信確認後にサーバーから自動削除
  • 完全な匿名性: 電話番号不要(Signal Protocolは匿名性を保証しない)
  • クラウドバックアップなし: 暗号化を回避するバックアップ経路を排除
  • Vasheモード: 脅迫時の緊急データ消去

オープンソース: Signal Protocolの実装を含む全コードがGitHubで公開されています。

Hasheを発見

フランス製、HasheはSignal Protocolのゴールドスタンダードを完全に実装し、匿名性と消滅型メッセージで暗号化を超える保護を提供します。

Hasheをダウンロード

10. 結論

Signal Protocolは、20年以上の暗号学の研究成果を結集した、現代のセキュアメッセージングのゴールドスタンダードです。X3DHによる非同期鍵交換、Double Ratchetによるメッセージごとの鍵更新、Curve25519による高性能な楕円曲線暗号を組み合わせ、PFSとPCSの両方を実現しています。

しかし、Signal Protocol自体はメタデータの保護、匿名性、メッセージの永続性には対処しません。真に安全なメッセージングには、プロトコルの品質だけでなく、アプリ全体のアーキテクチャ、ビジネスモデル、運用ポリシーを包括的に評価する必要があります。

メッセージアプリを選ぶ際は、「Signal Protocolを使用」という宣伝だけでなく、その実装の品質と、プロトコルを補完するセキュリティ機能の有無を確認してください。