Apa Itu Hash dan Mengapa Ia Ada Di Mana-mana dalam Teknologi?
Anda mungkin pernah melihat rentetan seperti ini:
e3b0c44298fc1c149afbf4c8996fb924
27ae41e4649b934ca495991b7852b855
Ia muncul dalam muat turun perisian ("sahkan hash SHA-256"), dalam perbincangan blockchain, dalam perbincangan keselamatan kata laluan, dan dalam pelbagai alat pembangun. Tetapi apa sebenarnya hash itu, dan mengapa ia begitu asas kepada teknologi moden?
Konsep dalam Bahasa Mudah
Fungsi hash mengambil sebarang input, perkataan, ayat, keseluruhan fail, dan menghasilkan output panjang tetap yang dipanggil nilai hash (juga dipanggil digest, checksum, atau cap jari). Sifat-sifat utama adalah:
- Deterministik. Input yang sama sentiasa menghasilkan output yang sama.
- Panjang tetap. Tidak kira seberapa besar input, output sentiasa saiz yang sama.
- Satu hala. Anda tidak boleh membina semula input asal dari output hash.
- Kesan longsoran. Perubahan kecil dalam input menghasilkan hash yang sama sekali berbeza.
Anggapkannya sebagai cap jari untuk data. Sama seperti cap jari anda mengenal pasti anda secara unik tetapi tidak boleh digunakan untuk membina semula wajah anda, hash mengenal pasti sekeping data secara unik tetapi tidak boleh digunakan untuk membina semula yang asal.
Contoh Mudah
Inilah yang dilakukan fungsi hash SHA-256 kepada dua input yang sangat serupa:
| Input | Hash SHA-256 (16 aksara pertama) |
|---|---|
| "Hello" | 185f8db32271fe25... |
| "hello" | 2cf24dba5fb0a30e... |
| "hello!" | ce06092fb948d9ff... |
Menukar satu aksara (H besar ke h kecil) atau menambah tanda seru menghasilkan hash yang sama sekali berbeza. Tiada corak, tiada hubungan yang boleh diramal. Inilah kesan longsoran dalam tindakan.
Tahukah anda? Hash SHA-256 input kosong (betul-betul tiada apa) adalah e3b0c44298fc1c14.... Ini adalah pemalar yang terkenal. Setiap pelaksanaan SHA-256 di dunia menghasilkan output yang sama tepat ini untuk input kosong.
Algoritma Hash Biasa
MD5
- Output: 128 bit (32 aksara heksadesimal)
- Status: Rosak untuk tujuan keselamatan. Perlanggaran (input berbeza menghasilkan hash yang sama) boleh dijana dalam beberapa saat.
- Masih digunakan untuk: Pemeriksaan integriti fail di mana keselamatan bukan kebimbangan (cth, mengesahkan muat turun tidak rosak).
SHA-1
- Output: 160 bit (40 aksara heksadesimal)
- Status: Ditarik balik untuk keselamatan. Perlanggaran telah ditunjukkan.
- Masih digunakan untuk: Sistem warisan, pengecam commit Git.
SHA-256
- Output: 256 bit (64 aksara heksadesimal)
- Status: Standard semasa. Tiada serangan praktikal yang diketahui.
- Digunakan untuk: Penyimpanan kata laluan, tandatangan digital, blockchain, pengesahan fail, sijil TLS.
SHA-512
- Output: 512 bit (128 aksara heksadesimal)
- Status: Standard semasa. Margin keselamatan yang lebih besar daripada SHA-256.
- Digunakan untuk: Aplikasi keselamatan tinggi, beberapa skim pencincangan kata laluan.
Amaran MD5 dan SHA-1 tidak sepatutnya digunakan untuk tujuan keselamatan (kata laluan, tandatangan digital, sijil). Ia rosak secara kriptografi. Gunakan SHA-256 atau SHA-512 untuk apa sahaja yang berkaitan keselamatan.
Di Mana Hash Digunakan
Penyimpanan Kata Laluan
Apabila anda mencipta akaun, laman web tidak (atau tidak sepatutnya) menyimpan kata laluan sebenar anda. Sebaliknya, ia menyimpan hash kata laluan anda. Apabila anda log masuk, sistem mencincang kata laluan yang anda masukkan dan membandingkannya dengan hash yang disimpan. Jika ia sepadan, anda masuk.
Ini bermakna walaupun pangkalan data dikompromi, penyerang mendapat hash, bukan kata laluan. Mereka tidak boleh membalikkan hash untuk mencari kata laluan anda (walaupun mereka boleh cuba menekanya dengan mencincang kata laluan biasa dan membandingkan).
Pencincangan kata laluan moden pergi lebih jauh dengan algoritma seperti bcrypt, scrypt, dan Argon2, yang menambah garam (data rawak) dan sengaja lambat untuk menjadikan terkaan brute-force tidak praktikal.
Pengesahan Fail
Apabila anda memuat turun perisian, laman web sering menyediakan hash SHA-256 fail itu. Selepas memuat turun, anda mencincang fail itu sendiri dan membandingkan. Jika hash sepadan, fail itu adalah tepat seperti yang dimaksudkan oleh penerbit. Jika ia berbeza, fail itu rosak atau diganggu semasa muat turun.
Dijangka: a1b2c3d4e5f6...
Fail anda: a1b2c3d4e5f6... ✓ Sepadan — fail adalah asli
Blockchain dan Mata Wang Kripto
Setiap blok dalam blockchain mengandungi hash blok sebelumnya, mencipta rantai yang tidak boleh dipecahkan. Jika seseorang cuba mengubah transaksi lama, hash blok itu berubah, yang memecahkan rantai dari titik itu ke hadapan, menjadikan gangguan dapat dikesan dengan segera.
Perlombongan Bitcoin pada dasarnya adalah pertandingan untuk mencari input yang menghasilkan hash SHA-256 yang bermula dengan bilangan sifar tertentu.
Tandatangan Digital
Apabila anda menandatangani dokumen secara digital, anda tidak sebenarnya menyulitkan keseluruhan dokumen dengan kunci peribadi anda. Sebaliknya, dokumen dicincang, dan hash disulitkan. Ini jauh lebih pantas dan menghasilkan tandatangan yang padat.
Penyahduplikatan Data
Perkhidmatan penyimpanan awan menggunakan hash untuk mengesan fail pendua. Jika dua pengguna memuat naik fail yang sama, ia mempunyai hash yang sama, dan perkhidmatan hanya perlu menyimpan satu salinan.
Kawalan Versi Git
Setiap commit, fail, dan pokok dalam Git dikenal pasti oleh hash SHA-1-nya. Inilah cara Git mengetahui sama ada fail telah berubah dan cara ia menjejaki keseluruhan sejarah projek.
Tahukah anda? Git secara beransur-ansur beralih dari SHA-1 ke SHA-256. Peralihan itu bermula kerana perlanggaran SHA-1 ditunjukkan pada tahun 2017, secara teorinya membolehkan seseorang mencipta dua commit berbeza dengan pengecam yang sama.
Masalah Ketidakbolehbalikan (dan Mengapa Ia Penting)
Sifat satu hala hash adalah kekuatan terbesar mereka dan sumber kekeliruan yang kerap.
Anda tidak boleh "menyahsulit" hash. Hash bukan penyulitan. Penyulitan adalah dua hala: sulit dengan kunci, nyahsulit dengan kunci. Pencincangan adalah satu hala: anda boleh mengira hash dari input, tetapi anda tidak boleh mengira input dari hash.
Satu-satunya cara untuk "membalikkan" hash adalah meneka input asal, mencincang tekaan anda, dan memeriksa sama ada ia sepadan. Untuk input pendek dan mudah (seperti kata laluan biasa), ini boleh dilakukan. Untuk input panjang dan rawak, ia adalah mustahil dari segi pengiraan.
Inilah sebab panjang kata laluan begitu penting. Hash "password123" boleh ditemui dengan mencuba kata laluan biasa. Hash "j8#kL9$mN2@pQ5&" akan mengambil masa lebih lama daripada usia alam semesta untuk ditemui dengan meneka.
Cuba Sendiri
Cara terbaik untuk memahami hash adalah dengan bereksperimen. Hash satu perkataan, kemudian tukar satu aksara dan lihat bagaimana output berubah sepenuhnya. Hash fail sebelum dan selepas pengubahsuaian dan lihat perbezaannya.
Petua Jana dan sahkan hash untuk mana-mana teks atau fail: Cara Menjana dan Mengesahkan Hash. Cuba SHA-256, MD5, SHA-512 dan lagi — dengan segera, secara percuma, dalam pelayar anda.
Terokai hash secara langsung:
Percuma, segera, dan tidak perlu daftar.