ฉันเพิ่งเรียนรู้เกี่ยวกับการแลกเปลี่ยน McCallum-Relyea ซึ่งอนุญาตให้ใช้วิธีการของคีย์เอสโครว์โดยไม่ต้องส่งคีย์จริง
ได้รับการพัฒนาที่ RedHat และใช้งานโดย กลิ่นฉุน และ ปิ๊น ยูทิลิตี้ (และอธิบายเพิ่มเติม ที่นี่) เพื่ออนุญาตการถอดรหัสอัตโนมัติ โดยเฉพาะอย่างยิ่งสำหรับพาร์ติชันรูทที่เข้ารหัสสำหรับเครื่อง Linux ดังนั้นเครื่องไคลเอนต์จึงสามารถบู๊ตและถอดรหัสดิสก์ได้หากอยู่ในเครือข่ายที่สามารถเข้าถึงเครื่องเซิร์ฟเวอร์ได้
ฉันไม่พบการวิเคราะห์ใดๆ ของโปรโตคอลนี้ ดังนั้นฉันจึงสงสัยว่าระดับความปลอดภัยใดที่มีให้เมื่อเทียบกับวิธีการทั่วไป เช่น เซิร์ฟเวอร์จัดเก็บคีย์และส่งผ่านช่อง TLS และถ้ามีข้อบกพร่องใดๆ ในโปรโตคอลนี้ การแลกเปลี่ยนที่อาจถูกเอารัดเอาเปรียบ
การแลกเปลี่ยนเป็น ECDH เวอร์ชันแก้ไข/เพิ่มเติมซึ่งทำหน้าที่ดังต่อไปนี้:
ฝั่งเซิร์ฟเวอร์จะสร้างคู่คีย์ EC ที่มีอายุการใช้งานยาวนานพร้อมคีย์ส่วนตัวก่อน $s$ และรหัสสาธารณะ $S = [s]G$.
ลูกค้าที่ต้องการปกป้องข้อความ $M$, สร้างคีย์ส่วนตัว $ค$ และรหัสสาธารณะ $C = [c]G$. จากนั้นไคลเอนต์ร้องขอรหัสจากเซิร์ฟเวอร์ผ่านช่องข้อความธรรมดา เซิร์ฟเวอร์ตอบกลับด้วย $S$ เซ็นสัญญากับ $s$. ผู้ใช้ฝั่งไคลเอ็นต์ตรวจสอบคีย์เซิร์ฟเวอร์ด้วยวิธีการนอกแบนด์และบันทึกแฮชของคีย์เซิร์ฟเวอร์ จากนั้นลูกค้าทำการแลกเปลี่ยน ECDH ครึ่งหนึ่งเพื่อให้ได้ผลตอบแทน $K = [c]S = [cs]G$. $K$ จากนั้นจะใช้ (ไม่ว่าจะโดยตรงหรือโดยอ้อม) เพื่อเข้ารหัส $M$ ผ่านการเข้ารหัสแบบสมมาตร หลังจากนั้นไคลเอนต์จะทิ้งไป $K$ และ $ค$ และคงไว้เพียง $C$. ณ จุดนี้ ไคลเอ็นต์ไม่สามารถถอดรหัสได้ $M$ โดยไม่มีเซิร์ฟเวอร์
เมื่อไคลเอนต์ต้องการถอดรหัส $M$จะสร้างคู่กุญแจชั่วคราว $e$ และ $E = [e]G$แล้วคำนวณ $X = C + E$ และส่ง $X$ ไปยังเซิร์ฟเวอร์ จากนั้นเซิร์ฟเวอร์จะทำการแลกเปลี่ยน ECDH ครึ่งหนึ่งกับ $X$ และ $s$ เพื่อสร้าง $Y = [s]X$ และส่งสัญญาณ $Y$ กลับไปหาลูกค้าโดยใช้ $S$ เพื่อเซ็นข้อความ
ได้รับแล้ว $Y$ จากเซิร์ฟเวอร์และตรวจสอบลายเซ็นของเซิร์ฟเวอร์ จากนั้นไคลเอ็นต์ดำเนินการอีกครึ่งหนึ่งของ ECDH ด้วย $S$ และ $e$ ในการคำนวณ $Z = [e]S$. จากนั้นลูกค้าจะคำนวณ:
Y - Z = sX - eS
= ส(C + E) - อีส
= sC + se - es
= scG + seG - esG
= สกสค
= เค
การกู้คืน $K$ และถอดรหัส $M$.