Algoritma Penyimpanan Password
Lagi-lagi ada keributan di dunia internet. UPDATE. KERIBUTANNYA BAKAL LEBIH GAWAT DARI YANG DIPERKIRAKAN:
Dari informasi tersebut disebutkan bahwa leak termasuk informasi pribadi dan password hash. Dari screencapture forum postnya disebutkan dia tidak memiliki informasi salt dari leak tersebut, dan sedang mencari tahu itu algoritma passwordnya apa. Oke coba kita analisis ya:
Apa sih Password Hash itu
Untuk menyimpan informasi identitas, suatu sistem itu tidak boleh menyimpan password dalam bentuk plaintext (text aslinya). Oleh karena itu diperlukan suatu mekanisme untuk mengaburkan informasi plaintext password tersebut, namun tetap memungkinkan pengguna dari sistem untuk membuktikan (otentikasi) dirinya menggunakan password tersebut. Untuk melakukan hal tersebut, diciptakanlah namanya: hash function.
Hash function adalah fungsi matematis yang memetakan suatu plaintext ke suatu bilangan yang acak. Bilangan acak tersebut adalah representasi hash dari plaintext kita. Fungsi hash adalah one-way function atau fungsi satu arah. Kita tidak bisa membuat fungsi invers atau kebalikan dari fungsi tersebut. Dalam kata lain, jika kita punya hashnya, kita tidak bisa mengembalikan ke plaintext semula melalui suatu fungsi inversnya.
Fungsi hash ini bersifat konsisten. Jika plaintextnya sama, maka hashnya akan selalu sama. Konsistensi inilah yang digunakan untuk membuktikan identitas kita sekaligus mengamankannya. Jadi, sistem tidak perlu menyimpan kata sandi kita secara utuh, namun cukup menyimpan hashnya saja lalu setiap kali kita mau login, kita buktikan diri kita dengan menyebutkan kata sandinya. Server akan membandingkan hash dari password yang kita berikan dengan hash yang tersimpan di database.
Banyak fungsi hash yang bermacam-macam. Macam-macamnya berupa kompleksitas dari fungsi hash tersebut. Yang paling sederhana ada namanya MD5, Secure Hash Algorithm (SHA) dan lain sebagainya. Fungsi hash ini merupakan salah satu fondasi utama dalam keamanan komputer, dan tidak hanya digunakan untuk password saja, tapi untuk otentikasi keabsahan pertukaran data, proteksi informasi, dan lain sebagainya.
Dan satu hal yang paling penting hash itu bukan enkripsi. Enkripsi adalah teknik memetakan plaintext ke ciphertext (teks yang disamarkan) dengan two-way function. Data yang terenkripsi selalu dapat dikembalikan ke data utamanya selama kita memiliki kunci enkripsinya. Untuk menyimpan password malah tidak boleh menggunakan enkripsi, karena sekali kunci enkripsinya jebol, password utuhnya akan ketahuan! Jadi teknik menyimpan password yang benar selalu menggunakan hash function.
Lalu apa maksudnya password salt?
Walaupun algoritma hash tidak punya invers fungsinya untuk membalikkan penghitungan dari nilai hash ke plaintext, algoritma hash itu selalu konsisten dan stabil. Jika plaintext kita misalnya ABCD dan hash valuenya 1234, maka setiap kali kita memasukkan ABCD ke algoritma hash yang sama, hasilnya adalah selalu 1234. Inilah yang jadi berbahaya jika digunakan begitu saja sebagai penyimpan informasi password.
Bahayanya adalah ketika kita bisa tahu suatu nilai tertentu yang merupakan nilai hash dari suatu plaintext, maka adversary (penyerang) bisa membuat kamus yang berisi plaintext dengan nilai hash yang berkaitan. Ini disebut sebagai rainbow table. Rainbow table itu paling mudah digunakan untuk membobol password-password melalui hash yang tidak dipersulit menggunakan salt. Selain itu, jika user A dan B passwordnya sama-sama ABCD, maka kedua user tersebut akan memiliki hash value yang sama yaitu 1234. Dan ini berbahaya jadi bisa ketahuan siapa saja yang pakai password ABCD dari informasi yang terbobol tersebut.
Salt itu adalah faktor pengacak yang disambungkan dengan plaintext password kita agar hash value yang dihasilkan dari fungsi hash bisa berbeda antara masing-masing pengguna yang memiliki password yang sama. Ini memastikan bahwa serangan dengan teknik rainbow table tidak bisa digunakan. Karena penyerangnya harus satu-satu mengecek password masing-masing orang menggunakan teknik bruteforce. Ini berlaku selama salt masing-masing user sangat kompleks dan berbeda-beda.
Salt itu bisa disimpan di kolom terpisah di tabel yang sama pada suatu database. Bisa juga dia di-encode di password hashnya seperti jika menggunakan algoritma bcrypt. Selain itu bisa juga salt valuenya terpisah di tabel atau sistem lainnya. Semua tergantung dari mekanisme pengamanan sistem masing-masing. Tetapi yang paling penting, salt itu harga mati untuk menyimpan password di database.
Lalu kejadian Tokopedia itu bagaimana?
Dari informasi leak yang diberikan, ada beberapa kemungkinan:
- Password salt disimpan di tabel yang berbeda dari tabel yang dijebol oleh penyerang
- Password salt di-encode di password hash di tabel tersebut, namun tidak menggunakan protokol yang umum seperti bcrypt.
- Password hash dienkripsi lagi oleh back-end sistemnya dengan kunci enkripsi yang di-hardcode dan tidak diperoleh oleh pembobol
- Password hash tidak memiliki salt, tapi menggunakan algoritma hash yang berlapis, sehingga belum diketahui algoritmanya apa, karena tidak bisa langsung di-match ke rainbow table yang sudah tersebar sebelumnya.
Yang paling seram adalah kasus yang nomor 4. Karena sekali lagi, kalau tanpa salt, kalau sudah ketahuan algoritma hashnya apa, maka rainbow tablenya tinggal dibikin!
Perlu diketahui bahwa saat ini penyerang-penyerang komputer itu punya resource yang besar. Mereka terdiri dari kelompok-kelompok yang mempunyai organisasi bawah tanah dan memiliki pendanaan yang besar. Bukan hal yang sulit bagi mereka untuk menjebol ribuan password hash dengan menyewa infrastruktur cloud atau sejenisnya. Oleh karena itu, diperlukan pengananan ekstra tinggi oleh para pengembang sistem untuk mempersulit penyerang dalam membobol password hash yang telah bocor itu.
Trus gue harus gimana
Be safe than be sorry! Ganti semua password yang digunakan sama-sama dengan akun Tokopedia. Berikut ada beberapa best practice untuk mengamankan identitas kita:
- Jangan gunakan password yang sama di semua service
- Bedakan password penting terutama password e-mail. E-mail adalah single point of failure. E-mail terbobol, mereka semua bisa akses akun kita yang lainnya.
- Gunakan password yang ribet. Bisa juga menggunakan kalimat yang cukup panjang, lalu kita tukar-tukar susunan kata dari kalimat tersebut.
- Gunakan password manager
Trus kita juga sebaiknya mewaspadai keamanan akun kita. Kita bisa mengecek seberapa banyak informasi kita sudah bobol di internet melalui website: https://haveibeenpwned.com/. Website tersebut bisa mengecek apakah akun dan e-mail kita pernah terlibat dalam kebobolan informasi di internet, dan bisa juga mengecek apakah password kita sudah termasuk di kamus password yang telah diketahui. Website ini dibuat oleh salah satu expert dan sudah dikenal di lingkungan information security untuk membantu kita meningkatkan awareness terhadap kebobolan identitas. Beliau juga mendapat predikat Microsoft Most Valuable Professional (MVP) di bidang Information Security. Ada wikipedianya: https://en.wikipedia.org/wiki/Troy_Hunt
Konklusi
Kita berharap saja semoga Tokopedia segera mengklarifikasi password hash seperti apa yang terbobol. Semoga saja mereka menggunakan teknik keamanan yang cukup sehingga informasi password kita untuk sementara masih aman. Tetapi, tetap saja pastikan untuk segera mengikuti best practice dalam mengamankan identitas kita
Gue sendiri sudah pernah kebobolan. Kayaknya kejadian waktu heboh LinkedIn leak tahun 2015an. Password gue lalu tersebar di internet dan akun Spotify dan Uber gue pernah di-takeover sama maling. Selain itu, jika kalian suka liat akun Spotify murah, VPN murah, segala macem yang murah-murah, banyak mereka itu pake akun curian. Akun curian itu diperoleh dari cara-cara yang seperti ini, lalu tersebar di internet lah melalui paste (teks yang disebarkan melalui pastebin dan sejenisnya). Jadi:
BE SAFE THAN BE SORRY.
Update
3 Mei 2020 – 00:51 WIB
Dapet informasi dari twitter user yang ada kontak dengan salah satu information security journalist, katanya mengkonfirmasi leak itu benar adanya. Tapi juga mengkonfirmasi kalau password hashnya itu ter-salt-ed. Tapi informasi ini belum dikonfirmasi langsung oleh Tokopedia. Semoga ini benar adanya dan semoga Tokopedia mengkonfirmasi ini. Berarti yang perlu diwaspadai sekarang adalah identity stealing dari information leak ini.
3 Mei 2020 – 03:47 WIB
Menambahkan penjelasan tentang perbedaan hash dan enkripsi. Nampaknya banyak yang kurang paham perbedaan antara kedua fungsi kriptografi tersebut.
3 Mei 2020 – 04:10 WIB
UPDATE. Dilaporkan sudah diperdagangkan di dark web! Safe measure! GANTI PASSWORD, AMANKAN DATA PRIBADI SEBISA MUNGKIN. WASPADA PRAKTIK PENCURIAN IDENTITAS!
Bang.. Ijin merangkum beberapa postingan abang dan thread twtnya dalam bahasa sederhana. Dengan disertai link lengkap ke blog abang buat ditulis di blog halobumagit.web.id…
Saya tika, bersama teman teman sedang membuat sebuah media info terkait dg hal teknologi, aplikasi dan lain lain (sambat dunia digital) yang sasaran utamanya ibu ibu rumah tangga dan perempuan. Penjelasan abang sangat runtut dan lengkap, namun sepertinya ada beberapa yang akan kami sederhanakan dan sesuaikan dengan kebutuhan.
Apakah diperbolehkan?
Makasih
Sudah dibalas yaa via e-mail 🙂