Inspektur Kunci OpenPGP & Parser Paket

Tempel kunci, tanda tangan, atau pesan OpenPGP yang diberi armor — atau muat berkas biner .gpg — dan lihat sidik jari, ID kunci, ID pengguna, subkunci, paket tanda tangan, dan pohon paket mentah. Sepenuhnya di browser Anda; tidak ada yang diunggah.
Hanya parser. Alat ini mendekode dan menampilkan data OpenPGP — tidak pernah memverifikasi tanda tangan secara kriptografis, tidak pernah mendekripsi, dan tidak pernah meminta frasa sandi. Untuk benar-benar memverifikasi atau mendekripsi, gunakan GnuPG (gpg --verify, gpg -d) dengan keyring Anda sendiri. Dan seperti alat apa pun: kunci privat sungguhan seharusnya berada di keyring Anda, bukan di tab browser.
Menerima semua jenis armor: PUBLIC KEY BLOCK, PRIVATE KEY BLOCK, MESSAGE, SIGNATURE, ARMORED FILE.
ekspor keyring biner / .sig / .gpg — dibaca secara lokal, tidak pernah diunggah
Apa yang diperiksa alat ini — dan apa yang sengaja tidak dilakukannya
Alat ini mendekode armor (label, header, muatan base64, checksum transport CRC-24), mengurai setiap paket dalam format header lama dan baru, membaca paket kunci v4/v5/v6 (algoritma, ukuran MPI, waktu pembuatan), menghitung sidik jari v4 (SHA-1) dan sidik jari v6 (SHA-256), menurunkan ID kunci, dan mencantumkan ID pengguna, subkunci, serta subpaket tanda tangan. Alat ini tidak memverifikasi tanda tangan (itu memerlukan seluruh mesin hash-dan-verifikasi RFC 9580 §5.2.4 plus keyring tepercaya), tidak mendekripsi, dan tidak mengambil kunci dari server kunci. Periksa silang setiap keluaran dengan GnuPG: gpg --show-keys file.asc mencetak sidik jari dan ID pengguna, gpg --list-packets file.asc menampilkan struktur paket.
Kunci contoh di halaman ini — keempat tombol Contoh menempelkan kunci OpenPGP v4 RSA-2048 sungguhan yang dibuat hanya untuk halaman ini (tidak pernah digunakan di tempat lain). Contoh kunci privat disimpan tanpa enkripsi (penggunaan S2K 0) dengan sengaja, agar parser dapat menampilkan tata letak MPI rahasia; kunci privat yang diekspor sungguhan akan menampilkan cipher dan turunan S2K-nya sebagai gantinya.
Uji mandiri
Menjalankan ulang parser terhadap kunci contoh yang tertanam, tanda tangan terpisah, dan pesan yang ditandatangani: label armor, lolos CRC-24 dan kerusakan yang disengaja, urutan tag paket, sidik jari v4 dan ID kunci dibandingkan dengan nilai yang dihitung secara independen, ID pengguna, sidik jari subkunci, deteksi kunci rahasia, plus uji negatif (masukan sampah dan paket terpotong harus ditolak). Tidak ada yang dikirim ke mana pun.
OpenPGP dijelaskan dari nol
Dalam satu kalimat: OpenPGP adalah standar terbuka (RFC 4880, diperbarui oleh RFC 9580 pada 2024) untuk enkripsi ujung-ke-ujung dan tanda tangan digital, yang paling terkenal digunakan untuk mengamankan email — dan semuanya berpindah dalam paket biner kecil berlabel yang biasanya dibungkus dalam lapisan "armor" yang ramah teks.
Apa itu OpenPGP?

PGP ("Pretty Good Privacy") dirilis oleh Phil Zimmermann pada 1991 sebagai program yang dapat digunakan siapa pun untuk mengenkripsi dan menandatangani pesan. Untuk keluar dari masalah satu vendor, format pesannya distandarkan sebagai OpenPGP (RFC 2440 pada 1998, RFC 4880 pada 2007, RFC 9580 pada 2024). Saat ini GnuPG adalah implementasi paling umum, dan format paket yang sama juga muncul dalam commit git yang ditandatangani, penandatanganan paket perangkat lunak, server kunci, dan rekaman DNS OPENPGPKEY.

Modelnya ujung-ke-ujung: Anda dan koresponden masing-masing membuat pasangan kunci pribadi; apa pun yang dienkripsi untuk Anda hanya dapat didekripsi oleh kunci privat Anda, yang tidak pernah meninggalkan mesin Anda. Alih-alih otoritas sertifikat pusat (seperti TLS), kepercayaan terhadap kunci orang lain berasal dari saling menandatangani kunci — "web of trust". Apakah Anda menggunakan web itu atau cukup membandingkan sidik jari secara terpisah (panggilan telepon, kartu nama) terserah Anda; formatnya sendiri tidak memaksakan salah satunya.

Apa itu kunci OpenPGP?

"Kunci" OpenPGP sebenarnya adalah sekumpulan kecil paket: satu paket kunci utama (jangkar identitas Anda, biasanya diizinkan untuk menandatangani), satu atau lebih paket ID Pengguna ("Alice <alice@example.com>"), tanda tangan diri yang mengikat ID tersebut ke kunci utama, dan secara opsional subkunci dengan tanda tangan pengikatnya sendiri — biasanya subkunci enkripsi terpisah agar kunci utama yang berharga dapat tetap offline. Seluruh blok armor yang Anda tempel ke halaman ini adalah sekumpulan itu.

Sidik jari adalah hash dari paket kunci utama — SHA-1 (20 byte) untuk kunci v4, SHA-256 (32 byte) untuk kunci v6 — yang dihitung hanya atas bagian publik. ID kunci hanyalah 8 byte terakhir dari sidik jari v4 (8 byte pertama untuk v5). Sidik jari adalah yang Anda bandingkan secara terpisah untuk memastikan tidak ada yang menukar kunci dalam perjalanan ke Anda; ID kunci adalah pegangan singkat untuk server kunci dan tidak aman dari tabrakan terhadap penyerang yang bertekad.

ID AlgoritmaNamaPenggunaan tipikal dalam kunci
1RSASerbaguna klasik; 2048–4096 bit, tanda tangan dan/atau enkripsi
19ECDSAKurva NIST (P-256 dll.), penandatanganan
18ECDHKesepakatan kunci Curve25519/P-256, subkunci enkripsi
22EdDSAPenandatanganan Ed25519 (default modern di GnuPG 2.4+)
25X25519Subkunci enkripsi berpasangan dengan utama Ed25519 (kunci v6)

Blok kunci privat membawa angka rahasia setelah bagian publik: satu oktet penggunaan S2K yang menyatakan bagaimana angka itu dilindungi (0 = tidak dilindungi, 254/255 = kunci turunan frasa sandi dengan cipher), lalu MPI rahasia dan checksum. Halaman ini menampilkan mode perlindungan tersebut tetapi tidak pernah meminta frasa sandi dan tidak pernah mencoba mendekripsi materi rahasia.

Apa itu paket OpenPGP?

Di bawah armor, setiap objek OpenPGP adalah urutan paket. Setiap paket diawali dengan byte tag: format lama mengemas tipe paket 4-bit dan tipe panjang ke dalamnya, format baru (CTB, bit 6 diset) menggunakan tipe 6-bit dan byte panjang yang bahkan dapat menjelaskan data dalam potongan parsial. Tag umum: 6 = kunci publik, 5 = kunci rahasia, 14 = subkunci, 13 = ID pengguna, 2 = tanda tangan, 4 = tanda tangan satu-pass, 11 = data literal, 8 = data terkompresi, 18 = data terenkripsi dengan perlindungan MDC. Halaman ini mencetak tag, format header, panjang, dan dump hex untuk setiap paket yang ditemukannya, dan memberi galat dengan posisi byte ketika header paket rusak.

Paket tanda tangan membawa metadatanya dalam area subpaket ter-hash dan tidak ter-hash. Hanya area yang ter-hash yang dicakup oleh tanda tangan itu sendiri; area yang tidak ter-hash (secara historis digunakan untuk ID kunci penerbit) dapat ditulis ulang secara bebas oleh siapa pun di tengah perjalanan, sehingga pembaca harus memperlakukannya sebagai petunjuk, bukan fakta. Tanda tangan diri pada ID Pengguna adalah yang sebenarnya mengikat nama ke kunci; paket kunci saja, yang ditempel sendirian, tidak membuktikan siapa pemiliknya.

ASCII armor adalah pembungkus teks: -----BEGIN PGP PUBLIC KEY BLOCK-----, header opsional seperti Version: atau Comment:, base64 dari aliran paket, dan baris =xxxx terakhir yang memuat CRC 24-bit. CRC itu hanya menangkap kerusakan transport — ubah satu karakter base64 dan halaman ini menandainya — tetapi itu bukan tanda tangan dan tidak membuktikan apa pun tentang penulisnya.

Kesalahan umum
  • Mempercayai kunci tanpa membandingkan sidik jari. Siapa pun dapat membuat kunci dengan nama apa pun. Perbandingan sidik jari melalui saluran yang sudah Anda percayai (bertatap muka, lewat telepon) adalah seluruh langkah autentikasinya.
  • Mencampuradukkan CRC armor dengan tanda tangan. Lencana "CRC OK" hanya berarti base64 selamat dalam perjalanan, tidak lebih. Verifikasi adalah operasi kriptografis yang sengaja tidak dilakukan halaman ini.
  • Menggunakan ID kunci sebagai identitas. ID kunci 64-bit dapat dipalsukan oleh penyerang dengan daya komputasi sedang (sebuah "tabrakan ID kunci"); selalu kutip sidik jari lengkap.
  • Menempelkan kunci privat sungguhan ke halaman web. Bahkan halaman lokal tanpa unggahan seperti ini adalah kebiasaan yang tidak ingin dibangun. Contoh di sini adalah kunci sekali pakai yang dibuat untuk demo.
  • Menganggap "PGP MESSAGE" berarti terenkripsi. Label armor tidak mengatakan apa pun tentang isinya — pesan contoh di halaman ini ditandatangani tetapi berupa teks biasa, dan tag paket 18 vs 11 adalah yang benar-benar membedakan data terenkripsi dari data literal.
  • Mengimpor kunci v3. Kunci versi 3 (desain sebelum 1996, ID kunci 16-bit yang lemah) sudah tidak digunakan sejak 2014; inspektur ini sengaja menolaknya.
FAQ

Apakah ini memverifikasi tanda tangan? Tidak. Ia mengurai dan menampilkan. Verifikasi tanda tangan memerlukan konstruksi trailer hash RFC 9580 yang lengkap, kunci publik penandatangan, dan keputusan apakah Anda mempercayai kunci itu — tugas GnuPG atau pustaka OpenPGP.

Apa bedanya dengan openpgp.js? openpgp.js adalah implementasi penuh (enkripsi, dekripsi, penandatanganan, verifikasi) yang Anda tanamkan di aplikasi; halaman ini adalah inspektur tanpa dependensi untuk membaca dan mengaudit struktur OpenPGP di browser.

Bisakah ia membaca ekspor GnuPG? Bisa — kunci v4, v5, dan v6, tanda tangan terpisah, dan pesan. Kunci versi 3 ditolak dengan catatan (tidak digunakan sejak 2014).

Mengapa ada mode masukan hex? Data OpenPGP mentah berupa biner; jika Anda memiliki dump hex dari keyring atau berkas .gpg, tempel hexnya dan parser memperlakukannya persis seperti byte yang telah didekode.

Apakah ada yang diunggah? Tidak. Pengurain, penghitungan sidik jari, dan pembuatan laporan semuanya terjadi di tab ini; halaman berjalan sepenuhnya di browser Anda.