ดูเหมือนว่าทั้งสองเป็นอัลกอริทึมการเข้ารหัสที่ต้องใช้คีย์สาธารณะและคีย์ส่วนตัว เหตุใดฉันจึงเลือกอย่างใดอย่างหนึ่งเพื่อให้การเข้ารหัสในแอปพลิเคชันเซิร์ฟเวอร์ไคลเอนต์ของฉัน
ดูเหมือนว่าทั้งสองเป็นอัลกอริทึมการเข้ารหัสที่ต้องใช้คีย์สาธารณะและคีย์ส่วนตัว เหตุใดฉันจึงเลือกอย่างใดอย่างหนึ่งเพื่อให้การเข้ารหัสในแอปพลิเคชันเซิร์ฟเวอร์ไคลเอนต์ของฉัน
คำตอบ:
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 เป็นการเน้นย้ำถึงความต้องการ "ความปลอดภัยของระบบ" ไม่ใช่แค่อัลกอริทึมที่ดีเท่านั้น
ตรวจสอบคำตอบ AVA ด้านล่าง
คำตอบเก่าของฉันดูเหมือนจะผิด
Btw คุณไม่สามารถเข้ารหัสด้วย DSA ได้เพียงลงชื่อเข้าใช้ แม้ว่าจะเทียบเท่าทางคณิตศาสตร์ (มากหรือน้อย) แต่คุณไม่สามารถใช้ DSA ในทางปฏิบัติเป็นรูปแบบการเข้ารหัสได้ แต่เป็นรูปแบบลายเซ็นดิจิทัลเท่านั้น
เมื่ออ้างอิงถึง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-keygen
RHEL)
และนอกเหนือจากคำตอบที่ดีข้างต้น
RSA ย่อมาจาก Ron R ivest, Adi S hamir และ Leonard A dleman