Apa yang dilakukan tool ini
Menghitung hash SHA-1 dari teks atau file apapun di browser kamu, mengembalikan digest heksadesimal 40 karakter. SHA-1 adalah fungsi hash 160-bit yang dipublikasikan NIST pada 1995 (FIPS 180-1), dirancang oleh NSA. Sudah deprecated untuk tujuan keamanan: serangan collision praktis (« SHAttered ») didemonstrasikan oleh Google dan CWI Amsterdam pada 2017, dan collision chosen-prefix mengikuti pada 2019. SHA-1 tidak lagi dianggap aman secara kriptografis.
Di mana SHA-1 masih ada
- ID objek git. Setiap commit, tree, dan blob git diidentifikasi oleh hash SHA-1-nya. Model objek git sedang bermigrasi ke SHA-256 (flag
--object-format=sha256ada), tapi SHA-1 tetap menjadi default untuk sebagian besar repository. Risiko collision untuk ID commit nyata tapi dikelola: GitHub dan forge lainnya men-deploy deteksi gaya SHAttered (librarysha1dc) untuk menandai collision yang disiapkan. - Subversion (SVN). Penalaran yang sama dengan git, lebih sedikit upaya migrasi yang sedang berjalan.
- Sertifikat TLS yang lebih lama. Browser berhenti mempercayai sertifikat yang ditandatangani SHA-1 pada 2017, tapi sistem legacy masih memproduksinya.
- Kode yang ada yang meng-hash untuk alasan non-keamanan. Key cache, fingerprint, tabel deduplikasi — semua baik-baik saja.
Saat SHA-1 tidak cocok
- Sertifikat TLS baru, sertifikat code-signing, atau signature dokumen. Gunakan SHA-256 atau SHA-384.
- Penyimpanan password. Gunakan hash yang lambat dan ber-salt seperti bcrypt atau Argon2. SHA-1 terlalu cepat dan tidak dirancang untuk ini.
- Apapun di mana attacker dapat memilih input. Attacker yang bertekad dengan cluster sewaan dapat menghasilkan collision SHA-1 dalam hitungan hari. Jika model keamanan kamu membiarkan attacker mempengaruhi apa yang di-hash, SHA-1 rusak.
- Subresource Integrity (SRI). Browser akan menerima SHA-1 di atribut
integrity, tapi spec merekomendasikan minimum SHA-256.
Vektor uji
Dari FIPS 180-2 dan suite referensi SHA-1:
- String kosong
""→da39a3ee5e6b4b0d3255bfef95601890afd80709 "abc"→a9993e364706816aba3e25717850c26c9cd0d89d"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"→84983e441c3bd26ebaae4aa1f95129e5e54670f1"The quick brown fox jumps over the lazy dog"→2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
Catatan
Mengapa 40 karakter? SHA-1 menghasilkan 160 bit = 20 byte. 20 byte × 2 karakter hex per byte = 40 karakter terlihat.
Mengapa git menggunakan SHA-1 jika rusak? Git menggunakan SHA-1 sebagai identifier content-addressable, bukan primitif keamanan. Model ancamannya adalah « dua object yang berbentuk baik tidak sengaja collide », yang masih sangat tidak mungkin secara astronomis. Model ancamannya bukan « attacker push commit jahat yang memiliki hash sama dengan commit asli kamu » — untuk itu, GitHub dll. menggunakan sha1dc untuk mendeteksi persiapan gaya SHAttered dan menolaknya. Migrasi ke SHA-256 sedang berjalan tapi lambat karena basis terinstal sangat besar.
Mengapa SHA-1 saya berbeda dari yang dikembalikan sha1sum? Newline trailing. echo "hello" | sha1sum menyertakan \n. Paste "hello" di sini tidak. Gunakan echo -n atau file picker.
Tools terkait
- Generator hash — lima hash berdampingan
- SHA-256 — pengganti modern untuk SHA-1
- MD5 — pendahulu; bahkan lebih rusak menyeluruh