การเข้ารหัสแบบ Elliptic-Curve
ECC คือกลุ่มการเข้ารหัสคีย์สาธารณะที่มาแทนที่ RSA ในโปรโตคอลที่ทันสมัยที่สุด คีย์ ECC 256 บิตมีความแข็งแกร่งพอๆ กับคีย์ RSA 3072 บิต ทำงานเร็วขึ้น และใช้แบนด์วิธน้อยกว่ามาก WireGuard, Signal, TLS 1.3, คีย์ SSH สมัยใหม่ทุกอัน — ทั้งหมดใช้เส้นโค้งรูปไข่ใต้ฝากระโปรง
เนื้อหาบทความฉบับเต็มมีให้เป็นภาษาอังกฤษด้านล่าง
Elliptic-curve cryptography (ECC) เป็นคลาสของอัลกอริธึมคีย์สาธารณะที่อิงตามพีชคณิตของจุดบนเส้นโค้งรูปไข่เหนือสนามจำกัด คณิตศาสตร์ไม่คุ้นเคยในตอนแรก แต่ผลลัพธ์ก็เหมือนกับแนวคิด RSA นั่นคือกุญแจสาธารณะที่ใครๆ ก็สามารถใช้ได้ กุญแจส่วนตัวที่เจ้าของเท่านั้นที่มี และความสามารถในการคำนวณสิ่งต่างๆ ในทิศทางเดียวแต่ไม่กลับกัน
รูปร่างพื้นฐาน
เส้นโค้งรูปไข่คือเซตของจุด (x, y) ที่เป็นไปตามสมการ เช่น y² = x³ + ax + b. ในสนามที่มีขอบเขตจำกัด (เช่น จำนวนเต็มปรับเปลี่ยนจำนวนเฉพาะขนาดใหญ่) เส้นโค้งจะมีเซตของจุดที่ไม่ต่อเนื่องกัน คุณสามารถกำหนดการดำเนินการ "เพิ่มเติม" พิเศษในประเด็นเหล่านี้ซึ่งเป็นไปตามกฎพีชคณิตที่คุ้นเคย การคูณจุด P ด้วยจำนวนเต็ม k หมายถึงการบวก P เข้ากับตัวมันเอง k ครั้ง โดยเขียนเป็น kP.
ปัญหาหนัก: เมื่อพิจารณาจากจุด P และผลิตภัณฑ์ kP ให้หา k สิ่งนี้เรียกว่า elliptic curve discrete logarithm problems (ECDLP) และไม่มีอัลกอริธึมที่มีประสิทธิภาพในการแก้ปัญหา
เหตุใดเส้นโค้งจึงให้คีย์ที่เล็กกว่า
การโจมตี ECC แบบคลาสสิกที่รู้จักกันดีที่สุดนั้นเป็นเรื่องทั่วไป — โดยจะทำงานในเวลาตามสัดส่วนกับรากที่สองของลำดับของเส้นโค้ง สำหรับ RSA การโจมตีที่ดีที่สุด (ตะแกรงฟิลด์ตัวเลขทั่วไป) เป็นแบบเอ็กซ์โพเนนเชียล แต่ก็ยังเร็วกว่ากำลังเดรัจฉานของ RSA มาก ผลลัพธ์: การเพิ่มขนาดคีย์ของ RSA เป็นสองเท่าช่วยเพิ่มความปลอดภัยเล็กน้อย การเพิ่มขนาดคีย์ของ ECC เป็นสองเท่าจะเพิ่มความปลอดภัยเป็นสองเท่าในหน่วยบิต
| Security ระดับ | RSA ขนาดคีย์ | ECC ขนาดคีย์ |
|---|---|---|
| 128 บิต | 3072 บิต | 256 บิต |
| 192 บิต | 7680 บิต | 384 บิต |
| 256 bits | 15360 bits | 512 bits |
การประหยัดแบนด์วิดท์ในการจับมือ TLS เพียงอย่างเดียวซึ่งคูณผ่านอินเทอร์เน็ตนั้นมีความสำคัญ
เส้นโค้งที่มีชื่อของคุณ พบ
- P-256 (NIST P-256, secp256r1) — เส้นโค้งที่ใช้งานกันอย่างแพร่หลายที่สุด ได้รับมาตรฐานใน NIST FIPS 186 และใช้งานได้ทุกที่ตั้งแต่ TLS ไปจนถึงการลงนาม Bitcoin
- P-384, P-521 — เส้นโค้ง NIST ที่ใหญ่ขึ้นเพื่อระดับความปลอดภัยที่สูงขึ้น
- Curve25519 — การออกแบบของ Daniel J. Bernstein จากปี 2005 ได้รับเลือกเพื่อประสิทธิภาพและความสะอาด การก่อสร้าง ใช้ใน TLS 1.3 (เช่น X25519), SSH, WireGuard, Signal, Tor.
- Curve448 — การออกแบบของ Mike Hamburg จับคู่กับ Curve25519 เพื่อระดับความปลอดภัยสูงสุดใน TLS 1.3.
- secp256k1 — เส้นโค้งที่ใช้โดยลายเซ็น Bitcoin และ Ethereum แตกต่างจาก secp256r1 ในรูปแบบที่ละเอียดอ่อน
- Ed25519 — รูปแบบลายเซ็นที่กำหนดบน Curve25519 ซึ่งใช้กันอย่างแพร่หลายในโปรโตคอลสมัยใหม่
การดำเนินการหลักสองประการ: ECDH และ ECDSA/EdDSA
ECDH (Elliptic Curve Diffie-Hellman): Alice มีคีย์ส่วนตัว a และคีย์สาธารณะ aG (โดยที่ G เป็นจุดกำเนิดคงที่) Bob มี b และ bG พวกเขาแลกเปลี่ยนกุญแจสาธารณะ อลิซคำนวณ a·(bG) = abG; Bob คำนวณ b·(aG) = abG ตอนนี้พวกเขาแบ่งปันประเด็นลับ abG แล้ว ผู้โจมตีที่เห็น aG และ bG ไม่สามารถคำนวณ abG โดยไม่แก้ไข ECDLP นี่คือหัวใจสำคัญของการแลกเปลี่ยนคีย์ TLS
ECDSA และ EdDSA เป็นโครงร่างที่เป็นเอกลักษณ์ ECDSA เป็นมาตรฐานที่เก่ากว่าและมีการใช้งานมากกว่าพร้อมกับข้อผิดพลาดในการใช้งานที่หลากหลาย (อันที่มีชื่อเสียง: การลงนามด้วย nonce ที่นำมาใช้ซ้ำจะทำให้คีย์ส่วนตัวรั่วไหล - ผู้คนจำนวนมากรวมถึงคีย์การลงนาม PS3 ของ Sony) EdDSA (โดยเฉพาะ Ed25519) ได้รับการออกแบบมาเพื่อหลีกเลี่ยงกับดักเหล่านี้ด้วย nonce ที่กำหนดไว้และโครงสร้างที่สะอาดยิ่งขึ้น
Performance
สำหรับการรักษาความปลอดภัย 128 บิต:การลงนาม
- RSA-3072: ~5 ms ต่อการดำเนินการบนสมัยใหม่ ฮาร์ดแวร์
- Ed25519 การลงนาม: ~0.05 ms ต่อการดำเนินการการตรวจสอบ
- RSA-3072: ~0.5 ms
- Ed25519 การตรวจสอบ: ~0.15 ms
The 100× การเร่งความเร็วในการลงนามคือสาเหตุที่โปรโตคอลสมัยใหม่ใช้ ECC แม้ว่าแบนด์วิธจะไม่ใช่ปัญหาคอขวดก็ตาม เซิร์ฟเวอร์ที่จัดการแฮนด์เชค TLS หลายพันครั้งต่อวินาที มองเห็นความแตกต่างโดยตรงในการโหลด CPU
โดยที่ ECC ยังไม่เพียงพอ
คอมพิวเตอร์ควอนตัมที่ใช้อัลกอริทึมของ Shor จะทำลาย ECC เช่นเดียวกับที่ทำลาย RSA ในเวลาพหุนาม การเข้ารหัสหลังควอนตัมจะแทนที่ทั้งแบบแผนแบบขัดแตะ แบบแฮช หรือแบบโค้ด มาตรฐานหลังควอนตัมของ NIST (Kyber สำหรับ KEM, Dilithium สำหรับลายเซ็น) ขณะนี้อยู่ในการใช้งานควบคู่ไปกับ ECC ไคลเอนต์ TLS และโปรโตคอล VPN สมัยใหม่เริ่มจัดส่งแฮนด์เชคแบบไฮบริดที่รวม ECDH เข้ากับ KEM หลังควอนตัม ดังนั้นการเชื่อมต่อจึงปลอดภัยหาก either ยังคงไม่ขาดตอน
คำถามที่พบบ่อย
- ECC ปลอดภัยกว่า RSA หรือไม่
- ใช่ — มากกว่านี้อีกมาก ECC-256 µ RSA-3072 ในการรักษาความปลอดภัยแบบคลาสสิก แต่ "ปลอดภัยกว่า" ขึ้นอยู่กับรูปแบบภัยคุกคาม เมื่อเทียบกับคอมพิวเตอร์ควอนตัม ทั้งคู่ล้มเหลว ลำดับญาติไม่เปลี่ยนแปลง เมื่อเทียบกับศัตรูในปัจจุบัน ทั้งสองอย่างไม่มีปัญหาหากนำไปใช้อย่างเหมาะสม ข้อดีของ ECC คือประสิทธิภาพและขนาดคีย์ ไม่ใช่ความปลอดภัยแบบดิบ
- เหตุใด Bitcoin จึงใช้ secp256k1 แทนที่จะเป็น secp256r1
- เมื่อ Satoshi Nakamoto ออกแบบ Bitcoin ในปี 2008 secp256k1 (หรือที่เรียกว่า "เส้นโค้ง Koblitz") นั้นมีมาตรฐานน้อยกว่า แต่มีคุณสมบัติทางโครงสร้างที่ทำให้การใช้งานบางอย่างเร็วขึ้น ไม่มีเหตุผลด้านการเข้ารหัสที่เชื่อกันอย่างกว้างขวางที่จะเลือกใช้มันมากกว่า secp256r1 และทั้งสองอย่างก็น่าจะได้ผล
- Ed25519 และ ECDSA แตกต่างกันอย่างไร?
- ทั้งสองแบบเป็นโครงร่างอันเป็นเอกลักษณ์บนเส้นโค้งรูปวงรี ECDSA มีอายุมากกว่า มีมาตรฐานในข้อกำหนดต่างๆ มากมาย และมีข้อผิดพลาดในการใช้งานในอดีต (ไม่ใช้ซ้ำ) Ed25519 ได้รับการออกแบบโดย Bernstein เพื่อให้ปลอดภัยยิ่งขึ้น: สิ่งสำคัญที่กำหนดได้เอง โครงสร้างที่สะอาดยิ่งขึ้น เร็วขึ้น และปุ่มเล็กลง การออกแบบใหม่ชอบ Ed25519; การทำงานร่วมกันแบบเดิมมักบังคับให้ ECDSA
- เส้นโค้ง NIST มีแบ็คดอร์หรือไม่?
- มีการคาดเดากันมานานเกี่ยวกับค่าคงที่ใน NIST P-256 เนื่องจากไม่ได้อธิบายที่มาของค่าเหล่านี้อย่างครบถ้วน ไม่พบประตูหลังในการวิเคราะห์มากกว่า 20 ปี นักเข้ารหัสบางคนชอบ Curve25519 เนื่องจากค่าคงที่นั้นได้มาจากพารามิเตอร์ที่เลือกอย่างเปิดเผย มุมมองกระแสหลัก: P-256 มีความปลอดภัยในทางปฏิบัติ
- ECC จะล้าสมัยใน 10 ปีหรือไม่?
- บางส่วน. แผนงานหลังควอนตัมจะถูกใช้งานควบคู่ไปกับ ECC ในโหมดไฮบริดในระยะกลาง — อัลกอริธึมทั้งสองในการจับมือกันจะปลอดภัยหากทั้งสองอย่างไม่ขาดตอน Pure-ECC จะยังคงเป็นเรื่องปกติเนื่องจากฮาร์ดแวร์ควอนตัมที่สามารถทำลาย ECC 256 บิตได้นั้นยังอีกหลายปี แต่แนวโน้มจะมุ่งสู่ไฮบริดโดยค่าเริ่มต้นอย่างชัดเจน