gitgpgsecuritycommitMahir5 mnt baca

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):

bash
gpg --full-generate-key

Ikuti 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:

bash
gpg --armor --export [email protected]

Contoh output (disingkat):

bash
-----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:

bash
git config --global user.signingkey 3AA5C34371567BD2
git config --global commit.gpgsign true

ID 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:

bash
git commit -S -m "feat: tambah login"

Verifikasi tanda tangan di repo lokal:

bash
git log --show-signature -1

Contoh output:

bash
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.