Dalam identifikasi, di dunia nyata kita menggunakan sebuah 'tanda' yang bila di Indonesia disebut dengan Kartu Tanda Penduduk atau KTP. Di kartu tersebut terdapat informasi-informasi yang menjelaskan identitas seseorang, dari nama; Tempat tanggal lahir, golongan darah, sidik jari, sampai NIK atau Nomor Induk Kependudukan.

Informasi-informasi tersebut menjelaskan bahwasannya si pemilik KTP adalah seseorang yang benar-benar ada dan memiliki kewarganegaraan Indonesia.

Di dunia internet, kebanyakan, kita menggunakan kombinasi alamat surel dan kata sandi sebagai penanda.

Misal, akun Twitter @faultable didaftarkan menggunakan alamat email fariz@evilfactory.id dan kata sandi ,B;&f9HX#(jH#z(#Jh'=k/\Mp.

Agar sistem Twitter percaya kalau kamu adalah @faultable, kamu harus memasukkan kombinasi alamat email dan kata sandi yang dipilih, maka sistem Twitter akan tau (dan percaya) bahwa kamu adalah @faultable karena data yang kamu masukkan sama dengan yang disimpan di basis data sistem Twitter untuk akun @faultable.

Selain kombinasi alamat email dan kata sandi, tidak sedikit juga yang menggunakan kombinasi nomor telepon + One Time Password, mengingat sudah banyak yang memiliki perangkat genggam dan juga biaya kirim transactional email yang tidak murah di skala besar.

Proses otentikasi digunakan untuk meng-identifikasi siapa kamu pada suatu sistem, sehingga—salah satunya—bisa mencegah kasus pencurian identitas hanya karena sistem 'pengidentifikasi' yang dirancang relatif lemah.

Otentikasi 2 faktor

Dalam proses otentikasi, ada 3 faktor yang dapat digunakan untuk mengidentifikasi 'siapa kamu' yang terdaftar pada sistem tersebut:

  • Faktor pengetahuan
  • Faktor kepemilikan
  • Faktor keunikan

Kombinasi alamat email dan kata sandi adalah faktor pengetahuan, karena seharusnya hanya kamu yang tau. Tidak sedikit juga yang memberikan lapisan keamanan lebih dengan memberikan faktor kedua, yang biasanya adalah faktor kepemilikan.

Yang biasanya disebut dengan 2FA atau 2-factor authentication yang mana kamu harus memasukkan 'kata sandi' tambahan yang bersifat sementara dan berada ke sesuatu yang kamu miliki, bisa itu perangkat genggam (biasanya via SMS) ataupun aplikasi khusus (yang mengandalkan 'seni' kriptografi).

Usaha-usaha tersebut dilakukan untuk mengamankan data pengguna agar setidaknya penyerangan pencurian identitas menjadi lebih sulit.

Bagaimana jika...

...proses otentikasi tidak selalu tentang alamat email, kata sandi, dan nomor telepon?

Proses otentikasi adalah tentang identifikasi.

Tentang apa yang kamu ketahui, dan miliki.

Tentang kombinasi data B dan C pada layanan D adalah mengarah kepada akun si E pada layanan tersebut.

Maka dari itu, alamat email (dan kata sandi, pastinya) menjadi harta karun oleh para pemburunya: Sumber emas yang sangat menguntungkan, baik untuk dikonsumsi ataupun dijual kembali.

Tentang PKI

Ehm, sebagai sangkalan, PKI disini bukanlah PKI yang itu.

Dalam kriptografi, Public Key Infrastructure (PKI) adalah sebuah cara untuk otentikasi, pengamanan data dan perangkat anti sangkal. Secara teknis, PKI adalah implementasi dari berbagai teknik kriptografi yang bertujuan untuk mengamankan data, memastikan keaslian data maupun pengirimnya dan mencegah penyangkalan.

PKI atau Public Key Infrastructure singkatnya adalah sebuah cara untuk otentikasi yang menggunakan teknik kriptografi. Dalam implementasinya, sudah digunakan dibanyak kasus termasuk dalam proses transmisi data secara aman di internet dengan menggunakan protokol HTTPS alias HTTP + TLS.

Kita ambil contoh bagaimana HTTPS bekerja.

Ketika kamu mengakses blog ini, ada ikon 'gembok' di address bar yang menandakan bahwa server yang menangani blog ini menggunakan protokol HTTPS (yang berarti proses transmisi data dilakukan dalam bentuk ter-enkripsi) dan juga sertifikat yang digunakan adalah diterbitkan oleh penerbit yang dipercaya oleh peramban.

Ada banyak penerbit sertifikat yang dapat dipercaya, dan dalam kasus ini penerbit tersebut adalah Let's Encrypt, yang mana sebuah organisasi nirlaba. Peramban seperti Firefox, Safari, Chrome mempercayai sertifikat yang diterbitkan oleh Let's Encrypt karena... Penerbit tersebut (Let's Encrypt Authority) dapat dipercaya oleh peramban.

Jadi, ketika kamu mengakses blog ini, peramban mengirimkan permintaan ke server dan 'ngode' ke server kalau kamu ingin berkomunikasi dengan protokol HTTPS.

Lalu server memberikan 'sinyal' berikut dengan 'kode rahasia' yang harus kamu kirim balik ke server. Jika server menerima 'kode rahasia' yang sama, berarti server dan peramban yakin bahwa tidak ada 'orang tengah' yang 'menguping' komunikasimu dengan server.

Yang mana kasus diatas disebut dengan TLS Handshake, yang melibatkan public key dari keduabelah pihak

Sistem otentikasi dengan PKI

Kita ambil contoh dari protokol SSH (Secure Shell). SSH adalah sebuah cara yang biasanya digunakan untuk mengakses/mengontrol sebuah komputer dari jarak jauh melalui port yang biasanya adalah port 22.

Biasanya kita menggunakan passphrase untuk meng-otentikasi apakah pengguna yang dimaksud memiliki akses terhadap sebuah komputer yang ingin dikontrol.

Namun cara yang lebih aman adalah dengan cara otentikasi menggunakan sertifikat: Server menyimpan Public Key yang dipercaya, sehingga hanya klien yang memiliki public key tersebutlah yang dapat mengakses server tersebut.

Teknisnya, klien harus membuat sertifikat terlebih dahulu (yang biasanya menggunakan openssl) yang mana akan menghasilkan public & private key, dan public key tersebut disimpan di server (yang biasanya berada di ~/.ssh/known_hosts) untuk kasus SSH.

Kasus untuk aplikasi web

Pertama, public key hanya akan berguna bila seseorang memiliki private key nya juga, bila ingin menggunakan public key tersebut.

Biasanya (atau harusnya) private key tersebut diamankan dengan passphrase atau kata sandi untuk menghindari penggunaan oleh pihak yang tidak berwenang.

Secara teknis, ada 2 faktor (bahkan tiga?) yang digunakan dalam otentikasi menggunakan sertifikat:

  • Faktor pengetahuan (Passphrase)
  • Faktor kepemilikan (Sertifikat pasti disimpan/berada di perangkat pemilik)
  • Faktor keunikan (Sertifikat yang dihasilkan memiliki tingkat keunikan yang besar)

Yang bisa disimpulkan bahwa otentikasi menggunakan sertifikat bersifat lumayan aman karena menggunakan banyak faktor.

Setiap kelebihan pasti memiliki kekurangan, yang mana dalam kasus ini adalah fleksibilitas: Setiap perangkat yang digunakan harus menyimpan public & private key.

Dan juga, penggunaan otentikasi ini tidak umum digunakan oleh pengguna awam.

Salah satu layanan—yang gue tau—yang menggunakan sistem otentikasi seperti ini adalah gittern, sebuah layanan "git hosting" untuk "hacker".

Proses otentikasinya terlihat sederhana:

  1. Pilih username yang kamu inginkan dan berikan public key kamu ke gittern.com
  2. Tidak ada langkah 2.

Tidak ada verifikasi email, tidak ada pemilihan kata sandi, tidak ada data alamat email yang diberikan, cukup berikan public key kamu, maka sistem akan mengetahui kalau kamu teridentifikasi sebagai faultable karena public (dan private) key yang kamu miliki diperangkatmu.

Sistem otentikasi dengan PGP

Ini pada dasarnya sama seperti menggunakan cara diatas (masih sama-sama menggunakan seni kriptografi) namun menggunakan "alat" yang berbeda.

Penggunaan umum PGP atau Pretty Good Privacy adalah untuk enkripsi data, meskipun kita bisa saja melakukan enkripsi data—baik itu secara asimetris ataupun simetris—tanpa menggunakan PGP.

Yang menarik dari PGP adalah PGP menggunakan alamat email sebagai pengidentifikasi, yang mana terlihat cocok untuk aplikasi-aplikasi yang dibuat pada era informasi internet ini.

Teknisnya pun hampir sama, namun yang berbeda, enkripsi menggunakan PGP bisa di "sign" sehingga "keabsahan" nya dapat diverifikasi.

Kasus untuk aplikasi web

Ada sebuah gerakan yang bernama Indieweb, yang menyebut dirinya sebagai people-focused alternative to the "corporate web".

Jika melihat kondisi sekarang, dewasa ini kita sangat bergantung dengan layanan-layanan yang dimiliki (dan diatur) oleh "perusahaan besar". Dari yang paling dasar yakni email, media sosial, penyimpanan pribadi, dan sebagainya.

Indieweb memiliki misi seperti "Use your own platform".

Misal, yang paling dasar dari komponen pada suatu website: Sistem komentar.

Seringkali kita harus menggunakan layanan pihak ketiga untuk dapat berkomentar.

Entah itu menggunakan Disqus (yang membutuhkan akun Disqus), Facebook Comment (yang pastinya membutuhkan akun Facebook), dsb.

Salah satu yang dilakukan oleh Indieweb adalah membuat "protokol terbuka" agar situs-situs dapat saling berkomunikasi tanpa harus bergantung penuh dengan layanan pihak ketiga.

Misal, seperti sistem komentar.

Bagaimana jika kita bisa mengirim komentar pada suatu web, menggunakan identitas kita, namun tidak bergantung kepada pihak ketiga?

Di Indieweb, kita bisa menggunakan IndieAuth yang mana kita bisa melakukan otentikasi berdasarkan alamat situs kita.

Salah satu proses otentikasi yang bisa dilakukan menggunakan IndieAuth ini adalah dengan menggunakan PGP: Di websitemu, kamu memberitahu IndieAuth untuk melakukan proses otentikasi menggunakan PGP dengan menyisipakan link tag dengan kunci rel=pgpkey authn yang bernilai alamat yang mengarah ke public key kamu.

Misal, gue ada sistem komentar di blog gue.

Lalu untuk bisa mengirim komentar, lo harus login terlebih dahulu.

Karena menggunakan IndieAuth, informasi yang perlu lo berikan hanyalah alamat website lo.

Lalu berdasarkan informasi yang diberikan oleh website lo (via link tag misalnya) cara yang didukung adalah menggunakan PGP. Agar sistem bisa mempercayai kalau lo adalah pemilik si website, sistem akan memberikan "kode rahasia" yang harus lo "sign" berdasarkan public key tersebut, dan hasil sign tersebut (oleh private key) dikirim ke sistem untuk di cek validitasnya (apakah sesuai dengan public key yang diminta).

Contoh

Lalu gue sign 'kode rahasia' tersebut dengan private key gue:

Contoh

Dan ini hasilnya ketika gue berhasil login (karena "PGP MESSAGE" tersebut di "sign" oleh gue):

Berhasil teotentikasi

Dan ini contoh "hasil sign" nya:

Contoh sign

Dan ketika melakukan "sign", kita harus memasukkan passphrase terlebih dahulu untuk memastikan bahwa private key kita tidak digunakan oleh pihak yang tidak berwenang.

Menggunakan PGP pun memenuhi 3 faktor: Pengetahuan, kepemilikan, dan keunikan dengan alasannya yang sama seperti yang sebelumnya.

Drawbacks

Pertama, proses otentikasi relatif (terlihat) lebih sulit, terlebih untuk bisa melakukan otentikasi di lintas perangkat. Tapi bukanlah masalah yang besar karena bisa saja kita melakukan "Tambah Perangkat" lalu tambahkan public key untuk perangkat lain kita ke sistem, atau bisa saja dengan melakukan "cara kotor" dengan menyalin public & private key kita ke lintas perangkat.

Kedua, untuk support relatif lebih sulit juga. Meskipun bisa diselesaikan karena setiap public key pasti memiliki fingerprint.

Ketiga, ehm, alamat email dan nomor telepon adalah "aset" berharga. Banyak layanan yang "memanfaatkan" informasi tersebut untuk kepentingan tertentu :))

Penutup

Cara-cara diatas sangat menarik khususnya untuk "super user" dan bisa juga untuk lebih mempopulerkan penggunaan "Seni kriptografi" ke khalayak lebih luas khususnya dalam proses otentikasi.

Gue tertarik untuk bereksperimen dalam otentikasi menggunakan PGP karena lebih privacy-friendly dan penggunaannya lebih luas juga.

Dan juga gue udah lama tertarik dengan Indieweb movement ini, dan semoga bisa ikut membantu dan berpartisipasi dalam mempopulerkan gerakan tersebut.

Proses otentikasi menggunakan kombinasi alamat email, kata sandi dan nomor telepon sudah sangat mainstream, dan seakan-akan tidak ada alternatif lain selain menggunakan pola tersebut dalam proses otentikasi.

Dari sisi pengalaman, cara alternatif ini terlihat lebih ribet dan terkesan "melangkah mundur". Namun dari sisi keamanan, terlihat lebih aman karena satu-satunya cara untuk "take-over" sebuah akun yang menggunakan metoda ini adalah dengan mencuri perangkatnya sekaligus harus mengetahui passphrase terkait public key yang digunakan.

Terima kasih sudah mampir dan selamat malam minggu!