Commit Bertanda Tangan: GPG Signing
Buktikan commit benar-benar darimu dengan tanda tangan GPG dan dapatkan badge Verified di GitHub.
Identitas Git itu mudah dipalsukan
Fakta yang mengejutkan banyak orang: field author di commit Git hanyalah teks bebas. Siapa pun bisa menjalankan git config user.name "Linus Torvalds" dan git config user.email "[email protected]", lalu commit-nya akan tampil seolah dari Linus. GitHub bahkan akan menautkannya ke profil yang cocok kalau emailnya terdaftar. Tanpa verifikasi kriptografis, "author" hanyalah klaim tanpa bukti.
Kenapa ini masalah? Di proyek open source populer, penyerang bisa memalsukan commit dari maintainer tepercaya untuk menyisipkan kode berbahaya, atau sekadar mempermalukan seseorang. Commit signing menjawabnya dengan kriptografi kunci publik: hanya pemilik private key yang bisa membuat tanda tangan valid untuk commit atas namanya.
Membuat kunci GPG dan mendaftarkannya
Pertama, buat pasangan kunci (pilih RSA 4096 untuk kompatibilitas maksimal):
gpg --full-generate-keyIkuti prompt: pilih RSA, 4096 bit, masa berlaku (1-2 tahun wajar), lalu nama dan email yang sama dengan email GitHub-mu. Setelah jadi, tampilkan public key dalam format ASCII:
gpg --armor --export [email protected]Contoh output (disingkat):
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBG... (baris-baris base64 panjang)
-----END PGP PUBLIC KEY BLOCK-----Salin seluruh blok itu, lalu di GitHub buka Settings, SSH and GPG keys, "New GPG key", tempel. Terakhir, beri tahu Git kunci mana yang dipakai dan aktifkan signing otomatis:
git config --global user.signingkey 3AA5C34371567BD2
git config --global commit.gpgsign trueID kunci (seperti 3AA5C34371567BD2) bisa dilihat lewat gpg --list-secret-keys --keyid-format=long. Mulai sekarang setiap commit otomatis ditandatangani.
Commit -S dan badge Verified
Untuk menandatangani satu commit manual tanpa config otomatis:
git commit -S -m "feat: tambah login"Verifikasi tanda tangan di repo lokal:
git log --show-signature -1Contoh output:
gpg: Signature made ... using RSA key 3AA5C34371567BD2
gpg: Good signature from "Nama Kamu <[email protected]>"Di GitHub, commit yang tanda tangannya cocok dengan public key terdaftar mendapat badge hijau "Verified". Badge itu adalah pernyataan GitHub: "kami memeriksa kriptografinya dan commit ini memang dari pemilik kunci ini". Perhatikan: commit yang dibuat lewat web GitHub juga ber-badge Verified, tapi ditandatangani oleh kunci GitHub sendiri, bukan kuncimu.
Satu jebakan klasik: email di commit harus cocok dengan email yang terdaftar di kunci GPG dan di akun GitHub. Kalau tidak cocok, badge tidak muncul walau tanda tangannya valid secara kriptografis.
Kapan perlu, kapan tidak
Wajib atau sangat disarankan untuk: maintainer proyek open source populer (target impersonasi), repo perusahaan dengan kebijakan compliance, dan siapa pun yang commit-nya bisa berdampak keamanan (infrastruktur, dependency). Untuk proyek pribadi dan tugas sekolah, ini opsional tapi tetap latihan yang bagus.
Alternatif modern yang lebih simpel: SSH signing. Git 2.34+ bisa menandatangani commit dengan kunci SSH yang sudah kamu pakai sehari-hari (git config gpg.format ssh), tanpa mengurus keyring GPG yang terkenal ribet. GitHub mendukung verifikasi signature SSH juga. Kalau GPG terasa seperti ritual kuno, SSH signing adalah jalan pintas yang sah.
Kesalahan umum pemula
Salah: membuat kunci GPG, mengaktifkan commit.gpgsign, tapi lupa menambahkan public key ke GitHub, lalu heran kenapa tidak ada badge Verified. Benar: tiga langkah itu satu paket: buat kunci, daftarkan public key ke GitHub, config Git lokal. Badge hanya muncul kalau ketiganya beres.
Salah: memakai email berbeda di git config, kunci GPG, dan akun GitHub, lalu badge tidak muncul-muncul. Benar: samakan email di ketiganya. Verifikasi GitHub pada dasarnya mencocokkan rantai email ini dengan public key yang terdaftar.
Tantangan
Dapatkan badge Verified pertamamu
Buat kunci GPG, daftarkan public key ke GitHub, aktifkan commit.gpgsign, lalu buat satu commit dan push. Verifikasi badge Verified muncul di halaman commit GitHub dan git log --show-signature menampilkan Good signature. Bonus: coba SSH signing sebagai perbandingan.