シグナルプロトコルのプロセスを理解したい。私はそれをググっていますが、良い記事やチュートリアルを見つけることができません。
Signal Protocolの基本的な定義と機能を理解したいのですが、プロセスを説明する図が利用できればすばらしいと思います。
これをご覧ください テクニカルホワイトペーパー WhatsAppから、最近e2e暗号化用のシグナルプロトコルに移行しました。
Identity Key Pair
_ –インストール時に生成される長期のCurve25519キーペア。Signed Pre Key
_ –インストール時に生成され、IDキーによって署名され、定期的にローテーションされる中期的なCurve25519キーペア。One-Time Pre Keys
_ –インストール時に生成され、必要に応じて補充される、1回限りの使用のためのCurve25519キーペアのキュー。セッションキーのタイプRoot Key
_ –チェーンキーの作成に使用される32バイトの値。Chain Key
_ –メッセージキーの作成に使用される32バイトの値。Message Key
_ –メッセージの内容を暗号化するために使用される80バイトの値。 AES-256キーには32バイト、HMAC-SHA256キーには32バイト、IVには16バイトが使用されます。Identity Key
_、パブリック_Signed Pre Key
_、および単一のパブリック_One-Time Pre Key
_を要求します。One-Time Pre Key
_は1回だけ使用されるため、要求された後、サーバーストレージから削除されます。受信者の_One-Time Pre Keys
_の最新のバッチが消費され、受信者が補充しなかった場合、_One-Time Pre Key
_は返されません。Identity Key
_をIrecipient
として、_Signed Pre Key
_をSrecipient
として、_One-Time Pre Key
_をOrecipient
として保存します。Einitiator
を生成します。Identity Key
_をIinitiator
としてロードします。master_secret = ECDH(Iinitiator, Srecipient) || ECDH(Einitiator, Irecipient) || ECDH(Einitiator, Srecipient) || ECDH(Einitiator, Orecipient)
としてマスターシークレットを計算します。 _One Time Pre Key
_がない場合、最後のECDHは省略されます。Root Key
_から_Chain Keys
_および_master_secret
_を作成します。実行時間の長い暗号化セッションを構築した後、開始者は、受信者がオフラインであってもすぐに受信者へのメッセージの送信を開始できます。受信者が応答するまで、イニシエーターは、受信者が対応するセッションを構築するために必要な情報を(送信されるすべてのメッセージのヘッダーに)含めます。これには、イニシエーターのEinitiator
およびIinitiator
が含まれます。
受信者がセッション設定情報を含むメッセージを受信すると、次のようになります。
master_secret
_を計算します。One-Time Pre Key
_を削除します。Root Key
_および_Chain Keys
_を_master_secret
_から派生させます。