Enkripsi RSA
RSA adalah algoritme kunci publik praktis pertama — yang memungkinkan dua orang bertukar rahasia tanpa pernah bertemu langsung. Empat puluh delapan tahun kemudian, perusahaan ini masih mengamankan sebagian besar jabat tangan TLS, menandatangani setiap pesan PGP, dan mendukung banyak skema penandatanganan kode. Perlahan digantikan oleh kurva elips, namun tidak hilang.
Badan artikel selengkapnya disediakan dalam bahasa Inggris di bawah ini.
RSA adalah sistem kriptografi kunci publik yang diperkenalkan pada tahun 1977 oleh Ron Rivest, Adi Shamir, dan Leonard Adleman di MIT. Paten tersebut kedaluwarsa pada tahun 2000, setelah itu menyebar ke semua perpustakaan kriptografi. RSA memungkinkan dua operasi yang saling melengkapi: mengenkripsi dengan kunci publik sehingga hanya kunci privat yang dapat mendekripsi, dan penandatanganan dengan kunci privat sehingga siapa pun yang memiliki kunci publik dapat memverifikasi.
Perhitungannya, secara singkat, keamanan
RSA bertumpu pada kesulitan memfaktorkan bilangan besar. Pembuatan kunci:
- Pilih dua bilangan prima acak besar p dan q (biasanya masing-masing 2048 bit).
- Hitung n = p × q. Ini adalah modulusnya, public.
- Hitung total Euler: φ(n) = (p-1)(q-1).
- Pilih koprime e ganjil kecil ke φ(n). Umumnya 65537 (=2^16+1).
- Hitung d = e^(-1) mod φ(n). Ini adalah kunci privat.
Kunci publik adalah pasangan (n, e); kunci pribadinya adalah d.
Untuk mengenkripsi pesan m: ciphertext c = m^e mod n. Untuk mendekripsi: m = c^d mod n. Siapa pun yang memiliki kunci publik dapat mengenkripsi; hanya seseorang dengan kunci pribadi yang dapat mendekripsi. Untuk menandatangani, kebalikannya: s = m^d mod n, verifikasi dengan m = s^e mod n.
Mengapa ini berhasil
Caranya: menghitung d memerlukan pengetahuan φ(n), yang memerlukan pemfaktoran n menjadi p × q. Memfaktorkan semiprime 2048-bit membutuhkan lebih banyak komputasi daripada yang dimiliki manusia. Memverifikasi n = p × q padahal Anda sudah mengetahui p dan q adalah hal yang sepele. Asimetri — perkalian mudah, pemfaktoran keras — adalah keseluruhan fondasi RSA.
Ukuran kunci
- RSA-1024 — pada prinsipnya dipatahkan oleh musuh yang memiliki sumber daya yang baik; NIST telah melarangnya untuk penerapan baru sejak 2014.
- RSA-2048 — dasar saat ini. Dianggap aman untuk jangka menengah terhadap musuh klasik.
- RSA-3072 — direkomendasikan untuk penerapan baru sesuai garis waktu transisi NIST tahun 2030.
- RSA-4096 — umum untuk penandatanganan kode yang kuncinya memiliki jangka waktu 10–20 tahun. Lebih lambat namun secara konservatif aman.
RSA dalam praktiknya
RSA hampir tidak pernah mengenkripsi pesan besar secara langsung. Lambat — mengenkripsi satu kilobyte membutuhkan ribuan eksponensial modular. Sebaliknya, RSA digunakan dalam enkripsi hybrid : menghasilkan kunci AES acak, mengenkripsi data dengan AES, mengenkripsi hanya kunci AES dengan RSA. Sisi dekripsi RSA mendekripsi kunci, lalu AES mendekripsi data. Setiap jabat tangan TLS RSA bekerja dengan cara ini; setiap email terenkripsi PGP bekerja dengan cara ini.
Padding penting
Plain ("buku teks") RSA — mengenkripsi m secara langsung tanpa padding — sangat tidak aman. Banyak serangan yang mengeksploitasi kelenturan, tidak adanya keacakan, dan kasus tepi seperti m kecil. RSA asli menggunakan skema padding:
- PKCS#1 v1.5 padding — padding asli; rentan terhadap serangan Bleichenbacher jika implementasinya bocor apakah paddingnya valid. Masih banyak digunakan.
- OAEP (Optimal Asymmetric Encryption Padding) — padding modern; tahan terhadap serangan teks sandi yang dipilih. Gunakan ini untuk enkripsi RSA baru.
- PSS (Skema Tanda Tangan Probabilistik) — bantalan tanda tangan modern; lebih unggul dari PKCS#1 v1.5 untuk penandatanganan.
Skema padding adalah bagian dari protokol yang diterapkan, bukan opsional. Kesalahan dalam implementasi padding adalah satu-satunya sumber kerentanan RSA yang paling umum dalam sistem nyata. Penghentian lambat
RSA
RSA diganti karena dua alasan:
- Ukuran kunci. Kunci RSA-3072 lebih besar daripada kunci kurva elips yang setara sebesar 10×. Biaya jabat tangan dan penyimpanan TLS bertambah dalam skala besar.
- Resistensi kuantum. Komputer kuantum yang cukup besar akan memfaktorkan RSA melalui algoritma Shor dalam waktu polinomial. ECC juga rentan tetapi alternatif yang tahan kuantum lebih mudah diterapkan.
TLS 1.3 tidak lagi menggunakan pertukaran kunci RSA dan mendukung ECDHE. Penandatanganan otoritas sertifikat modern berpindah ke ECDSA. RSA bertahan untuk kompatibilitas basis terpasang (PGP, JWT, kartu pintar, penandatanganan kode) dan akan bertahan selama bertahun-tahun.
Pertanyaan pasca-kuantum
Bahkan jika komputer kuantum yang mampu memecahkan RSA masih ada beberapa dekade lagi, data terenkripsi dengan nilai jangka panjang sedang dipanen saat ini dengan asumsi data tersebut dapat didekripsi nanti. Kabel pemerintah, catatan medis, kekayaan intelektual – “panen sekarang, dekripsi nanti” adalah model ancaman saat ini. Standar pasca-kuantum NIST (CRYSTALS-Kyber untuk enkapsulasi kunci, CRYSTALS-Dilithium untuk tanda tangan) sedang diterapkan bersama RSA dalam konfigurasi hibrid. Penerapan RSA murni untuk data rahasia jangka panjang semakin dianggap tidak memadai.
Pertanyaan yang sering diajukan
- Apakah RSA masih aman di tahun 2026?
- Melawan musuh klasik, RSA-2048 dan yang lebih besar tetap aman. Sandi tersebut tidak memiliki terobosan praktis yang diketahui. Melawan musuh kuantum di masa depan, RSA dapat dipecahkan dalam waktu polinomial setelah perangkat keras kuantum yang cukup besar tersedia – kemungkinan dalam 5–20 tahun ke depan. Data rahasia jangka panjang seharusnya sudah dipindahkan ke skema hybrid pasca-kuantum.
- Mengapa RSA sangat lambat dibandingkan AES?
- RSA adalah algoritma kunci publik (asimetris) yang didasarkan pada eksponensial modular yang sangat besar; AES adalah algoritma simetris yang beroperasi pada blok 128-bit dengan akselerasi perangkat keras. AES kira-kira 1000× lebih cepat per byte. Itu sebabnya hampir semua sistem nyata menggunakan RSA hanya untuk menukar kunci sesi, lalu mengenkripsi data massal dengan AES.
- Apa perbedaan antara enkripsi RSA dan tanda tangan RSA?
- Mereka menggunakan matematika yang sama dalam arah yang berlawanan. Enkripsi: enkripsi dengan kunci publik, dekripsi dengan kunci pribadi. Tanda tangan: "enkripsi" dengan kunci pribadi (disebut penandatanganan), "dekripsi" dengan kunci publik (disebut verifikasi). Primitif kriptografi berbeda dalam detailnya (padding), dan Anda tidak boleh menggunakan kunci yang sama untuk keduanya — kunci penandatanganan dan enkripsi terpisah adalah standarnya.
- Mengapa 65537 digunakan sebagai eksponen publik RSA?
- Ini adalah bilangan prima Fermat (2^16 + 1), cukup kecil untuk membuat enkripsi/verifikasi cepat (hanya 17 perkalian), dengan representasi biner jarang yang memungkinkan komputasi efisien. Nilai yang lebih besar atau lebih kecil dapat berfungsi namun lebih lambat atau memiliki risiko kerentanan yang tidak kentara. 65537 telah menjadi universal berdasarkan konvensi.
- Bisakah saya membuat kunci RSA sendiri dengan aman?
- Gunakan perpustakaan yang telah teruji (OpenSSL, libsodium, GnuPG) dan CSPRNG. Jangan pernah melakukan uji primalitas Anda sendiri atau menerapkan RSA dari awal — mode kegagalannya tidak kentara dan merupakan bencana besar. Menghasilkan kunci melalui <code>ssh-keygen -t rsa -b 3072</code> atau yang setara tidak masalah; menulis matematika sendiri tidak.