# Hash, garam, bcrypt dan Argon2: yang dilakukan situs yang benar dengan kata sandimu

> Situs yang benar tidak tahu kata sandimu: ia menyimpan sidik jarinya. Dan fungsi yang menghitung sidik jari itu harus lambat dengan sengaja, karena inilah satu-satunya pertahanan di mana yang bertahan dan yang menyerang berlari di lomba yang persis sama.

2026-03-26 · David Carrero · password.es
Original: https://password.es/id/blog/hash-garam-bcrypt-argon2/

---

Situs yang benar tidak tahu kata sandimu. Bukan tak mau: memang tak bisa.

Kedengarannya seperti akal-akalan, karena setiap kali kamu mengetiknya sistem
mempersilakan kamu masuk, dan untuk mempersilakan masuk ia harus memeriksa
sesuatu. Tapi memeriksa bukan mengetahui. Server menyimpan **sidik jari** yang
dihitung dari kata sandimu; saat kamu mengetik, ia menghitung ulang sidik jari
itu lalu membandingkan. Kalau cocok, silakan lewat. **Tak sekali pun kata
sandinya perlu tertulis di mana pun.**

Dari sana lahir tanda paling jelas untuk membedakan layanan yang serius dari yang
tidak: kalau saat lupa kata sandi mereka mengirimkannya kembali lewat surel,
berarti mereka menyimpannya. Dan apa yang disimpan, cepat atau lambat, akan
berakhir di tangan orang lain.

## 1979: gagasan untuk tidak menyimpannya — dan gagasan untuk melakukannya dengan lambat

Pada 1979, **Robert Morris dan Ken Thompson** menerbitkan di *Communications of
the ACM* artikel "Password Security: A Case History", yang menceritakan apa yang
mereka kerjakan di Unix. Itu laporan tentang apa yang mereka pelajari, dan di
dalamnya tertanam dua gagasan yang hari ini kita anggap sudah jelas dengan
sendirinya.

Yang pertama bukan temuan mereka — menyimpan hash alih-alih kata sandi sudah
dilakukan sebelumnya — tapi mereka menjelaskannya lebih baik dari siapa pun:
**jangan simpan kata sandinya, simpan hash-nya**. Sebuah fungsi yang mengubah
kata sandimu menjadi nilai yang tampak sembarang dan yang tak bisa dijalankan
mundur: dari hash orang tidak kembali ke kata sandi.

Yang kedua memang milik mereka: **garam**. Sebuah nilai acak yang berbeda untuk
setiap pengguna, dicampurkan ke kata sandi sebelum hash dihitung. Tanpa garam,
dua orang dengan kata sandi sama punya hash sama — berkas yang dicuri berubah
menjadi permainan mencari yang kembar — dan, lebih buruk lagi, seseorang bisa
menghitung satu tabel raksasa sekali saja lalu memakainya melawan semua basis
data di dunia. **Garam tidak membuat kata sandimu lebih sulit ditebak: garam
membuat tebakan itu tak berguna bagi orang lain.**

Tapi di artikel yang sama ada gagasan ketiga, jauh lebih jarang dikutip, dan
justru itulah yang penting di sini: mereka membuat fungsinya **lambat dengan
sengaja**. Bukan karena lalai. Memang disengaja. Meng-enkripsi sebuah kata sandi
memakan biaya jauh lebih besar daripada yang secara teknis diperlukan, karena
orang yang masuk sekali setiap pagi tidak peduli, sedangkan orang yang mencoba
jutaan kandidat sangat peduli.

Seluruh persoalannya sudah ada di sana, dalam satu kalimat dari hampir lima puluh
tahun lalu.

## Mengapa kelambatan adalah satu-satunya pertahanan yang jujur

Hampir semua pertahanan di dunia komputer bersifat asimetris: murah bagi yang
bertahan, mahal bagi yang menyerang. Mengenkripsi itu murah; mendekripsi tanpa
kunci itu mustahil. Yang bertahan main dengan keunggulan bawaan.

Penyimpanan kata sandi tidak begitu. **Di sini yang bertahan dan yang menyerang
menjalankan fungsi yang persis sama.** Kamu menghitung hash untuk memeriksa
apakah kamu benar; dia menghitungnya untuk memeriksa apakah dia benar. Inilah
satu-satunya lomba dalam keamanan di mana keduanya berlari dengan kaki yang sama.

Kalau kamu tak bisa lari lebih cepat dari lawanmu, tinggal satu langkah:
**membuat lintasannya mahal untuk kalian berdua**. Kamu membayar ongkos itu
sekali per masuk. Dia, sekali per percobaan. Karena dia butuh percobaan yang
berlipat-lipat orde besaran dibanding kamu, tagihan yang sama menghantam kalian
dengan cara yang tak sebanding. Itulah yang dilakukan sebuah hash kata sandi.

Karena itu fungsi-fungsi cepat yang luar biasa bagus untuk hal lain — SHA-256,
misalnya — adalah pilihan yang payah di sini. Mereka cepat. Cepat justru persis
yang tidak kita inginkan.

## 1999: bcrypt, dan biaya sebagai bagian yang bisa disetel

Masalah dari fungsi yang lambat adalah perangkat keras tidak diam di tempat. Yang
pada 1979 lambat, kemudian menjadi seketika. Pertahanan yang dikalibrasi terhadap
komputer satu dekade menua sendiri, tanpa ada yang menyentuhnya.

Pada 1999, **Niels Provos dan David Mazières** memperkenalkan **bcrypt** di
USENIX Annual Technical Conference, dengan judul yang sudah mengatakan segalanya:
*A Future-Adaptable Password Scheme*.

Gagasannya: biayanya **jangan ada di dalam fungsi, tapi di sebuah parameter**.
bcrypt membawa faktor biaya yang kamu tentukan sendiri dan yang disimpan bersama
hash-nya. Kalau perangkat keras jadi jauh lebih cepat, kamu naikkan angkanya dan
kata sandi baru kembali memakan biaya sebagaimana mestinya, tanpa ganti
algoritma.

**Ini rancangan yang mengakui keusangannya sendiri dan bersiap untuk itu.** Sangat
sedikit perangkat lunak yang melakukan hal semacam itu.

## 2009: scrypt, dan penemuan bahwa waktu saja tidak cukup

bcrypt membuat waktu komputasi jadi mahal, dan itu berhasil. Sampai penyerang
berhenti memakai jenis mesin yang sama dengan yang bertahan.

Sebuah server punya beberapa inti yang cepat dan serbaguna. Sebuah GPU punya inti
kecil dalam jumlah gila-gilaan yang mengerjakan hal yang sama secara paralel, dan
sebuah ASIC melangkah lebih jauh: silikon yang dibuat untuk menjalankan satu
operasi saja. Kalau pertahananmu berbunyi "operasi ini memakan biaya X", seseorang
bisa membangun perangkat keras yang mengerjakan banyak X sekaligus. Yang bertahan
tetap dengan servernya.

Pada 2009, **Colin Percival** memperkenalkan **scrypt** dengan argumen lain:
*Stronger Key Derivation via Sequential Memory-Hard Functions*. Kalau biayanya
hanya ada di komputasi, ia bisa diparalelkan. Tapi **memori tidak dibagikan
gratis**. Paksa fungsinya memakai banyak RAM dan menjelajahinya dengan cara yang
tak bisa dipintas, dan tiba-tiba penyerang tak bisa lagi melipatgandakan inti:
setiap inti akan butuh memorinya sendiri. Dan inti-inti sebuah GPU punya tenaga
besar tapi RAM yang sangat sedikit untuk masing-masing.

**Percival tidak membuat operasinya mahal. Ia membuat perangkat keras yang
diperlukan untuk mengulanginya secara massal jadi mahal.** Itu perpindahan
tingkat: yang diserang adalah anggaran penyerang, bukan jam tangannya.

## 2015: Argon2, dan berakhirnya perdebatan

Adanya beberapa pilihan yang masuk akal tidak membantu siapa pun untuk memilih.
Maka komunitas kriptografi melakukan apa yang biasa mereka lakukan saat ingin
menuntaskan sesuatu: sayembara terbuka. **Password Hashing Competition** menerima
para kandidat, menundukkan mereka pada analisis terbuka selama bertahun-tahun,
dan pada **2015** menobatkan **Argon2** sebagai pemenang.

Argon2 mewarisi dua pelajaran itu: biaya dalam waktu dan biaya dalam memori,
keduanya bisa disetel secara terpisah, ditambah jumlah utas. Ini bukan sihir. Ini
rangkuman yang rapi dari 1979, 1999 dan 2009, ditelaah oleh orang-orang yang
pekerjaannya adalah mencoba mematahkannya.

## Apa artinya ini untukmu

Nyaris tak ada dari semua ini yang ada di tanganmu, dan itu perlu dikatakan:
**hash-nya dipilih oleh situsnya, bukan olehmu**. Kamu bisa punya kata sandi
terbaik sedunia dan mereka tetap menyimpannya sebagai teks biasa di sebuah berkas
Excel.

Tapi sisi lain dari persamaan itu memang bergantung padamu. Seluruh bangunan ini
— garam, biaya, memori — gunanya adalah **membuat setiap percobaan** penyerang
jadi mahal. Yang menentukan berapa banyak percobaan yang ia butuhkan adalah kata
sandimu. Kalau kata sandimu ada di kamus, tak ada fungsi lambat yang
menyelamatkanmu: ia akan jatuh di antara yang pertama. Kalau panjang dan tak mirip
apa pun, harga per percobaan itu dikalikan dengan jumlah percobaan yang tak muat
dalam waktu yang tersedia.

Karena itulah [generator](/id/) kami mengukur **bit entropi** dan bukan
persentase, dan karena itu [pemeriksa](/id/pemeriksa/) mencari kata sandimu di
kamus dulu sebelum menghitung simbol. **Mereka menetapkan harga per percobaan;
kamu menetapkan jumlah percobaannya.** Tak satu pun dari kedua paruh itu bekerja
tanpa yang lain.

Dan ya: pertanyaannya masih sama seperti dulu. Hanya saja sekarang, dari sisi
seberang, ada yang mencoba menjawabnya berkali-kali setiap detik, dan sejak 1979
kita berusaha agar setiap kali itu ada harganya.

---

*Sumber: R. Morris dan K. Thompson, "Password Security: A Case History",
Communications of the ACM, 1979 · N. Provos dan D. Mazières, "A Future-Adaptable
Password Scheme", USENIX Annual Technical Conference, 1999 (bcrypt) · C.
Percival, "Stronger Key Derivation via Sequential Memory-Hard Functions", 2009
(scrypt) · Password Hashing Competition, pemenang Argon2, 2015.*
