Algoritma kunci publik RSA, banyak dipakai pada skema otentikasi web, khususnya pada skema pertukaran kunci antar server dan client agar mereka berdua saling percaya. Contoh yang paling konkret adalah saat kita masuk ke akun email kita, misalkan saja gmail.com. Bagaimana anda mengetahui bahwa yang anda buka adalah benar-benar gmail.com, bukan situs palsu yang menyamar?
Melanjutkan pembicaraan tentang RSA, beliau dan algoritma kunci publik lain dipakai karena sifatnya yang memiliki dua kunci. Berbeda dengan algoritma kunci biasa atau kunci private, sebuah pesan (atau file) yang dienkripsi dengan kunci K, harus didekripsi dengan kunci K juga agar pesan kembali ke teks semula. Hal ini mengakibatkan kedua belah pihak harus mengetahui kunci yang sama sebelum mereka bertukar pesan. Nah, cara bertukar kuncinya gimana? Ditelpon? Email?
Dengan algoritma kunci publik, kedua belah pihak yang berkomunikasi tidak perlu mengetahui kunci yang sama. Misalkan Alice ingin mengirim file rahasia ke Bob. Alice tinggal pergi ke blognya Bob, dan melihat kunci publik miliknya. Kemudian alice tinggal mengenkripsi file yang ingin dikirim dengan kunci publik ini. File lalu bisa dikirim ke bob melalui media apapun. Bagaimana Bob bisa membuka pesan? Dia membuka pesan dengan kunci rahasia yang hanya dia yang tahu. Pasangan kunci publik-kunci rahasia ini sebelumnya dibangkitkan dengan algoritma tertentu, salah satunya adalah RSA yang telah dijelaskan pada artikel berikutnya.
Pada gambar dibawah bisa dilihat keterangan algoritma yang dipakai pada skema HTTPS milik google. Anda juga bisa mengeceknya sendiri dengan menekan gembok yang ada di kiri URL address pada browser anda. Oh iya, HTTPS adalah protokol internet yang menerapkan protokol keamanan SSL sehingga jalur komunikasi client-server aman karena semua data di dalamnya terenkripsi.
Bisa dilihat di atas, google menggunakan RSA sebagai mekanisme pertukaran kunci. Pertukaran kunci? Apa maksudnya? Well, sudah dilihat di artikel sebelumnya bahwa algoritma RSA membutuhkan bilangan pangkat yang sangat besar (sekitar 512 bit atau 100an digit). Nah, bilangan pangkatnya saja sudah besar, apalagi hasil perpangkatannya. Untuk pesan yang besar, hal ini tentu saja akan membutuhkan daya komputasi yang besar, jauh lebih besar daripada algoritma kriptografi kunci private.
Cara mengakalinya adalah dengan menghibrid kedua jenis algoritma kunci publik dan algoritma kunci private. Caranya adalah, si pengirim mengenripsi file atau pesan dengan algoritma kunci private R tertentu. Karena algoritma kriptografi kunci private cepat, jadi enteng lah. Dapat dilihat google menggunakan algoritma kriptografi kunci private RC4_128 untuk enkripsi. Kunci yang digunakan untuk enkripsi kemudian di enkripsi (juga) dengan algoritma kunci publik, dalam kasus google RSA, menggunakan kunci publiknya si penerima. Penerima pesan rahasia pertama mendekripsi kunci private R yang dienkripsi dengan menggunakan RSA tadi dengan kunci privatenya. Setelah di dapat kunci R asli, barulah pesan didekripsi dengan kunci R tadi dengan algoritma yang disepakati.
Oh ya, penggunaan algoritma, teknik yang digunakan algoritma, dan segala macam detail algoritma dalam kriptografi modern tidak boleh rahasia lho. Jadi meskipun algoritmanya ketahuan, selama kuncinya tidak ketahuan, pesan haruslah tetap aman.
Kembali ke skema otentikasi, pada dunia internet, layanan web yang menggunakan SSL harus disertifikasi oleh pihak ke tiga yang terpercaya. Biasanya pihak ini adalah yang mengeluarkan sertifikatg tersebut, mirip notaris lah. Perusahaan pencetak sertifikat digital yang paling terkenal adalah Verisign.
Dapat dilihat pada gambar di atas kunci publik milik google. Pada dokumen yang sama, anda juga dapat melihat detail dari sertifikat milik google. Sertifikat yang dikeluarkan oleh pihak terpercaya seperti Verisign akan berwarna hijau di browser anda. Sebaliknya jika ada situs yang menggunakan sertifikatnya tidak terpercaya, dicurigai palsu dsb, browser akan mengeluarkan peringatan (warna kuning biasanya), This site is not using trusted certificate, meskipun kita selalu menekan OK secara otomatis jika ada pesan begituan.
Sebelum otentikasi, browser yang mengakses web akan menyampaikan pesan hello dan menyepakati beberapa hal seperti penggunaan algoritma dan lain lain. Browser kemudian menanyakan sertifikat dari server. Tingkat kepercayaan kemudian dilaporkan ke pengguna. Jika pengguna (kita) percaya, kita akan memulai otentikasi. Sebelum itu, browser akan menantang server dengan membuat sebuah pesan ujicoba dan dikunci dengan kunci publik yang dikirim server tadi. Jika kunci publik asli, tentu si server tahu isi asli pesan tantangan tadi. Server kemudian mengembalikan pesan ujicoba tadi tanpa enkripsi apa-apa. Jika diperlukan, server dapat menanyakan sertifikat digital si klien, dalam hal ini browsernya dan juga menantang si browser dengan mekanisme yang sama. Barulah setelah itu mereka menyepakati kunci simetri, yaknik klien mengirim kunci terenkripsi RSA yang akan digunakan untuk enkripsi dengan algoritma kunci biasa pada otentikasi.
Skema di atas, adalah gambaran umum dari skema SSL yang banyak dipakai di otentikasi web saat ini.
4-way handshake.
Kalo pake wifi publik tetep ada yang bisa menyadap meskipun udah di-SSL-in. Sang penyerang bisa menyela di tengah-tengah dan memalsukan kunci-kuncinya. Mangkanya jangan asal klik kalo ada peringatan HTTPS untrusted certificate, kecuali di kampus ane 😀