GnuPrivacy Guard (GPG) memungkinkan kita untuk mengamankan file sehingga hanya pemilik kunci saja yang dapat membuka file tersebut. Selain itu penggunaan GPG yang paling umum yaitu untuk menandatangani file, seperti pada linux package manager (khususnya external repository), kita menambahkan Kunci GPG publik milik pengembang aplikasi ke dalam kunci terpercaya di sistem kita. Sehingga ketika kita menginstall aplikasi/paket dari repository tersebut, system akan memverifikasi menggunakan kunci yang telah ditambahkan untuk memastikan paket tersebut tidak dirubah oleh pihak ketiga dan benar-benar didapat dari pengembangnya langsung(terpercaya).

1. Cara Kerja GPG

GPG menggunakan dua kunci untuk setiap penggunanya, seorang pengguna perlu memiliki private key dan public key. Public key digunakan untuk mendecrypt file/pesan yang di enkripsi menggunakan private key pengguna tersebut.

Sedangkan untuk menenkripsi file antar dua pengguna seperti mengirimkan file secara aman melalui server publik, kamu perlu memiliki private key milikmu sendiri dan publik key penerima untuk mengenkripsi file. Untuk mendekripsi file penerima perlu memiliki private key miliknya dan publik key milik kamu.

Dari gambaran tersebut, private key adalah kunci yang perlu disimpan oleh pemiliknya secara aman dan tidak untuk di berikan oleh orang lain. Sedangkan publik key memang diperuntukan untuk dibagikan ke semua orang, atau orang yang kamu percaya untuk mengenkripsi file kamu.

2. Menginstall GPG

GPG umumnya telah terinstall di setiap distribusi linux. Jika kamu tidak menemukan instalasi GPG kamu bisa menginstallnya menggunan perintah berikut:

Pada sistem basis ubuntu dan debian:

sudo apt install gpg

Pada sistem basis Arch linux:

sudo pacman -S gnupg

3. Membuat GPG Key

Untuk dapat mengenkripsi dan mendekripsi file, kamu perlu memiliki private dan publik key yang bisa kamu generate menggunakan satu perintah berikut:

gpg --full-generate-key

Selanjutnya pilih jenis kunci yang diinginkan, atau tekan enter untuk pilihan default.

gpg (GnuPG) 2.2.29; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
  (14) Existing key from card
Your selection? 

Tentukan panjang bit untuk kunci enkripsi, tekan enter untuk nilai default (3072)

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 

Pilih jangka waktu kunci bisa digunakan. default (0) dimana kunci bisa digunakan selamanya, atau dalam jangka waktu hari (mis: 3), minggu (mis: 3w), bulan(mis: 5m) dan tahun (mis: 80y)

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
Key is valid for? (0) 

Pastikan semua isian sesuai dengan keinginan dan ketikan y untuk mengonfirmasi:

Is this correct? (y/N) 

Selanjutnya isikan informasi nama dan email dan konfirmasikan pembuatan gpg key seperti berikut:

GnuPG needs to construct a user ID to identify your key.

Real name: Yaka Lee
Email address: yaka@example.com
Comment: Github
You selected this USER-ID:
    "Yaka Lee (Github) <yaka@example.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?O 

Pada langkah terakhir, kamu akan diminta untuk mengisi passphrase atau password untuk melindungi kunci GPG kamu dan klik Ok. Kunci akan di generate dan Pesan akan muncul di terminal seperti berikut menandakan kunci sudah siap untuk digunakan:

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: key 637ADED0A031F734 marked as ultimately trusted
gpg: revocation certificate stored as '/home/kal/.gnupg/openpgp-revocs.d/1564E21C160F355CFE36BCA1637ADED0A031F734.rev'
public and secret key created and signed.

pub   rsa3072 2022-03-30 [SC]
      1564E21C160F355CFE36BCA1637ADED0A031F734
uid                      Yaka Lee (Github) <yaka@example.com>
sub   rsa3072 2022-03-30 [E]

4. Mengenkripsi File

Setelah kita memiliki kunci GPG, kita bisa mengenkripsi file menggunakan perintah berikut:

gpg --encrypt --sign --armor -r pyuw@example.com pesan.txt

Opsi --encrypt memerintahkan gpg untuk mengenkripsi file, --sign memerintahkan gpg untuk menandatangani file dengan detail info kamu, --armor memerintahkan gpg untuk membuat file dengan format ASCII dan opsi -r (recipient) harus diikuti dengan email penerima file yang kamu percaya untuk membuka file tersebut.

Jika kamu ingin mengenkripsi file tersebut untuk kamu sendiri, cukup gunakan email kamu sendiri.

Cara lain untuk engenskripsi:

gpg -e -u "Nama Pengirim" -r "Nama Penerima" namaFile

-e versi pendek dari --encrypt, -u untuk menentukan user yang akan mengenkripsi file, -r untuk menentukan recipient atau penerima yang dipercaya untuk membuka file namaFile yang di enkripsi. Sebagai contoh:

gpg -e -u "Yaka Lee" -r "Mei Lee" namaFile

Username dan nama recipient bisa dilihat meggunakan perintah:

gpg --list-keys

5. Men-decrypt file

Untuk membuka pesan yang terenkripsi cukup gunakan opsi perintah --decrypt seperti berikut:

gpg --decrypt pesan.txt.asc > pesan.txt

atau

gpg -d pesan.txt.gpg > pesan.txt

6. Membagikan kunci Publik kamu

Ada dua cara untuk membagikan kunci publik kamu ke pada pengguna lain diantaranya mengeksport publik key kamu ke dalam file atau membagikan kunci publik kamu ke server publik key.

Untuk mengeksport publik key ke dalam bentuk file bisa menggunakan perintah berikut:

gpg --output ~/yakalee.key --armor --export yaka@example.com

Membagikan kunci publik ke key server lebih umum digunakan karena memudahkan oleh pengguna gpg lain untuk mencari publik key yang telah dibagikan. Untuk membagikan publik key kita memerlukan fingerprint dari publik key kita. Untuk mengecek gunakan opsi --fingerprint seperti berikut:

gpg --fingerprint yaka@example.com

output:

/home/kal/.gnupg/pubring.kbx
---------------------------
pub   rsa3072 2022-03-30 [SC]
      1564 E21C 160F 355C FE36  BCA1 637A DED0 A031 F734
uid           [ultimate] Yaka Lee (Github) <yaka@example.com>
sub   rsa3072 2022-03-30 [E]

Setelah kita menemukan fingerprint id dari kunci kita, gunakan perintah berikut untuk mengirimkannya ke key server. Pastikan fingerprint tidak di pisahkan oleh spasi seperti berikut:

gpg --send-keys --keyserver pgp.mit.edu 1564E21C160F355CFE36BCA1637ADED0A031F734

7. Mengimport key teman

Untuk mengimport publik key milik pengguna lain bisa menggunakan perintah berikut (jika dalam bentuk file).

gpg --import namasiapa.key

Atau jika kamu tidak memiliki file kunci mereka, kamu bisa mencarinya di publik key server menggunakan email mereka seperti berikut:

gpg --keyserver pgp.mit.edu --search-keys pyuw@example.com

8. Refresh kunci

Kita bisa meminta gpg untuk mengecek setiap kunci yang telah kita import dan mengupdatenya jika kunci tersebut telah dirubah oleh pemiliknya. Kita perlu melakukan hal ini setidaknya setiap kita ingin menembahkan kunci dari kontak baru.

gpg --keyserver pgp.mit.edu --refresh-keys

9. Membackup Private Key

Kamu bisa memindahkan kunci kamu dari perangat satu dengan lainnya atau menggunakan kunci yang sama di beberapa perangkat sekaligus. Untuk dapat melakukan hal tersebut maka kita harus mengexport kunci kedalam bentuk sebuah file. Tapi harus di ingat private key bukanlah kunci yang seharusnya di bagikan, jadi tetap jaga kerahasiaan kunci tersebut dengan menyimpan backupnya untuk melindungi kunci tersebut hilang dari salah satu perangkat.

Untuk membackup kunci private kamu bisa menggunakan opsi --export-secret-keys seperti contoh perintah berikut:

gpg --export-secret-keys --armor yaka@example.com > secret-key-backup.asc

10. Membuat Revocation certificate

Sertifikat Revocation diperlukan untuk jaga-jaga, jika private key kita sudah diketahui orang lain. sertifikat ini gunanya untuk melepaskan identitas kita dari private key yang sudah diketahui orang lain dan menggantinya dengan yang baru.

gpg --output ~/revocation.crt --gen-revoke yaka@example.com

Kamu akan ditanya alasan kamu membuat sertifikat revocation, untuk saat ini pilihan no 1 cukup untuk dijadikan alasan, soalnya kita tidak tahu alasan yang jelas untuk saat ini dari pilihan yang tersedia.

sec  rsa3072/637ADED0A031F734 2022-03-30 Yaka Lee (Github) <yaka@example.com>

Create a revocation certificate for this key? (y/N) y
Please select the reason for the revocation:
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
(Probably you want to select 1 here)
Your decision? 1
Enter an optional description; end it with an empty line:
> Key has been compromised
> 
Reason for revocation: Key has been compromised
Key has been compromised
Is this okay? (y/N) y
ASCII armored output forced.
Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!

Sekarang kamu bisa menyimpan sertifikat revocation di tempat yang aman seperti pesan pada terminal. Dalam pesan menyebutkan tokoh mallory yang bisa mengakses sertifikat kamu, jadi kalau itu terjadi dia bisa membuat kunci gpg kamu tidak berguna.

Pada setiap diskusi kriptografi umumnya menggunakan karakter Bob dan Alice sebagai dua orang yang berkomunikasi. Karakter pendukung lainnya diantaranya Eve merupakan karakter yang suka mendengarkan pembicaraan rahasia atau private dan karakter Mallory yang akan selalu menyerang setiap kelengahan korbanya dengan segala keganasanya. Yang perlu kita tau adalah kita harus menyimpan sertifikat tersebut secara aman.