หากบางสิ่งในโปรโตคอล Signal ดูน่าประหลาดใจ สาเหตุที่เป็นเช่นนั้นอาจเกี่ยวข้องกับการประนีประนอมคีย์ สิ่งสำคัญที่ต้องจำไว้คือข้อเท็จจริงที่ว่า "รหัสประจำตัว" เป็นความลับระยะยาว
สมมติว่าอลิซมีกุญแจระยะยาว $a^*$ และบ๊อบมีกุญแจระยะยาว $ข^*$ด้วยคีย์สาธารณะที่เกี่ยวข้อง $g^{a^*}$ และ $g^{b^*}$.
พวกเขาสามารถทำข้อตกลงคีย์ DH ตามปกติกับคีย์ระยะยาวเหล่านี้ได้ และยอมรับความลับ $g^{a^*b^*}$ และดำเนินการแลกเปลี่ยนข้อความที่เข้ารหัส
แต่เราใส่ใจ การประนีประนอมของคีย์ระยะยาว
หากกุญแจระยะยาวของอลิซ $a^*$ ถูกบุกรุกในเวลาต่อมา จากนั้น ผู้โจมตีสามารถประมวลผลได้ $g^{a^*b^*}$ และละเมิดความเป็นส่วนตัวของข้อความที่เข้ารหัส (ใน ทั้งหมด ของความสัมพันธ์ของอลิซ!)
หากคุณคุ้นเคยกับ Signal คุณอาจรู้ว่า Signal ฟื้นตัวจากการประนีประนอมคีย์ในสถานการณ์ปกติได้อย่างไร
เราใช้ "วงล้ออสมมาตรต่อเนื่อง"
อลิสส่งใหม่/สด $g^{a_i}$ กับทุกข้อความ และ Bob ก็ส่งข้อความใหม่ $g^{b_j}$ กับทุกข้อความ
พวกเขาสามารถใช้ล่าสุดได้ตลอดเวลา $g^{a_i}$ และ $g^{b_j}$ เพื่อรับคีย์ที่ใช้ร่วมกันในปัจจุบัน $g^{a_i b_j}$.
จุดสำคัญที่นี่คือว่า $a_i$ และ $b_j$ กุญแจคือ ชั่วคราว.
อลิซสลัดทิ้งได้ $a_i$ หลังจากที่บ๊อบรับทราบว่าเขาเปลี่ยนไปใช้ $g^{ a_{i+1}}$.
หากผู้โจมตีประนีประนอมอลิซในเวลา $t$ผู้โจมตีนี้เรียนรู้เท่านั้น $a_t$.
หลังจากนั้นไม่นาน Alice และ Bob จะหยุดใช้ $a_t$ และเริ่มใช้งาน $a_{t+1}$และผู้โจมตีจะหยุดไม่สามารถอ่านข้อความของพวกเขาได้
ดังนั้น หากการวงล้อแบบอสมมาตรอย่างต่อเนื่องเป็นหนทางในการฟื้นฟูจากการประนีประนอมของคีย์ และเรากังวลเกี่ยวกับ ระยะยาว (ข้อมูลประจำตัว) คีย์ถูกบุกรุก วิธีแก้ปัญหาตามธรรมชาติคือ ทำวงล้ออสมมาตรทันทีที่สร้างการเชื่อมต่อ (โดยใช้รหัสประจำตัว).
นี่คือวิธีที่ฉันชอบคิด X3DH
คิดว่ารหัสประจำตัวระยะยาวเป็น $a_0$ และ $b_0$.
คู่สัญญาสามารถตกลงเรื่องคีย์ได้ $g^{a_0 b_0}$.
พวกเขายังส่งข้อความถัดไปทันทีในวงล้ออสมมาตร: อลิซส่ง $g^{a_1}$ และบ๊อบส่ง $g^{b_1}$.
จากนั้นจะมีข้อตกลงสำคัญที่ให้วงล้อ $g^{a_1 b_0}$ และ $g^{a_0 b_1}$.
X3DH รวมข้อตกลงหลักทั้ง 3 นี้เข้าด้วยกัน
ที่สำคัญ $a_1$ และ $b_1$ เป็น ในระยะสั้น ความลับ -- เฉพาะสำหรับเซสชั่นนี้ และถูกทิ้งหลังจากวงล้อเคลื่อนผ่านพวกเขา
หากเป็นคีย์ระยะยาวเช่น $a_0$ รั่วไหล แม้แต่ข้อความแรกในการเชื่อมต่อก็ได้รับการปกป้อง เนื่องจากฝ่ายต่างๆ $a_1, b_1$.
นี่คือสาระสำคัญของ X3DH
ข้อมูลจำเพาะของสัญญาณดูแตกต่างจากที่ฉันอธิบายไว้เล็กน้อย เนื่องจากหนึ่งในเป้าหมายคือการอนุญาตให้ฝ่ายต่าง ๆ สร้างการเชื่อมต่อแบบอะซิงโครนัส
ดังนั้นเราจะให้อลิซ (ตัวอย่าง) คำนวณล่วงหน้าและโพสต์ $g^{a_1}$ ล่วงหน้าเป็น "คีย์ล่วงหน้าที่ลงนาม"
เมื่อบ็อบต้องการสร้างความสัมพันธ์กับอลิซเป็นครั้งแรก เขาก็ดึงข้อมูล $g^{a_1}$ แล้วส่งของเขา $g^{b_1}$ ถึงเธอ.
ในมุมมองของฉันเกี่ยวกับ X3DH $g^{a_1}$ และ $g^{b_1}$ มีบทบาทที่สมมาตร แต่ใน Signal บทบาทของพวกเขาจะไม่เหมือนกันเสียทีเดียว - หนึ่งในนั้นได้รับการคำนวณล่วงหน้า ("พรีคีย์ที่ลงนามแล้ว" ของอลิซ) และอีกอันถูกคำนวณในขณะที่เชื่อมต่อ ("คีย์ชั่วคราว" ของ Bob)
ในข้อมูลจำเพาะของสัญญาณ คุณจะเห็นคำศัพท์ต่างๆ ทำลายสิ่งที่ไม่สมมาตรในโปรโตคอล