GnuPG (The GNU Privacy Guard) merupakan salah satu standar yang mengimplementasikan OpenPGP yang didefinisikan oleh RFC4880. Tujuan dari GnuPG untuk mengenkripsikan dan menandai data dan komunikasi, sekaligus memanagemen kunci sistem. GnuPG juga dikenal sebagai GPG yang merujuk gpg
sebagai perkakas CLI yang memudahkan integrasi dengan aplikasi lainnya serta mendukung Secure Socket Shell (SSH).
Sejak 1997 GnuPG merupakan salah satu perangkat lunak bebas Free Software yang mana peduli dengan data privasi pengguna. GnuPG dapat digunakan secara bebas, dimodifikasi dan didistribusikan di bawah lisensi GPL.
Manfaat menggunakan kunci GnuPG
Jika menggunakan Kunci GnuPG maka pengguna akan mendapatkan tiga hal berikut ini.
- Integritas data: Kunci GnuPG memastikan integritas konten digital dengan membuat tanda tangan digital. Hal ini memungkinkan pengguna untuk memverifikasi bahwa konten tersebut tidak dirusak selama transit atau proses pengiriman.
- Otentikasi: Kunci GnuPG menyediakan mekanisme untuk mengautentikasi sumber konten digital. Pengguna dapat memverifikasi bahwa konten tersebut berasal dari entitas yang tepercaya dan terverifikasi.
- Komunikasi yang aman: Kunci GnuPG memfasilitasi komunikasi aman dengan mengaktifkan enkripsi. Hal ini memastikan bahwa hanya pihak yang berwenang yang dapat mengakses data terenkripsi.
Selain itu, manfaatnya GnuPG ini sangat berguna jika bekerja dengan Git. Untuk penerapannya, pengguna akan memasukkan sandi ke dialog pinentry atau cli yang bertujuan memberikan otentikasi yang asli. Maka nama pengguna akan tampil disetiap commit dengan perintah ini akan memperlihatkan validasi tanda tangan digital di setiap memberikan penanda dengan --gpg-sign
.
Terminal
git commit --gpg-sign -m "menandai dengan kunci gpg"
# atau dengan -G
git commit -G -m "menandai dengan kunci gpg"
Muncul kotak dialog passphrase.
Setelah berhasil, pengguna dapat melihat tanda tangan digital disetiap commit dengan parameter --show-signature
.
Terminal
git show 1af04a6001 --show-signature
# ^ kode hash
Maka akan terlihat seperti ini.
commit 1af04a60013c8df1b0107ef29755b70feca402da (HEAD -> main, sh/main)
gpg: Signature made Fri 14 Jun 2024 07:44:44 PM WIB
gpg: using EDDSA key 5A131FCDDAC2876802F631D1D7B52C04D9B40738
gpg: Good signature from "Hervy Qurrotul Ainur Rozi (GNU/Linux Enthusiast) <hervyqa@proton.me>" [ultimate]
Primary key fingerprint: 5A13 1FCD DAC2 8768 02F6 31D1 D7B5 2C04 D9B4 0738
Author: Hervy Qurrotul Ainur Rozi <hervyqa@proton.me>
Date: Fri Jun 14 19:44:44 2024 +0700
Tertulis Good signature from
penanda yang asli pada header log. Penulis benar-benar merasakan manfaat menggunakan GnuPG bersama Git. Dan tentunya menggunakan OpenSSH juga. Jika bekerja dengan Git, maka saya rekomendasikan menggunakan kunci GnuPG juga agar lebih bisa dipercaya.
Dalam artikel ini menjelaskan tentang:
Penulisan artikel ini menggunakan sistem operasi GNU/Linux, sebab penulis ingin untuk mempersempit scope pembahasan agar tidak melebar ke semua sistem operasi (bisa jadi artikel menjadi berhalaman-halaman jika ditulis ke dalam banyak OS). Alasan kedua, penulis tidak memiliki sistem operasi lain selain GNU/Linux.
Tetapi perlu diketahui semua perkakas yang digunakan di tulisan ini baik GnuPG, OpenSSH, dan Git merupakan Open Source sehingga bisa diterapkan di sistem operasi lain seperti Windows atau MacOS. Dalam penjelasan ini, Anda bisa langsung menuju tahapan yang diperlukan saja.
Konfigurasi Kunci GnuPG
Pemasangan GnuPG
Berbagai macam sistem operasi dapat dipasang GnuPG. Pengguna dapat memilih panduan berdasarkan sistem operasi yang digunakan saat ini.
GNU/Linux
Distribusi linux memiliki berbagai macam paket manager. Berikut ini pemasangan GnuPG berdasarkan dari paket manager distribusi linux dan turunannya.
Untuk distribusi OpenSSH dan turunannya.
/etc/nixos/configuration.nix
[
environment.systemPackages =
pkgs.gnupg];
- NixOS
Untuk distribusi Nixos dan turunannya.
Terminal
nix-env -iA nixos.gnupg
- Non NixOS
Untuk distribusi Selain Nixos.
Terminal
nix-env -iA nixpkgs.gnupg
Untuk distribusi Nixos dan turunannya.
Terminal
nix-shell -p gnupg
Untuk distribusi Ubuntu, Debian, KDE Neon, Kubuntu dan turunannya.
Terminal
sudo apt install gnupg
Untuk distribusi Void Linux dan turunannya.
Terminal
sudo xbps-install gnupg
Untuk distribusi Fedora dan turunannya.
Terminal
sudo dnf install gnupg
Untuk distribusi openSUSE dan turunannya.
Terminal
sudo zypper in gnupg
Untuk distribusi Archlinux, Manjaro dan turunannya.
Terminal
sudo pacman -S gnupg
Windows
Jika pengguna menggunakan sistem operasi windows, maka Gpg4win merupakan perangkat lunak yang tepat untuk sistem operasi tersebut. Sedangkan jika menggunakan distribusi linux disarankan menggunakan gnupg
.
MacOS
Pemasangan GnuPG di MacOS dapat menggunakan salah satu cara ini.
Port yang sudah dipasang. Cara Install Port.
Terminal
sudo port install gnupg2
Brew yang sudah dipasang. Cara Install Brew.
Terminal
brew install gnupg
Mengecek versi GnuPG
Hal pertama jika setelah memasang GnuPG adalah mengecek versinya dengan gpg
.
Terminal
gpg --version
gpg (GnuPG) 2.4.5
libgcrypt 1.10.3
Copyright (C) 2024 g10 Code GmbH
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: /home/hervyqa/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
Sebagai contoh, versi diatas menggunakan versi 2.4.5
.
Membuat kunci GnuPG baru
Jika versi yang pengguna gunakan 2.1.17
atau diatasnya maka disarankan menggunakan perintah terminal ini.
Terminal
gpg --full-generate-key
Sedangkan jika di bawah versi 2.1.17
maka gunakan --gen-key
.
Terminal
gpg --default-new-key-algo rsa4096 --gen-key
Memilih algoritma kunci
Setelah menjalankan perintah tersebut, maka akan muncul pilihan jenis algoritma kunci yang akan digunakan.
gpg (GnuPG) 2.4.5; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: directory '/home/hervyqa/.gnupg' created
Please select what kind of key you want:
(1) RSA and RSA
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(9) ECC (sign and encrypt) *default*
(10) ECC (sign only)
(14) Existing key from card
Your selection?
Ada beberapa pilihan dari 1, 2, 3, 4, 9, 10, 14. Tekan EnterEnter saja langsung untuk memilih nomer 9 ECC (sign and encrypt)
sebagai bawaannya.
Selanjutnya pilih jenis kurva elips yang akan digunakan.
Please select which elliptic curve you want:
(1) Curve 25519 *default*
(4) NIST P-384
(6) Brainpool P-256
Your selection?
Tekan EnterEnter, untuk memilih nomer 1 Curve 25519
sebagai bawaannya.
Memilih batas waktu kedaluwarsa kunci GnuPG
Selanjutnya pilih waktu kedaluwarsa kuncinya. Penulis sarankan memilih 0 untuk memilih tanpa waktu kedaluwarsa.
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Pilih 00, untuk memilih nomer 0 key does not expire
dan pilih yy, untuk mengkonfirmasinya.
Terminal
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N)
Masukkan data pengguna GnuPG
Selanjutnya memasukkan data GnuPG pengguna. Masukkan nama, surel dan komentar. Sebagai contoh:
- Nama asli: Hervy Qurrotul Ainur Rozi
- Alamat email: hervyqa@proton.me
- Komentar: GNU/Linux Enthusiast
Terminal
Real name: Hervy Qurrotul Ainur Rozi
Email address: hervyqa@proton.me
Comment: GNU/Linux Enthusiast
Maka hasil data pengguna kunci GnuPG akan terlihat seperti ini.
You selected this USER-ID:
"Hervy Qurrotul Ainur Rozi (GNU/Linux Enthusiast) <hervyqa@proton.me>"
Jika ingin mengkonfirmasi, pilih oo (okay).
Terminal
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
Pastikan tidak ada galat/error yang muncul di keluaran terminal. Contoh keluaran yang berhasil seperti di bawah ini.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: /home/hervyqa/.gnupg/trustdb.gpg: trustdb created
gpg: directory '/home/hervyqa/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/hervyqa/.gnupg/openpgp-revocs.d/5A131FCDDAC2876802F631D1D7B52C04D9B40738.rev'
public and secret key created and signed.
pub ed25519 2024-06-06 [SC]
5A131FCDDAC2876802F631D1D7B52C04D9B40738
uid Hervy Qurrotul Ainur Rozi (GNU/Linux Enthusiast) <hervyqa@proton.me>
sub cv25519 2024-06-06 [E]
Melihat kunci ID GnuPG
Terminal
gpg --list-secret-keys --keyid-format long
/home/hervyqa/.gnupg/pubring.kbx
--------------------------------
sec ed25519/D7B52C04D9B40738 2024-06-06 [SC]
Key fingerprint = 5A13 1FCD DAC2 8768 02F6 31D1 D7B5 2C04 D9B4 0738
uid [ultimate] Hervy Qurrotul Ainur Rozi (GNU/Linux Enthusiast) <hervyqa@proton.me>
ssb cv25519/1CC5EEC8BDE8BC06 2024-06-06 [E]
Dapat diketahui bahwa kunci pengguna yaitu:
- Kunci ID = D7B52C04D9B40738
- Kunci fingerprint = 5A13 1FCD DAC2 8768 02F6 31D1 D7B5 2C04 D9B4 0738
Kunci ID GnuPG dapat diintegrasikan ke pengaturan OpenSSH di langkah selanjutnya.
Konfigurasi Kunci SSH
OpenSSH (OpenBSD Secure Shell) adalah salah satu perkakas untuk pengamanan protokol jaringan yang berbasis Secure Socket Shell. OpenSSH terintegrasi dengan beberapa sistem operasi seperti Windows, macOS dan kebanyakan distribusi Linux.
SSH memiliki beberapa konteks yaitu antara lain:
- Merujuk ke protokol jaringan Secure Socket Shell.
- Merujuk pada perangkat lunak OpenSSH.
- Merujuk pada perusahaan komersil yang bernama SSH Communication Security atau yang dikenal sebagai ssh.com
Sebagai klarifikasi, dalam artikel ini penulis menggunakan dua konteks, yaitu nomer 1 dan 2. Nomer 3 tidak mungkin karena bukan ranahnya tulisan ini dan bukan hal teknikal. Agar jelas, penulis hanya menggunakan dua konteks tersebut.
- SSH sebagai protokol jaringan, yang mana yang dimaksudkan adalah Secure Socket Shell. Sehingga yang dimaksudkan Kunci SSH adalah kunci otentikasi yang digunakan untuk protokol jaringan SSH.
- Perangkat lunak yang dapat mengatur, menjalankan dan menghasilkan Kunci SSH adalah Perangkat lunak OpenSSH.
Pemasangan OpenSSH
Sama halnya dengan GnuPG, OpenSSH dapat dipasang di platform mana saja, terutama di GNU/Linux.
GNU/Linux
Cara pemasangan OpenSSH di GNU/Linux berdasarkan paket managernya.
Untuk distribusi Nixos dan turunannya.
/etc/nixos/configuration.nix
[
environment.systemPackages =
pkgs.openssh];
- NixOS
Untuk distribusi Nixos dan turunannya.
Terminal
nix-env -iA nixos.openssh
- Non NixOS
Untuk distribusi Selain Nixos.
Terminal
nix-env -iA nixpkgs.openssh
Untuk distribusi Nixos dan turunannya.
Terminal
nix-shell -p openssh
Untuk distribusi Ubuntu, Debian, KDE Neon, Kubuntu dan turunannya.
Terminal
sudo apt install openssh
Untuk distribusi Void Linux dan turunannya.
Terminal
sudo xbps-install openssh
Untuk distribusi Fedora dan turunannya.
Terminal
sudo dnf install openssh
Untuk distribusi openSUSE dan turunannya.
Terminal
sudo zypper in openssh
Untuk distribusi Archlinux, Manjaro dan turunannya.
Terminal
sudo pacman -S openssh
Windows
Pemasangan ini hanya berlaku untuk Windows 8, 10 dan ke atas.
Konfigurasi sandi pengguna
Untuk pengguna Windows, OpenSSH memerlukan sandi pengguna untuk otentikasi. Jika tidak menggunakan sandi, maka tidak bisa menggunakan OpenSSH karena ada galat. Caranya dengan menambahkan sandi pengaturan akun pengguna.
- Buka Settings > Accounts > Sign-in options
Pemasangan Fitur OpenSSH
Selanjutnya memasang OpenSSH di bagian Aplikasi dan Fitur.
- Apps & Features > Manage optional features > Add a feature > OpenSSH Server > Install
MacOS
Pemasangan OpenSSH di MacOS dapat menggunakan salah satu cara ini.
Port yang sudah dipasang. Cara Install Port.
Terminal
sudo port install openssh
Brew yang sudah dipasang. Cara Install Brew.
Terminal
brew install openssh
Mengecek versi OpenSSH
Setiap sistem operasi kemungkinan memiliki versi OpenSSH yang berbeda-beda, pengguna dapat melihat versi Git dengan perintah ini.
Terminal
ssh -V
OpenSSH_9.7p1, OpenSSL 3.0.13 30 Jan 2024
Sebagai contoh, versi diatas menggunakan versi 9.7p1
.
Mengecek Kunci SSH
Kunci SSH digunakan untuk otentikasi ke kendali jarak jauh (remote control). Hal yang paling sering digunakan untuk login ke git forge seperti sourcehut, github atau gitlab.
Sebelum mengkonfigurasi pastikan dahulu tidak ada kunci SSH di direktori ~/.ssh
. Anda dapat mengeceknya dengan perintah terminal ini.
Terminal
ls -al ~/.ssh
Permissions Size User Date Modified Name
.rw------- 203 hervyqa 21 Mar 07:09 config
.rw------- 464 hervyqa 21 Mar 07:09 id_ed25519
.rw------- 99 hervyqa 21 Mar 07:09 id_ed25519.pub
.rw------- 3.6k hervyqa 21 Mar 07:09 known_hosts
Umumnya terdapat salah satu dari tiga jenis berkas kunci publik ini:
- id_rsa.pub
- id_ecdsa.pub
- id_ed25519.pub
Jika masih kosong, bisa melanjutkan ke tahap berikutnya untuk membuat kunci SSH yang baru.
Membuat Kunci SSH baru
Terminal
ssh-keygen -t ed25519 -C "hervyqa@proton.me"
Jika tidak berhasil, muncul invalid format
atau feature not support
maka ada keamanan perangkat keras yang mana perlu menggunakan algoritma ecdsa-sk
.
Terminal
ssh-keygen -t ecdsa-sk -C "hervyqa@proton.me"
Langsung tekan EnterEnter saja untuk memilih lokasi direktori bawaan.
Terminal
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/hervyqa/.ssh/id_ed25519): (ENTER)
Created directory '/home/hervyqa/.ssh'.
Selanjutnya memasukkan kata sandi rahasia pengguna.
Terminal
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Jika berhasil maka terlihat keluaran seperti ini.
Your identification has been saved in /home/hervyqa/.ssh/id_ed25519
Your public key has been saved in /home/hervyqa/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:KUfzOkl2FyOf5/30nIEH60jrdNV2HafUCl8fdjgVBL8 hervyqa@proton.me
The key's randomart image is:
+--[ED25519 256]--+
| .ooo|
| .+ |
| o . + +==|
| . + o B.=X|
| . S o +.=E*|
| = + . o=o.|
| + o +.oo|
| .o = .o=|
| .+ . .+|
+----[SHA256]-----+
Perlu diingat, berdasarkan keluaran diatas ada dua berkas yang harus diketahui:
- Kunci privat/rahasia terletak di:
~/.ssh/id_ed25519
. - Kunci publik terletak di:
~/.ssh/id_ed25519.pub
.
Kunci yang dapat dibagikan yaitu id_ed25519.pub
karena bersifat publik.
Menambahkan Kunci SSH ke ssh-agent
Jalankan ssh-agent di latar belakang.
Terminal
eval "$(ssh-agent -s)"
Kemudian tambahkan kunci privat dengan ssh-add.
Terminal
ssh-add ~/.ssh/id_ed25519
Konfigurasi Git
Pemasangan Git
Git juga dapat dipasang di platform mana saja. Khususnya di GNU/Linux.
GNU/Linux
Cara pemasangan Git di GNU/Linux berdasarkan paket managernya.
Untuk distribusi Nixos dan turunannya.
/etc/nixos/configuration.nix
[
environment.systemPackages =
pkgs.git];
- NixOS
Untuk distribusi Nixos dan turunannya.
Terminal
nix-env -iA nixos.git
- Non NixOS
Untuk distribusi Selain Nixos.
Terminal
nix-env -iA nixpkgs.git
Untuk distribusi Nixos dan turunannya.
Terminal
nix-shell -p git
Untuk distribusi Ubuntu, Debian, KDE Neon, Kubuntu dan turunannya.
Terminal
sudo apt install git
Untuk distribusi Void Linux dan turunannya.
Terminal
sudo xbps-install git
Untuk distribusi Fedora dan turunannya.
Terminal
sudo dnf install git
Untuk distribusi openSUSE dan turunannya.
Terminal
sudo zypper in git
Untuk distribusi Archlinux, Manjaro dan turunannya.
Terminal
sudo pacman -S git
Windows
Silakan merujuk ke halaman Git untuk mengunduh Git. Tersedia untuk arsitektur 32-bit dan 64-bit.
- Unduh: git-scm.com/download/win
Jika menggunakan winget, dapat menggunakan perintah ini.
Power Shell
winget install --id Git.Git -e --source winget
MacOS
Pemasangan Git di MacOS dapat menggunakan salah satu cara ini.
Port yang sudah dipasang. Cara Install Port.
Terminal
sudo port install git
Brew yang sudah dipasang. Cara Install Brew.
Terminal
brew install git
Mengecek versi Git
Setiap sistem operasi kemungkinan memiliki versi Git yang berbeda-beda, pengguna dapat melihat versi Git dengan perintah ini.
Terminal
git --version
git version 2.44.1
Sebagai contoh, versi diatas menggunakan versi 2.44.1
.
Menambahkan Nama Pengguna dan Surel
Tambahkan nama pengguna dan surel yang aktif. Nama pengguna menggunakan nama yang berasal dari akun git forge seperti Sourehut, Github, Gitlab, Codeberg atau lainnya. Sebagai contoh, penulis menggunakan hervyqa
dan hervyqa@proton.me
Terminal
git config --global user.name 'hervyqa'
git config --global user.email 'hervyqa@proton.me'
Menambahkan Kunci ID GnuPG ke Git
Selanjutnya tambahkan ID kunci GnuPG ke dalam konfigurasi Git. ID dapat dilihat di cara melihat ID kunci GnuPG di langkah sebelumnya.
Terminal
git config --global user.signingkey D7B52C04D9B40738
Ager tidak menambahkan --gpg-sign
secara manual, maka bisa menambahkan konfigurasi ini.
Terminal
git config --global commit.gpgsign true
Sekaligus jika ingin membuat tag tanpa perlu --gpg-sign
secara manual.
Terminal
git config --global tag.gpgsign true
Pengaturan tambahan untuk mengganti nama cabang dari master
ke main
.
Terminal
git config --global init.defaultBranch main
Melihat Semua Konfigurasi Git
Jika ingin melihat konfigurasi yang sudah diatur sebelumnya, dapat menggunakan perintah di bawah ini.
Terminal
git config --global --list
Konfigurasi tersebut juga dapat dilihat di direktori ~/.config/git
. Kurang lebih konfigurasinya terlihat seperti ini.
Terminal
cat ~/.config/git/config
[commit]
gpgSign = true
[gpg]
program = "/bin/gpg2"
[init]
defaultBranch = "main"
[tag]
gpgSign = true
[user]
email = "hervyqa@proton.me"
name = "Hervy Qurrotul Ainur Rozi"
signingKey = "D7B52C04D9B40738"
Kesimpulan
Terakhir dari penulis, penjelasan di atas menggunakan CLI sehingga lebih lama dan tidak instan. Pengguna bisa saja menggunakan perangkat lunak GUI (Client) untuk manajemen GnuPG, OpenSSH dan Git. Tetapi tujuan dari penulis bukan seperti ini. Harapan penulis, pembaca dapat mengetahui proses dan perintah CLI-nya agar dapat mengetahui proses secara lebih baik. Tentu menambah literasi dalam penggunaan OpenSSH dan Git sangat membantu untuk proses pengembangan perangkat lunak dan pemrograman.
Jika Anda mempunyai pertanyaan, saran, dan kritikan silahkan kirim ke email, telegram atau instagram. Semoga tulisan ini bermanfaat untuk pembaca semuanya.
Reuse
Citation
@online{qurrotul ainur2024,
author = {Qurrotul Ainur, Hervy},
title = {Konfigurasi {Kunci} {GPG} {(GnuPG),} {OpenSSH} \& {Git} Di
{GNU/Linux}},
date = {2024-06-19},
url = {https://hervyqa.dev/blog/konfigurasi-kunci-gpg-gnupg-ssh-dan-git-di-gnu-linux},
langid = {en}
}