หากฉันต้องตอบคำถามของคุณอีกครั้งจากวิธีที่ฉันเข้าใจคุณกำลังขอสิ่งต่อไปนี้:
หากการเข้ารหัสของกุญแจสาธารณะทำให้แน่ใจว่าสามารถรับกุญแจสาธารณะจากกุญแจส่วนตัว แต่ไม่สามารถรับกุญแจส่วนตัวจากกุญแจสาธารณะได้คุณอาจสงสัยว่ากุญแจสาธารณะจะถอดรหัสข้อความที่เซ็นชื่อด้วยกุญแจส่วนตัวได้อย่างไรโดยไม่ต้องส่ง เปิดเผยคีย์ส่วนตัวภายในข้อความที่เซ็นชื่อกับผู้รับหรือไม่ (อ่านอีกครั้งสองสามครั้งจนกระทั่งมันสมเหตุสมผล)
คำตอบอื่น ๆ ได้อธิบายแล้วว่าไม่สมมาตรวิธีการเข้ารหัสที่คุณสามารถอย่างใดอย่างหนึ่ง :
- เข้ารหัสด้วยรหัสสาธารณะถอดรหัสด้วยรหัสส่วนตัวที่ตรงกัน (รหัสเทียมด้านล่าง)
var msg = 'secret message';
var encryptedMessage = encrypt(pub_key, msg);
var decryptedMessage = decrypt(priv_key, encryptedMessage);
print(msg == decryptedMessage == 'secret message'); // True
- เข้ารหัสด้วยรหัสส่วนตัวถอดรหัสด้วยรหัสสาธารณะที่ตรงกัน (รหัสเทียมด้านล่าง)
var msg = 'secret message';
var encryptedMessage = encrypt(priv_key, msg);
var decryptedMessage = decrypt(pub_key, encryptedMessage); // HOW DOES THIS WORK???
print(msg == decryptedMessage == 'secret message'); // True
เรารู้ว่าทั้งสองตัวอย่าง # 1 และ # 2 ทำงาน ตัวอย่าง # 1 เข้าใจได้ง่ายในขณะที่ตัวอย่าง # 2 ขอให้เป็นคำถามดั้งเดิมคำถามเดิม
กลับกลายเป็นว่าการเข้ารหัสแบบวงรีรูปไข่ (หรือที่เรียกว่า "การคูณแบบวงรีรูปไข่") คือคำตอบของคำถามเดิม การเข้ารหัสแบบโค้งรูปไข่เป็นความสัมพันธ์ทางคณิตศาสตร์ที่ทำให้เกิดเงื่อนไขต่อไปนี้:
- กุญแจสาธารณะสามารถสร้างทางคณิตศาสตร์จากกุญแจส่วนตัว
- รหัสส่วนตัวไม่สามารถสร้างได้ทางคณิตศาสตร์จากกุญแจสาธารณะ (เช่น "ฟังก์ชัน trapdoor")
- คีย์ส่วนตัวสามารถได้รับการยืนยันโดยคีย์สาธารณะ
ส่วนใหญ่เงื่อนไข # 1 และ # 2 สมเหตุสมผล แต่เกี่ยวกับ # 3
คุณมีสองทางเลือกที่นี่:
- คุณสามารถลงไปในโพรงกระต่ายและใช้เวลาหลายชั่วโมงในการเรียนรู้วิธีการเข้ารหัสรูปไข่แบบวงรี ( นี่คือจุดเริ่มต้นที่ดี ) ... หรือ ...
- คุณสามารถยอมรับคุณสมบัติข้างต้นได้เช่นเดียวกับที่คุณยอมรับกฎการเคลื่อนที่ 3 ข้อของนิวตันโดยไม่จำเป็นต้องได้รับมาด้วยตนเอง
สรุปเป็น keypair รัฐ / ภาคเอกชนสร้างขึ้นโดยใช้การเข้ารหัสไข่โค้งซึ่งโดยธรรมชาติสร้างสาธารณะและกุญแจส่วนตัวที่ทางคณิตศาสตร์ที่เชื่อมโยงทั้งสองทิศทาง แต่ไม่ได้ในทางคณิตศาสตร์มาได้ทั้งสองทิศทาง นี่คือสิ่งที่ทำให้คุณสามารถใช้กุญแจสาธารณะของใครบางคนในการตรวจสอบว่าพวกเขาเซ็นชื่อข้อความที่ระบุโดยที่พวกเขาไม่เปิดเผยคีย์ส่วนตัวให้คุณ