RSA เป็นระบบเข้ารหัสแบบคีย์สาธารณะ (Public-Key Cryptosystem) ที่ใช้กันอย่างแพร่หลายสำหรับการรักษาความปลอดภัยข้อมูลที่ละเอียดอ่อน โดยเฉพาะเมื่อส่งผ่านเครือข่ายที่ไม่ปลอดภัย เช่น อินเทอร์เน็ต
ในการเข้ารหัส RSA ทั้งคีย์สาธารณะและคีย์ส่วนตัวสามารถเข้ารหัสข้อความได้ คีย์ตรงข้ามกับที่ใช้เข้ารหัสจะถูกใช้ในการถอดรหัส คุณสมบัตินี้เป็นเหตุผลหนึ่งที่ทำให้ RSA กลายเป็นอัลกอริทึมแบบอสมิตร (Asymmetric Algorithm) ที่นิยมใช้มากที่สุด รองรับการטיחความลับ ความสมบูรณ์ ความถูกต้อง และการปฏิเสธไม่ได้ (Non-repudiation) ของการเชื่อมต่อและการจัดเก็บข้อมูลดิจิทัล
RSA ต้องการกลุ่มเชิงคูณ (Multiplicative Group) G =< Zфn, *, X > สำหรับการสร้างคีย์ กลุ่มนี้ให้การคูณและการหารเท่านั้น ซึ่งจำเป็นสำหรับการสร้างคีย์สาธารณะและคีย์ส่วนตัว กลุ่มนี้ถูกเก็บเป็นความลับจากสาธารณะ เนื่องจากมอดุลัส φ(n) ถูกปิดบังจากสาธารณะ
อัลกอริทึมการสร้างคีย์สาธารณะและคีย์ส่วนตัว เป็นส่วนที่ซับซ้อนที่สุดของการเข้ารหัส RSA มีการสร้างจำนวนเฉพาะขนาดใหญ่สองจำนวน p และ q โดยใช้การทดสอบ Rabin-Miller
คำนวณมอดุลัส n = p × q จำนวนนี้ใช้ร่วมกันระหว่างคีย์สาธารณะและคีย์ส่วนตัว และเป็นตัวเชื่อมโยงระหว่างกัน ความยาวของ n โดยทั่วไปวัดเป็นบิต เรียกว่า ความยาวคีย์ (Key Length)
คีย์สาธารณะประกอบด้วย มอดุลัส n และเลขยกกำลังสาธารณะ e ซึ่งมักตั้งค่าที่ 65537 เนื่องจากเป็นจำนวนเฉพาะที่ไม่ใหญ่เกินไป ค่า e ไม่จำเป็นต้องเป็นจำนวนเฉพาะที่เลือกแบบส่วนตัว เนื่องจากคีย์สาธารณะถูกแชร์ให้ทุกคน
คีย์ส่วนตัวประกอบด้วย มอดุลัส n และเลขยกกำลังส่วนตัว d ซึ่งคำนวณโดยใช้อัลกอริทึมยุคลิดขยาย (Extended Euclidean Algorithm) เพื่อหาค่าผกผันเชิงคูณ (Multiplicative Inverse) เทียบกับทอเทียนต์ (Totient) ของ n
พิจารณาเลขคณิตแบบมอดุลัส n ให้ e เป็นจำนวนเต็มที่เป็นเฉพาะร่วมกับ φ(n) ของ n และ d เป็นผกผันเชิงคูณของ e มอดุลัส φ(n) สัญลักษณ์ต่างๆ สรุปดังนี้:
- n = มอดุลัสสำหรับเลขคณิตแบบมอดุลัส
- φ(n) = ทอเทียนต์ของ n
- e = จำนวนเต็มที่เป็นเฉพาะร่วมกับ φ(n) [รับประกันว่า e จะมีผกผันเชิงคูณมอดุลัส φ(n)]
- d = จำนวนเต็มที่เป็นผกผันเชิงคูณของ e มอดุลัส φ(n)
ขั้นตอนการคำนวณสร้างคีย์
- สร้างจำนวนเฉพาะสองจำนวนที่ต่างกัน คือ p และ q
- คำนวณมอดุลัส n = p × q
- คำนวณทอเทียนต์ φ(n) = (p − 1) × (q − 1)
- เลือกเลขยกกำลังสาธารณะ e เป็นจำนวนเต็ม ที่ 1 < e < φ(n) และ gcd(φ(n), e) = 1
- คำนวณเลขยกกำลังส่วนตัว d ที่ d = e−1 mod φ(n)
- คีย์สาธารณะ = [e, n]
- คีย์ส่วนตัว = [d, n]