Alat pengembang · SHA kalkulator hash
Sertifikat dan SSH Sidik Jari: Bagaimana SHA-256 Mengidentifikasi Kunci Publik
· Latar belakang
sha-256 kriptografi keamanan
Sidik jari adalah hash dari sertifikat atau kunci, cukup pendek untuk dibacakan. Postingan ini menjelaskan cara sidik jari TLS dan SSH dihitung, alasan sidik jari SHA-1 diganti, dan bukti kecocokannya.
Permintaan kunci host yang selalu Anda terima — apa yang diminta oleh baris SHA256: untuk Anda bandingkan
Saat Anda terhubung ke server melalui SSH untuk pertama kalinya, Anda akan melihat pesan yang menanyakan apakah akan menerima kunci host. Prompt menampilkan sidik jari: `SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8` atau serupa. Sidik jari ini adalah hash dari kunci publik server. Anda diminta untuk memverifikasi out-of-band (di luar protokol SSH) bahwa Anda mengenali kunci ini. Prompt juga biasanya menampilkan jenis kunci (RSA, ED25519, ECDSA) dan format sidik jari. Jika Anda pernah melihat sidik jari kunci ini sebelumnya melalui saluran tepercaya, Anda dapat mengetik "ya" dengan percaya diri. Jika tidak, menerima berarti memercayai jaringan untuk mengirimkan kunci yang benar.
Sidik jari hanyalah keluaran dari fungsi hash kriptografi yang diterapkan pada kunci yang disandikan. Untuk SSH, kuncinya dikodekan sebagai gumpalan biner (format kabel OpenSSH), dan hash dihitung melalui gumpalan tersebut. Sidik jari lebih pendek dari kunci penuh, sehingga mudah dibaca dan diketik. Sidik jari yang sama akan selalu dihasilkan dari kunci yang sama, sehingga Anda dapat membandingkan sidik jari yang dipublikasikan di beberapa tempat atau saluran.
Sidik jari sama dengan hash pengkodean — sertifikat DER atau gumpalan kunci publik sebagai masukan
Kunci host SSH dan sertifikat TLS dikodekan secara berbeda, namun prinsip sidik jarinya sama. Untuk SSH, sidik jari dihitung dari materi kunci publik. Untuk sertifikat TLS, sidik jari dihitung dari keseluruhan sertifikat (termasuk penerbit, tanggal validitas, dan bidang lainnya). Saat Anda terhubung ke server web, browser tidak menampilkan sidik jari sertifikat kepada Anda, karena TLS menggunakan model kepercayaan yang berbeda: browser mempercayai sekumpulan otoritas sertifikat (CA) yang sudah diinstal sebelumnya, dan CA tersebut menjamin sertifikat tersebut. SSH tidak menggunakan CA yang sudah diinstal sebelumnya; sebaliknya, Anda memercayai kunci tertentu dan menyimpannya secara lokal di `~/.ssh/known_hosts`.
Karena sidik jari mencakup seluruh byte sertifikat untuk TLS, mengubah tanggal validitas tanpa menandatangani ulang akan menghasilkan sidik jari yang berbeda. Untuk SSH, sidik jarinya hanya berupa kunci publik, sehingga sidik jarinya stabil selama kuncinya tidak diubah.
Kalkulator ini menunjukkan panjang SHA-1 dan SHA-256; rekomendasi kebijakan sidik jari memerlukan sumber protokol
Secara historis, SSH sidik jari ditampilkan dalam MD5 heksadesimal. MD5 rusak secara kriptografis dan tabrakan dapat terjadi. Komunitas keamanan berpindah ke SHA-256 sidik jari sebagai default. Anda mungkin masih melihat kedua format yang ditampilkan oleh klien SSH Anda: `SHA256: base64` dan `MD5: hex`. Sidik jari SHA-256 adalah sidik jari yang dapat dipercaya untuk verifikasi identitas. Jika Anda melihat keduanya, bandingkan versi SHA-256 dengan sidik jari dari sumber tepercaya (situs web server, email bertanda tangan dari admin, wiki internal). Sidik jari MD5 kurang dapat diandalkan karena ada MD5 tabrakan.
Perubahan format sidik jari merupakan tanda nyata transisi kriptografi. Versi OpenSSH yang lebih lama hanya menampilkan MD5. Versi modern menampilkan SHA-256 secara default. Perintah `ssh-keygen -l -f /path/to/key` menampilkan sidik jari kunci dalam format default untuk versi ssh-keygen Anda; Anda dapat memaksakan format tertentu dengan tanda `-E` (misalnya, `-E sha256` atau `-E md5`).
format base64 SSH SHA256: — perubahan pengkodean yang membuat sidik jari lebih pendek dari hex
Sidik jari SSH base64 menggunakan format varian: sidik jari tersebut diawali dengan nama algoritme dan titik dua, misalnya, `SHA256:base64string`. Ini berbeda dengan format integritas subsumber daya (SRI), yang menggunakan tanda hubung dan hanya menyertakan base64 standar. Format SSH menyertakan label yang memperjelas algoritma mana yang menghasilkan intisari. Saat Anda melihat sidik jari di keluaran SSH, algoritme selalu ditampilkan. Saat Anda melihat atribut integritas SRI, algoritme dikodekan sebagai awalan dengan tanda hubung.
Output base64 dari kalkulator hash ToolAcre SHA adalah bentuk standar; untuk mencocokkan SSH sidik jari, tambahkan `SHA256: ` (nama algoritma, titik dua dan spasi). Bentuk hex dari kalkulator bukanlah bentuk yang SSH tampilkan, meskipun ia mewakili intisari yang sama dan juga valid untuk tujuan verifikasi.
Apa yang dibuktikan oleh kecocokan - bahwa Anda memegang byte kunci yang sama dengan yang diterbitkan pihak lain, dan tidak ada apa pun tentang pemilik kunci tanpa pemeriksaan out-of-band
Kecocokan sidik jari membuktikan dua hal: pertama, bahwa Anda memiliki byte kunci yang sama dengan yang diterbitkan pihak lain, dan kedua, baik kunci maupun sidik jari tidak diubah sejak intisari dihitung. Itu tidak membuktikan identitas pemilik kunci atau mengizinkan tindakan tertentu. Memverifikasi sidik jari di luar pita merupakan kondisi yang diperlukan namun tidak cukup untuk memercayai suatu kunci. Anda juga harus memverifikasi bahwa orang yang menerbitkan sidik jari tersebut adalah orang yang diklaimnya.
Dalam praktiknya, jika admin memublikasikan sidik jari SSH server di intranet perusahaan atau di email yang ditandatangani, Anda dapat memverifikasi bahwa sidik jari tersebut cocok dengan perintah yang Anda terima saat menyambungkan. Jika sidik jari tidak cocok, Anda dapat dengan yakin menolak koneksi karena seseorang mencegat lalu lintas Anda atau kunci server telah berubah. Jika sidik jarinya cocok, Anda tahu bahwa Anda memiliki kunci yang tepat. Apakah kunci tersebut milik server yang benar merupakan pertanyaan terpisah—pertanyaan yang dapat Anda jawab dengan memverifikasi saluran publikasi (apakah halaman intranet terlihat sah? apakah email tersebut benar-benar berasal dari akun admin tersebut?).
Contoh praktis — memverifikasi sidik jari terhadap sidik jari yang dipublikasikan melalui saluran tepercaya, langkah demi langkah
Sidik jari sertifikat memiliki tujuan yang sama: mengidentifikasi sertifikat tertentu secara unik. Jika server TLS mengubah sertifikatnya (misalnya saat perpanjangan), sertifikat baru memiliki sidik jari yang berbeda. Penyematan sertifikat—hardcoding sidik jari atau sekumpulan kecil sidik jari yang dapat diterima dalam suatu aplikasi—adalah teknik keamanan untuk mendeteksi perubahan sertifikat. Jika server memberikan sertifikat dengan sidik jari yang berbeda, aplikasi akan menolaknya. Hal ini melindungi terhadap CA yang disusupi yang mengeluarkan sertifikat palsu yang seharusnya dipercaya oleh browser.
Penyematan sertifikat memerlukan pengelolaan yang hati-hati: jika server memperbarui sertifikatnya dan Anda tidak mengantisipasinya, aplikasi Anda akan menolak sertifikat baru yang valid. Banyak aplikasi yang menggunakan penyematan kunci publik, yang menyematkan kunci publik, bukan keseluruhan sertifikat. Hal ini memungkinkan perpanjangan sertifikat tanpa penolakan selama kunci yang sama digunakan.
Contoh praktis: verifikasi dengan alat yang sadar protokol karena ToolAcre hash menempelkan UTF-8 teks, bukan DER atau SSH wire bytes
Menghitung sidik jari secara manual untuk verifikasi sangatlah mudah. Simpan sertifikat atau kunci ke file, gunakan `openssl dgst -sha256 filename` atau `ssh-keygen -l -f filename -E sha256` untuk menampilkan sidik jari, dan bandingkan dengan sidik jari yang ditunjukkan server kepada Anda. Kalkulator hash ToolAcre SHA juga dapat menghitung intisari jika Anda menempelkan byte kunci, namun ingat bahwa kalkulator hash UTF-8 teks yang Anda tempel, bukan file biner. Jika kunci dalam format PEM (teks dengan header `-----BEGIN CERTIFICATE-----` dan byte yang dikodekan base64), Anda dapat menempelkannya ke kalkulator. Jika dalam format DER (biner), Anda perlu menggunakan alat baris perintah atau mengonversi ke PEM terlebih dahulu.
Batasannya penting: ToolAcre hash UTF-8 teks yang Anda tempel di antarmuka kalkulator. Itu tidak membaca file dari perangkat Anda (semua perhitungan ada di browser, di tab Anda, tanpa jaringan). Jika Anda memiliki file kunci di disk, Anda dapat membukanya di editor teks, menyalin teks dan menempelkannya ke kalkulator jika formatnya PEM. Atau Anda dapat menggunakan alat baris perintah seperti `openssl`, `ssh-keygen` atau `sha256sum` untuk menghitung hash secara lokal.
Kesimpulan: bandingkan sidik jari di luar pita — kalkulator hash ToolAcre SHA menunjukkan seperti apa intisari SHA-1 dan SHA-256 berdasarkan lamanya penggunaan sidik jari
Kalkulator hash ToolAcre SHA menampilkan intisari SHA-1 dan SHA-256 untuk masukan teks apa pun. Jika Anda menempelkan sertifikat dalam format PEM atau kunci publik SSH, kalkulator akan menghitung kedua ringkasan tersebut. Untuk kunci SSH, kalkulator akan meng-hash teks yang Anda tempel; jika Anda menempelkan format kunci publik SSH standar yang dikodekan base64, intisari tidak akan cocok dengan sidik jari SSH karena SSH menerapkan pemformatannya sendiri (format kawat) sebelum melakukan hashing. Untuk pencocokan langsung, Anda memerlukan kunci dalam format persis yang SSH gunakan secara internal, yang bukan merupakan format tampilan publik.
Untuk sidik jari sertifikat, perilakunya serupa: jika Anda menempelkan teks sertifikat yang dikodekan PEM, kalkulator akan melakukan hash pada teks tersebut. Sidik jari sertifikat dihitung berdasarkan byte sertifikat yang dikodekan (format DER), bukan pembungkus teks PEM. Bytenya sama, tetapi pengkodean teksnya berbeda. Untuk mencocokkan sidik jari sertifikat dari OpenSSL atau penampil sertifikat browser, Anda perlu menyediakan DER byte, yang tidak dapat dibaca manusia. Tujuan kalkulator ini adalah untuk meng-hash teks UTF-8 yang dapat Anda tempel dan baca, sehingga membuat batasannya menjadi jelas: kalkulator ini akan meng-hash input teks, bukan file kunci kriptografi dalam bentuk biner standar atau bentuk protokol kabel.