Alat pengembang · SHA kalkulator hash
Serangan Ekstensi Panjang: Mengapa SHA-256(rahasia + pesan) Bukan MAC
· Mengapa itu penting
sha-256 kriptografi keamanan
Menambahkan rahasia ke sebuah pesan dan melakukan hashing sepertinya seperti autentikasi, tetapi struktur SHA-256 memungkinkan penyerang memperluas pesan tanpa mengetahui rahasianya. Posting ini menjelaskan serangan dan perbaikannya.
Tanda tangan permintaan buatan sendiri — hash(rahasia + isi) dan mengapa terasa aman
Pengembang memerlukan autentikasi pesan tetapi tidak memiliki pengetahuan HMAC, sehingga mereka menggabungkan rahasia dengan pesan dan melakukan hash pada hasilnya. Pendekatan ini terlihat aman pada awalnya: keluarannya adalah sidik jari berukuran tetap yang akan berubah jika ada yang mengubah pesannya. Namun, SHA-256 memiliki kelemahan arsitektur yang disebut ekstensi panjang yang memungkinkan penyerang menambahkan data ke pesan dan menghitung intisari yang valid tanpa mengetahui rahasianya. Kalkulator hash ToolAcre SHA hanya menghitung intisari biasa, bukan autentikasi berkunci, karena perbedaan ini penting untuk keamanan sebenarnya.
Mempersiapkan rahasia sebelum melakukan hashing secara intuitif menarik karena hanya pemegang rahasia yang dapat menghitung ulang hash tersebut. Jika pesannya berubah, hashnya pun ikut berubah, sehingga terlihat seperti bukti keaslian. API mungkin menandatangani permintaan dengan menggabungkan rahasia bersama dan isi permintaan, lalu melakukan hashing pada hasilnya dan menyertakan hash tersebut dalam permintaan. Server menerima isi, menghitung ulang hash dengan salinan rahasianya, dan memeriksa apakah cocok. Jika penyerang mengubah isi, hash tidak akan cocok—atau begitulah yang dipikirkan pengembang.
Merkle–Damgård membocorkan statusnya — intisari terakhir adalah status internal, sehingga penyerang dapat terus melakukan hashing dari tempat Anda berhenti
SHA-256 termasuk dalam keluarga yang disebut fungsi hash Merkle–Damgård. Fungsi-fungsi ini memproses masukan dalam blok berukuran tetap, merangkai fungsi kompresi yang mengambil keadaan sebelumnya dan blok saat ini dan mengeluarkan keadaan baru. Fungsi kompresi adalah satu-satunya primitif kriptografi di dalamnya; strategi rantai dan skema bantalan membuat seluruh konstruksi berhasil. Intisari terakhir hanyalah keadaan akhir yang dicetak dalam heksadesimal. Hal ini bukan kebetulan: keluarannya adalah keadaan internal. Siapa pun yang melihat intisari memiliki status pasti yang diperlukan untuk melanjutkan hashing sejak saat itu.
Untuk memperluas pesan, penyerang memulai dengan intisari secret + original_message yang diamati dan memperlakukannya sebagai variabel status untuk panggilan fungsi kompresi baru. Mereka menambahkan data yang ingin mereka tambahkan, mengisinya dengan benar untuk seluruh panjang pesan baru, dan menghitung intisarinya. Ketika server memvalidasi intisari palsu ini dengan menambahkan rahasianya sendiri dan melakukan hashing, perhitungan akan berjalan sama dengan perhitungan penyerang setelah rahasia awal diserap. Server menghitung intisari yang sama, dan pesan palsu diterima tanpa penyerang mengetahui rahasianya sama sekali.
Cara kerja ekstensi — menambahkan padding dan data tambahan untuk membuat hash yang valid untuk pesan yang lebih panjang
Algoritme yang berbeda dipengaruhi secara berbeda oleh perluasan panjang. SHA-1 rentan: penyerang dapat mengamati intisari SHA-1 dan menyampaikan pesan. SHA-256 rentan dengan cara yang persis sama. SHA-512 juga rentan terhadap serangan ekstensi. SHA-384 menolak perpanjangan panjang karena dibuat sebagai SHA-512 dipotong menjadi 384 bits. Keluaran fungsi kompresi lebih panjang dari intisari yang dipublikasikan, sehingga penyerang tidak memiliki informasi yang cukup untuk melanjutkan hashing. Konstruksi spons yang digunakan pada SHA-3 juga tahan karena tidak membocorkan keadaan internal.
Memahami algoritme mana yang rentan memerlukan pengetahuan tentang ukuran fungsi kompresi versus ukuran intisari yang dipublikasikan. SHA-256 menerbitkan 256 bits dan status fungsi kompresi juga 256 bits, jadi intisarinya adalah keseluruhan status. Seorang penyerang memiliki semua yang dibutuhkan untuk melanjutkan. SHA-384 menerbitkan 384 bits, namun status fungsi kompresi yang mendasarinya adalah 512 bits karena SHA-384 dibuat di atas SHA-512. Intisari hanya mengungkapkan 384 dari 512 bits tersebut, sehingga 128 bits tidak diketahui oleh penyerang. Ini adalah properti desain yang disengaja dari SHA-384 yang memberikan resistensi ini.
Konstruksi SHA-1, SHA-256 dan SHA-512 yang didukung memperlihatkan keadaan penuh; Pemotongan SHA-384 mengubah batas ekstensi
Perbaikan untuk mengautentikasi pesan dengan rahasia bersama adalah HMAC, kode autentikasi pesan hash yang dikunci. HMAC tidak menambahkan rahasia dan hash; sebaliknya, ia menerapkan rahasia dalam dua operasi hash bertumpuk menggunakan skema padding khusus yang disebut pad dalam dan luar. Konstruksinya adalah HMAC(rahasia, pesan) = SHA256(rahasia_XOR_outer_pad, SHA256(rahasia_XOR_inner_pad, pesan)). Pendekatan bersarang ini menutup kesenjangan ekstensi panjang karena meskipun penyerang telah mencerna hash bagian dalam, mereka tidak dapat melanjutkan hashing tanpa rahasianya.
Alasan untuk memisahkan operasi intisari dan HMAC adalah untuk menghindari kesalahan umum dalam memperlakukan keduanya secara bergantian. Pengembang yang mempelajari hashing melalui alat yang melakukan keduanya mungkin lupa alat mana yang mereka gunakan saat menulis kode. Memisahkan komputasi intisari membuat pilihan menjadi eksplisit dan memperkuat pembelajaran bahwa autentikasi memerlukan HMAC atau tanda tangan. Label kalkulator hash ToolAcre SHA dapat dicerna dengan jelas, dan dokumentasi menjelaskan bahwa HMAC adalah operasi yang sepenuhnya berbeda.
HMAC sebagai perbaikan — konstruksi bersarang yang menutup kesenjangan dan mengapa ini adalah jawaban standar
Contoh konseptual perpanjangan panjang bekerja pada vektor uji abc yang sudah dikenal. Menghitung SHA-256 pada teks ASCII abc menghasilkan intisari ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Misalkan intisari ini adalah hasil dari secret + abc yang di-hash dengan rahasia 5-byte, sehingga menghasilkan total input 8 bytes. SHA-256 memproses input dalam blok 64-byte, sehingga blok pertama dan satu-satunya diisi dengan panjang pesan dan byte padding lainnya. Seorang penyerang melihat intisari dan ingin memalsukan pesan yang dimulai dengan abc diikuti dengan data tambahan.
Mereka tidak bisa langsung menambahkan ke abc karena mereka tidak tahu persis padding yang ditambahkan di dalam hash. Namun, mereka dapat menghitung isi pesan yang diisi penuh: abc ditambah padding yang diperlukan untuk input 8-byte ke blok 64-byte. Mereka kemudian menambahkan data ekstra, menghitung padding untuk panjang total baru, dan melakukan hash pada kombinasi tersebut dengan memperlakukan intisari yang diamati sebagai keadaan awal. Hasilnya adalah intisari SHA-256 yang valid yang akan diterima oleh server karena ia menambahkan rahasia dan menghitung hash yang sama.
Contoh praktis - penelusuran konseptual dalam menyampaikan pesan yang ditandatangani, tanpa target langsung
Untuk mencegah serangan ini pada sistem nyata, pengembang tidak boleh mencoba membangun otentikasi dari hash biasa. HMAC adalah jawaban standar, dan kalkulator hash ToolAcre SHA adalah alat untuk menghitung intisari biasa untuk pemeriksaan integritas, hashing konten, dan tujuan non-autentikasi serupa. Contoh penggunaan intisari SHA-256 yang aman mencakup checksum file, di mana penyerang tidak dapat mengontrol file dan intisari; penyimpanan beralamat konten, dengan hash sebagai kunci pencarian; dan tanda tangan digital yang digabungkan dengan tanda tangan, dimana tanda tangan tersebut memberikan otentikasi.
Cakupan penuh dari masalah ini mencakup algoritma lain yang disediakan browser. SHA-1 rentan terhadap perpanjangan panjang dan sudah rusak secara kriptografis sebelum menjadi relevan. Kalkulator ToolAcre memberi label SHA-1 sebagai warisan saja dan menjelaskan serangan tabrakan yang membuatnya tidak cocok untuk aplikasi baru. Untuk aplikasi baru, SHA-256 adalah pilihan yang masuk akal untuk ringkasan biasa, dan jika otentikasi diperlukan, HMAC dengan SHA-256 adalah jawabannya. SHA-384 dan SHA-512 keduanya rentan, namun SHA-384 dilindungi oleh pemotongan.
Apa yang tidak tercakup di sini — kalkulator ToolAcre menghitung intisari biasa, bukan HMAC; postingan tersebut menjelaskan mengapa perbedaan itu penting
Saat membangun model mental fungsi hash, konstruksi Merkle–Damgård dan perluasan panjangnya menjadi konsep utama. Fungsi hash harus menangani panjang masukan yang berubah-ubah dan menghasilkan keluaran yang tetap. Cara melakukannya adalah dengan merangkai fungsi kompresi blok demi blok, dan cara keadaan akhir diubah menjadi keluaran sangat berarti. Jika keadaan akhir adalah keluaran seluruhnya, maka keluaran tersebut berisi semua informasi yang diperlukan untuk melanjutkan hashing. Jika keadaan akhir terpotong, sebagian akan disembunyikan.
Bagi pengembang yang baru pertama kali membaca tentang serangan ekstensi panjang, pertanyaannya adalah bagaimana mengetahui apakah serangan tersebut memengaruhi kasus penggunaan mereka. Jika masukan ke hash adalah konstanta publik dan hash digunakan sebagai kunci pencarian atau sidik jari, perpanjangan panjang tidak relevan. Jika hash digunakan untuk mengautentikasi pesan ketika kedua belah pihak berbagi rahasia, ekstensi panjang merupakan kerentanan kritis, dan HMAC adalah solusinya. Kalkulator hash ToolAcre SHA menampilkan ringkasan dan jumlah byte, memperjelas bahwa ini adalah keluaran komputasi, bukan mekanisme autentikasi.
Kesimpulan: gunakan MAC untuk autentikasi — kalkulator hash ToolAcre SHA ditujukan untuk intisari integritas; otentikasi memerlukan HMAC atau tanda tangan
Menerapkan ini pada sistem produksi, prinsipnya sangat jelas: jangan pernah menggunakan hash kosong untuk otentikasi ketika ada rahasia yang terlibat. HMAC adalah konstruksi standar yang menutup seluruh vektor serangan ekstensi panjang. SHA-256 dan SHA-384 keduanya aman untuk tujuan yang dimaksudkan bila digunakan dengan benar. Memahami tiga poin utama—bahwa Merkle–Damgård mengungkapkan statusnya dalam intisari, bahwa SHA-384 memotong untuk menyembunyikan bagian dari negara bagian, dan bahwa HMAC menggunakan konstruksi bersarang untuk mencegah perluasan—memberikan pengembang alat untuk membuat pilihan yang tepat.
Kalkulator hash ToolAcre SHA mewujudkan pengajaran ini: kalkulator ini memberikan intisari sederhana untuk pembelajaran dan untuk penggunaan non-autentikasi yang sah, ia memberi label SHA-1 sebagai warisan, dan tidak menerapkan HMAC karena operasi tersebut berada dalam konteks yang berbeda. Saat pengembang menggunakan kalkulator hash biasa untuk mengautentikasi permintaan, pemosisian dan dokumentasi alat tersebut memandu mereka menuju HMAC dan tanda tangan sebagai alat yang tepat. Toolkit ToolAcre berfokus pada apa yang disediakan langsung oleh Web Crypto browser dan menjelaskan batasan di mana setiap primitif sesuai.