Konfigurasi Kunci GPG (GnuPG), OpenSSH & Git di GNU/Linux

Standar enkripsi sistem dengan GnuPG dan SSH sangat penting untuk keamanan data pengguna, menentukan keaslian serta integritas data.
linux
security
terminal
Author
Published

June 19, 2024

Modified

June 19, 2024

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.

Passphrase GPG
Figure 1: Dialog Keyring GPG dengan Pinentry.

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 Enter 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 Enter, 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 0, untuk memilih nomer 0 key does not expire dan pilih y, 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 o (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:

  1. Merujuk ke protokol jaringan Secure Socket Shell.
  2. Merujuk pada perangkat lunak OpenSSH.
  3. 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.

  1. 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.
  2. 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

Spesifikasi

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

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

BibTeX citation:
@online{qurrotul2024,
  author = {Qurrotul, 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}
}
For attribution, please cite this work as:
Qurrotul, Hervy. 2024. “Konfigurasi Kunci GPG (GnuPG), OpenSSH & Git Di GNU/Linux.” June 19, 2024. https://hervyqa.dev/blog/konfigurasi-kunci-gpg-gnupg-ssh-dan-git-di-gnu-linux.