Cryptology Academy · บทเรียน

รูปแบบลายมือชื่อ DSA และ ECDSA

เปรียบเทียบลายมือชื่อ RSA กับ DSA และรูปแบบที่ใช้เส้นโค้งวงรี

บทเรียน 3 จาก 413 ขั้นตอน

รูปแบบลายมือชื่อ DSA และ ECDSA เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

DSA และ ECDSA เป็นโครงร่างลายมือชื่อทางเลือกที่ใช้ความยากของปัญหาโลการิทึมไม่ต่อเนื่อง ECDSA ครองการใช้งานในระบบสมัยใหม่ด้วยคีย์ที่เล็กกว่าและการดำเนินการที่เร็วกว่า

ภาพรวมของ DSA

DSA (NIST, 1994) ใช้กลุ่มวัฏจักรอันดับจำนวนเฉพาะ q ภายใน Z*p การสร้างคีย์: คีย์ส่วนตัว x และคีย์สาธารณะ y = g^x mod p มาตรฐานคือ p ขนาด 2048 บิต และ q ขนาด 256 บิต

อัลกอริทึมการลงนาม DSA

1. สร้างค่าที่ใช้ครั้งเดียวแบบสุ่ม k (1 < k < q) 2. r = (g^k mod p) mod q 3. s = k^(-1) × (Hash(M) + x×r) mod q 4. ลายมือชื่อ: (r, s)

การตรวจสอบ DSA

1. u1 = Hash(M) × s^(-1) mod q 2. u2 = r × s^(-1) mod q 3. v = (g^u1 × y^u2 mod p) mod q 4. ถูกต้องเมื่อ v == r

ช่องโหว่ของค่าที่ใช้ครั้งเดียวใน DSA

หากใช้ k เดิมซ้ำสองครั้ง: ลายมือชื่อทั้งสองรายการจะมีค่า r ร่วมกัน จากคู่ (r,s1) และ (r,s2) สองคู่ จะสามารถคำนวณคีย์ส่วนตัว x ได้โดยตรง เหตุการณ์นี้ทำลายระบบ PS3 เพราะใช้ k=1 ทุกครั้ง

ภาพรวมของ ECDSA

ECDSA คือการนำ DSA ไปใช้บนกลุ่มเส้นโค้งวงรีแทน Z*p เส้นโค้งให้ความปลอดภัยเทียบเท่ากันด้วยพารามิเตอร์ที่เล็กกว่ามาก: ECDSA-256 มีความปลอดภัยใกล้เคียงกับ DSA-3072

ECDSA ใน Python

from cryptography.hazmat.primitives.asymmetric import ec from cryptography.hazmat.primitives import hashes private_key = ec.generate_private_key(ec.SECP256R1()) sig = private_key.sign(message, ec.ECDSA(hashes.SHA256())) public_key = private_key.public_key() public_key.verify(sig, message, ec.ECDSA(hashes.SHA256()))

ECDSA แบบกำหนดแน่นอน (RFC 6979)

RFC 6979 คำนวณ k แบบกำหนดแน่นอนจากคีย์ส่วนตัวและค่าแฮชของข้อความ วิธีนี้ไม่ต้องพึ่งพาเครื่องกำเนิดตัวเลขสุ่ม (RNG) และทำให้การใช้ค่าที่ใช้ครั้งเดียวซ้ำเป็นไปไม่ได้ การใช้งานสมัยใหม่ทั้งหมดใช้ RFC 6979

EdDSA: Ed25519

Ed25519 (DSA บนเส้นโค้ง Edwards) ใช้รูปแบบ Edwards แบบบิดของ Curve25519 ออกแบบมาให้เป็นแบบกำหนดแน่นอน ใช้เวลาเท่ากันโดยไม่ขึ้นกับข้อมูล และเร็วกว่า ECDSA แนะนำให้ใช้กับโพรโทคอลใหม่ (คีย์ SSH, TLS 1.3, Signal)

การเปรียบเทียบขนาดคีย์

ลายมือชื่อ RSA-2048: 256 ไบต์ ลายมือชื่อ ECDSA-256: ประมาณ 71 ไบต์ ลายมือชื่อ Ed25519: 64 ไบต์ คีย์สาธารณะ Ed25519: 32 ไบต์ ความแตกต่างด้านขนาดมีความสำคัญกับอุปกรณ์ที่มีทรัพยากรจำกัด

เส้นโค้งมาตรฐาน

NIST P-256 (secp256r1): TLS และการปฏิบัติตาม FIPS secp256k1: Bitcoin และ Ethereum Curve25519/Ed25519: Signal, WireGuard และ SSH รุ่นใหม่กว่า Brainpool: มาตรฐานยุโรปบางส่วน

ตรวจสอบความเข้าใจ

หากใช้ค่าที่ใช้ครั้งเดียว k ใน DSA/ECDSA ซ้ำ จะทำให้เกิดช่องโหว่ร้ายแรงถึงขั้นหายนะใด

สรุป

คุณเข้าใจ DSA, ECDSA และ Ed25519 แล้ว ต่อไปเราจะศึกษาว่าลายมือชื่อดิจิทัลปกป้องแอปพลิเคชันจริงอย่างไร โดยเริ่มจากการลงนามโค้ดและอีเมล
เริ่มต้นได้ฟรี

เรียนรู้ Cryptology Academy ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
67
บทเรียน
261

คำถามที่พบบ่อย

บทเรียน “รูปแบบลายมือชื่อ DSA และ ECDSA” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “รูปแบบลายมือชื่อ DSA และ ECDSA” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบลายมือชื่อ DSA และ ECDSA”

เปรียบเทียบลายมือชื่อ RSA กับ DSA และรูปแบบที่ใช้เส้นโค้งวงรี คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “รูปแบบลายมือชื่อ DSA และ ECDSA” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ลายมือชื่อดิจิทัลคืออะไร
  2. ลายมือชื่อ RSA: การลงนามและการตรวจสอบ
  3. รูปแบบลายมือชื่อ DSA และ ECDSA
  4. ลายมือชื่อในโลกจริง: การลงนามโค้ดและอีเมล
← กลับไปที่ Cryptology Academy