エンドツーエンド暗号化(E2EE)を実装する
エンドツーエンド暗号化は、通信する当事者だけがメッセージを読めることを保証します。中継サーバーは復号鍵を持ちません。これを実現するハイブリッド暗号パターンを学びましょう。
- 1
E2EE はハイブリッド暗号を使います。共通鍵(AES)でメッセージを暗号化し、受信者の公開鍵(RSA/ECDSA)で共通鍵を暗号化します。サーバーは暗号文のみを保存します。受信者は自分の秘密鍵で共通鍵を復号し、次にメッセージを復号します。
- 2 AES 暗号化ツール →
メッセージを新しいランダムな AES-256 鍵で暗号化します。この鍵はメッセージごとに生成され、再利用されません。暗号文が保存・送信の対象になります。
- 3 RSA ツール →
AES 鍵を受信者の RSA 公開鍵で暗号化します。AES 鍵を復元するには受信者の秘密鍵が必要です。これが鍵カプセル化のステップです。
- 4 HMAC ジェネレーター →
暗号文に対して HMAC を生成し、転送中の改ざんを検出します。受信者は復号を試みる前に HMAC を検証します。
- 5
メッセージングアプリでは、各ユーザーが長期的な identity 鍵ペアを持ちます。前方秘匿性のため、セッションごとに一時的な Diffie-Hellman を使います。一時鍵ペアを生成し、公開鍵を交換し、共有秘密を導出し、セッション後に一時鍵を破棄してください。
よくある質問
- なぜ RSA 単体ではなくハイブリッド暗号なのですか?
- RSA は遅く、サイズ制限があります(平文は法より小さくなければならない)。AES は高速で任意サイズを扱えます。ハイブリッドは両者の長所を組み合わせます。鍵交換には RSA、大量データには AES を使います。
- サーバーは E2EE メッセージを復号できますか?
- いいえ。設計上できません。サーバーは暗号文と暗号化された鍵のみを保存し、受信者のデバイスだけが秘密鍵を持ちます。これが E2EE の定義的な性質ですが、サーバー側でクライアント側の復号なしに検索やバックアップ機能を提供できないことをも意味します。
このタスクを解決するワークフロー
関連ツール
AES 暗号化ツール
Encrypt text or binary data with AES (CBC/GCM/ECB) using Web Crypto API。無料、プライベート、100%クライアントサイド。 ツール
RSA ツール
RSA key generation, encryption, decryption, signing, and verification using Web Crypto API。無料、プライベート、100%クライアントサイド。 ツール
HMAC ジェネレーター
Generate HMAC (Keyed-Hash Message Authentication Code) with SHA-1/256/512。無料、プライベート、100%クライアントサイド。 ツール