Bayangkan anda boleh mengambil sebarang data — satu perkataan, sebuah novel, video 4 GB — dan menukarkannya menjadi rentetan aksara pendek dengan panjang tetap yang mengenal pastinya secara unik. Tukar satu koma dalam data asal dan rentetan itu menjadi sepenuhnya berbeza. Dan tiada cara untuk membalikkan proses bagi mendapatkan semula data asal.
Itulah tepat-tepat apa yang dilakukan oleh fungsi hash kriptografi. Ia adalah salah satu blok binaan paling asas dalam keselamatan moden, dan ia secara senyap melindungi hampir semua yang anda lakukan dalam talian.
Metafora cap jari
Hash berfungsi seperti cap jari digital. Cap jari anda mengenal pasti anda secara unik, tetapi tiada siapa yang boleh membina semula wajah anda daripadanya. Begitu juga, hash kriptografi mengenal pasti sesuatu data secara unik tanpa mendedahkan apa data itu.
Masukkan sebarang input ke dalam fungsi hash dan anda mendapat ringkasan (juga dipanggil nilai hash atau semakan jumlah) — rentetan aksara heksadesimal dengan panjang tetap. SHA-256, salah satu algoritma yang paling biasa, sentiasa menghasilkan output 64 aksara tanpa mengira saiz input.
| Input | Ringkasan SHA-256 (16 aksara pertama) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Keseluruhan longgokan Wikipedia | (masih 64 aksara) |
Empat sifat penting
Sesebuah fungsi layak sebagai hash kriptografi hanya jika ia memenuhi sifat-sifat ini:
- Deterministik. Input yang sama sentiasa menghasilkan output yang sama, pada mana-mana mesin, pada bila-bila masa.
- Sehala (rintangan pra-imej). Diberikan hash, adalah tidak boleh secara pengiraan untuk mencari input asal. Anda tidak boleh "menyahhash" data.
- Rintangan perlanggaran. Secara praktikal mustahil untuk mencari dua input berbeza yang menghasilkan ringkasan yang sama. Untuk SHA-256, kebarangkalian perlanggaran tidak sengaja adalah kira-kira 1 dalam 2^128 — angka yang lebih besar daripada bilangan atom dalam alam semesta yang boleh diperhatikan.
- Kesan longsoran. Menukar satu bit dalam input mengubah kira-kira separuh bit dalam output. Tiada corak atau hubungan yang boleh dikesan antara input yang serupa.
Perbezaan utama: Hashing bukan penyulitan. Penyulitan boleh diterbalikkan dengan kunci; hashing sengaja tidak boleh diterbalikkan. Anda menyulit data untuk melindunginya semasa penghantaran. Anda menghash data untuk mengesahkan integritinya atau menyimpan bukti tanpa menyimpan data asal.
Algoritma hash yang biasa
MD5 (1991)
- Output: 128 bit (32 aksara heksadesimal)
- Status: Rosak secara kriptografi. Penyelidik boleh menjana perlanggaran dalam beberapa saat pada komputer riba.
- Masih dilihat dalam: Semakan jumlah bukan keselamatan untuk muat turun fail dan sistem warisan.
SHA-1 (1995)
- Output: 160 bit (40 aksara heksadesimal)
- Status: Ditamatkan untuk keselamatan. Google menunjukkan perlanggaran praktikal pada 2017 (serangan "SHAttered").
- Masih dilihat dalam: Repositori Git lama, beberapa sijil warisan.
SHA-256 (2001)
- Output: 256 bit (64 aksara heksadesimal)
- Status: Standard semasa. Tiada serangan praktikal yang diketahui.
- Digunakan dalam: Sijil TLS, Bitcoin, hashing kata laluan, tandatangan digital, pengesahan integriti fail.
SHA-3 (2015)
- Output: Berubah-ubah (lazimnya 256 bit)
- Status: Standard terkini, berdasarkan reka bentuk dalaman yang sepenuhnya berbeza (pembinaan span Keccak) daripada keluarga SHA-2.
- Digunakan dalam: Sistem berpandangan ke hadapan, Ethereum, situasi yang memerlukan kepelbagaian algoritma.
| Algoritma | Saiz output | Selamat? | Kelajuan |
|---|---|---|---|
| MD5 | 128 bit | Tidak | Sangat laju |
| SHA-1 | 160 bit | Tidak | Laju |
| SHA-256 | 256 bit | Ya | Sederhana |
| SHA-3-256 | 256 bit | Ya | Sederhana |
Di mana hashing kriptografi digunakan
Penyimpanan kata laluan
Apabila anda membuat akaun, sistem yang direka dengan baik tidak pernah menyimpan kata laluan anda dalam teks biasa. Ia menyimpan hash. Apabila anda log masuk, sistem menghash apa yang anda taip dan membandingkannya dengan nilai yang disimpan. Walaupun pangkalan data dilanggar, penyerang mendapat hash — bukan kata laluan.
Sistem moden melangkah lebih jauh dengan menambah garam rawak (data tambahan yang ditambah sebelum menghash) dan menggunakan algoritma yang sengaja perlahan seperti bcrypt, scrypt, atau Argon2 untuk menjadikan tekaan kekerasan tidak praktikal.
Pengesahan integriti fail
Pengedar perisian menerbitkan semakan jumlah SHA-256 bersama muat turun mereka. Selepas memuat turun, anda mengira hash fail pada mesin anda dan membandingkan. Padanan membuktikan fail tidak rosak atau diubah suai semasa penghantaran.
Tandatangan digital
Apabila anda menandatangani dokumen secara digital, sistem menghash dokumen dahulu, kemudian menyulit hash dengan kunci peribadi anda. Penerima menyahsulit dengan kunci awam anda dan membandingkannya dengan hash dokumen mereka sendiri. Ini jauh lebih cekap daripada menyulit keseluruhan dokumen dan membuktikan kedua-dua pengarangan dan integriti.
Rantaian blok
Setiap blok dalam rantaian blok mengandungi hash blok sebelumnya, mencipta rantaian yang tidak boleh diubah. Mengubah sebarang transaksi lepas menukar hash blok tersebut, yang memecahkan rantaian dari titik itu ke hadapan, menjadikan pengubahsuaian serta-merta kelihatan.
Mengapa MD5 dan SHA-1 dianggap rosak
Algoritma hash "rosak" apabila seseorang boleh dengan sengaja mencipta dua input berbeza yang menghasilkan hash yang sama (perlanggaran). Ini melemahkan setiap kes penggunaan yang bergantung pada keunikan.
- MD5: Perlanggaran boleh dijana dalam beberapa saat. Penyelidik telah mencipta dua fail PDF berbeza dengan hash MD5 yang sama.
- SHA-1: Serangan SHAttered pada 2017 menghasilkan dua PDF berbeza dengan hash SHA-1 yang sama, memerlukan kira-kira 6,500 tahun pengiraan CPU tunggal (boleh dilaksanakan dengan sumber awan).
Peraturan praktikal: Jangan sekali-kali menggunakan MD5 atau SHA-1 untuk apa-apa yang berkaitan keselamatan — kata laluan, sijil, tandatangan digital, atau semakan integriti di mana pihak lawan mungkin terlibat. Gunakan SHA-256 atau SHA-3 sebaliknya.
Lebih lanjut
Hashing adalah salah satu konsep yang menjadi intuitif sebaik anda mencubanya. Cuba hash satu ayat, kemudian tukar satu aksara dan perhatikan kesan longsoran secara langsung.
- Cara Menjana dan Mengesahkan Hash — tutorial langkah demi langkah
- Penjana Hash — kira SHA-256, MD5, SHA-512, dan banyak lagi serta-merta dalam pelayar anda
- Pengenal Pasti Hash — tampal hash yang tidak diketahui dan kenal pasti algoritmanya
