X3DH Key Agreement Protocol
5494 ワード
ソース:https://signal.org/docs/specifications/x3dh/x3dh.pdf
curve : X25519 or X448 ハッシュ:256または512ビットハッシュ関数(SHA-256、SHA-512など) info:アプリケーション名ASCII String 定義#テイギ#
HKDF inputはF|KM、Fは0 xFFからなるバイトシーケンスである.
曲線がX 25519の場合は32バイト、X 448の場合は57バイトの0 xFFを使用します.
Fは、XEdDSAで暗号化ドメインを分離するために使用される. HKDF salt hash出力長と同じ0 x 00バイトシーケンス HKDF infoはinfoパラメータ を含む
シミュレーション
Alice:Bobに暗号化されたデータを送信し、今後の双方向会話で共有鍵が使用されることを確認したい. Bob:Aliceのような人に共有鍵を確立してもらいたいです.ただし、Aliceがこの操作を試みるとオフラインになる可能性があります.そのため、サーバとの関係を確立する必要があります. サーバ:メッセージ(Alice→Bobから転送)を保存することで、Bobは後で受信できます.Bobからデータを受信し、Aliceなどに転送します. キーの種類
Bobの鍵配布
IK(B) SPK(B) Sig(IKB, Encode(SPKB)) : prekey signature (OPK(B)1, OPK(B)2, OPKB(3, . . . ) : one set of Bob's one-time prekeys identity keyはサーバに一度だけ送信されます.
one-time prekeysが送信されることが多い.サーバの残りの部分が切れた場合、サーバは要求します.
Signed PrekeyとPrekey署名は、特定の期間に1回(週または月に1回)アップロードされます.
新しい秘密鍵をアップロードすると、古い鍵に対応する秘密鍵が保持され、Bobがそれを使用するメッセージを受信すると削除されます.)
初期メッセージの送信
IK(b) SPK(b) Sig(IKB, Encode(SPKB)) (Optionally ... )OPK(B)1 サーバはOPK(B)に1つ(存在する場合)を提供し,提供後に削除する.
BobのOPKがすべて削除されると、ビームにはOPKは存在しません.
Aliceはprekey署名をチェックし、認証に失敗するとプロトコルを破棄します.
ビームにOPK(B)がない場合:
ビームにOPK(B)がある場合:
結果は以下の通りです.
DH 1、DH 2は相互認証を提供し、DH 3とDH 4は追加のセキュリティを提供します.
SKを計算すると、AliceはEK(A)とDH値を削除します.
次に、ADという名前の「関連データ」バイトシーケンスを計算します. IK(A) : Alice Identify Key EK(A) : Alice Ephemeral Key Identifier:AliceはBobの前鍵に何を使用しましたか イニシエータCiphertext:ADをデータとして、(SK自身またはSKから導出されたPRF鍵)を暗号鍵として、AEAD暗号化により暗号化する. この初期メッセージには、post-X 3 DHプロトコルのfirst message役割、AliceのX 3 DH初期メッセージの一部の2つの役割があります.
その後、Aliceは(SKまたはSKから取得した鍵)を使用してpost-X 3 DHプロトコルの範囲内でBobと通信を継続する.
Security Considerations
きほんげんそ
定義#テイギ#
DH(PK1, PK2)
デジタル鍵交換は暗号化鍵を交換する方法であり、暗号化されていない通信網を介して公開鍵を交換する方法である.代表的な公開鍵暗号化方式RSA.
DH(PK 1,PK 2)は、公開鍵を含む鍵対から導出されたデバイス−ヘルマン鍵交換の結果を指す.
https://cryptography.io/en/latest/hazmat/primitives/asymmetric/x25519/ from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
private_key = X25519PrivateKey.generate()
# another private key from other person
peer_public_key = X25519PrivateKey.generate().public_key()
shared_key = private_key.exchange(peer_public_key)
Sig(PK, M)
これは、バイトシーケンスMのXEdDSAに署名し、公開鍵PKによって認証された状態であることを意味する.
具体的には,Mに署名しながらPKの秘密鍵を利用する.
KDF(KM)
これはHKDFアルゴリズムから導出した32バイトの結果を意味する.
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
private_key = X25519PrivateKey.generate()
# another private key from other person
peer_public_key = X25519PrivateKey.generate().public_key()
shared_key = private_key.exchange(peer_public_key)
曲線がX 25519の場合は32バイト、X 448の場合は57バイトの0 xFFを使用します.
Fは、XEdDSAで暗号化ドメインを分離するために使用される.
シミュレーション
非同期、オフラインでメッセージを送信したり、鍵を交換したりすることもできます.
Bobの鍵配布
すべて公開鍵です
one-time prekeysが送信されることが多い.サーバの残りの部分が切れた場合、サーバは要求します.
Signed PrekeyとPrekey署名は、特定の期間に1回(週または月に1回)アップロードされます.
新しい秘密鍵をアップロードすると、古い鍵に対応する秘密鍵が保持され、Bobがそれを使用するメッセージを受信すると削除されます.)
初期メッセージの送信
AliceはBobの「Key Bundle」を取得し、その内容は以下の通りです.
BobのOPKがすべて削除されると、ビームにはOPKは存在しません.
Aliceはprekey署名をチェックし、認証に失敗するとプロトコルを破棄します.
ビームにOPK(B)がない場合:
ビームにOPK(B)がある場合:
結果は以下の通りです.
DH 1、DH 2は相互認証を提供し、DH 3とDH 4は追加のセキュリティを提供します.
SKを計算すると、AliceはEK(A)とDH値を削除します.
次に、ADという名前の「関連データ」バイトシーケンスを計算します.
AD = Encode(IK(a)) || Encode(IK(b))
# AD 에 usernames, certificates 등 identifying information을 추가할 수 있음.
アリスついに!Bobに初期メッセージを送信し、その後、Aliceは(SKまたはSKから取得した鍵)を使用してpost-X 3 DHプロトコルの範囲内でBobと通信を継続する.
Security Considerations
4.1. 資格認定
IK(A)とIK(B)は、別々の経路(QRコード確認、デジタル確認等)で認証しなければならない.
この認証を実行しないと、誰と通信するかのパスワード保護を取得できません.
4.2. プロトコルリプレイ
Aliceの初期メッセージがOPK(B)を使用していない場合、Bobに再生され、Bobが受け入れるリスクがあります.
...(詳細は後ほど)
Reference
この問題について(X3DH Key Agreement Protocol), 我々は、より多くの情報をここで見つけました
https://velog.io/@hunjison/X3DH-Key-Agreement-Protocol
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(X3DH Key Agreement Protocol), 我々は、より多くの情報をここで見つけました https://velog.io/@hunjison/X3DH-Key-Agreement-Protocolテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol