Bayangkan Anda bisa mengambil data apa pun — sebuah kata, sebuah novel, sebuah video 4 GB — dan mereduksinya menjadi string karakter pendek dengan panjang tetap yang secara unik mengidentifikasinya. Ubah satu koma dalam aslinya dan string menjadi sama sekali berbeda. Dan tidak ada cara untuk membalikkan proses untuk memulihkan data asli.
Itulah persis yang dilakukan fungsi hash kriptografis. Ia adalah salah satu blok bangunan paling fundamental dari keamanan modern, dan ia diam-diam melindungi hampir semua yang Anda lakukan secara online.
Metafora sidik jari
Hash bekerja seperti sidik jari digital. Sidik jari Anda secara unik mengidentifikasi Anda, tapi tidak ada yang bisa merekonstruksi wajah Anda darinya. Demikian pula, hash kriptografis secara unik mengidentifikasi sebuah data tanpa mengungkapkan apa data itu.
Masukkan input apa pun ke dalam fungsi hash dan Anda mendapatkan digest (juga disebut nilai hash atau checksum) — string karakter heksadesimal dengan panjang tetap. SHA-256, salah satu algoritma paling umum, selalu menghasilkan output 64 karakter terlepas dari ukuran input.
| Input | Digest SHA-256 (16 karakter pertama) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Seluruh dump Wikipedia | (tetap 64 karakter) |
Empat properti esensial
Sebuah fungsi memenuhi syarat sebagai hash kriptografis hanya jika memenuhi properti berikut:
- Deterministik. Input yang sama selalu menghasilkan output yang sama, di mesin mana pun, kapan pun.
- Satu arah (ketahanan pre-image). Diberikan sebuah hash, secara komputasional tidak mungkin menemukan input aslinya. Anda tidak bisa "un-hash" data.
- Tahan collision. Secara praktis tidak mungkin menemukan dua input berbeda yang menghasilkan digest yang sama. Untuk SHA-256, peluang collision tidak sengaja kira-kira 1 dalam 2^128 — angka yang lebih besar dari atom di alam semesta yang dapat diamati.
- Efek avalanche. Mengubah satu bit dalam input membalik sekitar setengah bit dalam output. Tidak ada pola atau hubungan yang dapat dideteksi antara input yang serupa.
Perbedaan penting: Hashing bukan enkripsi. Enkripsi dapat dibalik dengan kunci; hashing sengaja tidak dapat dibalik. Anda mengenkripsi data untuk melindunginya selama transit. Anda meng-hash data untuk memverifikasi integritasnya atau menyimpan bukti tanpa menyimpan aslinya.
Algoritma hash umum
MD5 (1991)
- Output: 128 bit (32 karakter hex)
- Status: Broken secara kriptografis. Peneliti dapat menghasilkan collision dalam hitungan detik di laptop.
- Masih terlihat di: Checksum non-keamanan untuk unduhan file dan sistem lama.
SHA-1 (1995)
- Output: 160 bit (40 karakter hex)
- Status: Deprecated untuk keamanan. Google mendemonstrasikan collision praktis pada 2017 (serangan "SHAttered").
- Masih terlihat di: Repository Git lama, beberapa sertifikat lama.
SHA-256 (2001)
- Output: 256 bit (64 karakter hex)
- Status: Standar saat ini. Tidak ada serangan praktis yang diketahui.
- Digunakan di: Sertifikat TLS, Bitcoin, hashing kata sandi, tanda tangan digital, verifikasi integritas file.
SHA-3 (2015)
- Output: Variabel (umumnya 256 bit)
- Status: Standar terbaru, berdasarkan desain internal yang sepenuhnya berbeda (konstruksi sponge Keccak) dari keluarga SHA-2.
- Digunakan di: Sistem forward-looking, Ethereum, situasi yang memerlukan keragaman algoritma.
| Algoritma | Ukuran output | Aman? | Kecepatan |
|---|---|---|---|
| MD5 | 128 bit | Tidak | Sangat cepat |
| SHA-1 | 160 bit | Tidak | Cepat |
| SHA-256 | 256 bit | Ya | Sedang |
| SHA-3-256 | 256 bit | Ya | Sedang |
Di mana hashing kriptografis digunakan
Penyimpanan kata sandi
Saat Anda membuat akun, sistem yang dirancang dengan baik tidak pernah menyimpan kata sandi dalam teks biasa. Ia menyimpan hash-nya. Saat Anda login, sistem meng-hash apa yang Anda ketik dan membandingkannya dengan nilai tersimpan. Bahkan jika database dibobol, penyerang mendapatkan hash — bukan kata sandi.
Sistem modern melangkah lebih jauh dengan menambahkan salt acak (data tambahan yang ditambahkan sebelum hashing) dan menggunakan algoritma yang sengaja lambat seperti bcrypt, scrypt, atau Argon2 untuk membuat tebakan brute-force tidak praktis.
Verifikasi integritas file
Distributor perangkat lunak mempublikasikan checksum SHA-256 bersama unduhan mereka. Setelah mengunduh, Anda menghitung hash file di mesin Anda dan membandingkan. Kecocokan membuktikan file tidak rusak atau dimodifikasi selama transit.
Tanda tangan digital
Saat Anda menandatangani dokumen secara digital, sistem meng-hash dokumen terlebih dahulu, lalu mengenkripsi hash dengan kunci privat Anda. Penerima mendekripsinya dengan kunci publik Anda dan membandingkannya dengan hash mereka sendiri dari dokumen. Ini jauh lebih efisien daripada mengenkripsi seluruh dokumen dan membuktikan kepengarangan dan integritas.
Blockchain
Setiap blok dalam blockchain berisi hash blok sebelumnya, menciptakan rantai yang tidak dapat diubah. Mengubah transaksi masa lalu mana pun mengubah hash bloknya, yang memutus rantai dari titik itu ke depan, membuat modifikasi langsung terlihat.
Mengapa MD5 dan SHA-1 dianggap broken
Algoritma hash dianggap "broken" ketika seseorang dapat dengan sengaja membuat dua input berbeda yang menghasilkan hash yang sama (sebuah collision). Ini merusak setiap kasus penggunaan yang mengandalkan keunikan.
- MD5: Collision dapat dihasilkan dalam hitungan detik. Peneliti telah membuat dua file PDF berbeda dengan hash MD5 identik.
- SHA-1: Serangan SHAttered pada 2017 menghasilkan dua PDF berbeda dengan hash SHA-1 yang sama, memerlukan sekitar 6.500 tahun komputasi CPU tunggal (layak dengan sumber daya cloud).
Aturan praktis: Jangan pernah gunakan MD5 atau SHA-1 untuk apa pun yang berkaitan dengan keamanan — kata sandi, sertifikat, tanda tangan digital, atau pemeriksaan integritas di mana musuh mungkin terlibat. Gunakan SHA-256 atau SHA-3 sebagai gantinya.
Pelajari lebih lanjut
Hashing adalah salah satu konsep yang menjadi intuitif begitu Anda bereksperimen dengannya. Coba hash sebuah kalimat, lalu ubah satu karakter dan amati efek avalanche secara langsung.
- Cara Menghasilkan dan Memverifikasi Hash — tutorial langkah demi langkah
- Generator Hash — hitung SHA-256, MD5, SHA-512, dan lainnya langsung di browser
- Identifier Hash — tempel hash yang tidak dikenal dan identifikasi algoritmanya
