Apa Itu Hash dan Mengapa Ada di Mana-mana dalam Teknologi?
Anda mungkin pernah melihat string seperti ini:
e3b0c44298fc1c149afbf4c8996fb924
27ae41e4649b934ca495991b7852b855
Mereka muncul dalam unduhan software ("verifikasi hash SHA-256"), dalam percakapan blockchain, dalam diskusi keamanan kata sandi, dan dalam berbagai alat pengembang. Tetapi apa sebenarnya hash itu, dan mengapa sangat fundamental bagi teknologi modern?
Konsepnya dalam Bahasa Sederhana
Fungsi hash mengambil input apa pun, sebuah kata, kalimat, atau file lengkap, dan menghasilkan output dengan panjang tetap yang disebut nilai hash (juga disebut digest, checksum, atau fingerprint). Properti-properti utamanya adalah:
- Deterministik. Input yang sama selalu menghasilkan output yang sama.
- Panjang tetap. Tidak peduli seberapa besar inputnya, outputnya selalu berukuran sama.
- Satu arah. Anda tidak dapat merekonstruksi input asli dari output hash.
- Efek avalanche. Perubahan kecil pada input menghasilkan hash yang sama sekali berbeda.
Anggap saja sebagai sidik jari untuk data. Sama seperti sidik jari Anda yang secara unik mengidentifikasi Anda tetapi tidak dapat digunakan untuk merekonstruksi wajah Anda, hash secara unik mengidentifikasi data tetapi tidak dapat digunakan untuk merekonstruksi aslinya.
Contoh Sederhana
Inilah yang dilakukan fungsi hash SHA-256 pada dua input yang sangat mirip:
| Input | Hash SHA-256 (16 karakter pertama) |
|---|---|
| "Hello" | 185f8db32271fe25... |
| "hello" | 2cf24dba5fb0a30e... |
| "hello!" | ce06092fb948d9ff... |
Mengubah satu karakter (H besar menjadi h kecil) atau menambahkan tanda seru menghasilkan hash yang sama sekali berbeda. Tidak ada pola, tidak ada hubungan yang dapat diprediksi. Inilah efek avalanche dalam aksi.
Tahukah Anda? Hash SHA-256 dari input kosong (harfiah tidak ada apa-apa) adalah e3b0c44298fc1c14.... Ini adalah konstanta yang terkenal. Setiap implementasi SHA-256 di seluruh dunia menghasilkan output yang persis sama untuk input kosong.
Algoritma Hash yang Umum
MD5
- Output: 128 bit (32 karakter heksadesimal)
- Status: Rusak untuk tujuan keamanan. Collision (input berbeda yang menghasilkan hash yang sama) dapat dibuat dalam hitungan detik.
- Masih digunakan untuk: Pemeriksaan integritas file di mana keamanan bukan perhatian (mis., memverifikasi unduhan tidak rusak).
SHA-1
- Output: 160 bit (40 karakter heksadesimal)
- Status: Tidak digunakan lagi untuk keamanan. Collision telah didemonstrasikan.
- Masih digunakan untuk: Sistem lama, pengenal commit Git.
SHA-256
- Output: 256 bit (64 karakter heksadesimal)
- Status: Standar saat ini. Tidak ada serangan praktis yang diketahui.
- Digunakan untuk: Penyimpanan kata sandi, tanda tangan digital, blockchain, verifikasi file, sertifikat TLS.
SHA-512
- Output: 512 bit (128 karakter heksadesimal)
- Status: Standar saat ini. Margin keamanan yang bahkan lebih besar dari SHA-256.
- Digunakan untuk: Aplikasi keamanan tinggi, beberapa skema hashing kata sandi.
Peringatan MD5 dan SHA-1 tidak boleh pernah digunakan untuk tujuan keamanan (kata sandi, tanda tangan digital, sertifikat). Keduanya rusak secara kriptografis. Gunakan SHA-256 atau SHA-512 untuk hal-hal yang berhubungan dengan keamanan.
Di Mana Hash Digunakan
Penyimpanan Kata Sandi
Saat Anda membuat akun, website tidak (atau seharusnya tidak) menyimpan kata sandi Anda yang sebenarnya. Sebaliknya, ia menyimpan hash kata sandi Anda. Saat Anda masuk, sistem meng-hash kata sandi yang Anda masukkan dan membandingkannya dengan hash yang tersimpan. Jika cocok, Anda masuk.
Ini berarti bahwa bahkan jika database diretas, penyerang mendapatkan hash, bukan kata sandi. Mereka tidak dapat membalikkan hash untuk menemukan kata sandi Anda (meskipun mereka dapat mencoba menebaknya dengan meng-hash kata sandi umum dan membandingkan).
Hashing kata sandi modern lebih jauh dengan algoritma seperti bcrypt, scrypt, dan Argon2, yang menambahkan salt (data acak) dan sengaja lambat untuk membuat tebakan brute-force tidak praktis.
Verifikasi File
Saat Anda mengunduh software, website sering menyediakan hash SHA-256 dari file tersebut. Setelah mengunduh, Anda meng-hash file sendiri dan membandingkan. Jika hash cocok, file tersebut persis seperti yang dimaksudkan penerbit. Jika berbeda, file rusak atau telah dirusak selama unduhan.
Diharapkan: a1b2c3d4e5f6...
File Anda: a1b2c3d4e5f6... ✓ Cocok — file asli
Blockchain dan Cryptocurrency
Setiap blok dalam blockchain berisi hash dari blok sebelumnya, menciptakan rantai yang tak terputus. Jika seseorang mencoba mengubah transaksi masa lalu, hash blok tersebut berubah, yang memutus rantai dari titik itu ke depan, membuat gangguan segera terdeteksi.
Penambangan Bitcoin pada dasarnya adalah kompetisi untuk menemukan input yang menghasilkan hash SHA-256 yang dimulai dengan sejumlah nol tertentu.
Tanda Tangan Digital
Saat Anda menandatangani dokumen secara digital, Anda tidak benar-benar mengenkripsi seluruh dokumen dengan kunci privat Anda. Sebaliknya, dokumen di-hash, dan hash-nya yang dienkripsi. Ini jauh lebih cepat dan menghasilkan tanda tangan yang ringkas.
Deduplikasi Data
Layanan penyimpanan cloud menggunakan hash untuk mendeteksi file duplikat. Jika dua pengguna mengunggah file yang sama, file tersebut memiliki hash yang sama, dan layanan hanya perlu menyimpan satu salinan.
Git Version Control
Setiap commit, file, dan tree dalam Git diidentifikasi oleh hash SHA-1-nya. Inilah cara Git mengetahui apakah file telah berubah dan cara melacak seluruh riwayat proyek.
Tahukah Anda? Git secara bertahap bermigrasi dari SHA-1 ke SHA-256. Transisi dimulai karena collision SHA-1 didemonstrasikan pada tahun 2017, yang secara teoritis memungkinkan seseorang membuat dua commit berbeda dengan pengenal yang sama.
Masalah Ireversibilitas (dan Mengapa Itu Penting)
Sifat satu arah hash adalah kekuatan terbesar dan sumber kebingungan yang sering terjadi.
Anda tidak bisa "mendekripsi" hash. Hash bukan enkripsi. Enkripsi adalah dua arah: enkripsi dengan kunci, dekripsi dengan kunci. Hashing adalah satu arah: Anda dapat menghitung hash dari input, tetapi Anda tidak dapat menghitung input dari hash.
Satu-satunya cara untuk "membalikkan" hash adalah dengan menebak input aslinya, meng-hash tebakan Anda, dan memeriksa apakah cocok. Untuk input yang pendek dan sederhana (seperti kata sandi umum), ini memungkinkan. Untuk input yang panjang dan acak, ini secara komputasi tidak mungkin.
Inilah mengapa panjang kata sandi sangat penting. Hash dari "password123" dapat ditemukan dengan mencoba kata sandi umum. Hash dari "j8#kL9$mN2@pQ5&" akan membutuhkan waktu lebih lama dari usia alam semesta untuk ditemukan dengan cara menebak.
Coba Sendiri
Cara terbaik untuk memahami hash adalah dengan bereksperimen. Hash sebuah kata, lalu ubah satu karakter dan lihat bagaimana outputnya berubah sama sekali. Hash file sebelum dan sesudah modifikasi dan lihat perbedaannya.
Tips Hasilkan dan verifikasi hash untuk teks atau file apa pun: Cara Menghasilkan dan Memverifikasi Hash. Coba SHA-256, MD5, SHA-512, dan lainnya — secara instan, gratis, di browser Anda.
Jelajahi hash secara langsung:
Gratis, instan, dan tidak perlu daftar.