DSA และ RSA ต่างกันอย่างไร


114

ดูเหมือนว่าทั้งสองเป็นอัลกอริทึมการเข้ารหัสที่ต้องใช้คีย์สาธารณะและคีย์ส่วนตัว เหตุใดฉันจึงเลือกอย่างใดอย่างหนึ่งเพื่อให้การเข้ารหัสในแอปพลิเคชันเซิร์ฟเวอร์ไคลเอนต์ของฉัน


3
ดังกล่าวโดยอองรี , DSA ไม่ได้สำหรับการเข้ารหัสเพียงการลงนาม
Samveen

คำตอบ:


27

อ้างถึงhttps://web.archive.org/web/20140212143556/http://courses.cs.tamu.edu:80/pooch/665_spring2008/Australian-sec-2006/less19.html

RSA
เข้ารหัส RSA และถอดรหัสมีการสับเปลี่ยน
จึงอาจนำมาใช้โดยตรงเป็นโครงการลายเซ็นดิจิตอล
ให้โครงการอาร์เอส {(E, R), (d, P, Q)}
จะลงนามในข้อความ M คำนวณ:
S = M เพาเวอร์ดี (mod R)
เพื่อตรวจสอบลายเซ็นคำนวณ:
M = S กำลัง e (mod R) = M power ed (mod R) = M (mod R)

RSA สามารถใช้ได้ทั้งสำหรับการเข้ารหัสและลายเซ็นดิจิทัล เพียงแค่ย้อนกลับลำดับที่ใช้เลขชี้กำลัง: เลขชี้กำลังลับ (d) เพื่อสร้างลายเซ็นเลขยกกำลังสาธารณะ (e) เพื่อให้ทุกคนตรวจสอบลายเซ็น อย่างอื่นเหมือนกันหมด

DSA (Digital Signature Algorithm)
DSA เป็นตัวแปรบนอัลกอริทึม ElGamal และ Schnorr สร้างลายเซ็น 320 บิต แต่ด้วยความปลอดภัย 512-1024 บิตอีกครั้งขึ้นอยู่กับความยากลำบากในการคำนวณลอการิทึมแบบแยกส่วนได้รับการยอมรับอย่างกว้างขวาง

DSA Key Generation ที่
แชร์สาธารณะทั่วโลกเป็นครั้งแรก เลือกค่าคีย์ (p, q, g):
เลือกไพรม์ไพร์มขนาดใหญ่ p = 2 พาวเวอร์ L
โดยที่ L = 512 ถึง 1024 บิตและเป็นผลคูณของ 64
เลือก q ซึ่งเป็นปัจจัยเฉพาะ 160 บิตของ p-1
เลือก g = h กำลัง (p-1) / q
สำหรับ h1 ใด ๆ
จากนั้นผู้ใช้แต่ละคนเลือกคีย์ส่วนตัวและคำนวณคีย์สาธารณะของพวกเขา:
เลือก x คำนวณ y = g กำลัง x (mod p)

การสร้างคีย์ DSA เกี่ยวข้อง แต่ค่อนข้างซับซ้อนกว่า El Gamal ส่วนใหญ่เป็นเพราะการใช้โมดูลัสรอง 160 บิต q ที่ใช้เพื่อช่วยเร่งการคำนวณและลดขนาดของลายเซ็นที่เป็นผลลัพธ์

การสร้างลายเซ็น DSA และการตรวจสอบ

เพื่อเซ็นชื่อข้อความ M
สร้างคีย์ลายเซ็นแบบสุ่ม k, k คำนวณ
r = (g power k (mod p)) (mod q)
s = k-1.SHA (M) + xr (mod q)
ส่ง ลายเซ็น (r, s) พร้อมข้อความ

เพื่อตรวจสอบลายเซ็น, คำนวณ:
w = s-1 (mod q)
u1 = (SHA (M) .w) (mod q)
u2 = rw (mod q)
v = (g power u1.y กำลัง u2 (mod p)) (mod q)
ถ้า v = r แล้วลายเซ็นจะถูกตรวจสอบ

การสร้างลายเซ็นจะคล้ายกับ ElGamal อีกครั้งด้วยการใช้คีย์ลายเซ็นชั่วคราวต่อข้อความ k แต่ทำการ calc ก่อน mod p จากนั้น mod q เพื่อลดขนาดของผลลัพธ์ โปรดทราบว่าการใช้ฟังก์ชันแฮช SHA มีความชัดเจนที่นี่ การตรวจสอบยังประกอบด้วยการเปรียบเทียบการคำนวณสองรายการอีกครั้งมีความซับซ้อนกว่าเล็กน้อย แต่เกี่ยวข้องกับ El Gamal
โปรดทราบว่าการคำนวณเกือบทั้งหมดเป็น mod q และด้วยเหตุนี้จึงเร็วกว่ามาก
แต่ตรงกันข้ามกับ RSA สามารถใช้ DSA สำหรับลายเซ็นดิจิทัลเท่านั้น

การรักษาความปลอดภัย DSA
การมีอยู่ของช่องสัญญาณอ่อนเกินมีอยู่ในหลายรูปแบบ (ใด ๆ ที่จำเป็นต้องเลือกหมายเลขสุ่ม) ไม่ใช่เฉพาะ DSA เป็นการเน้นย้ำถึงความต้องการ "ความปลอดภัยของระบบ" ไม่ใช่แค่อัลกอริทึมที่ดีเท่านั้น


ลิงก์ไปยังข้อมูลอ้างอิงของคุณเสีย
Paul Wintz

82

ตรวจสอบคำตอบ AVA ด้านล่าง

คำตอบเก่าของฉันดูเหมือนจะผิด


นั่นหมายความว่าถ้าข้อมูลที่จะเข้ารหัสมีจำนวนมากมันจะทำงานได้เร็วขึ้นโดยใช้ RSA หรือไม่?
WilliamKF

2
ไม่วิธีอื่น ๆ DSA เร็วกว่าในการเซ็นชื่อ (ซึ่งในทางคณิตศาสตร์เท่ากับการเข้ารหัสมากกว่าหรือน้อยกว่า) ดังนั้นหากคุณต้องเข้ารหัสมากและถอดรหัสบ่อยๆ DSA จะเร็วกว่า
อองรี

ข้อมูลจำนวนมากที่จะเข้ารหัสที่ฝั่งไคลเอ็นต์ แต่จะถูกถอดรหัสเพียงครั้งเดียวที่เซิร์ฟเวอร์ดังนั้น DSA จะยังคงชนะอยู่หรือไม่?
WilliamKF

30
DSA ไม่เข้ารหัส ทำซ้ำ DSA ไม่เข้ารหัส นี่คือคำถาม: "S" ใน DSA หมายถึงอะไร
ประธานเจมส์เค. โพล์ก

4
@GregS RSA สามารถเข้ารหัสเทียบกับ DSA ที่ไม่สามารถเข้ารหัสได้ส่วนใหญ่เป็นปัญหาของคำศัพท์ เราเรียกอัลกอริทึมที่แตกต่างกัน RSA ซึ่งบางเครื่องหมาย (เช่น RSA-PSS) ซึ่งบางส่วนเข้ารหัส (เช่น RSA-OAEP) แต่เราให้ทุกอัลกอริทึมในการเข้ารหัสแบบกลุ่มเป็นชื่อที่แตกต่างกันโดยเรียกหนึ่งในอัลกอริทึมการเข้ารหัสการเข้ารหัส ElGamal และเรียกหนึ่งในอัลกอริทึมลายเซ็น DSA
CodesInChaos

24

Btw คุณไม่สามารถเข้ารหัสด้วย DSA ได้เพียงลงชื่อเข้าใช้ แม้ว่าจะเทียบเท่าทางคณิตศาสตร์ (มากหรือน้อย) แต่คุณไม่สามารถใช้ DSA ในทางปฏิบัติเป็นรูปแบบการเข้ารหัสได้ แต่เป็นรูปแบบลายเซ็นดิจิทัลเท่านั้น


20

เมื่ออ้างอิงถึงman ssh-keygenความยาวของคีย์ DSA จะถูก จำกัด ไว้ที่ 1024 บิตเพื่อให้สอดคล้องกับ FIPS 186-2 ของ NIST อย่างไรก็ตามคีย์ DSA ที่ยาวกว่านั้นเป็นไปได้ในทางทฤษฎี FIPS 186-3 อนุญาตอย่างชัดเจน นอกจากนี้ยังไม่รับประกันความปลอดภัยด้วยคีย์ RSA หรือ DSA ที่มีความยาว 1024 บิตอีกต่อไป

สรุปได้ว่าคีย์ RSA 2048 บิตเป็นตัวเลือกที่ดีที่สุดในปัจจุบัน

ข้อควรระวังเพิ่มเติมในการดำเนินการ

การสร้างการเชื่อมต่อ SSH ที่ปลอดภัยมีมากกว่าการเลือกเทคโนโลยีคู่คีย์เข้ารหัสที่ปลอดภัย ในมุมมองของการเปิดเผย NSA ของ Edward Snowden เราต้องระมัดระวังมากกว่าที่เคยคิดว่าเพียงพอ

ในการตั้งชื่อเพียงตัวอย่างเดียวการใช้อัลกอริทึมการแลกเปลี่ยนคีย์ที่ปลอดภัยก็มีความสำคัญเท่าเทียมกัน นี่เป็นภาพรวมที่ดีของปัจจุบันปฏิบัติที่ดีที่สุด SSH แข็ง


เวอร์ชันเก่าบางรุ่นssh-keygenอนุญาตให้ใช้คีย์ขนาดบิตอื่น ๆ ได้เช่นกัน (ตัวฉันเองใช้คีย์ DSA 2048 บิตที่สร้างขึ้นโดยใช้ssh-keygenRHEL)
Samveen

6

และนอกเหนือจากคำตอบที่ดีข้างต้น

  • DSA ใช้ลอการิทึมแบบไม่ต่อเนื่อง
  • RSA ใช้ Integer Factorization

RSA ย่อมาจาก Ron R ivest, Adi S hamir และ Leonard A dleman

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.