อัลกอริทึมการแลกเปลี่ยนคีย์อยู่ที่ไหน
เดอะ crypto_box
เป็นเพียง crypto_box_curve25519xsalsa20poly1305
และมีสองส่วน;
ส่วนที่ 1: การคำนวณล่วงหน้าที่เป็นอิสระจากแพ็กเก็ต
งานสังสรรค์ $A$ มีรหัสลับ 32 ไบต์ $sk_A$ และรหัสสาธารณะ $pk_A$ ที่ไหน $pk_A = [sk_A]G$
งานสังสรรค์ $B$ มีรหัสลับ 32 ไบต์ $sk_B$ และรหัสสาธารณะ $pk_B$ ที่ไหน $pk_B = [sk_B]G$ และ $G$ เป็นจุดฐานของ X25519
ที่นี่ $[a]G$ คือการคูณแบบสเกลาร์และหมายถึงการบวก $G$ ให้กับตัวเอง $a$- ครั้ง
งานสังสรรค์ $A$ ใช้ $sk_A$ และ $pk_B$ เพื่อรับรหัสโดยใช้ X25519;
$$k = แฮช(x([sk_A]pk_B))$$ โปรดทราบว่า $pk_B$ เป็นจุดบนเส้นโค้ง และ X25519 ใช้เฉพาะ $x$ พิกัดของจุดสำหรับ ECDH ( สังเกตด้วย $x(\cdot)$.
อย่างที่คุณเห็นครั้งหนึ่ง $A$ สามารถรับรหัสสาธารณะของ $B$ กุญแจ $k$ สามารถสร้างได้ทันทีและมีลักษณะเหมือน $B$, ด้วย. นี่คือการแลกเปลี่ยนคีย์ Elliptic Curve Diffie-Hellman (ECDH)
ตอนที่ 2: การคำนวณต่อแพ็คเก็ต
- $A$ เลือก 24 ไบต์ไม่มีเลย $n$ (ต้องไม่ซ้ำกัน) และไม่ควรเกิดขึ้นอีกในขณะที่สื่อสารกับ $B$. nonce ขนาด 24 ไบต์นั้นปลอดภัยในการสร้างแบบสุ่ม
- $A$ ขยายคีย์ $k$ ด้วย nonce เป็นคีย์สตรีมด้วย
xsalsa20
- ข้อความถูกเข้ารหัสด้วยสตรีม (เพียงแค่ x-or) โดยสงวนไว้ 32 ไบต์แรก
- 32 ไบต์แรกใช้เพื่อรับรองความถูกต้องของข้อความที่เข้ารหัสด้วย
โพลี1305
.
ทำไมพวกเขาต้องมีอัลกอริทึมการแลกเปลี่ยนคีย์
หากไม่มีกลไกการแลกเปลี่ยนคีย์ พวกเขาจำเป็นต้องมี กลไกการกระจายคีย์แบบสมมาตร นั่นเป็นภาระของการเข้ารหัสแบบสมมาตรก่อนที่จะมีการคิดค้นการเข้ารหัสคีย์สาธารณะ
คีย์สาธารณะจำเป็นต้องได้รับการตรวจสอบ บางครั้งมีการใช้เป็น TOFU (เชื่อถือในการใช้งานครั้งแรก) จากนั้นตรวจสอบด้วยกลไกบางอย่างเช่น Signal ทำ ในการสื่อสารที่ปลอดภัยกว่าบางอย่าง ให้ตรวจสอบคีย์สาธารณะก่อน
สำหรับรายละเอียดเพิ่มเติมอ่าน