Berapa lama kata sandimu benar-benar bertahan

Diterbitkan oleh David Carrero

Ketika sebuah situs bilang kata sandimu butuh tiga juta tahun untuk dibobol, ia sedang menghilangkan bagian terpenting dari kalimatnya. Pertanyaan yang benar bukan berapa lama. Melainkan berapa lama melawan apa.

Dan jawaban atas melawan apa bukan kamu yang menentukan. Yang menentukan adalah seorang pengembang di toko online tempat kamu membeli sepatu tahun 2019, waktu ia memilih cara menyimpan kata sandimu di basis datanya. Kamu mengetik untaian dua puluh karakter yang sama persis di kedua tempat. Di satu tempat ia bertahan berabad-abad, di tempat lain ia jatuh sebelum jam makan siang.

Angka yang hilang dari persamaan

Serangan brute force adalah aritmetika kelas dasar: jumlah kandidat yang harus dicoba, dibagi jumlah kandidat yang bisa dicoba per detik. Faktor pertama bergantung pada kata sandimu — panjangnya, alfabetnya, ada atau tidaknya ia di kamus. Faktor kedua sama sekali tak ada hubungannya denganmu.

Faktor kedua bergantung pada dua hal: perangkat keras si penyerang dan, terutama, fungsi yang dipakai situs untuk mengubah kata sandimu menjadi rentetan karakter yang tersimpan di tabel penggunanya. Fungsi itu namanya hash, dan tidak semuanya sama mahalnya untuk dihitung.

MD5 dan SHA-1 dirancang agar cepat. Itu keunggulan: keduanya fungsi hash serbaguna, dibuat untuk meringkas pesan dan memeriksa integritas, dan di sana yang kamu mau adalah memproses satu gigabyte tanpa sempat berdiri ambil kopi dulu. Begitu ada yang memakainya untuk menyimpan kata sandi, keunggulan itu berubah jadi masalahnya. Fungsi yang bisa kamu hitung jutaan kali per detik adalah fungsi yang bisa juga dihitung si penyerang jutaan kali per detik — dan dia punya kartu grafis serta akhir pekan penuh.

bcrypt dan Argon2 dirancang dengan tujuan sebaliknya. Keduanya lambat dengan sengaja, dan — ini bagian eleganya — lambatnya bisa diatur. Niels Provos dan David Mazières memperkenalkan bcrypt pada 1999 dengan judul yang sudah mengatakan semuanya: A Future-Adaptable Password Scheme. Gagasannya, fungsi itu bisa dibikin makin mahal seiring tahun, mengikuti ritme makin murahnya perangkat keras. Argon2, yang memenangi Password Hashing Competition pada 2015, menambah satu putaran lagi: ia tak cuma memakan waktu, ia memakan memori, yang justru paling tidak berlimpah di tangan GPU.

Antara hash cepat dan hash lambat yang dikonfigurasi dengan benar, selisihnya bukan soal persentase. Selisihnya orde besaran. Banyak.

Benchmark-nya ada, dan terbuka untuk umum

Semua ini bukan spekulasi. Hashcat, alat yang dipakai separuh dunia untuk membobol kata sandi — termasuk pihak yang baik — punya mode benchmark yang bisa dijalankan siapa saja di mesinnya sendiri, dan yang mengukur, algoritme demi algoritme, berapa kali per detik masing-masing bisa dihitung. Komunitasnya menerbitkan tabel-tabel itu setiap kali ada GPU baru keluar.

Yang menarik dari tabel-tabel itu bukan angka tertentu mana pun — yang lagi pula kedaluwarsa tiap generasi perangkat keras — melainkan jarak antarbarisnya. Kamu urutkan daftarnya berdasarkan kecepatan dan MD5 ada di paling atas, di planetnya sendiri. Kamu turun terus, dan di dasar tabel ada bcrypt dan Argon2, dengan angka yang sama sekali tak mirip. Kata sandinya sama. GPU-nya sama. Satu-satunya yang berubah adalah bagaimana situs itu memutuskan menyimpannya.

Karena itulah “3 juta tahun” tanpa menyebut melawan hash apa adalah pemasaran, bukan pengukuran. Sama seperti mengiklankan bahwa mobilmu butuh enam jam untuk sampai tanpa menyebutkan tujuannya.

Offline dan online: dua dunia yang tak bersentuhan

Ada pembedaan kedua yang hampir tak pernah dijelaskan orang dan yang mengubah hasilnya sama brutalnya.

Dalam serangan online, penyerang mencoba kata sandi lewat formulir masuk, seperti pengguna biasa. Ritmenya bukan ditentukan perangkat kerasnya: ditentukan servernya. Bisa ada batas percobaan, penguncian sementara, captcha, jeda antar permintaan, peringatan begitu terdeteksi seribu kegagalan dari satu alamat yang sama. Melawan situs yang dipertahankan dengan layak, serangan online itu lambat, berisik, dan cukup bodoh. Aritmetikanya begitu buruk bagi si penyerang sampai brute force murni nyaris tak dicoba: yang dilakukan adalah mencoba empat kata sandi paling klasik itu terhadap jutaan akun, dan itu permainan lain.

Dalam serangan offline, penyerang sudah memegang salinan basis datanya. Dia bawa pulang. Di sana tak ada server, tak ada batas percobaan, tak ada yang mengawasi: yang ada kartu-kartu grafisnya dan tagihan listriknya. Dia bisa mencoba berbulan-bulan tanpa ada yang tahu, dan dia akan tahu sendiri kapan dia berhasil, dengan membandingkan hash. Di sinilah hash menentukan segalanya, karena hash harfiah satu-satunya yang menahannya.

Dan perlu jujur soal peluangnya: skenario offline itu tidak eksotis. Itu yang terjadi setiap kali sebuah basis data bocor. Waktu LinkedIn kehilangan basis datanya pada 2012, analisis atas salinan yang bocor menunjukkan bahwa mereka menyimpan kata sandi dengan SHA-1 tanpa garam: hash cepat, tanpa bahan yang mencegah orang menghitung tabel di muka. Bahwa begitu banyak yang jebol dan secepat itu bukan cuma soal pengguna yang memilih dengan buruk. Itu, terutama, sebuah keputusan rekayasa yang tak pernah dilihat pengguna mana pun.

Apa yang kami lakukan di sini, dan mengapa kami mengatakannya

Pemeriksa kami mengasumsikan 10¹² percobaan per detik, offline, melawan hash cepat. Itu tertulis di halamannya sendiri, di bawah hasilnya, dan bukan demi transparansi hiasan: tanpa data itu, waktu yang ditampilkannya tak berarti apa-apa.

Itu memang sengaja kasus terburuk. Kami mengasumsikan basis datanya sudah bocor, penyerangnya punya perangkat keras serius, situsnya menyimpan kata sandimu dengan cara terburuk yang masih masuk akal, dan dia bahkan tahu alfabet serta panjangnya. Kalau situsnya memakai bcrypt yang dikonfigurasi dengan benar, angka sebenarnya naik banyak orde besaran dan kata sandimu bertahan jauh lebih lama daripada yang kami katakan.

Kami lebih suka keliru ke arah itu. Pemeriksa yang memberimu selamat sedang memberi selamat kepada dirinya sendiri.

Kesimpulan yang tak enak didengar

Kata sandimu tidak punya satu waktu pembobolan. Ia punya waktu pembobolan untuk setiap situs tempat kamu memakainya, dan waktu itu ditetapkan orang-orang yang tak kamu kenal dengan kriteria yang tak mereka terbitkan.

Dari situ ada dua hal yang bisa disimpulkan, dan itu-itu juga. Pertama: karena kamu tak bisa mengendalikan hash-nya, kendalikan entropinya, yaitu separuh persamaan yang memang milikmu — makanya generator menunjukkan bit kepadamu, bukan persentase yang ramah. Kedua, dan lebih penting: kalau tiap situs punya kata sandinya sendiri, yang menyimpannya dengan MD5 cuma bisa menghadiahkan kata sandi situs itu saja.

Karena mata rantai terlemah bukan kata sandimu. Melainkan situs terburuk tempat kamu pernah mengetiknya.


Sumber: benchmark publik hashcat (hashcat -b), bisa diperiksa dan direproduksi · N. Provos dan D. Mazières, “A Future-Adaptable Password Scheme”, USENIX, 1999 · Password Hashing Competition, dimenangi Argon2 pada 2015 · model ancaman yang dinyatakan di pemeriksa password.es: 10¹² percobaan/detik, offline, hash cepat · kebocoran LinkedIn 2012: perusahaannya mengonfirmasi kebocoran itu, dan penggunaan SHA-1 tanpa garam dipastikan lewat analisis atas salinan yang dipublikasikan.

← Kembali ke blog