Back to IF4020 Kriptografi

Keamanan dan Praktik RSA

Questions/Cues

  • Mengapa memfaktorkan sama dengan memecahkan RSA?
  • Berapa panjang yang aman dan bagaimana sejarah sayembara RSA?
  • Bagaimana ancaman komputer kuantum (algoritma Shor)?
  • Mengapa RSA dipakai dalam hybrid cryptography, bukan untuk pesan besar?
  • Bagaimana man-in-the-middle menyerang distribusi kunci publik?
  • Apa itu PKCS#1 dan OAEP, dan bagaimana RSA dipakai di Python?

Reference Points

  • IF4020 Kriptografi — Algoritma RSA (Slides 17-54)

Keamanan: Pemfaktoran

Kunci publik diumumkan. Bila berhasil difaktorkan menjadi dan , maka dapat dihitung, lalu ikut terhitung. Jadi keamanan RSA = kesulitan memfaktorkan ; makin besar , makin sulit.

  • Penemu RSA menyarankan dan lebih dari 100 digit sehingga lebih dari 200 digit.
  • Dengan algoritma pemfaktoran tercepat dan komputer 1 milidetik per operasi, memfaktorkan bilangan 200 digit butuh miliar tahun, 500 digit tahun (angka slide).
  • Kompleksitas algoritma pemfaktoran tercepat (number field sieve): untuk sepanjang bit: sub-eksponensial, belum polinomial.

Panjang kunci: bit dapat difaktorkan dalam beberapa jam di sebuah PC dengan program bebas; bit oleh beberapa ratus komputer; kini kunci aman bila di atas 1024 bit. Contoh parameter: 1024 bit ( digit desimal), dan masing-masing digit.

Sayembara: 1977 penemu RSA menantang pembaca Scientific American memecahkan cipherteks RSA (hadiah $100); 1994 kelompok kolaborasi internet memecahkannya dalam 8 bulan.

Ancaman kuantum: RSA terancam komputer kuantum karena dapat difaktorkan dalam waktu polinomial oleh algoritma Shor.

Kelemahan Praktis dan Hybrid Cryptography

RSA lebih lambat dari DES/AES. Dalam praktik RSA tidak dipakai untuk pesan besar, melainkan untuk mengenkripsi kunci simetri (kunci sesi) dengan kunci publik penerima, sedangkan pesan dienkripsi AES/DES. Kunci terenkripsi dan pesan dikirim bersamaan; penerima mendekripsi kunci simetri dengan kunci privatnya lalu mendekripsi pesan. Kombinasi ini disebut hybrid cryptography (Hybrid Cryptography dan Diffie-Hellman).

Man-in-the-Middle pada Kunci Publik

Karena kunci publik harus dibagikan, distribusinya rawan man-in-the-middle. Carol mengintersepsi pertukaran: ia mengirim kunci publiknya sendiri kepada Bob (Bob mengira itu kunci Alice) dan kepada Alice (Alice mengira itu kunci Bob). Carol lalu mendekripsi pesan dari Bob dengan kunci privatnya, menyalinnya, mengenkripsi ulang dengan kunci publik Alice yang asli, dan meneruskannya. Alice dan Bob tak dapat mendeteksi Carol (Serangan Pasif, Aktif, dan Side-Channel). Akar masalah: kunci publik tidak diotentikasi.

sequenceDiagram
    participant B as Bob
    participant C as Carol (MITM)
    participant A as Alice
    A->>C: PK_Alice
    C->>B: PK_Carol (Bob kira PK_Alice)
    B->>C: pesan dienkripsi PK_Carol
    Note over C: dekripsi dengan SK_Carol,<br/>salin, ubah bila mau
    C->>A: pesan dienkripsi PK_Alice

RSA di Python (PyCryptodome)

Tiga pola kode pada slide: (1) simulasi manual: getPrime(512) untuk , , , , d = inverse(e, phi), lalu RSA.construct((n, e, d, p, q)); (2) RSA.generate(1024) dan simpan kunci publik/privat ke file PEM (privat diberi passphrase); (3) dua pihak (Alice dan Bob) masing-masing membangkitkan pasangan kunci, lalu Bob mengenkripsi dengan kunci publik Alice dan Alice mendekripsi dengan kunci privatnya, begitu pula balasannya. Nilai default PyCryptodome adalah 65537 (0x10001); bila memilih lain, harus ganjil dan tidak terlalu kecil.

PKCS#1 dan OAEP

  • PKCS #1 adalah standar RSA Laboratories: enkripsi RSA, tanda tangan digital RSA, format kunci, dan skema padding.
  • OAEP (Optimal Asymmetric Encryption Padding, Bellare dan Rogaway, 1994) menambah padding acak sebelum enkripsi RSA: OAEP pesan terkode RSA. Alasannya: RSA tidak boleh mengenkripsi pesan mentah (“textbook RSA” rentan berbagai serangan). OAEP membuat enkripsi tidak deterministik (pesan sama, cipherteks berbeda tiap kali) dan aman terhadap chosen-ciphertext attack (Serangan Berdasarkan Informasi yang Dimiliki).

Summary

Keamanan RSA = sulitnya memfaktorkan : bila diketahui, dan mudah dihitung. Algoritma pemfaktoran tercepat masih sub-eksponensial; bit jatuh dalam jam, bit oleh ratusan komputer, sehingga kini diperlukan bit (sayembara 1977 dipecahkan 1994). Algoritma Shor pada komputer kuantum mengancamnya. Karena lambat, RSA dipakai untuk mengenkripsi kunci sesi dalam hybrid cryptography. Distribusi kunci publik rentan man-in-the-middle (Carol menukar kunci publik). Praktik modern memakai PKCS#1 dengan padding OAEP agar enkripsi acak dan tahan chosen-ciphertext. Ada pula RSA di Python via PyCryptodome (RSA.generate, format PEM, PKCS1_OAEP). Kelanjutan: pertukaran kunci di Hybrid Cryptography dan Diffie-Hellman.