SHA256 vs SHA1
SHA1 dan SHA256 sama-sama fungsi hash kriptografis dari keluarga SHA (Secure Hash Algorithm), tetapi keduanya berbeda secara signifikan dalam keamanan dan ukuran output. Memilih fungsi hash yang salah untuk aplikasi Anda dapat memiliki konsekuensi keamanan yang serius, mulai dari tanda tangan digital yang lemah hingga kompromi total pada sistem verifikasi kata sandi. Panduan ini memberikan perbandingan menyeluruh untuk membantu Anda membuat keputusan yang tepat.
Fungsi hash kriptografis mengambil input dengan ukuran berapa pun dan menghasilkan output berukuran tetap yang disebut digest atau nilai hash. Properti kritis dari fungsi hash yang aman meliputi ketahanan preimage (diberikan sebuah hash, tidak mungkin menemukan input yang menghasilkannya), ketahanan preimage kedua (diberikan sebuah input, tidak mungkin menemukan input berbeda dengan hash yang sama), dan ketahanan tabrakan (tidak mungkin menemukan dua input berbeda yang menghasilkan hash yang sama). Baik SHA1 maupun SHA256 dirancang untuk menyediakan properti ini, tetapi ketahanan tabrakan SHA1 telah berhasil dipatahkan dalam praktik.
Cara Kerja Fungsi Hash
Baik SHA1 maupun SHA256 termasuk dalam keluarga konstruksi Merkle-Damgard. Keduanya memproses data input dalam blok berukuran tetap 512 bit. Input terlebih dahulu diberi padding untuk memastikan panjangnya merupakan kelipatan dari ukuran blok. Padding menyertakan panjang pesan asli, yang mencegah jenis serangan tertentu. Setiap blok kemudian diproses melalui fungsi kompresi yang memperbarui status internal. Status akhir setelah memproses semua blok menjadi output hash.
SHA1 menggunakan 80 putaran kompresi dengan kata 32-bit dan menghasilkan output 160-bit. Algoritma ini menggunakan empat konstanta putaran dan dua puluh fungsi putaran, dengan setiap putaran beroperasi pada lima variabel kerja 32-bit. SHA256 menggunakan 64 putaran kompresi, juga dengan kata 32-bit, tetapi menghasilkan output 256-bit menggunakan delapan variabel kerja dan enam fungsi logika. Jumlah variabel kerja yang lebih banyak dan fungsi putaran yang lebih kompleks membuat SHA256 jauh lebih tahan terhadap serangan kriptanalitik.
Perbedaan Utama
| Fitur | SHA1 | SHA256 |
|---|---|---|
| Ukuran output | 160 bit (40 karakter) | 256 bit (64 karakter) |
| Keamanan | Rusak (serangan SHAttered) | Aman |
| Kecepatan | Lebih cepat | Lebih lambat |
| Putaran | 80 | 64 |
| Ukuran blok | 512 bit | 512 bit |
| Ukuran kata | 32 bit | 32 bit |
| Direkomendasikan? | Tidak | Ya |
Perbedaan paling kritis adalah keamanan. SHA1 dianggap rusak secara kriptografis karena peneliti telah mendemonstrasikan serangan tabrakan praktis. SHA256, pada tahun 2026, tetap aman tanpa serangan praktis yang diketahui yang mengurangi keamanan efektifnya di bawah tingkat keamanan 128-bit. Tingkat keamanan n bit berarti serangan terbaik yang diketahui memerlukan sekitar 2^n operasi untuk mematahkan fungsi hash. Untuk SHA256, ini berarti 2^128 operasi, yang tidak mungkin dilakukan dengan teknologi saat ini dan di masa mendatang.
Perbedaan ukuran output juga signifikan secara praktis. Output 160-bit berarti hanya ada 2^160 kemungkinan nilai hash. Berdasarkan paradoks ulang tahun, tabrakan dapat ditemukan dalam sekitar 2^80 operasi. Meskipun 2^80 dulu dianggap tidak mungkin, kemajuan dalam komputasi GPU dan perangkat keras khusus telah membuat permukaan serangan ini praktis bagi penyerang yang memiliki dana cukup. Ketahanan tabrakan SHA256 sebesar 2^128 masih di luar jangkauan.
Perbandingan Keluarga SHA Lengkap
Keluarga SHA telah berevolusi selama tiga dekade, dengan setiap generasi memperbaiki kelemahan pendahulunya.
| Algoritma | Output | Tingkat Keamanan | Tahun | Status |
|---|---|---|---|---|
| SHA0 | 160 bit | 80 bit | 1993 | Rusak |
| SHA1 | 160 bit | 80 bit | 1995 | Tidak digunakan lagi |
| SHA224 | 224 bit | 112 bit | 2004 | Aman |
| SHA256 | 256 bit | 128 bit | 2004 | Aman |
| SHA384 | 384 bit | 192 bit | 2004 | Aman |
| SHA512 | 512 bit | 256 bit | 2004 | Aman |
| SHA3-256 | 256 bit | 128 bit | 2015 | Aman |
SHA0 ditarik segera setelah publikasi karena cacat yang tidak diungkapkan. SHA1 dirancang sebagai perbaikan untuk SHA0 dan menjadi standar industri selama hampir dua dekade. SHA224, SHA256, SHA384, dan SHA512 secara kolektif dikenal sebagai SHA-2 dan diterbitkan oleh NIST pada tahun 2001 (distandarisasi pada tahun 2004). SHA-3, diterbitkan pada tahun 2015, didasarkan pada konstruksi spons Keccak dan menawarkan alternatif untuk SHA-2 dengan prinsip desain yang fundamental berbeda.
Saat memilih fungsi hash, Anda harus menggunakan SHA256 secara default untuk sebagian besar aplikasi. SHA384 dan SHA512 menawarkan tingkat keamanan yang lebih tinggi tetapi dengan biaya output yang lebih besar dan kinerja yang lebih lambat. SHA3-256 adalah pilihan yang sangat baik ketika Anda ingin mendiversifikasi dependensi kriptografis Anda dari keluarga SHA-2.
Mengapa SHA1 Pensiun
Pensiunnya SHA1 tidak terjadi dalam semalam. Kriptanalis telah memperingatkan tentang kelemahan SHA1 sejak 2005, ketika peneliti menunjukkan bahwa ketahanan tabrakan teoretis hanya 2^69 operasi, bukan 2^80 yang diharapkan. Selama dekade berikutnya, perkiraan ini secara progresif dikurangi seiring meningkatnya teknik kriptanalitik.
Pada tahun 2017, Google mendemonstrasikan serangan tabrakan SHA1 praktis pertama (SHAttered). Mereka membuat dua file PDF berbeda dengan hash SHA1 yang sama menggunakan sekitar 9 kuintiliun (9.223.372.036.854.775.808) komputasi SHA1. Ini membutuhkan sekitar 6.500 tahun waktu CPU, tetapi hanya 110 tahun GPU. Serangan dilakukan menggunakan infrastruktur cloud Google dan menghabiskan biaya sekitar $110.000 dalam waktu komputasi, menunjukkan bahwa tabrakan SHA1 berada dalam jangkauan organisasi yang memiliki dana cukup.
Serangan SHAttered secara khusus menghasilkan dua file PDF yang bertabrakan dengan menyusun struktur PDF secara hati-hati yang memungkinkan blok identik besar sementara berbeda dalam sejumlah kecil bit yang menghasilkan hash SHA1 yang sama. Dampak praktis dari serangan ini termasuk kemungkinan membuat dua paket perangkat lunak atau dokumen dengan konten berbeda tetapi hash SHA1 identik. Tanda tangan pada satu dokumen dapat diklaim secara curang berlaku untuk dokumen lainnya.
Browser utama dan otoritas sertifikat telah tidak lagi menggunakan SHA1. Sejak 2017, Chrome menampilkan peringatan keamanan untuk sertifikat SHA1. Pada 2020, semua browser utama telah menghapus kepercayaan pada sertifikat berbasis SHA1, secara efektif mengakhiri penggunaan SHA1 dalam ekosistem PKI web.
Perbandingan Kinerja
SHA1 lebih cepat daripada SHA256 karena beberapa alasan. Pertama, SHA1 memproses input dalam 80 putaran per blok, tetapi setiap putaran lebih sederhana daripada 64 putaran SHA256. SHA256 menggunakan fungsi logika yang lebih kompleks dan status internal yang lebih besar, yang membutuhkan lebih banyak komputasi per putaran. Kedua, status internal 160-bit SHA1 muat dalam lebih sedikit register daripada status 256-bit SHA256, memungkinkan implementasi yang lebih efisien pada prosesor 32-bit.
Dalam praktiknya, SHA256 sekitar 25 hingga 40 persen lebih lambat daripada SHA1 dalam implementasi perangkat lunak. Pada perangkat keras modern dengan akselerasi perangkat keras (ekstensi SHA di prosesor x86), kinerja SHA256 jauh lebih baik. Prosesor Intel dan AMD dengan ekstensi SHA-NI dapat menghitung SHA256 dengan kecepatan melebihi 2 GB/s, mempersempit kesenjangan dengan SHA1.
Untuk sebagian besar aplikasi, perbedaan kinerja antara SHA1 dan SHA256 dapat diabaikan. Keterlambatan yang dapat dirasakan manusia dalam hashing file atau memverifikasi tanda tangan didominasi oleh operasi I/O, bukan komputasi hash. Satu-satunya skenario di mana keunggulan kecepatan SHA1 penting adalah dalam sistem throughput tinggi yang menghitung miliaran hash, seperti penambangan blockchain atau cracking kata sandi skala besar, yang keduanya bukan kasus penggunaan yang sah untuk SHA1 dalam desain baru.
Kapan Menggunakan SHA256
| Kasus Penggunaan | Hash yang Direkomendasikan |
|---|---|
| Sertifikat SSL/TLS | SHA256 |
| Verifikasi integritas file | SHA256 atau SHA512 |
| Hashing kata sandi (dengan garam) | bcrypt atau argon2 |
| Tanda tangan digital | SHA256 |
| Blockchain | SHA256 (Bitcoin) |
| Penandatanganan kode | SHA256 |
Untuk sertifikat SSL/TLS, SHA256 telah menjadi persyaratan minimum sejak browser utama tidak lagi menggunakan SHA1 pada tahun 2017. Otoritas sertifikat tidak lagi diizinkan untuk menerbitkan sertifikat bertanda tangan SHA1 untuk kepercayaan publik. Verifikasi integritas file, seperti file checksum yang didistribusikan dengan unduhan perangkat lunak, harus menggunakan SHA256. Banyak platform distribusi perangkat lunak telah bermigrasi dari checksum SHA1 ke SHA256, meskipun Anda mungkin masih menemukan checksum SHA1 untuk paket lama.
Hashing kata sandi memerlukan perhatian khusus. Meskipun SHA256 adalah fungsi hash kriptografis yang aman, ini tidak cocok untuk penyimpanan kata sandi dengan sendirinya. SHA256 dirancang untuk menjadi cepat, yang justru diinginkan penyerang ketika mencoba memecahkan hash kata sandi yang dicuri. Untuk penyimpanan kata sandi, gunakan fungsi hashing kata sandi khusus seperti bcrypt, scrypt, atau argon2. Fungsi-fungsi ini menggabungkan penggaraman dan sengaja dibuat lambat serta memori-keras untuk menahan serangan brute-force.
Contoh Migrasi Dunia Nyata
Git, sistem kontrol versi yang banyak digunakan, bermigrasi dari SHA1 ke SHA256 sebagai bagian dari transisinya ke penyimpanan objek berbasis SHA256. Mulai Git 2.29, Git mendukung repositori SHA256 di samping repositori SHA1 tradisional. Transisi ini memerlukan upaya yang signifikan karena model data Git sangat bergantung pada nilai hash untuk mengidentifikasi objek dan memverifikasi integritas repositori.
Komunitas kernel Linux mulai menerima checksum SHA256 untuk tarball rilis kernel mulai tahun 2011, melengkapi checksum SHA1 yang sudah ada. Pada tahun 2017, kernel.org berhenti menghasilkan checksum SHA1 untuk rilis baru sepenuhnya, hanya menggunakan SHA256 dan SHA512.
Gunakan alat SHA256 Generator untuk menghasilkan hash SHA256 secara online.