Blockchain/Tahap II · Mekanisme/2.1 Kriptografi/Pelajaran 1
Fungsi hash dan SHA-256
Cap jari yang menambat lejar
BahanTerminal dengan shasum atau openssl yang telah dipasangKalkulator SHA-256 dalam talianDua fail teks yang berbeza hanya pada satu aksara
Ingin tahu
- Mengapa mengubah satu aksara dalam sebuah fail boleh mengubah separuh daripada nilai hashnya?
- Jika input yang mungkin tidak terhingga banyaknya berkongsi satu set output yang terhad, mengapa masih tidak praktikal untuk mencari dua input yang berlanggar?
- Apakah yang menjadikan SHA-256 selamat sedangkan pendahulunya, SHA-1, telah dipecahkan?
Teroka
- Fungsi hash kriptografi memetakan data dengan sebarang panjang kepada digest bersaiz tetap. Ia bersifat deterministik: input yang sama sentiasa menghasilkan output yang sama. Ia cepat dikira tetapi tidak praktikal untuk diterbalikkan. Sifat sehala inilah yang mentakrifkan rintangan preimage. Jika penyerang hanya memegang hash tersebut, mereka tidak dapat menerbitkan semula mesej asal. Sifat tidak boleh diterbalikkan ini menjamin pemeriksaan integriti dan bukti identiti dalam sistem teragih.
- SHA-256 menghasilkan output sepanjang 256 bit tanpa mengira saiz input. Sama ada inputnya hanya satu bait atau fail bersaiz satu gigabait, digest tetap berukuran tepat 32 bait. Panjang yang tetap ini membolehkan penyimpanan dan perbandingan yang konsisten. Fungsi ini memproses data dalam blok 512 bit melalui 64 pusingan operasi logik. Reka bentuknya mengikut konstruksi Merkle–Damgård, iaitu merantaikan fungsi pemampatan merentasi blok-blok tersebut; pencampuran oleh fungsi pemampatan itulah yang mengacak output.
- Kesan salji longsor (avalanche effect) merupakan ciri yang kritikal: menterbalikkan satu bit dalam input akan mengubah kira-kira separuh daripada bit dalam hash output. Kepekaan ini memastikan bahawa kerosakan atau pengubahan data yang kecil sekalipun akan menghasilkan digest yang sama sekali berbeza. Ini menjadikan fungsi hash sangat sesuai untuk mengesahkan integriti fail dan mengesan sebarang perubahan. Sebarang pengubahsuaian, sehalus mana pun, akan memecahkan padanan antara hash yang dijangka dengan hash yang dikira.
- Rintangan perlanggaran (collision resistance) merupakan sifat yang paling sukar dipenuhi. Mencari dua input berbeza yang menghasilkan hash yang sama memerlukan kira-kira 2^128 operasi disebabkan oleh had hari jadi (birthday bound). Bagi SHA-256, kos pengiraan ini menjadikan serangan brute-force tidak praktikal dengan perkakasan masa kini. Sebaliknya, SHA-1 terdedah kepada serangan perlanggaran praktikal yang ditunjukkan oleh penyelidik di Google dan CWI pada tahun 2017, yang dikenali sebagai SHAttered. Kelemahan ini memaksa peralihan daripada SHA-1 bagi aplikasi yang kritikal dari segi keselamatan.
- Bitcoin menggunakan SHA-256 sebanyak dua kali, iaitu amalan yang dikenali sebagai double hashing. Pengepala blok (block header) dan ID transaksi di-hash dengan SHA-256, kemudian hasilnya di-hash sekali lagi dengan SHA-256. Satoshi tidak pernah menjelaskan pilihan ini; penjelasan yang lazim ialah perlindungan daripada serangan length-extension, iaitu sifat yang diketahui pada hash Merkle–Damgård seperti SHA-256. Setiap hash blok dan ID transaksi dalam rantaian ialah output daripada laluan berganda ini.
- Buka mana-mana terminal atau alat dalam talian dan kira hash SHA-256 bagi rentetan 'MSTR Cat'. Kemudian kira hash bagi 'MSTR cat', dengan hanya menukar huruf besar satu huruf kepada huruf kecil. Bandingkan kedua-dua output heksadesimal 64 aksara tersebut. Kedua-duanya akan berbeza sama sekali dan tidak berkongsi sebarang corak yang boleh dikenali. Perbezaan serta-merta ini menggambarkan kesan salji longsor secara nyata: perubahan satu bit sahaja mengacak keseluruhan digest, sekali gus mengesahkan bahawa fungsi ini sangat peka terhadap input.
Fakta utama
- SHA-256 menghasilkan output sepanjang 256 bit yang tetap untuk sebarang saiz input.
- Kesan salji longsor memastikan perubahan satu bit mengubah kira-kira separuh daripada bit hash.
- Mencari perlanggaran SHA-256 secara brute force memerlukan kira-kira 2^128 operasi.
- SHA-1 telah dipecahkan melalui serangan perlanggaran yang praktikal (SHAttered) pada tahun 2017.
- Bitcoin menggunakan SHA-256 berganda untuk hash blok dan ID transaksi.
- SHA-256 memproses data dalam blok 512-bit melalui 64 pusingan.
Latihan sembilan, enam, tiga, satu
9KumpulSenaraikan 9 fungsi hash atau algoritma checksum yang digunakan dalam pengkomputeran. Catatkan saiz hasilnya dan kegunaan utamanya.
6KelompokkanKumpulkan 9 item tersebut ke dalam 6 kategori berdasarkan tahap keselamatan: telah dipecahkan, tidak disyorkan lagi (deprecated), standard untuk penggunaan umum, standard untuk konteks keselamatan tinggi, khusus untuk kelajuan, atau lain-lain.
3SaringKurangkan 6 kumpulan tersebut kepada 3 sebab utama mengapa fungsi hash dipilih untuk aplikasi tertentu.
1KristalkanTulis 1 ayat yang menerangkan bagaimana digest berpanjang tetap membolehkan pengesahan data yang berlainan saiz.
Semakan fakta
Tarikh, angka dan dakwaan telah disemak berbanding dengan sumber yang diterbitkan yang disenaraikan di bawah.