RSA: คืออะไร, อัลกอริทึมและการประยุกต์ใช้การเข้ารหัส

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-04-02 เวลาอ่าน: 9 นาที

RSA เป็นระบบเข้ารหัสคีย์สาธารณะที่ให้การเข้ารหัสและลายเซ็นดิจิทัลบนพื้นฐานของความซับซ้อนเชิงคำนวณของการแยกตัวประกอบจำนวนมาก ตาม NIST Special Publication 800-56B Rev. 2 (2023), RSA ที่มีความยาวคีย์ 2048 บิต ยังคงเป็นมาตรฐานความปลอดภัยสำหรับระบบของรัฐบาลและเชิงพาณิชย์ อัลกอริทึมนี้ถูกใช้อย่างแพร่หลายในโปรโตคอล TLS, ลายเซ็นดิจิทัล และการเข้ารหัสข้อมูลในแอปพลิเคชันโมบาย

ประเด็นสำคัญ

  • RSA เป็นอัลกอริทึมการเข้ารหัสแบบอสมมาตรที่ใช้คู่คีย์: สาธารณะและส่วนตัว
  • ความปลอดภัย ของอัลกอริทึมขึ้นอยู่กับความยากทางคณิตศาสตร์ของการแยกจำนวนมากออกเป็นตัวประกอบเฉพาะ
  • ขนาดคีย์ 2048 บิตถือเป็นมาตรฐานขั้นต่ำที่เชื่อถือได้ตั้งแต่ปี 2023 ตาม NIST
  • RSA ถูกใช้ในใบรับรอง TLS, ลายเซ็นดิจิทัล และโปรโตคอลการตรวจสอบสิทธิ์
  • การพัฒนาโมบาย ใช้ RSA ผ่านไลบรารีเข้ารหัสในตัว: Android Keystore และ iOS Security Framework

RSA คืออะไร?

RSA เป็นอัลกอริทึมการเข้ารหัสคีย์สาธารณะที่พัฒนาในปี 1977 โดย Ron Rivest, Adi Shamir และ Leonard Adleman ชื่อนี้เกิดจากอักษรตัวแรกของนามสกุลของผู้เขียน อัลกอริทึมนี้กลายเป็นระบบเข้ารหัสแบบอสมมาตรที่ใช้งานได้จริงเป็นระบบแรกที่คีย์การเข้ารหัสและถอดรหัสแตกต่างกัน

ประวัติการสร้าง

อัลกอริทึม RSA ถูกตีพิมพ์ในปี 1977 ในนิตยสาร Scientific American และมีพื้นฐานมาจากงานก่อนหน้าของ Whitfield Diffie และ Martin Hellman เกี่ยวกับการเข้ารหัสคีย์สาธารณะ สถาบันเทคโนโลยีแมสซาชูเซตส์ได้รับสิทธิบัตรสำหรับ RSA ในปี 1983 ซึ่งมีผลจนถึงปี 2000 ตามรายงานของ RSA Laboratories (2023), อัลกอริทึมนี้ยังคงเป็นหนึ่งในมาตรฐานการเข้ารหัสที่ แพร่หลายที่สุด ในโลก — มันถูกใช้ในอุปกรณ์หลายพันล้านเครื่องทุกวัน

หลักการของความไม่สมมาตร

แตกต่างจากการเข้ารหัสแบบสมมาตรที่ใช้คีย์เดียวกันทั้งการเข้ารหัสและถอดรหัส RSA ทำงานกับคู่คีย์ที่เชื่อมโยงทางคณิตศาสตร์ คีย์สาธารณะสามารถเผยแพร่ให้ใครก็ได้โดยไม่มีความเสี่ยงต่อการถูกบุกรุกระบบ คีย์ส่วนตัวรู้เฉพาะเจ้าของและไม่เคยถูกส่งผ่านเครือข่าย ตามการศึกษา IBM Security X-Force Threat Intelligence Index (2024), การเข้ารหัสแบบอสมมาตรถูกใช้ใน 96% ของโปรโตคอลการส่งข้อมูลที่ปลอดภัยสมัยใหม่

พื้นฐานทางคณิตศาสตร์

ความปลอดภัยของ RSA ขึ้นอยู่กับปัญหาการแยกตัวประกอบ — การแยกผลคูณของจำนวนเฉพาะขนาดใหญ่ออกเป็นตัวประกอบ หากคุณเลือกจำนวนเฉพาะ p และ q ขนาด 1024 บิตแต่ละตัว ผลคูณ n ของพวกมันจะเท่ากับ 2048 บิต การคำนวณ p และ q โดยรู้เพียง n ด้วยวิธีการสมัยใหม่นั้นเป็นไปไม่ได้ในทางปฏิบัติ: ตามการประเมินของผู้เชี่ยวชาญ CNRS (2024), การถอดรหัส RSA-2048 จะต้องใช้เวลาคำนวณ มากกว่า 3 แสนล้าน ปีบนคอมพิวเตอร์แบบคลาสสิก

อัลกอริทึม RSA ทำงานอย่างไร

ลองพิจารณาวงจรการทำงานทั้งหมดของ RSA ตั้งแต่การสร้างคีย์ไปจนถึงการเข้ารหัสและถอดรหัสข้อความ การทำความเข้าใจขั้นตอนเหล่านี้จำเป็นสำหรับการ implement อัลกอริทึมที่ถูกต้องในแอปพลิเคชันโมบาย

การสร้างคีย์

กระบวนการเริ่มต้นด้วยการเลือกจำนวนเฉพาะขนาดใหญ่สองตัว p และ q คำนวณมอดุลัส n = p x q ซึ่งกำหนดความยาวของคีย์ จากนั้นคำนวณฟังก์ชันโทเทียนต์ของออยเลอร์ phi(n) = (p-1)(q-1) เลือกเลขชี้กำลังสาธารณะ e ที่เป็นจำนวนเฉพาะสัมพัทธ์กับ phi(n) เลขชี้กำลังส่วนตัว d คำนวณเป็นตัวผกผันการคูณแบบมอดุลาร์ของ e มอดุโล phi(n) ตาม NIST SP 800-56B Rev. 2, ความยาวขั้นต่ำของ n ต้องเป็น 2048 บิตเพื่อให้การป้องกันที่เพียงพอ

java
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.SecureRandom;

public class RSAKeyGenerator {
    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
        generator.initialize(2048, new SecureRandom());
        return generator.generateKeyPair();
    }
}

การเข้ารหัสและถอดรหัส

ในการเข้ารหัสข้อความ m, ผู้ส่งแปลงเป็นจำนวนเต็มที่น้อยกว่า n และคำนวณข้อความเข้ารหัส c = m^e mod n ผู้รับใช้คีย์ส่วนตัว d เพื่อกู้คืนข้อความต้นฉบับ: m = c^d mod n สิ่งสำคัญที่ต้องทราบคือ RSA ไม่ได้ออกแบบมาสำหรับการเข้ารหัสข้อมูลปริมาณมากเนื่องจากประสิทธิภาพต่ำ — ขนาดข้อความสูงสุดเท่ากับความยาวคีย์ลบด้วยไบต์โอเวอร์เฮด (ประมาณ 190 ไบต์สำหรับ RSA-2048 ด้วย OAEP)

java
import javax.crypto.Cipher;
import java.security.PublicKey;
import java.util.Base64;

public class RSAEncryptor {
    public static String encrypt(String data, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encrypted = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encrypted);
    }
}

ลายเซ็นดิจิทัลด้วย RSA

RSA ยังใช้สร้างลายเซ็นดิจิทัล — กลไกในการตรวจสอบความถูกต้องแท้จริงและความสมบูรณ์ของข้อมูล เจ้าของเซ็นแฮชของข้อความด้วยคีย์ส่วนตัวของตน และใครก็ตามสามารถตรวจสอบลายเซ็นโดยใช้คีย์สาธารณะ ตามรายงาน Sectigo Certificate Transparency (2025), มากกว่า 85% ของใบรับรอง TLS บนอินเทอร์เน็ตใช้ RSA สำหรับลายเซ็นดิจิทัล ทำให้อัลกอริทึมเป็นพื้นฐานของความไว้วางใจสำหรับการสื่อสารทางเว็บ

kotlin
import java.security.Signature

fun signData(data: ByteArray, privateKey: java.security.PrivateKey): ByteArray {
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initSign(privateKey)
    signature.update(data)
    return signature.sign()
}

fun verifySignature(
    data: ByteArray, signedData: ByteArray, publicKey: java.security.PublicKey
): Boolean {
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initVerify(publicKey)
    signature.update(data)
    return signature.verify(signedData)
}

ขนาดคีย์และระดับความปลอดภัย

ความยาวของคีย์ส่งผลโดยตรงต่อความแข็งแกร่งทางการเข้ารหัสของ RSA เมื่อพลังการคำนวณเพิ่มขึ้น ขนาดคีย์ขั้นต่ำที่ยอมรับได้จะถูกทบทวนเป็นประจำโดยองค์กรมาตรฐานระหว่างประเทศ มาดูคำแนะนำปัจจุบันจาก NIST และหน่วยงานกำกับดูแลอื่นๆ

ความยาวคีย์เทียบเท่าสมมาตรสถานะ
1024 บิต80 บิตห้ามใช้ตั้งแต่ปี 2023
2048 บิต112 บิตมาตรฐานขั้นต่ำ
3072 บิต128 บิตแนะนำสำหรับระบบใหม่
4096 บิต256 บิตสำหรับข้อมูลลับ

ผลกระทบต่อประสิทธิภาพ

การเพิ่มความยาวคีย์ RSA ส่งผลอย่างมีนัยสำคัญต่อเวลาดำเนินการของการดำเนินการ การสร้างคีย์ 4096 บิตใช้เวลาประมาณ 10 เท่าของคีย์ 2048 บิต การดำเนินการเข้ารหัสและถอดรหัสด้วยคีย์ที่ยาวขึ้นต้องการทรัพยากรการคำนวณมากขึ้น ซึ่งสำคัญสำหรับ อุปกรณ์โมบาย ที่มีการใช้พลังงานจำกัด

ภัยคุกคามทางควอนตัม

ด้วยการพัฒนาของการคำนวณเชิงควอนตัม RSA สามารถถูกถอดรหัสได้โดยใช้อัลกอริทึมของชอร์ในเวลาพหุนาม อัลกอริทึมนี้ เสนอโดย Peter Shor ในปี 1994, สามารถแยกตัวประกอบจำนวนมากได้ใน O((log n)^3) การดำเนินการ ตาม IBM Quantum Roadmap (2025), การถอดรหัส RSA-2048 ในทางปฏิบัติคาดว่าจะไม่เกิดขึ้นก่อนปี 2035 อย่างไรก็ตาม NIST แนะนำให้ เปลี่ยนผ่านอย่างค่อยเป็นค่อยไป ไปยังอัลกอริทึมหลังควอนตัม CRYSTALS-Kyber และ CRYSTALS-Dilithium

การประยุกต์ใช้ RSA ในการพัฒนาโมบาย

RSA ถูกใช้อย่างแข็งขันในแอปพลิเคชันโมบายเพื่อรับประกันการส่งข้อมูลที่ปลอดภัย การตรวจสอบสิทธิ์เซิร์ฟเวอร์ และการป้องกันธุรกรรมดิจิทัล การผสานรวมดำเนินการผ่าน API การเข้ารหัสมาตรฐานของทั้งสองแพลตฟอร์มหลัก

Android Keystore

แพลตฟอร์ม Android มี Android Keystore — พื้นที่จัดเก็บคีย์การเข้ารหัสของระบบที่ป้องกันโดยระดับฮาร์ดแวร์ Trusted Execution Environment คีย์ RSA ที่สร้างใน KeyStore ไม่สามารถถูกแยกออกจากอุปกรณ์ได้แม้แอปพลิเคชันจะถูกบุกรุก ซึ่งให้การป้องกันการโจมตีที่หลากหลาย รวมถึงมัลแวร์ที่มีสิทธิ์รูท

kotlin
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyPairGenerator

fun generateKeyInAndroidKeystore() {
    val generator = KeyPairGenerator.getInstance(
        KeyProperties.KEY_ALGORITHM_RSA,
        "AndroidKeyStore"
    )
    val spec = KeyGenParameterSpec.Builder(
        "rsa_key_pair",
        KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
    )
        .setKeySize(2048)
        .setBlockModes(KeyProperties.BLOCK_MODE_ECB)
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
        .build()
    generator.initialize(spec)
    val keyPair = generator.generateKeyPair()
}

iOS Security Framework

บน iOS, RSA ถูกจัดการผ่าน Security Framework ด้วยการเข้าถึง Secure Enclave บนอุปกรณ์ที่มีชิป A7 ขึ้นไป Secure Enclave คือโคโปรเซสเซอร์เฉพาะที่แยกจากโปรเซสเซอร์หลักซึ่งดำเนินการเข้ารหัสและเก็บคีย์ในห้องนิรภัยฮาร์ดแวร์ คีย์ RSA สามารถสร้างได้ทั้งภายใน Secure Enclave และใน Keychain ซอฟต์แวร์ด้วยระดับ การเข้าถึง ที่แตกต่างกัน

การเข้ารหัสแบบผสมผสานในทางปฏิบัติ

ในแอปพลิเคชันโมบายจริง RSA ไม่ค่อยถูกใช้สำหรับการเข้ารหัสข้อมูลขนาดใหญ่โดยตรง แนวทางปฏิบัติมาตรฐานคือรูปแบบผสมผสาน: แอปพลิเคชันสร้างคีย์เซสชัน AES, เข้ารหัสด้วยคีย์สาธารณะ RSA ของเซิร์ฟเวอร์ และส่งไปยังเซิร์ฟเวอร์ ทราฟฟิกที่ตามมาทั้งหมดถูกเข้ารหัสด้วย AES ซึ่งเร็วกว่าการส่งข้อมูลโดยตรงผ่าน RSA 100-1000 เท่า

ข้อดีและข้อจำกัดของ RSA

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

ข้อดีหลัก

ข้อได้เปรียบหลักของ RSA คือการแก้ปัญหาการกระจายคีย์พื้นฐาน — คีย์สาธารณะสามารถเผยแพร่ได้อย่างอิสระโดยไม่มีความเสี่ยงต่อการถูกบุกรุกทั้งระบบ ความอเนกประสงค์ของอัลกอริทึมแสดงให้เห็นในการรองรับทั้งการเข้ารหัสและ ลายเซ็นดิจิทัล ด้วยคู่คีย์เดียว นอกจากนี้ RSA มีระบบนิเวศสนับสนุนที่กว้างขวาง: ไลบรารีพร้อมใช้งานสำหรับทุกภาษาและทุกแพลตฟอร์ม

ข้อจำกัดหลัก

ข้อเสียหลักของ RSA คือประสิทธิภาพต่ำเมื่อเทียบกับอัลกอริทึมแบบสมมาตร การถอดรหัส RSA-2048 บนโปรเซสเซอร์โมบายสมัยใหม่ใช้เวลาประมาณ 5-15 มิลลิวินาที ในขณะที่ AES-256 ประมวลผลข้อมูลกิกะไบต์ในเวลาเดียวกัน นอกจากนี้ RSA ยังเสี่ยงต่อการโจมตีเชิงควอนตัมผ่านอัลกอริทึมของชอร์ ซึ่งจำกัดการใช้งานในระบบที่ต้องการการปกป้องข้อมูลระยะยาว

คำแนะนำการใช้งาน

สำหรับโครงการโมบาย ผู้เชี่ยวชาญ NIST แนะนำ: ใช้ RSA เฉพาะสำหรับการเข้ารหัสคีย์และลายเซ็นดิจิทัล เลือกความยาวคีย์อย่างน้อย 3072 บิตสำหรับโครงการใหม่ รวม RSA กับ AES ในรูปแบบผสมผสาน และติดตามการพัฒนามาตรฐานหลังควอนตัมสำหรับการย้ายระบบตามแผนในระยะยาว

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

ความแตกต่างระหว่าง RSA และ AES คืออะไร?

RSA เป็นอัลกอริทึมแบบอสมมาตรที่มีคู่คีย์ใช้สำหรับเข้ารหัสข้อมูลปริมาณน้อยและลายเซ็นดิจิทัล AES เป็นอัลกอริทึมแบบสมมาตรที่มีคีย์ร่วมเดียว ทำงานเร็วกว่า RSA 100-1000 เท่า ในระบบสมัยใหม่จะถูกรวมกัน: RSA ปกป้องการส่งคีย์เซสชัน AES ในขณะที่ AES เข้ารหัส ทราฟฟิกหลัก

ขนาดคีย์ RSA ใดที่ถือว่าปลอดภัยในปัจจุบัน?

ขนาดปลอดภัยขั้นต่ำตั้งแต่ปี 2023 คือ RSA-2048 ตาม NIST SP 800-131A Rev. 2 คีย์ 1024 บิตถูกห้ามอย่างเป็นทางการสำหรับระบบของรัฐบาลสหรัฐฯ สำหรับโครงการใหม่ แนะนำ 3072 บิต ซึ่งให้ส่วนต่างความปลอดภัยและความแข็งแกร่งเทียบเท่ากับการเข้ารหัสแบบสมมาตร 128 บิต

สามารถใช้ RSA ในแอปพลิเคชันโมบายได้หรือไม่?

ได้, RSA ถูกใช้อย่างแพร่หลายในแอปพลิเคชันโมบาย Android มี Android KeyStore สำหรับการสร้างฮาร์ดแวร์และการจัดเก็บคีย์ RSA อย่างปลอดภัย iOS มี Security Framework รองรับ Secure Enclave สำหรับการเข้ารหัสข้อมูลขนาดใหญ่ แนะนำรูปแบบผสมผสาน RSA + AES โดย RSA เข้ารหัสเฉพาะ คีย์เซสชัน

สามารถถอดรหัส RSA-2048 ได้หรือไม่?

บนคอมพิวเตอร์แบบคลาสสิก การถอดรหัส RSA-2048 เป็นไปไม่ได้ในทางปฏิบัติ — ตามการประมาณการปัจจุบัน จะต้องใช้เวลาคำนวณต่อเนื่องมากกว่า 3 แสนล้านปี อย่างไรก็ตาม คอมพิวเตอร์ควอนตัมที่มีควิบิตเพียงพอสามารถถอดรหัส RSA-2048 ได้ในไม่กี่นาทีโดยใช้อัลกอริทึมของชอร์ ตามการประมาณการของ IBM คอมพิวเตอร์ดังกล่าวจะไม่ปรากฏ ก่อนปี 2035

มีทางเลือกใดแทน RSA บ้าง?

ในบรรดาอัลกอริทึมแบบอสมมาตร ECC (Elliptic Curve Cryptography) เป็นที่นิยม ให้ความปลอดภัยเทียบเท่าโดยมีความยาวคีย์สั้นกว่า — ECC 256 บิตเทียบเท่ากับ RSA-3072 สำหรับยุคหลังควอนตัม NIST เลือก CRYSTALS-Kyber สำหรับการเข้ารหัสและ CRYSTALS-Dilithium สำหรับ ลายเซ็นดิจิทัล ในปี 2024

สรุป

  • RSA เป็นอัลกอริทึมการเข้ารหัสแบบอสมมาตรบนพื้นฐานของความยากในการแยกตัวประกอบจำนวนมาก
  • คู่คีย์ — สาธารณะสำหรับการเข้ารหัสและส่วนตัวสำหรับการถอดรหัส แก้ปัญหาการกระจายคีย์
  • ขนาด 2048 บิต เป็นมาตรฐานความปลอดภัยขั้นต่ำตั้งแต่ปี 2023
  • ประสิทธิภาพ ของ RSA ต่ำกว่าการเข้ารหัสแบบสมมาตร 2-3 ลำดับขนาด ดังนั้นจึงใช้ในรูปแบบผสมผสาน
  • ลายเซ็นดิจิทัล ด้วย RSA ถูกใช้ใน 85% ของใบรับรอง TLS บนอินเทอร์เน็ต
  • แพลตฟอร์มโมบาย Android และ iOS มี API ในตัวสำหรับทำงานกับ RSA
  • การย้ายระบบหลังควอนตัม — จนถึงปี 2035 RSA จะยังคงเป็นมาตรฐานหลัก จากนั้นการเปลี่ยนผ่านไปสู่อัลกอริทึมใหม่จะเริ่มขึ้น

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม