Belajar Memakai GNU Privacy Guard (GnuPG/GPG)

Rian Yulianto W
Kode dan Kodean
Published in
63 min readMay 28, 2019
GNU Privacy Guard atau GnuPG atau GPG

GnuPG adalah suatu aplikasi yang dipakai untuk melakukan proses enkripsi data, dekripsi data , dan penandatanganan digital untuk selanjutnya dilakukan proses pertukaran data antar perangkat. GnuPG ini bisa disebut juga dengan GPG. Enkripsi dengan GPG ini sudah sesuai dengan standar yang dijelaskan dalam RFC4880 (dikenal juga dengan standar PGP). Aplikasi GPG dilengkapi dengan fungsi manajemen kunci keamanan seperti pembuatan kunci, penyuntingan kunci, dan penghapusan kunci keamanan. Aplikasi GPG ini berbentuk aplikasi perintah baris atau command line yang dapat dijalankan melalui aplikasi Terminal di setiap sistem operasi.

Pada artikel ini, kita akan belajar menggunakan aplikasi GPG untuk membuat kunci keamanan berbentuk private secret key, public key, dan private secret subkey. Kemudian dilanjutkan dengan latihan untuk mengamankan data dengan mode enkripsi aman dengan mode keamanan yang tersedia, dan mengembalikan data yang dienkripsi dengan kunci keamanannya. Aplikasi GPG yang dipakai pada pengenalan GPG dan latihannya di artikel ini menggunakan aplikasi GPG yang telah terpasang otomatis di setiap sistem operasi Linux. Dengan sistem Linux yang dipakai adalah sistem berbasis turunan Ubuntu yaitu Linux Mint.

Untuk yang belum terpasang secara otomatis dan untuk platform selain Linux, bisa mengunduh aplikasi GPG ini pada tautan berikut ini :

Latar Belakang

Kenapa harus mulai belajar menggunakan GPG untuk pengaman data ? Hal itu yang pertama kali terlintas di benak penulis artikel ini pada tahun 2015 lalu. Pada waktu itu, penulis sedang terlibat mengerjakan suatu aplikasi dengan banyak orang dan tim. Penulis mendapat tugas untuk melakukan testing dan deployment aplikasi ke Google Play Store. Tugas itu meliputi penjagaan kunci tanda tangan aplikasi untuk pembuatan APK Android, yang dikenal bernama Android Keystore berekstensi .jks . Penulis saat itu mencari cara agar Android Keystore ini tetap aman walaupun diunggah ke repository proyek aplikasi dalam Git dengan banyak kolaborator yang terlibat. Memang Android Keystore ini aman karena dikunci dengan password ketika akan membuat APK aplikasi, namun bagaimana jika ada orang yang membocorkan password tersebut ? Bagaimana jika ada orang yang secara tidak sengaja mengetahui password tersebut ? Bagaimana jika ada orang yang dengan nekat melakukan teknik brute force untuk mendapatkan password keystore tersebut? Hal hal ini yang terlintas di dalam benak penulis saat itu.

Namun hal itu tidak membutuhkan waktu lama untuk mencari solusinya. Pada tahun 2015 itu memang sedang ramai dengan berita bulk surveillance yang terjadi di banyak negara. Penulis pun mendapatkan suatu artikel dan infografik yang berisi enkripsi email dan tools yang digunakan. Salah satunya adalah bernama GNU Privacy Guard, atau disingkat GnuPG atau disingkat lagi menjadi GPG. Kebetulan artikel infografik ini masih ada sampai sekarang dengan banyak tambahan pembaruan, yang dapat dilihat di bawah ini.

Kemudian penulis pun memasang GnuPG ini di perangkat komputernya. Dan melakukan eksplorasi pembelajaran lebih lanjut. Misalnya dengan mencoba enkripsi, dekripsi, penandatanganan email dengan Mozilla Thunderbird, dst. Dan hasilnya penulis berhasil mendapatkan cara untuk mengamankan Android Keystore agar aman diunggah ke repository Git, yaitu dengan membuat enkripsi menjadi berisi file acak berformat ASCII dengan GnuPG ini.

Sampai saat ini, penulis sudah memperluas penggunaan GnuPG untuk hal lain. Yaitu memanfaatkan GnuPG untuk enkripsi data-data penting yang disimpan di layanan awan. Dan juga enkripsi data sensitif yang dikirimkan melalui email agar benar-benar sampai kepada penerima yang berhak membuka enkripsi tersebut.

Contoh Implementasi GnuPG

GnuPG memiliki banyak manfaat dalam hal pengamanan data dengan enkripsi ketat. Beberapa diantaranya yaitu :

  • Menambahkan enkripsi dekripsi pada aplikasi pengirim email seperti Thunderbird.
  • Mengamankan data dengan enkripsi sebelum disimpan ke media penyimpanan online.
  • Mengamankan data sensitif dengan enkripsi sebelum data tersebut dikirimkan ke orang lain yang berhak menerima.
  • Membuat pasangan kunci pengaman (key pair) dan manajemen kunci pengamannya.
  • Mengamankan data-data penting yang disimpan pada media digital tidak online, seperti data yang disimpan di USB Drive, Harddisk Eksternal, Micro SD Card, dan lain lain.

Perintah Dasar

GnuPG memiliki beberapa perintah dengan parameter tertentu untuk menjalankan fungsinya. Perintah ini ditulis dalam bentuk command line di dalam aplikasi Terminal. Perintah untuk menjalankan aplikasi GnuPG diawali dengan penulisan gpg di awal, lalu diikuti dengan perintah berikut dan parameter opsionalnya.

gpg [options] [files]

Options untuk baris yang berisi perintah diikuti dengan opsi pendukungnya. Sedangkan Files adalah data yang akan dienkripsi dan dekripsi dengan GnuPG. Daftar perintah dan opsi selengkapnya dapat dilihat dengan mengetik perintah di konsol Terminal :

gpg --help

Begitu perintah tersebut diketik dan tekan Enter, akan muncul versi GnuPG dan daftar perintah seperti di bawah ini.

Versi GPG yang muncul

Dapat dilihat bahwa versi aplikasi GnuPG yang telah terpasang adalah versi 2.2.4 dengan dependensi libgcrypt 1.8.1 . Kemudian kita dapat melihat kunci enkripsi yang didukung seperti RSA, ELG, DSA, dst. Untuk teknik penulisan enkripsinya mendukung teknik AES256, CAST5, CAMELLIA256, dst. Metode pemetaan data yang didukung diantaranya SHA256 dan SHA yang lainnya. Dan untuk metode kompresi data yang didukung yaitu ZIP, ZLIB, BZIP2, dst.

Daftar perintah yang dapat digunakan di aplikasi GPG

Jika kita gulirkan halaman ke bawah, maka akan muncul daftar perintah-perintah dasar yang dapat kita pakai. Beberapa perintah tersebut akan sering dipakai ketika operasi enkripsi dan dekripsi dilakukan. Daftar perintah yang sering dipakai diantaranya sebagai berikut.

  • Perintah --generate-key dan --full-generate-key untuk pembuatan kunci pengaman berbentuk private key dan public key.
  • Perintah --encrypt atau -e untuk mengunci data dengan kunci pengaman yang telah dibuat.
  • Perintah --decrypt atau -d untuk membuka enkripsi dengan kunci pengaman.
  • Perintah --armor atau -a untuk mengacak data yang telah dikunci menjadi bentuk kode acak ASCII.
  • Perintah --sign atau -s untuk menandatangani data yang akan dikunci ataupun data yang telah dikunci.
  • Perintah --detach-sig untuk menandatangani data dengan memisahkan kode tanda tangan ke bentuk data terpisah berformat .sig .
  • Perintah --list-keys atau -k untuk menampilkan kunci pengaman public atau public key yang telah terpasang di perangkat.
  • Perintah --list-secret-keys atau -K untuk menampilkan kunci pengaman pribadi atau private key yang terpasang di perangkat.
  • Perintah --export untuk ekspor kunci pengaman publik atau public key ke dalam bentuk file.
  • Perintah --export-secret-key untuk ekspor kunci pengaman pribadi atau private key ke bentuk file.
  • Perintah --import untuk memasang kunci pengaman berbentuk data untuk dimasukkan ke dalam aplikasi GnuPG.
  • Perintah --edit-key untuk mengubah parameter yang terdapat di dalam kunci pengaman.
  • Perintah --delete-key untuk menghapus kunci pengaman bersifat publik atau public key dari penyimpanan GnuPG.
  • Perintah --delete-secret-key untuk menghapus kunci pengaman yang bersifat pribadi atau private key dari penyimpanan GnuPG.
  • Perintah --generate-revocation untuk membuat kunci pembatalan revoke key untuk membuat kadaluarsa kunci pengaman dengan bantuan jaringan publikasi kunci pengaman online atau keyserver.
  • Perintah --verify untuk melakukan verifikasi data terenkripsi dengan tanda tangan .sig yang terpisah . Tanda tangan terpisah .sig ini dibuat dengan perintah --detach-sig di atas.
  • Perintah --send-keys untuk mengirim public key ke layanan keyserver publik.
  • Perintah --receive-keys untuk menerima public key dari layanan public keyserver online.

Parameter Dasar

Selain dengan beberapa perintah utama di atas, GnuPG ini juga memiliki parameter yang diperlukan untuk perintah dasarnya. Diantaranya adalah sebagai berikut

  • Parameter --recipient atau -r untuk menentukan penerima data yang dienkripsi. Penerima data ini berisi nama penerima atau kode yang tercantum dari public key milik penerima data yang kita dapat.
  • Parameter --local-user atau -u untuk menentukan pengguna mana yang akan menandatangani dan enkripsi data. Pengguna ini harus memiliki private secret key agar agar proses enkripsi dan penandatanganan berhasil.
  • Parameter --verbose atau -v untuk menampilkan proses ketika eksekusi perintah dijalankan.
  • Parameter --output atau -o untuk menentukan nama data hasil ekspor dari menjalankan perintah enkripsi data dan pembuatan tanda tangan terpisah.
  • Parameter --expert untuk menambahkan mode lebih lengkap ketika proses pembuatan kunci pengaman dan mengubah kunci parameter.

Alur Penggunaan GPG

Penggunaan GnuPG pertama kali dilakukan dengan membuat kunci pengaman terlebih dahulu. Dianjurkan untuk membuat kunci pengaman dengan mode expert agar bisa menentukan parameter-parameter tambahan dengan lebih lengkap. Setelah kunci pengaman selesai dibuat, dilanjutkan dengan membuat sub kunci pengaman untuk fungsi tanda tangan, enkripsi, dan autentikasi data. Kemudian dilanjutkan dengam membuat kunci pembatalan revocation key dan ekspor kunci pengaman yang tersimpan.
Setelah kunci pengaman dan sub kunci pengaman selesai dibuat, pengguna dapat melanjutkan dengan proses pengamanan data dengan enkripsi dan dekripsi dari data enkripsi yang didapat.

A. Membuat Kunci Utama atau Master Key GPG (Key Value Pair)

Langkah pertama dilakukan dengan membuat kunci pengaman yang berbentuk public key dan private key. Pembuatan kunci utama atau disebut juga dengan master key ini bisa dengan menggunakan perintah instan yaitu

gpg --generate-key

atau bisa dengan perintah membuat kunci dengan pilihan lebih lengkap yaitu

gpg --full-generate-key

Namun di artikel ini kita tidak akan menggunakan cara seperti itu, karena kita akan membuat master key untuk sertifikasi kunci utama dan subkey untuk fungsi enkripsi, tanda tangan digital, dan autentikasi. Kita akan membuat kunci utama dengan mode expert sehingga banyak pilihan yang bisa dipakai. Perintah yang kita gunakan yaitu :

gpg --expert --full-generate-key

Begitu perintah itu dieksekusi, akan muncul pilihan seperti gambar di bawah ini.

Membuat kunci utama dengan memilih kunci utama jenis RSA

Kita memilih pilihan kedelapan yaitu “RSA (set your own capabilities)” . Masukkan angka 8 pada pilihan “Your Selection?” . Tekan enter untuk melanjutkan proses berikutnya. Kemudian akan muncul perintah pilihan berikut ini.

Possible actions for a RSA key: Sign Certify Encrypt Authenticate 
Current allowed actions: Sign Certify Encrypt
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection?

Kita akan membuat kunci utama atau master key dengan kemampuan membuat sertifikat kunci digital. Kita matikan fungsi Sign dan Encrypt terlebih dahulu. Yaitu dengan menekan tombol E dan A . Tekan pilihan disertai dengan Enter sampai tersisa Current allowed actions hanya tersisa Certify saja. Jika sudah , masukkan pilihan (Q) Finished untuk menyelesaikan pilihan opsi.

Possible actions for a RSA key: Sign Certify Encrypt Authenticate 
Current allowed actions: Sign Certify Authenticate
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? APossible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Sign Certify
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? SPossible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Certify
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? Q

Setelah menekan Q, kita akan dilanjutkan dengan mengisi jumlah bits untuk RSA key yang akan dibuat. Kita masukkan saja nilai 4096 bits untuk panjang kunci RSA nya.

Masukkan panjang kunci RSA

Setelah memasukkan panjang kunci RSA, akan muncul pilihan untuk menentukan masa berlaku dari master key ini. Idealnya adalah 5 tahun, dan jika sudah habis masa berlakunya, dapat diperbarui kembali dengan fungsi
--edit-key pada master key tersebut. Namun kita dapat memilih masa berlakunya seumur hidup tanpa masa kadaluarsa. Yaitu dengan memilih pilihan 0 . Namun kita juga membuat masa berlaku menjadi 5 tahun dengan memasukkan pilihan berbentuk <n>y , yaitu 5y , untuk masa berlaku selama 5 tahun.

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) 0
Key does not expire at all
Is this correct? (y/N) y

Pada contoh artikel ini, kita masukkan masa berlaku tidak terbatas yaitu pilihan 0. Tekan Enter untuk melanjutkan pilihan berikutnya. Yaitu memasukkan data diri berupa nama lengkap dan alamat email kontak kita.

GnuPG needs to construct a user ID to identify your key.Real name: TesTesKunci
Email address: testeskunci@mail.com
Comment: Kunci untuk mengunci kenangan
You selected this USER-ID:
"TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

Setelah memasukkan kolom isian data diri seperti Real name, Email address, dan Comment. Akan muncul pilihan untuk konfirmasi bahwa data yang kita masukkan sudah benar. Pada artikel ini, data yang dimasukkan sudah benar, dan tidak ada perubahan lagi, sehingga kita cukup memilih pilihan O dari (O)kay di atas. Tekan Enter untuk melanjutkan.

Langkah berikutnya kita akan disuruh untuk memasukkan kata kunci untuk kunci utama atau master key ini. Usahakan kata kunci-nya terdiri dari kombinasi huruf besar, huruf kecil, dan angka dengan panjang lebih atau sama dengan dari 10 karakter. Password ini akan selalu dibutuhkan ketika kita melakukan enkripsi data, impor kunci , dan dekripsi data.

Real name: TesTesKunci
Email address: testeskunci@mail.com
Comment: Kunci untuk mengunci kenangan
You selected this USER-ID:
"TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
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 EC0C103F84E51148 marked as ultimately trusted
gpg: revocation certificate stored as '/home/kucingmumu/.gnupg/openpgp-revocs.d/E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148.rev'
public and secret key created and signed.
pub rsa4096 2019-05-21 [C]
E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
uid TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
Memasukkan kata kunci pengaman untuk Master Key dari Private Key

Setelah memasukkan kata kunci pengaman, aplikasi GnuPG akan membuat generasi kode acak berdasarkan aktivitas sistem komputer yang dipakai. Usahakan membuat sistem komputer menjadi sibuk dengan aktivitas harddisk seperti menggerakan kursor, membuka aplikasi, membuka halaman browser. Tujuannya adalah bisa mendapatkan kode RSA atau entropi kode yang aman dan sangat acak. Setelah berhasil membuat kode RSA, kunci pengaman utama ini akan disimpan oleh GnuPG ke dalam tempat penyimpanan khusus. GnuPG akan menampilkan keterangan hasil pembuatan master key yang telah dibuat 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.
gpg: key EC0C103F84E51148 marked as ultimately trusted
gpg: revocation certificate stored as '/home/kucingmumu/.gnupg/openpgp-revocs.d/E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148.rev'
public and secret key created and signed.
pub rsa4096 2019-05-21 [C]
E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
uid TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>

Kunci utama ini telah disimpan ke dalam database dari GnuPG. Kita dapat mengeceknya dengan menggunakan perintah gpg --list-keys atau gpg -k untuk menampilkan daftar public key . Kemudian kita bisa melihat daftar private key dengan gpg --list-secret-keys atau gpg -K . Hasilnya akan tampak seperti gambar di bawah ini.

Daftar kunci private key dan public key

Kemudian kita lanjutkan dengan mengubah setelan dari master key ini untuk menggunakan metode Cipher, Hash, dan Compression tertentu. Yaitu dengan memasukkan perintah penyuntingan kunci mode expert yaitu
gpg --expert --edit-key [UID_kunci] . UID atau kode kunci ini bisa didapat dengan menggunakan perintah gpg -K sebelumnya.

Mengubah parameter master key dengan mode expert dan UID yang dipakai

Kita akan dibawa ke tampilan Terminal khusus untuk pengubahan parameter kunci. Tulisan terminalnya akan tampak seperti di bawah ini.

$ gpg --expert --edit-key E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
Secret key is available.sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg>

Pada mode penyuntingan ini, kita memasukkan perintah perubahan pada konsol yang disediakan, yaitu disebelah tulisan gpg> . Kita dapat melihat daftar perintah yang disediakan dengan mengetik help pada kolom isian konsol tersebut.

Menampilkan daftar perintah pada mode Edit Key

Daftar perintah itu dapat kita gulir ke atas atau ke bawah untuk melihat daftar yang lain. Pada langkah kali ini, kita akan mengubah setelan dari master key untuk metode cipher, hash , dan compression yang dipakai. Yaitu dengan menggunakan perintah setpref . Kita masukkan setelan berikut ini untuk master key-nya :

setpref SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed

Tekan Enter, dan akan muncul jendela konfirmasi dan jendela untuk memasukkan password. Tekan Y untuk setuju. Kemudian masukkan password master key yang telah kita buat ketika proses awal pembuatan master key sebelumnya. Hasil tampilan dari penambahan setelan ini akan tampak di teks di bawah ini.

gpg> setpref SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
Set preference list to:
Cipher: AES256, AES192, AES, CAST5, 3DES
Digest: SHA512, SHA384, SHA256, SHA224, SHA1
Compression: ZLIB, BZIP2, ZIP, Uncompressed
Features: MDC, Keyserver no-modify
Really update the preferences? (y/N) y
sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg>

Kemudian kita simpan konfigurasi tersebut dengan mengetikkan save pada konsol gpg> yang disediakan.

Simpan konfigurasi kunci yang dibuat

Langkah selanjutnya adalah membuat subkey dari master key ini. Subkey yang akan dibuat yaitu subkey untuk signing, encryption, dan authentication. Dengan menggunakan subkey, kita dapat dengan mudah mengatur master key dan pengamanan master key. Misalkan subkey yang kita miliki ternyata telah diketahui orang atau berhasil dibobol, kita dapat dengan mudah membuat revocation key untuk subkey tersebut. Dan kita tidak perlu membuat revocation key untuk master key utama, karena yang dibobol atau compromised key hanya pada bagian subkey nya saja. Subkey ini dapat dengan mudah kita hapus dan tambahkan sesuai keperluan yang akan datang dengan fungsi --edit-key . Selengkapnya dapat dilihat pada artikel berikut ini.

B. Membuat Sub Kunci GPG (Private Sub Key)

Langkah ini dimulai dengan memasukkan perintah untuk penyuntingan kunci master key yaitu gpg --expert --edit-key [UID_kunci] . Kemudian masukkan perintah addkey pada konsol yang disediakan.

Melakukan fungsi addkey pada master key yang disediakan

B.1 Kunci Signing Subkey

Pada pilihan yang muncul ketika memasukkan perintah addkey di dalam konsol penyuntingan master key, pilih pilihan nomor 4 yaitu
(4) RSA (sign only) . Pilih pilihan tersebut dengan menekan tombol Enter, dan langkah berikutnya akan muncul , yaitu memasukkan panjang bits dari RSA key, masa berlaku, dan memasukkan kata kunci password untuk konfirmasi pembuatan subkey ini. Prosesnya dapat dilihat pada tampilan teks dibawah ini.

Secret key is available.sec  rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
Your selection? 4
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits
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) 5y
Key expires at Mon 20 May 2024 10:24:10 AM WIB
Is this correct? (y/N) y
Really create? (y/N) y
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.
sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2024-05-20 usage: S
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> save

Kita akan melihat kunci subkey ini berhasil dibuat pada teks tampilan diatas. Yaitu secret subkey (ssb) dengan rsa key, waktu pembuatan , waktu kadaluarsa expires, tujuan penggunaan usage untuk Signing (s) . Jangan lupa untuk menyimpan kunci subkey yang telah dibuat ini dengan memasukkan perintah save pada konsol edit mode gpg> .

Simpan kunci subkey signing yang telah dibuat
Subkey yang muncul ketika mengecek daftar kunci dengan perintah gpg -k dengan keterangan sub dan ssb .

Kita dapat mengubah parameter subkey yang telah dibuat tersebut. Parameter yang dapat diubah yaitu masa berlaku subkey, mengaktifkan dan nonaktifkan subkey (enable / disable) , membuat revocation key untuk subkey, dan menghapus subkey. Caranya adalah masuk ke mode penyuntingan master key, dan masukkan perintah key (nomor subkey) untuk memilih subkey yang telah dibuat.

$ gpg --expert --edit-key E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
Secret key is available.gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2024-05-20 usage: S
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> key 1sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb* rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2024-05-20 usage: S
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg>

Subkey yang telah dipilih ditandai dengan tanda bintang di samping kode ssb seperti ini ssb* (kode RSA subkey) . Pada contoh kali ini kita akan mengubah masa berlaku subkey menjadi 3 tahun saja. Caranya yaitu dengan memasukkan perintah expire pada konsol edit mode di gpg. Kemudian lanjutkan langkah memasukkan waktu kadaluarsa subkey yang baru.

gpg> listsec  rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb* rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2024-05-20 usage: S
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> expire
Changing expiration time for a subkey.
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) 3y
Key expires at Sat 21 May 2022 10:45:19 AM WIB
Is this correct? (y/N) y
sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb* rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg>
Masa berlaku signing subkey yang telah berubah menjadi 3 tahun

B.2 Kunci Encryption Subkey

Berikutnya adalah membuat kunci subkey untuk enkripsi data. Langkahnya hampir sama dengan membuat signing subkey diatas. Masuk ke mode penyuntingan master key, kemudian kita akan membuat encryption subkey dengan opsi pilihan nomor (6) RSA (encrypt only). Ikuti proses yang berlanjut dengan pengisian formulir sampai selesai. Proses langkah lengkapnya dapat dilihat pada hasil teks Terminal di bawah ini.

sec  rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
Your selection? 6
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits
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) 5y
Key expires at Mon 20 May 2024 10:52:51 AM WIB
Is this correct? (y/N) y
Really create? (y/N) y
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.
sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E

[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> save

Setelah proses pembuatan encryption subkey selesai dibuat, maka akan muncul subkey baru di dalam daftar subkey. Subkey baru ini memiliki fungsi untuk enkripsi yang ditandai dengan kode usage: E .

Kunci Subkey untuk enkripsi dengan kode fungsi [E]

B.3 Kunci Authentication Subkey

Langkah terakhir adalah membuatan authentication subkey. Kunci subkey ini berguna untuk proses autentikasi melalui koneksi ssh , jika kunci di aplikasi GnuPG ini dipakai juga untuk melengkapi koneksi ssh ke server remote. Langkah yang dilakukan adalah masuk mode penyuntingan master key dengan perintah gpg --expert --edit-key [UID_kunci] . Kemudian masukan perintah addkey pada konsol edit mode GPG . Dan pilih opsi nomor (8) RSA (set your own capabilities) .

Masukkan fungsi Authentication dengan memilih opsi perintah yang disediakan untuk mengaktifkan dan menonaktifkan fiturnya. Seperti yang terlihat pada catatan langkah-langkah di teks Terminal berikut ini.

sec  rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
Your selection? 8
Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign Encrypt
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? APossible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign Encrypt Authenticate
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? SPossible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Encrypt Authenticate
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? EPossible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Authenticate
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? Q
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits
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) 5y
Key expires at Mon 20 May 2024 11:08:51 AM WIB
Is this correct? (y/N) y
Really create? (y/N) y
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.
sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
ssb rsa4096/C22225A714A04F77
created: 2019-05-22 expires: 2024-05-20 usage: A

[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> save

Hasil dari pembuatan kunci authentication subkey akan muncul di dalam daftar subkey dari master key. Dengan kemampuan usage adalah A(Authentication) . Lakukan penyimpanan kunci dengan memasukkan perintah save pada konsol gpg yang disediakan.

Master key dengan tiga buah subkey dengan fungsi masing-masing

Hasil dari pembuatan subkey ini dapat dilihat dengan memasukkan perintah gpg -K atau gpg -k pada Terminal. Hasil keluarannya dapat dilihat pada gambar di atas. Kunci master key memiliki tiga buah subkey dengan kode penggunaan [S] Sign , [E] Encryption, dan [A] Authentication.

B.4 Menambahan Identitas UID

Kita dapat juga menambahkan detail identitas tambahan pada master key utama. Yaitu dengan masuk ke mode edit master key, kemudian masukkan perintah adduid di konsol.

Menambahkan identitas tambahan ke Master Key
gpg> adduid
Real name: KucingTes
Email address: kucingtes@mail.com
Comment: Identitas tambahan untuk kunci utama
You selected this USER-ID:
"KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? osec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
ssb rsa4096/C22225A714A04F77
created: 2019-05-22 expires: 2024-05-20 usage: A
[ultimate] (1) TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
[ unknown] (2). KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
gpg> save

Hasil dari penambahan UID pengguna yang baru ini dapat dilihat pada gambar di bawah ini. Yaitu dengan menjalankan perintah gpg -k pada perintah Terminal.

Hasil menambahkan UID pengguna dan identitas baru

Jika kita masuk kembali ke edit mode untuk master key maka akan muncul tampilan berikut

gpg --expert --edit-key E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
Secret key is available.sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
ssb rsa4096/C22225A714A04F77
created: 2019-05-22 expires: 2024-05-20 usage: A
[ultimate] (1). KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
[ultimate] (2) TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg>

Tanda titik “.” pada daftar identitas UID tersebut menandakan bahwa identitas nomor (1) adalah identitas utama. Jika ingin mengganti UID utama, masukkan saja perintah uid <nomor urut UID> , dalam hal ini uid 2 untuk memilih UID urutan kedua, pada konsol gpg yang tersedia. Kemudian masukkan perintah primary pada konsol edit mode GPG tersebut. UID urutan kedua akan menjadi UID utama, setelah perintah save dijalankan melalui konsol GPG ini.

gpg --expert --edit-key E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
Secret key is available.sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
ssb rsa4096/C22225A714A04F77
created: 2019-05-22 expires: 2024-05-20 usage: A
[ultimate] (1). KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
[ultimate] (2) TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> uid 2sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
ssb rsa4096/C22225A714A04F77
created: 2019-05-22 expires: 2024-05-20 usage: A
[ultimate] (1). KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
[ultimate] (2)* TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> primarysec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
ssb rsa4096/C22225A714A04F77
created: 2019-05-22 expires: 2024-05-20 usage: A
[ultimate] (1) KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
[ultimate] (2)* TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
gpg> save

Setelah disimpan, maka UID urutan kedua akan menjadi UID utama dari identias master key ini. Ditandai dengan tanda titik di samping nama UID nya, yang dapat dilihat pada tangkapan teks Terminal di bawah ini.

gpg --expert --edit-key E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
Secret key is available.sec rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: ultimate
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
ssb rsa4096/C22225A714A04F77
created: 2019-05-22 expires: 2024-05-20 usage: A
[ultimate] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
[ultimate] (2) KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
gpg>
Tampilan hasil perubahan UID di master key

Langkah-langkah untuk pembuatan master key utama telah selesai dilakukan. Master key ini adalah kunci utama yang terdiri dari beberapa subkey yang akan dipakai untuk fungsi tertentu. Langkah berikutnya adalah tentang cara mengamankan master key ini dengan aman dengan penggunaan subkey.

C. Pengamanan Kunci Utama

Kunci utama yang disebut master key ini perlu diamankan lebih lanjut agar tidak jatuh ke orang lain yang tidak diperbolehkan mengaksesnya. Pengamanan kunci utama yang berisi public key, private key, dan sub key ini bisa dilakukan dengan membuat metode pencadangan atau backup. Pencadangan kunci master key dilakukan dengan ekspor data kunci ke dalam bentuk data. Data kunci ini lalu disimpan di media yang aman dan tidak boleh diketahui oleh selain pemiliknya. Sedangkan untuk data berbentuk public key dapat dipertukarkan dengan pengguna GnuPG yang lainnya. Data public key inilah yang nanti dipakai untuk pertukaran data yang terenkripsi antar pengguna GnuPG.

C0. Generate Revocation Key untuk Master Key

Sebelum melakukan ekspor data master key untuk pencadangan, lebih dahulu lakukan pembuatan kunci pembatalan masa berlaku atau revocation key untuk master key tersebut. Revocation key ini dibuat untuk membatalkan masa berlaku master key utama, jika master key tersebut berhasil dijebol atau dikuasai oleh pihak lain yang bukan pemiliknya. Atau istilah sederhananya, master key utama telah dicuri oleh orang.
Cara untuk membuat revocation key yaitu dengan memasukkan perintah :

gpg -v -a -o [nama file revocation key]  --generate-revocation [UID key]

Keterangan pada perintah tersebut yaitu -v (verbose) untuk menampilkan proses yang sedang berjalan, -a (armor) untuk melindungi kode revocation dengan kode ASCII acak yang sulit dibaca, -o untuk menentukan nama data yang berisi kode ASCII revocation key, perintah --generate-revocation untuk membuat kunci pembatalan, dan nilai UID kunci yang dapat diperoleh dengan perintah --gpg -K . Pada contoh kali ini, urutan penulisannya dan proses yang sedang berjalan yaitu :

$ gpg -k
/home/kucingmumu/.gnupg/pubring.kbx
-----------------------------------
pub rsa4096 2019-05-21 [C]
E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
uid [ultimate] TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
uid [ultimate] KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
sub rsa4096 2019-05-22 [S] [expires: 2022-05-21]
sub rsa4096 2019-05-22 [E] [expires: 2024-05-20]
sub rsa4096 2019-05-22 [A] [expires: 2024-05-20]
$ gpg -v -a -o revkey_kunciteskunci.asc --generate-revocation TesTesKuncisec rsa4096/EC0C103F84E51148 2019-05-21 TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.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:
> Kunci ini telah diambil orang lain, dan berhasil dibobol, jangan gunakan kembali
>
Reason for revocation: Key has been compromised
Kunci ini telah diambil orang lain, dan berhasil dibobol, jangan gunakan kembali

Is this okay? (y/N) y
gpg: writing to 'revkey_kunciteskunci.asc'
gpg: pinentry launched (21225 gnome3 1.1.0 /dev/pts/1 xterm-256color :0.0)
gpg: RSA/SHA256 signature from: "EC0C103F84E51148 TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>"
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!

Pada tahapan proses di atas, kita memilih pilihan nomor 1 yang berisi alasan revocation “Key has been compromised” . Kemudian masukkan alasannya untuk menjelaskan kenapa kunci ini dibatalkan menjadi kadaluarsa. Lakukan konfirmasi dengan menekan tombol Y dan Enter untuk menyetujui pilihan. Aplikasi GnuPG akan membuat kunci pembatalan revocation key dalam bentuk file bernama “revkey_kunciteskunci.asc” .

Jika hal kunci utama benar benar ingin dibatalkan karena peristiwa di atas, pengguna cukup melakukan impor kunci revocation key ini ke GnuPG keyring. Kemudian lanjutkan dengan mengirim revocation key tersebut ke keyserver publik yang tersedia di internet. Hal ini bertujuan agar orang yang mencuri master key tersebut tidak dapat menggunakannya karena master key telah dibatalkan masa berlakunya dengan revocation key. Langkah untuk pembatalan master key dengan revocation key dapat dilihat lebih lengkap pada referensi artikel berikut ini.

C1. Ekspor Private Key

Setelah pembuatan revocation key selesai, lanjutkan dengan mengekspor data private key milik master key ke dalam bentuk data file. Perintah yang dijalankan yaitu :

gpg -v -a -o [nama file secret key] --export-secret-key [UID kunci]

Pada latihan kali ini, kita akan mengekspor secret key dari UID TesTesKunci yang merupakan identitas utama master key yang tersimpan. UID kunci didapatkan dengan menjalankan perintah gpg -K sebelumnya. Kemudian secret key ini ditulis dan disamarkan dalam kode ASCII, dan ditulis menjadi data secretkey_testeskunci.asc .

$ gpg -v -a -o secretkey_testeskunci.asc --export-secret-key TesTesKunci
gpg: writing to 'secretkey_testeskunci.asc'
gpg: key FC3F77A8767D57330671587F7D9FE3520EC216AE: asking agent for the secret parts
gpg: pinentry launched (22432 gnome3 1.1.0 /dev/pts/1 xterm-256color :0.0)
gpg: key 3EE595E5EC5BF3278AC77A9AF6A74CC3DBD0F694: asking agent for the secret parts
gpg: key 1402ABFFE029AE27E1B2681232B7F58DC1AC2AD2: asking agent for the secret parts
gpg: key 4F4391236FCC30591D38B4C2CFD06C601A28869E: asking agent for the secret parts

Kita akan dimintai untuk mengisi kata sandi atau password dari master key untuk melanjutkan proses ekspor data secret key. Masukkan kata sandi yang kita setel sebagai pengaman master key ketika proses pembuatan master key ini. Aplikasi lalu melanjutkan proses ekspor data secret key menjadi bentuk data berekstensi .asc yang bernama secretkey_testeskunci.asc .

C2. Ekspor Public Key

Langkah selanjutnya adalah mengekspor data public key menjadi bentuk file. Public key ini nanti yang akan disebarkan atau dipublikasikan ke orang-orang yang dituju. Orang lain yang memiliki public key milik kita ini , memiliki kemampuan untuk mengirim data terenkripsi kepada kita kembali. Kita juga dapat membuka data terenkripsi yang dikirimkan tersebut selama kita memiliki public key pengirim data tersebut. Dengan demikian, orang dapat saling bertukar data terenkripsi dan membuka data tersebut, selama orang-orang itu saling memiliki public key yang telah diimpor ke aplikasi GnuPG.

Langkah untuk pembuatan public key ini dilakukan dengan menjalankan perintah :

gpg -v -a -o [nama file public key] --export [UID kunci]

Pada contoh kali ini, kita akan mengekspor data public key dengan UID TesTesKunci, sehingga perintah yang dijalankan yaitu :

gpg -v -a -o publickey_testeskunci.asc --export TesTesKunci

Public key akan ditulis menjadi data file berformat ASCII yaitu .asc , dengan nama publickey_testeskunci.asc .

Proses pembuatan public key

Public key ini dapat kita sebar luaskan secara offline ataupun online kepada orang-orang yang dituju. Secara offline bisa dengan saling bertukar public key dengan media penyimpanan offline seperti flash drive dan micro SD. Sedangkan secara online bisa dengan mempublikasikan kunci publik ini melalui keyserver khusus public key.
Untuk mempublikasikan public key ini kebanyak orang sekaligus melalui keyserver, bisa dengan cara perintah berikut :

gpg --keyserver [alamat keyserver] --send-keys [UID key server]

Pada contoh kali ini, kita akan mencoba mempublikasikan public key ke keyserver online milik MIT yang beralamatkan di pgp.mit.edu . Perintahnya adalah sebagai berikut.

gpg --keyserver pgp.mit.edu --send-key E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148

Proses pengiriman public key akan berlangsung seperti gambar di bawah ini.

Mengirim public key kepada keyserver MIT

Kita dapat menguji coba apakah kunci publik ini telah ada di server atau belum dengan menjalankan perintah :

gpg --keyserver [alamat keyserver] --search-keys [UID kunci]

Pada contoh kali ini, kita akan mencari public key yang telah kita publikasikan sebelumnya dengan UID yang sudah kita ketahui.

$ gpg --keyserver pgp.mit.edu --search-keys E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
gpg: data source: http://pgp.mit.edu:11371
(1) TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
4096 bit RSA key EC0C103F84E51148, created: 2019-05-21
Keys 1-1 of 1 for "E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148". Enter number(s), N)ext, or Q)uit > Q

Jika keluar hasilnya seperti di atas, maka public key kita telah berhasil dipublikasikan di keyserver tersebut. Pengguna dan penerima lain yang dituju dapat dengan mudah mengimpor public key kita dengan memilih pilihan 1 untuk melanjutkan proses impor public key. Atau untuk membatalkan impor public key dari keyserver, masukkan pilihan Q.

Pencarian public key pada keyserver publik

C3. Ekspor Sub Key

Langkah terakhir adalah melakukan ekspor data private secret subkey ke dalam data terpisah. Private subkey ini yang akan sering dipakai untuk proses penandatangan, enkripsi, dan dekripsi data. Sedangkan untuk private key dan master key utama, tidak akan kita gunakan untuk aktivitas tersebut, dan akan kita simpan di tempat yang aman dan rahasia. Perintah untuk ekspor subkey ini yaitu :

gpg -v -a -o [nama file subkey] --export-secret-subkeys [UID kunci] 

Pada contoh kali ini, kita akan mengekspor subkey dari master key menjadi data terpisah, dengan nama secretsubkey_testeskunci.asc .

$ gpg -v -a -o secretsubkey_testeskunci.asc --export-secret-subkeys E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148 
gpg: writing to 'secretsubkey_testeskunci.asc'
gpg: key 3EE595E5EC5BF3278AC77A9AF6A74CC3DBD0F694: asking agent for the secret parts
gpg: pinentry launched (26084 gnome3 1.1.0 /dev/pts/1 xterm-256color :0.0)
gpg: key 1402ABFFE029AE27E1B2681232B7F58DC1AC2AD2: asking agent for the secret parts
gpg: key 4F4391236FCC30591D38B4C2CFD06C601A28869E: asking agent for the secret parts
Proses ekspor data subkey

Setelah proses ekspor data subkey ini berhasil, maka akan terbentuk menjadi sebuah data file dengan format .asc . Dengan demikian, hasil dari proses ekspor ini, kita memiliki empat buah data. Yaitu data file kunci untuk revocation key, private secret key, public key, dan private subkey.

C4. Review Hasil Ekspor Data Key

Hasil ekspor data dari langkah sebelumnya akan membuat menjadi beberapa data. Seperti yang terlihat di tangkapan gambar di bawah ini.

Hasil ekspor data key di dalam master data

Dari gambar di atas, terlihat bahwa ada data publickey_testeskunci.asc , revkey_kunciteskunci.asc , secretkey_testeskunci.asc , dan secretsubkey_testeskunci.asc . Semua data kunci ini perlu disimpan ke tempat yang aman dan hanya pemiliknya saja yang dapat mengaksesnya. Kecuali data publickey_testeskunci.asc yang bisa diberikan ke pengguna lain untuk melakukan proses pertukaran data. Public key dapat diberikan ke pengguna lain baik melalui media offline atau media online dengan layanan keyserver online.

Daftar kunci yang telah diekspor ke dalam folder kuncidigital

C5. Amankan Private Key

Untuk penggunaan sehari-hari, jangan gunakan master key secara langsung. Tapi gunakan saja subkey untuk proses enkripsi, dekripsi, dan penandatangan. Ini untuk mencegah master key tersimpan di perangkat utama (komputer atau laptop) yang berpotensi bisa hilang dan rusak.

Lakukan penyimpanan data private secret key , public key, revocation key , dan private subkey pada media fisik yang aman. Seperti media USB Flash Drive , MicroSD, dan Harddisk Eksternal yang tahan banting dan air. Pengguna dapat juga menyimpan cadangan kunci tersebut ke dalam media CD dan DVD. Setelah cadangan kunci ini dimasukkan ke dalam media penyimpanan fisik tersebut, segera simpan ke tempat aman dan mudah dijangkau, yang hanya pembuatnya saja yang mengetahui.

Beberapa orang ada yang menyimpan media penyimpanan tersebut di brankas yang terkunci. Ada juga orang yang menyimpannya di dalam amplop tersegel yang dititipkan ke jasa penyimpanan benda berharga di bank.

Kita dapat juga menyimpan cadangan data kunci tersebut ke media online yang aman dan terpercaya. Yang mana hanya pembuat itu saja yang tahu lokasinya. Misalnya dengan menyisipkan data kunci ini ke dalam media gambar dengan steganografi, lalu menyimpan gambar tersebut ke layanan online penyimpanan gambar. Memang terdengar cukup ekstrim, tetapi hal ini penting karena cadangan master key tersebut adalah data penting yang mewakili identitas pembuatnya dalam proses enkripsi data. Dan tidak boleh jatuh ke orang lain yang tidak berhak, untuk menghindari penyalahgunaan data-data kunci tersebut.

Untuk penulis sendiri, penulis menyimpan cadangan master key ini ke dalam media digital, yaitu disisipkan ke dalam musik dan foto, lalu mengunggahnya ke media online untuk disimpan.

C6. Hapus Semua Data Master Key

Kunci-kunci data yang tersimpan di master key telah kita buat cadangannya dalam bentuk data ASCII. Langkah berikutnya adalah kita menghapus semua data master key yang tersimpan di database aplikasi GnuPG. Pertama adalah menampilkan daftar kunci publik dengan gpg -k . Lalu tampilkan juga daftar kunci private secret key dengan gpg -K .

Menampilkan daftar kunci yang disimpan

Kita akan menghapus kunci public key dan private secret key dengan UID bernama TesTesKunci . Langkah pertama adalah menghapus private secret key dengan perintah :

$ gpg --delete-secret-key [UID kunci pengguna]

Proses akan berlanjut dengan konfirmasi beberapa kali untuk penghapusan kunci private secret key . Seperti yang terlihat pada teks proses di Terminal yang terlihat di bawah ini.

$ gpg --delete-secret-key E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
sec rsa4096/EC0C103F84E51148 2019-05-21 TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>Delete this key from the keyring? (y/N) y
This is a secret key! - really delete? (y/N) y

Kemudian lanjutkan dengan menghapus kunci public key dengan UID tertentu. Yang dalam latihan ini adalah UID dengan nama TesTesKunci. Jalankan perintah ini untuk menghapus public key dan jangan lupa untuk tekan Enter.

gpg --delete-key [UID kunci pengguna]

Proses selanjutnya adalah akan terlihat sebagai perikut.

$ gpg --delete-key E0A0DCAD9B79F3C44D2F6717EC0C103F84E51148
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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.
pub rsa4096/EC0C103F84E51148 2019-05-21 TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>Delete this key from the keyring? (y/N) Y
Menghapus public key dari media penyimpanan GnuPG

Setelah menjalan kedua perintah tersebut, maka data private secret key dan public key sudah terhapus dari media penyimpanan (keyring) milik GnuPG. Kita dapat mengeceknya dengan menampilkan daftar kunci yang kini sudah kosong.

Tidak ada kunci yang tersimpan lagi setelah dihapus semua

C7. Impor Sub Key Kembali

Langkah berikutnya adalah mengimpor kembali data subkey ke dalam media penyimpanan GnuPG . Subkey ini akan kita pakai untuk penandatangan , enkripsi, dan dekripsi data. Penggunaan subkey ini juga membuat penggunaan master key menjadi lebih aman, karena kunci subkey ini merupakan kunci duplikat dari kunci utama. Namun kunci duplikat ini bersifat mudah dilenyapkan dengan kunci revocation key khusus subkey. Dan pembuatan revocation key subkey ini dapat dengan mudah dilakukan dengan menggunakan master key utama.

Dengan adanya subkey ini, maka kunci utama master key dapat tetap tersimpan aman di tempat penyimpanan yang lain, tidak tersimpan di komputer yang sering kita pakai untuk enkripsi dan dekripsi. Kunci subkey ini yang harusnya tersimpan di media penyimpanan komputer yang sering kita pakai. Bisa juga kita menyimpan subkey ini di media USB Drive khusus yang dapat sering kita bawa kemana-mana.

Pada latihan ini, kita akan mengimpor kembali kunci secret subkey yang berisi data dengan UID bernama TesTesKunci. Anggap saja bahwa kunci-kunci yang lain telah tersimpan di tempat rahasia, dan hanya disisakan kunci subkey ini untuk digunakan.

Kunci subkey yang akan sering dipakai

Langkah yang dilakukan adalah menulis perintah ini ke Terminal dan tekan enter .

gpg -v --import [nama data file kunci subkey]

Proses lebih lanjut akan tampak seperti gambar di bawah ini.

Proses impor kunci subkey ke dalam keyring GnuPG

Jika proses impor kunci subkey ini berhasil, maka akan muncul data subkey ini di dalam daftar key dengan perintah gpg -k . Seperti yang terlihat pada gambar di bawah ini.

Daftar kunci yang telah berhasil diimpor ke dalam keyring GnuPG

Namun kunci subkey ini masih berstatus unknown untuk level kepercayaannya (trust level) di dalam database keyring GnuPG. Untuk mengubah status kepercayaan menjadi ultimate , kita perlu menyunting parameter di dalam subkey tersebut. Caranya adalah dengan menjalankan perintah gpg --expert --edit-key [UID key] .

Edit paramater kunci dari subkey

Kemudian masukkan perintah trust pada konsol gpg> yang tersedia. Nanti akan muncul pilihan untuk menyetel level kepercayaan dari urutan 1 sampai 5 (paling percaya atau ultimate). Kita pilih saja pilihan 5 untuk menyetel level kepercayaan menjadi level 5 atau ultimate. Urutan prosesnya dapat dilihat pada catatan teks Terminal di bawah ini.

pub  rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: unknown validity: unknown
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
ssb rsa4096/C22225A714A04F77
created: 2019-05-22 expires: 2024-05-20 usage: A
[ unknown] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
[ unknown] (2) KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
gpg> trust
pub rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: unknown validity: unknown
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
ssb rsa4096/C22225A714A04F77
created: 2019-05-22 expires: 2024-05-20 usage: A
[ unknown] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
[ unknown] (2) KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu
Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) Y
pub rsa4096/EC0C103F84E51148
created: 2019-05-21 expires: never usage: C
trust: ultimate validity: unknown
ssb rsa4096/EC7E5FBE4920B752
created: 2019-05-22 expires: 2022-05-21 usage: S
ssb rsa4096/C38854EAD3DF0DBF
created: 2019-05-22 expires: 2024-05-20 usage: E
ssb rsa4096/C22225A714A04F77
created: 2019-05-22 expires: 2024-05-20 usage: A
[ unknown] (1). TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>
[ unknown] (2) KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>
Please note that the shown key validity is not necessarily correct
unless you restart the program.
gpg> save

Kemudian setelah mengubah status kepercayaan menjadi 5 (ultimate), simpan kunci yang telah diubah ini dengan mengetik save pada konsol gpg> yang tersedia. Usahakan untuk menyetel level kepercayaan menjadi level 5 (ultimate) hanya pada private secret key, public key, dan private subkey milik kita sendiri. Sedangkan untuk public key dari orang lain, kita tidak perlu menyetel level kepercayaan trust level ini lebih dari level 3 (i trust marginally). Setelah disimpan, kita dapat mengecek statusnya dengan menggunakan perintah mengecek daftar kunci gpg -k atau gpg -K di Terminal.

Tampilan daftar kunci yang status kepercayaan menjadi Ultimate

Subkey yang ditambahkan pun telah dipercaya dengan level tinggi ultimate, dan bisa dipakai dengan lancar untuk enkripsi dan penandatangan data. Subkey ini dapat dipakai tanpa perlu menggunakan master key utama. Hanya data duplikat saja dari master key utama ini yang ikut di dalam subkey. Kita dapat melihatnya dengan memasukkan perintah di Terminal gpg -K atau gpg --list-private-keys untuk melihat daftar kunci private secret key.

Isi daftar private secret key

Pada tampilan di atas, terlihat bahwa data private secret key di dalam master key utama sudah tidak ada. Ditandai dengan parameter sec# yang berarti data private secret key di dalamnya hanya duplikat. Private secret key yang hanya duplikat ini tidak dapat dipakai untuk operasi penyuntingan data kunci, seperti membuat revocation key, membuat subkey baru, mengubah parameter kadaluarsa expire dari subkey, dst. Untuk mengubah parameter yang disebutkan itu, memerlukan private secret key asli yang mana sudah tersimpan aman di suatu tempat yang diketahui oleh pemiliknya. Bandingkan dengan gambar berikut ini, dimana private secret key masih tersimpan di dalam keyring database GnuPG dan belum dihapus dari daftar keyring.

Master key dengan tiga buah subkey dengan fungsi masing-masing

Dengan demikian, keamanan kunci master key tetap baik karena jika subkey ini jatuh ke tangan orang yang tidak berhak, orang tersebut tidak dapat mengubah-ubah data di dalam subkey tersebut karena tidak memiliki private secret key utamanya. Pemilik asli yang memiliki master key dapat membuat revocation key untuk subkey ini dengan mudah. Tautan untuk membuat revocation subkey ini dapat dilihat di link berikut ini.

Contoh eksekusi membuat revocation key untuk subkey ini dapat dilihat di bawah ini.

$ gpg2 --edit-key 48CCEEDF
...
pub 4096R/48CCEEDF created: 2015-12-11 expires: 2016-12-10 usage: SC
trust: ultimate validity: ultimate
sub 4096R/8E93D277 created: 2015-12-11 expires: 2016-12-10 usage: E
sub 4096R/A85EA103 created: 2015-12-11 expires: 2016-12-10 usage: S
[ultimate] (1). John Doe <jdoe@doeworks.ch>

gpg> key 2

pub 4096R/48CCEEDF created: 2015-12-11 expires: 2016-12-10 usage: SC
trust: ultimate validity: ultimate
sub 4096R/8E93D277 created: 2015-12-11 expires: 2016-12-10 usage: E
sub* 4096R/A85EA103 created: 2015-12-11 expires: 2016-12-10 usage: S
[ultimate] (1). John Doe <jdoe@doeworks.ch>

gpg> revkey
Do you really want to revoke this subkey? (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
Your decision? 1
...
gpg> save
$ gpg --keyserver hkp://keys.gnupg.net --send-key 48CCEEDF

C8. Tips dan Trik Master Key GnuPG

Beberapa tips dan trik yang penulis pakai untuk penyimpanan GnuPG Master Key ini yaitu :

  • Simpan data backup untuk master key seperti private secret key dan revocation master key di media penyimpanan offline yang tersembunyi dan aman. Jika ingin menyimpan di media online, sisipkan terlebih dahulu ke file audio atau gambar dengan teknik steganografi.
  • Jangan simpan data backup master key di komputer utama. Hapus master key dari database keyring GnuPG setelah pembuatan backup data dan subkey.
  • Simpan public key dan subkey ke media penyimpanan offline yang bisa dibawa kemana-mana dengan mudah. Impor data public key dan subkey ke komputer yang akan memakainya. Setelah tidak dipakai, maka subkey ini cukup dihapus kembali untuk data public key dan subkey nya.
  • Usahakan untuk menyetel level kepercayaan menjadi level 5 (ultimate) hanya pada private secret key, public key, dan private subkey milik kita, yaitu yang benar-benar kita miliki dan telah dibuat oleh kita sendiri. Sedangkan untuk public key dari orang lain, kita tidak perlu menyetel level kepercayaan trust level ini lebih dari level 3 (i trust marginally)
  • Jika ingin membagikan public key ke pengguna yang banyak, cukup ekspor ke keyserver yang disediakan oleh provider yang terpercaya. Misalnya keyserver dari MIT (https://pgp.mit.edu/) atau dari Ubuntu (https://keyserver.ubuntu.com/) .

D. Latihan Penggunaan GnuPG

Pada latihan berikut ini, kita akan mencoba untuk melakukan proses enkripsi data dari suatu dokumen berbentuk data PDF. Kemudian mencoba untuk melakukan proses dekripsi data itu kembali.

(1) Enkripsi Data

Langkah pertama adalah menyiapkan data yang akan di enkripsi. Data yang akan dienkripsi bisa beraneka macam, yaitu bisa berbentuk teks, dokumen pdf, gambar, foto, audio, data yang dikompresi zip atau rar, dan masih banyak lagi. Pada contoh artikel kali ini, kita akan menggunakan data dokumen berformat PDF. Dokumen yang dipakai pada contoh artikel ini bernama Dokumen_Rahasia_Contoh.pdf .

Contoh dokumen PDF yang akan dienkripsi

Data dokumen ini akan dienkripsi dengan algoritma enkripsi, diberikan pengaman dengan kode ASCII, dienkripsi untuk pengguna tertentu, dan dijadikan ke dalam bentuk data teks ASCII.
Perintah yang dimasukkan untuk metode enkripsi ini dapat dilihat di bawah ini.

gpg -v -a -s -e --cipher-algo [algoritma cipher enkripsi] -u [UID private key pembuat] -r [UID public key penerima] -o [nama file dokumen yang dienkripsi] [dokumen yang akan dienkripsi]

Keterangan dari perintah tersebut yaitu :
-v (verbose) untuk menampilkan pesan urutan proses ketika enkripsi sedang berjalan.
-a (armor) untuk mengamankan data yang telah dienkripsi ke bentuk kode ASCII yang susah dibaca oleh manusia biasa.
-s (sign) memberikan tanda tangan pada data yang akan dienkripsi.
-e (encrypt) melakukan enkripsi pada data dengan metode algoritma yang dipilih.
— cipher-algo menentukan algoritma pengkodean enkripsi pada data.
-u (user local) untuk menentukan pilihan kunci pengaman dengan UID private secret key yang akan dipakai pada enkripsi dan tanda tangan.
-r (recipient) untuk menentukan pilihan UID public key milik pengguna yang akan menerima dan membuka data terenkripsi yang telah dibuat.
-o (output) menentukan nama file terenkripsi yang akan ditulis.

Kita mulai dengan menjalankan perintah tersebut untuk proses enkripsi data. Perintahnya adalah sebagai berikut.

gpg -v -a -s -e --cipher-algo aes256 -u TesTesKunci -r TesTesKunci -o Dokumen_Rahasia_Contoh.pdf.asc Dokumen_Rahasia_Contoh.pdf

Keterangan dari perintah di atas yaitu kita akan mengenkripsi data Dokumen_Rahasia_Contoh.pdf dengan metode enkripsi AES256 , dengan kunci private secret key yang dipakai adalah UID TesTesKunci, dan penerima enkripsi data yang dapat membukanya adalah pengguna dengan UID public key TesTesKunci, dan ditulis ke dalam bentuk file Dokumen_Rahasia_Contoh.pdf.asc yang berbentuk data ASCII.

Proses enkripsi yang terlihat di Terminal

Jika lihat folder tempat penyimpanan hasil enkripsi data ini akan terdapat sebuah file baru berformat .asc . Jika file .asc ini dibuka dengan text editor, maka akan menampilkan tulisan acak yang dilindungi dengan enkripsi dan kode ASCII.

Hasil data yang telah dienkripsi

Data terenkripsi ini hanya dapat dibuka oleh pengguna yang memiliki public key dan private secret key yang dipakai sebagai kombinasi enkripsi data tersebut. Orang lain yang tidak memiliki public key dan private secret key yang dipakai untuk kombinasi enkripsi data ini, maka orang tersebut tidak dapat membuka enkripsi data tersebut. Sangat aman sekali bukan ?

(2) Penandatanganan Kunci Terpisah

Data terenkripsi tersebut sudah sangat aman untuk kita simpan dan transfer ke media yang lain. Tetapi ada opsi tambahan lain untuk menambah validitas data yang terenkripsi tersebut. Yaitu dengan menambahkan sebuah tanda tangan terpisah yang dapat dipakai untuk verifikasi tambahan dari data terenkripsi. Data tanda tangan ini berbentuk data terpisah yang biasanya berekstensi .sig . Perintah yang dipakai yaitu :

gpg -v -a -u [UID private secret key] -r [UID public key] -o [nama file untuk signature] --detach-sig [nama file yang akan dibuat signature-nya]

Perintah dan opsi yang dipakai dari perintah di atas hampir sama dengan keterangan perintah untuk enkripsi. Hanya saja disini perintah yang dipakai yaitu --detach-sig untuk pembuatan tanda tangan terpisah dari suatu file yang telah dienkripsi.
Kali ini kita akan membuat tanda tangan signature terpisah dari data Dokumen_Rahasia_Contoh.pdf.asc yang terenkripsi. Perintah yang dijalankan yaitu :

gpg -v -a -u TesTesKunci -r TesTesKunci -o Dokumen_Rahasia_Contoh.pdf.asc.sig --detach-sig Dokumen_Rahasia_Contoh.pdf.asc

Dalam prosesnya kita akan diminta kata sandi atau password untuk membuka private subkey yang tersimpan di dalam database keyring GnuPG. Hasil dari perintah tersebut akan membuat suatu file tanda tangan berformat .sig yang dapat dilihat pada gambar di bawah ini.

Proses enkripsi dan hasilnya

Jika kita buka isi data tandatangannya, akan berbentuk kode ASCII rahasia seperti gambar dibawah ini.

Isi kode tandatangan dari file terenkripsi

Data tanda tangan ini harus selalu disertakan bersama dengan data terenkripsi yang ditandatangani. Dengan demikian, jika kita ingin mengirim data terenkripsi tersebut, maka sertakan juga data .sig nya untuk validasi tambahan. Misalnya file Dokumen_Rahasia_Contoh.pdf.asc harus selalu disertakan bersama Dokumen_Rahasia_Contoh.pdf.asc.sig jika ingin dikirim atau disimpan ke tempat lain.

Pembuat enkripsi ataupun penerima data terenkripsi yang berhak, dapat melakukan pengecekan keaslian data tersebut, apakah data tersebut benar atau tidak. Jika data mengalami perubahan dan bersifat palsu, maka akan segera diketahui ketika proses pengecekan tanda tangan dengan .sig nya. Perintah Terminal untuk pengecekan validitas data dan tandatangannya yaitu:

gpg --verify [data tanda tangan .sig] [data yang telah ditandatangani]

Pada latihan kali ini, kita akan mengecek keaslian data Dokumen_Rahasia_Contoh.pdf.asc dengan file tandatangannya yaitu Dokumen_Rahasia_Contoh.pdf.asc.sig . Maka perintah yang dijalankan yaitu :

gpg --verify Dokumen_Rahasia_Contoh.pdf.asc.sig Dokumen_Rahasia_Contoh.pdf.asc

Hasilnya dapat dilihat pada gambar di bawah ini.

Hasil pengecekan tanda tangan yang hasilnya baik dan asli

Hasil pengecekan tanda tangan digital .sig dengan file yang ditandatangani ini pada gambar di atas menunjukkan hasil yang baik. Ditandai dengan tulisan “Good signature from <nama UID yang menandatangani>” . Ini menunjukkan bahwa file terenkripsi Dokumen_Rahasia_Contoh.pdf.asc ini masih asli dan belum diutak-atik oleh orang lain.

Dokumen Telah Diubah dan Dimodifikasi ?
Lalu bagaimana jika data Dokumen_Rahasia_Contoh.pdf.asc telah diutak-atik dan diubah salah satu karakternya sehingga menjadi data palsu terlihat asli? Kita coba dengan langkah berikut ini.
Buka data Dokumen_Rahasia_Contoh.pdf.asc dengan text editor. Lalu hapus satu karakter atau bisa juga beberapa baris teks acak sesuka anda. Kemudian simpan kembali data ini dengan format .asc .

Hapus beberapa baris data untuk membuat data palsu terlihat asli

Selanjutnya kita lakukan verifikasi data lagi untuk dokumen palsu terenkripsi tersebut dengan data tanda tangan digitalnya. Jalankan perintah ini kembali untuk melakukan verifikasi data dan kita lihat hasilnya.

gpg --verify Dokumen_Rahasia_Contoh.pdf.asc.sig Dokumen_Rahasia_Contoh.pdf.asc
Hasil verifikasi dokumen yang telah diubah dan palsu

Hasil verifikasinya akan menunjukkan bahwa dokumen tersebut memiliki tanda tangan yang buruk. Seperti yang tampak pada gambar di atas, hasil verifikasi dokumen dengan tandatangannya adalah “BAD signature from <nama penandatangan>…” . Ini menandakan bahwa dokumen yang diverifikasi adalah dokumen yang sudah diubah dan bisa dianggap palsu. Dokumennya tidak sesuai dengan data tandatangan yang mendampinginya, sehingga status verifikasinya adalah bad signature.

(3) Dekripsi Data Terenkripsi

Data yang telah dienkripsi dapat dibuka dan disembuhkan kembali dengan menggunakan kombinasi private secret key dan public key yang dipakai sebagai kombinasi enkripsi tersebut. Pada langkah latihan sebelumnya, kita melakukan enkripsi dengan kunci private secret key dan public key milik kita sendiri. Dengan demikian untuk dekripsi data yang dienkripsi dengan kunci tersebut bisa langsung dilakukan.
Berbeda jika data tersebut diterima dari orang lain yang sudah kita ajak untuk bertukar data dengan enkripsi. Kita harus memiliki public key milik orang tersebut. Kemudian orang tersebut harus memiliki kunci public key milik kita sendiri. Metode ini akan kita jelaskan pada sub bab berikutnya di dalam artikel ini.

Perintah untuk melakukan dekripsi data yaitu :

gpg -v -d -u [UID private key untuk decrypt data] -o [nama data hasil enkripsi] [data terenkripsi yang akan di decrypt]

Pada contoh kali ini , kita akan mendekripsi dokumen berformat PDF yang telah kita buat sebelumnya. Jangan lupa untuk menghapus data Dokumen_Rahasia_Contoh.pdf yang menjadi sumber enkripsi, sehingga yang tersisa adalah data terenkripsi .asc dengan tanda tangan .sig nya. Dengan demikian perintah yang dijalankan menjadi seperti ini.

gpg -v -d -u TesTesKunci -o Dokumen_Rahasia_Contoh.pdf Dokumen_Rahasia_Contoh.pdf.asc
Hasil dekripsi data terenkripsi menjadi data pdf bentuk aslinya

Jika berhasil dijalankan perintahnya, maka akan dihasilkan sebuah data yang telah tidak dienkripsi. Yaitu data Dokumen_Rahasia_Contoh.pdf yang sebelumnya kita enkripsi . Untuk menguji apakah data berhasil dikembalikan dari enkripsinya dan data bersifat utuh, silahkan buka kembali data Dokumen_Rahasia_Contoh.pdf dengan aplikasi PDF di perangkat komputer.

$ gpg -v -d -u TesTesKunci -o Dokumen_Rahasia_Contoh.pdf Dokumen_Rahasia_Contoh.pdf.asc
gpg: public key is C38854EAD3DF0DBF
gpg: using subkey C38854EAD3DF0DBF instead of primary key EC0C103F84E51148
gpg: pinentry launched (9237 gnome3 1.1.0 /dev/pts/1 xterm-256color :0.0)
gpg: using subkey C38854EAD3DF0DBF instead of primary key EC0C103F84E51148
gpg: encrypted with 4096-bit RSA key, ID C38854EAD3DF0DBF, created 2019-05-22
"TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>"
gpg: AES256 encrypted data
gpg: original file name='Dokumen_Rahasia_Contoh.pdf'
gpg: Signature made Mon 27 May 2019 11:35:07 AM WIB
gpg: using RSA key 4302AC808065A3DED1EA473FEC7E5FBE4920B752
gpg: issuer "testeskunci@mail.com"
gpg: using subkey EC7E5FBE4920B752 instead of primary key EC0C103F84E51148
gpg: using pgp trust model
gpg: Good signature from "TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>" [ultimate]
gpg: aka "KucingTes (Identitas tambahan untuk kunci utama) <kucingtes@mail.com>" [ultimate]
gpg: binary signature, digest algorithm SHA256, key algorithm rsa4096

E. Penggunaan Untuk Pertukaran Data Dengan Pengguna Lain

Selain untuk enkripsi data yang disimpan untuk keperluan sendiri, kita dapat juga melakukan enkripsi data untuk dikirim ke orang lain. Orang lain dalam hal ini adalah orang yang berhak dan diizinkan mendapat akses untuk berbagi data dari kita. Kedua orang yang bertukar data ini wajib memiliki private secret key yang dibuat di masing-masing pengguna. Pengguna yang bertukar data wajib memiliki public key dari masing-masing pengguna yang melakukan pertukaran data.

Pada latihan kali ini, kita akan mencoba melakukan pertukaran data antar dua pengguna di perangkat komputer yang berbeda. Pengguna pertama kita beri nama Pengguna A dengan nama UID kuncinya adalah TesTesKunci. Sedangkan pengguna kedua kita beri nama Pengguna B dengan nama UID kuncinya adalah KucingTester. Tahap demi tahap yang dilakukan untuk pertukaran data antar dua pengguna dapat dilihat pada sub bab berikut ini.

E1. Membuat Public Key

Pengguna A dan Pengguna B membuat kunci master key yang berisi private secret key, public key, revocation key, private subkey, dan ekspor data master key tersebut. Pengguna A membuat kunci master key dengan nama UID TesTesKunci. Pengguna B membuat kunci master key dengan nama UID KucingUjiCoba. Langkah-langkahnya sama dengan langkah yang telah disebutkan pada latihan di atas.

Pengguna A dengan UID master key TesTesKunci
Pengguna B dengan UID master key KucingTester

E2. Bertukar Public Key Antar Pengguna yang Bertukar Data

Setelah selesai melakukan pembuatan master key di langkah sebelumnya, lanjutkan dengan mengekspor data public key ke dalam bentuk data .asc .

Pengguna A melakukan ekspor public key
Pengguna B melakukan ekspor public key

Kemudian pengguna A dan pengguna B bertukar data public key ini. Pertukaran bisa melalui media online ataupun media offline. Pengguna A memiliki data public key milik pengguna B. Kemudian pengguna B memiliki data public key dari pengguna A. Lakukan proses impor public key ke dalam masing-masing database keyring aplikasi GnuPG di masing-masing perangkat.

Pengguna B melakukan impor public key dari pengguna A (TesTesKunci)
Public key milik pengguna A yang telah masuk ke database keyring GnuPG pengguna B

Berikut adalah tampilan untuk proses impor public key dari pengguna B (KucingTester) ke database keyring GnuPG milik pengguna A.

Pengguna A melakukan impor public key dari pengguna B (KucingTester)
Public key milik pengguna B yang telah masuk ke database keyring GnuPG milik pengguna A

E3. Enkripsi di Pengguna A

Pengguna A akan mengenkripsi data dokumen PDF yang bernama Dokumen_Rahasia_PgA.pdf yang akan dikirimkan kepada Pengguna B. Pengguna A menjalankan perintah enkripsi data berikut, dimana UID penerima atau recipient (-r) nya adalah UID public key milik pengguna yang dituju.

$ gpg -v -a -s -e --cipher-algo aes256 -u TesTesKunci -r KucingTester -o Dokumen_Rahasia_PgA.pdf.asc Dokumen_Rahasia_PgA.pdf 
gpg: using subkey EC7E5FBE4920B752 instead of primary key EC0C103F84E51148
gpg: using pgp trust model
gpg: using subkey 4C42C9074E9E04AC instead of primary key 0B98A224B4B7FFCD
gpg: 4C42C9074E9E04AC: There is no assurance this key belongs to the named user
sub rsa4096/4C42C9074E9E04AC 2019-05-25 KucingTester (Kunci untuk mengunci kenangan) <kucingtes@mail.com>
Primary key fingerprint: 2ECF FD2D 8077 5E29 4F8B D3E8 0B98 A224 B4B7 FFCD
Subkey fingerprint: D8F0 7717 CD60 55BB A101 1138 4C42 C907 4E9E 04AC
It is NOT certain that the key belongs to the person named
in the user ID. If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N) y
gpg: writing to 'Dokumen_Rahasia_PgA.pdf.asc'
gpg: RSA/AES256 encrypted for: "4C42C9074E9E04AC KucingTester (Kunci untuk mengunci kenangan) <kucingtes@mail.com>"
gpg: pinentry launched (20431 gnome3 1.1.0 /dev/pts/1 xterm-256color :0.0)
gpg: RSA/SHA256 signature from: "EC7E5FBE4920B752 TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>"
Enkripsi data dengan public key milik pengguna B , dan ditandatangani dengan master key pengguna A.

Hasil dari proses enkripsi tersebut adalah sebuah data berformat .asc yang bernama Dokumen_Rahasia_PgA.pdf.asc . Jika data ini dibuka dengan text editor, akan menampilkan kode ASCII acak seperti gambar di bawah ini.

Hasil enkripsi data pengguna A dengan public key pengguna B.

E4. Bertukar Data

Sebelum bertukar data, pengguna A membuat data signature .sig untuk melengkapi dari data yang telah dienkripsi. Yaitu dengan menggunakan perintah sebagai berikut.

gpg -v -a -u TesTesKunci -r KucingTester -o Dokumen_Rahasia_PgA.pdf.asc.sig --detach-sig Dokumen_Rahasia_PgA.pdf.asc

Setelah membuat signature terpisah dari file terenkripsi tersebut, tidak lupa kita verifikasi signaturenya untuk pengecekan, dengan data yang dibuat signature tersebut dengan perintah berikut ini.

$ gpg -v --verify Dokumen_Rahasia_PgA.pdf.asc.sig Dokumen_Rahasia_PgA.pdf.asc
gpg: Signature made Tue 28 May 2019 05:40:10 AM WIB
gpg: using RSA key 4302AC808065A3DED1EA473FEC7E5FBE4920B752
gpg: issuer "testeskunci@mail.com"
gpg: using subkey EC7E5FBE4920B752 instead of primary key EC0C103F84E51148
gpg: using pgp trust model
gpg: Good signature from "TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>" [ultimate]
gpg: binary signature, digest algorithm SHA256, key algorithm rsa4096
Pembuatan signature untuk dokumen terenkripsi dan proses verifikasi kembali signature dengan datanya

Pengguna A lalu mengirim data terenkripsi ini ke pengguna B. Bisa menggunakan media surat elektronik ataupun melalui media online dan offline yang lainnya.

E5. Dekripsi Data di Pengguna B

Setelah pengguna B menerima data terenkripsi dari pengguna A. Pengguna B lalu melakukan proses dekripsi data terenkripsi ini dengan public key dari Pengguna A. Pertama adalah pengguna B melakukan verifikasi data dengan menggunakan signature yang disertakan dari dokumen terenkripsi ini.

$ gpg -v --verify Dokumen_Rahasia_PgA.pdf.asc.sig Dokumen_Rahasia_PgA.pdf.asc
gpg: Signature made Tue May 28 05:40:10 2019 WIB
gpg: using RSA key 4302AC808065A3DED1EA473FEC7E5FBE4920B752
gpg: issuer "testeskunci@mail.com"
gpg: using subkey EC7E5FBE4920B752 instead of primary key EC0C103F84E51148
gpg: using subkey EC7E5FBE4920B752 instead of primary key EC0C103F84E51148
gpg: using pgp trust model
gpg: Good signature from "TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>" [unknown]
gpg: using subkey EC7E5FBE4920B752 instead of primary key EC0C103F84E51148
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: E0A0 DCAD 9B79 F3C4 4D2F 6717 EC0C 103F 84E5 1148
Subkey fingerprint: 4302 AC80 8065 A3DE D1EA 473F EC7E 5FBE 4920 B752
gpg: binary signature, digest algorithm SHA256, key algorithm rsa4096
Hasil verifikasi dokumen terenkripsi dengan signaturenya.

Jika hasil verifikasi signature dan dokumennya menunjukkan hasil “Good signature form TesTesKunci” , maka ini menunjukkan bahwa dokumen ini benar-benar asli dan benar-benar dikirim dari Pengguna A.

Untuk pesan peringatan setelahnya yaitu “WARNING: This key is not certified with a trusted signature! There is no indication that the signature belongs to…” , disebabkan karena pengguna B tidak menyetel level kepercayaan atau trust pada public key milik pengguna A dengan level tertinggi.

Kemudian kita lanjutkan proses dekripsi data ini dengan menggunakan private subkey milik pengguna B (KucingTester). Dokumen yang dihasilkan adalah dokumen berbentuk data PDF. Perintah dan proses yang dijalankan yaitu :

$ gpg -v -d -u KucingTester -o Dokumen_Rahasia_PgA.pdf Dokumen_Rahasia_PgA.pdf.asc
gpg: public key is 4C42C9074E9E04AC
gpg: using subkey 4C42C9074E9E04AC instead of primary key 0B98A224B4B7FFCD
gpg: pinentry launched (14292 mac 1.1.0 /dev/ttys002 xterm-256color -)
gpg: using subkey 4C42C9074E9E04AC instead of primary key 0B98A224B4B7FFCD
gpg: encrypted with 4096-bit RSA key, ID 4C42C9074E9E04AC, created 2019-05-25
"KucingTester (Kunci untuk mengunci kenangan) <kucingtes@mail.com>"
gpg: AES256 encrypted data
gpg: original file name='Dokumen_Rahasia_PgA.pdf'
gpg: Signature made Tue May 28 05:28:57 2019 WIB
gpg: using RSA key 4302AC808065A3DED1EA473FEC7E5FBE4920B752
gpg: issuer "testeskunci@mail.com"
gpg: using subkey EC7E5FBE4920B752 instead of primary key EC0C103F84E51148
gpg: using subkey EC7E5FBE4920B752 instead of primary key EC0C103F84E51148
gpg: using pgp trust model
gpg: Good signature from "TesTesKunci (Kunci untuk mengunci kenangan) <testeskunci@mail.com>" [unknown]
gpg: using subkey EC7E5FBE4920B752 instead of primary key EC0C103F84E51148
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: E0A0 DCAD 9B79 F3C4 4D2F 6717 EC0C 103F 84E5 1148
Subkey fingerprint: 4302 AC80 8065 A3DE D1EA 473F EC7E 5FBE 4920 B752
gpg: binary signature, digest algorithm SHA256, key algorithm rsa4096
Proses dekripsi data dokumen rahasia ke bentuk data PDF

Jika pengguna B berhasil mendekripsi data terenkripsi berformat .asc tersebut, maka akan muncul sebuah data PDF baru di dalam folder yang sama. Dokumen pdf ini adalah dokumen yang dienkripsi oleh pengguna A dan dikirim ke pengguna B.

Dokumen PDF yang berhasil didekripsi.

Untuk mengetahui apakah dokumen PDF tersebut masih utuh dan tidak mengalami kerusakan data, kita dapat coba membukanya dengan aplikasi PDF di komputer.

Mencoba membuka dokumen PDF yang telah didekripsi dan dipulihkan

Jika kita berhasil membuka data dokumen PDF tersebut, maka proses dekripsi data telah berhasil, dan data tidak mengalami kerusakan.
Demikian cara dan langkah dalam mengirim data terenkripsi antar pengguna yang berbeda. Kalian dapat mencari lebih banyak latihannya di Google Search jika kalian ingin eksplorasi lebih dalam lagi.

E8. Tips Penting

Beberapa tips penting dalam melakukan enkripsi dan dekripsi data yaitu :

  1. Lakukan proses kompresi pada data yang akan dienkripsi. Kompresi yang dapat dipakai dapat berupa enkripsi ZIP, TAR GZIP , RAR, atau 7Z.
  2. Jika ingin mengenkripsi banyak data, kumpulkan data-data itu ke dalam satu folder. Kemudian lakukan kompresi pada folder tersebut misalnya menggunakan kompresi ZIP. Lalu lakukan enkripsi pada data yang telah dienkripsi tersebut menjadi data berbentuk ASCII atau .asc .
  3. Setelah pembuatan enkripsi, segera buat data tandatangan atau signature .sig yang terpisah, untuk data yang telah dienkripsi. Sertakan data tandatangan ini dengan data terenkripsi ketika data tersebut dikirim. Ini untuk mencegah data terenkripsi tersebut dimodifikasi oleh pihak yang tidak bertanggung jawab.
  4. Gunakan cipher enkripsi yang kuat seperti AES256, CAST5, dan CAMELLIA256.

F. Contoh Implementasi GPG Key

Selain untuk enkripsi data, GPG Key ini bisa dipakai untuk hal yang lain yang berhubungan dengan autentikasi sistem. Beberapa hal yang telah penulis coba diantaranya sebagai alternatif untuk SSH Key, untuk proteksi Signed Commits di Github dan Gitlab, dan alternatif SSH Key untuk layanan Github dan Gitlab.

F1. Penggunaan GPG untuk SSH Key Authentication.
Aplikasi GPG memiliki kemampuan untuk proses autentikasi sistem dengan Auth Subkey yang dimilikinya. Autentikasi sistem yang biasa dipakai adalah autentikasi ke Virtual Private Server (VPS), masuk ke sistem operasi Linux atau Mac dengan USB YubiKey, atau otorisasi menjalankan proses aplikasi tertentu dengan Auth Key. Pada contoh kali ini, akan digambarkan proses untuk menggunakan GPG sebagai SSH Key. SSH Key biasanya dipakai untuk menghubungkan komputer dengan lingkungan komputer server yang ada di tempat yang terpisah. Setelah tersambung melalui SSH, dilanjutkan dengan operasi di komputer server yang terhubung tersebut, misalnya konfigurasi server untuk layanan aplikasi web service.

Bagi yang yang terbiasa menggunakan SSH untuk terhubung ke server, pasti tidak asing dengan perintah di bawah ini.

ssh-keygen -t rsa -b 4096ssh-add /home/youruser/.ssh/id_rsassh-copy-id -i ~/.ssh/id_rsa user@host

Teknik SSH di atas biasa dilakukan di lingkungan pengembangan Linux dan MacOS. Kelemahan terhubung dengan penggunaan SSH Keygen di atas adalah kita perlu menyediakan cadangan atau backup dari id_rsa dan id_rsa_pub untuk masing-masing lingkungan server VPS yang kita miliki. Jika kunci RSA dari SSH tersebut hilang atau dicuri oleh orang lain, tentu saja kita harus membuat SSH Key kembali dengan SSH keygen, dan menyetel konfigurasinya di komputer remote server.

Solusi alternatif dari penggunaan SSH Keygen untuk pembuatan SSH Key adalah menggunakan GPG Key. Kita dapat menggunakan GPG Subkey Authentication untuk pengganti peran dari SSH Keygen. GP Subkey dari GPG Key ini dapat dipakai untuk tersambung ke komputer server, sama layaknya dengan SSH Key dari SSH Keygen sebelumnya. Dari segi keamanan, metode GPG Key ini lebih aman, karena GPG Key yang dipakai sebagai SSH Key ini hanya berbentuk subkey Authentication yang memiliki masa kadaluarsa. Selain itu kita bisa lakukan revocation atau pengkadaluarsaan pada Auth subkey tersebut melalui GPG Master Key yang kita miliki, ketika auth subkey ini jatuh ke tangan orang yang salah. Jika ingin lebih aman lagi, kita bisa menggunakan kartu USB yang dikhususkan untuk penyimpanan GPG Key ini, yaitu kartu USB yang dibuat oleh vendor YubiKey.

Manajemen kunci pengaman GPG Key sebagai SSH Key juga lebih mudah. Dikarenakan satu GPG Master Key bisa memiliki beberapa subkey yang dimanajemen dalam satu master key, termasuk diantaranya authentication subkey yang dipakai untuk SSH Key. Terlebih lagi dengan adanya teknik pengamanan GPG Master Key dengan membuat beberapa subkey yang telah dijelaskan di beberapa bagian artikel ini.

Konfigurasi Permulaan
Untuk memulai penggunaan GPG sebagai SSH Key pastikan di komputer kita telah tersedia GPG Key dengan subkey untuk Authentication. Jika belum tersedia, kita dapat membuatnya dengan mengikuti langkah-langkah yang ada di bagian atas artikel ini. Setelah GPG Key terpasang dan tersedia, buka aplikasi Terminal yang ada di komputer. Lalu kita lanjutkan dengan proses pencadangan data remote server yang tersimpan di dalam folder ~/.ssh ke media dokumen lain.

# ~/.ssh/config
Host server_nickname
HostName server.domain.com
User username

Kemudian tambahkan baris konfigurasi GPG Agent yang ada di folder ~/.gnupg pada file gpg-agent.conf . Tambahkan “enable-ssh-support” di dalam file tersebut dan simpan.

# ~/.gnupg/gpg-agent.conf
enable-ssh-support

Kemudian hubungkan SSH Auth Socket kepada GPG Agent. Dengan demikian SSH Auth Socket akan membaca SSH Key yang bersumber dari GPG Key. Caranya yaitu tambahkan baris konfigurasi di bawah ini pada file ~/.bash_profile atau ~/.bashrc atau ~/.zshrc , tergantung dari Shell Terminal yang kalian pakai.

# Contoh konfigurasi pada~/.bashrcexport SSH_AUTH_SOCK=$(gpgconf — list-dirs agent-ssh-socket)
gpgconf — launch gpg-agent

Lakukan proses Log Out sistem operasi Linux / MacOS kalian. Atau bisa juga dengan memerintahkan Bash atau Zsh untuk membaca file konfigurasi kembali. Jalankan perintah ini di Terminal untuk membuat konfigurasi tersebut dibaca.

$ gpgconf --kill gpg-agent  # (jika gpg agent telah jalan duluan, lakukan kill)
$ source ~/.bash_profile

Kemudian tutup Terminal, dan buka kembali Terminal yang ada di komputer untuk memulai ulang session Terminal itu.

Tambahkan Kunci GPG Key Authentication
Pada langkah ini, kita akan menambahkan kunci GPG Authentication ke dalam SSH Key. Caranya adalah kita jalankan perintah untuk menampilkan daftar kunci GPG di Terminal. Namun kali ini dengan tambahan --with-keygrip untuk menampilkan kode penghubung dari masing-masing GPG Subkey.

GPG Public key dengan keygrip untuk SSH Key

Kemudian kita catat kunci penghubung (keygrip) untuk GPG Subkey khusus Authentication. Ditandai dengan kode [A] di bagian keterangan subkey yang muncul. Pada contoh kali ini, subkey untuk Authentication yang akan dipakai memiliki keygrip C0B399F26EBB80605BDE36B5C67369C0696F5D75 . Kemudian tambahkan keygrip itu ke dalam file sshcontrol yang ada di folder ~/.gnupg . Jalankan perintah ini di Terminal .

$ echo C0B399F26EBB80605BDE36B5C67369C0696F5D75 >> ~/.gnupg/sshcontrol
Menambahkan keygrip GPG Auth Subkey ke dalam SSH Control Configuration

Perintah tersebut menambahkan keygrip untuk GPG Key Authentication ke dalam konfigurasi SSH Control untuk GPG Agent. Kita dapat melakukan konfirmasi dengan dengan membuka file sshcontrol di folder ~/.gnupg . Jika terdapat kode keygrip dari GPG Subkey Auth, maka kita berhasil menambahkan keygrip ke dalam sshcontrol.

Keygrip yang telah ditambahkan ke file sshcontrol
Melihat SSH Key yang telah memakai GPG Key

Pengecekan bisa juga dengan menjalankan perintah ssh-add -l atau ssh-add -L . Jika GPG Key telah berhasil ditambahkan ke dalam SSH Key dan sshcontrol, akan terlihat baris-baris kode GPG Auth Key di atas , baik dalam kode RSA ataupun dalam SHA256.

Langkah selanjutnya adalah menyalin GPG SSH Key ini ke komputer server yang kita remote. Misalnya dengan contoh berikut.

$ ssh-copy-id demo@198.51.100.0

Atau dengan menambahkan secara manual ke file ~/.ssh/authorized_keys . Misalnya dengan perintah Terminal :

$ cat ~/.ssh/id_rsa.pub | ssh demo@198.51.100.0 “mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys”

Kemudian tinggal lakukan proses login seperti biasa ke komputer remote server dengan perintah SSH. Misalnya dengan perintah di bawah ini.

$ ssh remote_username@remote_host

Setelah proses login SSH berhasil, selanjutnya lakukan operasi manajemen remote server seperti biasa.

F2. Penggunaan GPG untuk Signing Commits di Github dan Gitlab
GPG Key dapat dipakai untuk menambah verifikasi Git Commits di dalam repository proyek dengan Git. Ketika Git commit yang telah diverifikasi itu dikirim (git push) ke repository Git Online seperti Github atau Gitlab, maka akan muncul tanda “Verified” Commits.

Contoh badge Verified Commits pada repository Gitlab dan Github
Contoh badge Verified Commits pada repository Gitlab dan Github

Tujuan dari penggunaan Verified atau Signing Commits ini adalah untuk memberikan keamanan pada setiap proses commit kode. Orang yang melakukan proses commit dengan pengaman GPG Key yang telah terdaftar di layanan Git Online, akan mendapatkan tanda (badge) “Verified”. Orang lain yang tidak berhak yang melakukan proses commit tanpa pengaman GPG Key, akan mendapat tanda (badge) “Unverified”. Hal ini untuk memastikan bahwa setiap perubahan kode dan commit Git yang terjadi di repository proyek kita, adalah benar-benar berasal dari kita sendiri, dan memberikan keyakinan kepada para kontributor bahwa yang mengirim kode commit ini adalah benar-benar dari kita sendiri. Dengan adanya signing commits, dapat mencegah adanya orang lain yang dapat mengakses repository mencoba menyisipkan kode berbahaya dan membuat perubahan yang tidak diinginkan ke dalam repository proyek.

Kunci GPG Key yang dipakai untuk pengaman commit kode ini harus didaftarkan terlebih dahulu ke layanan Git online yang dipakai sebagai repository online, misalnya di Gitlab, Github, atau Bitbucket. GPG Key yang didaftarkan haruslah berbentuk Public Key dari GPG Key yang kita miliki.

Langkah awal dari konfigurasi Signing Commits ini adalah menyediakan GPG Key milik kita sendiri. Pastikan di dalam identitas UID GPG Key tersebut, memiliki alamat email yang sama dengan email yang dipakai untuk mendaftar Gitlab atau Github. Atau usahakan email di GPG Key sama dengan email yang dipakai dalam konfigurasi Git di lokal dan konfigurasi Git di Gitlab atau Github. Kemudian kita ekspor public key dari GPG Key tersebut.

gpg -v -a -o publickey.asc --export [UID]

Lanjutkan dengan menyalin isi dari public key tersebut dan memasukkannya ke dalam setelan GPG Key yang disediakan oleh Github atau Gitlab.

Isi dari public key dari GPG Key yang akan disalin ke setelan Github atau Gitlab

Pada layanan Gitlab, setelan GPG Key ini ada di menu Settings > GPG Keys. Salin dan tempel public key ke dalam kotak isian yang disediakan untuk penambahan Public GPG Key.

Akses menu GPG Key di Gitlab
Tambahkan isi public key ke dalam kotak isian yang disediakan

Setelah ditambahkan ke dalam kotak isian, tekan tombol Add key. Gitlab akan menambahkan data public key ini sebagai salah satu kunci verifikasi dari setiap Git commit yang diterima. Contoh public key yang berhasil ditambahkan dapat dilihat di bawah ini.

Hasil penambahan GPG Public Key

Perlu dicatat bahwa pada public key di atas hanyalah sebagai contoh. Alamat email kucingssh@mail.com statusnya adalah Unverified, karena alamat email yang dipakai untuk mengakses Gitlab ini berbeda. Dan alamat email kucingssh@mail.com ini tidak terdaftar sebagai salah satu email yang terverifikasi untuk mengakses akun Gitlab pada contoh di atas. Jika akun email yang dipakai di GPG Key sama dengan akun email yang dipakai untuk mengakses Gitlab, maka statusnya akan menjadi Verified. Seperti yang terlihat pada gambar di bawah ini.

Public key dengan email yang sama dengan email untuk Gitlab dan statusnya verified
Tampilan menambahkan GPG Key jika di Github

Langkah selanjutnya setelah mendaftarkan public key ke layanan Gitlab atau Github, adalah melakukan konfigurasi Git di komputer lokal kita. Mula-mula tampilkan daftar kunci dengan format UID/KeyID dalam bentuk bilangan Long. Jalankan perintah di bawah ini pada Terminal.

gpg --list-secret-keys --keyid-format LONG <UID>
GPG Key dengan keyid berformat bilangan LONG

Kemudian salin identitas KeyID yang berformat Long ini ke dalam konfigurasi Git. Pada gambar diatas, KeyID yang disalin adalah bilangan Long “06F4B28851BBAD47” . Lanjutkan dengan membuka Terminal , dan setel konfigurasi Git secara global dengan perintah di bawah ini.

git config --global user.signingkey 06F4B28851BBAD47

Namun jika kita ingin mengubah konfigurasi hanya untuk Git lokal per repository, cukup jalankan perintah ini di dalam folder root dari proyek yang telah ada Git-nya.

git config user.signingkey 06F4B28851BBAD47

Setelah konfigurasi itu disimpan, maka setiap akan melakukan commit kode, kita perlu menjalankan perintah seperti di bawah ini.

git commit -S -m "My commit msg"

Ada tambahan -S pada perintah commit, yang berarti perintah untuk melaksanakan Signing (tanda tangan dengan kunci GPG). Begitu perintah tersebut dijalankan, akan muncul jendela pop up untuk memasukkan kata sandi GPG Master Key yang ada di komputer kita. Seperti yang terlihat pada gambar di bawah ini.

Git commit dengan kunci GPG Key dan memasukkan kata sandi

Masukkan kata sandi kunci GPG Master Key yang ada di komputer kita. Setelah memasukkan kata sandi, proses commit kode akan berjalan dan akan sukses jika kata sandi yang dimasukkan benar. Jika tidak benar memasukkan kata sandi, maka proses commit akan gagal dan tidak berhasil. Langkah selanjutnya adalah menjalankan perintah Git Push biasa ke repository Gitlab atau Github. Akun Gitlab atau akun Github ini harus memiliki public key dari GPG Key yang sama dengan kunci GPG Key untuk penandatangan commit di komputer lokal kita. Setelah proses Git Push dilakukan, kita dapat mengecek di daftar Commits di repository Gitlab atau Github, dan melihat tanda badge “Verified” berwarna hijau.

Dokumentasi mengenai Signing Commits atau Verified Commits ini dapat dilihat dari dokumentasi penggunaan Gitlab ataupun Github, di tautan bawah ini.

F3. Penggunaan GPG Key untuk SSH ke layanan Github dan Gitlab
Pada contoh sebelumnya, telah diperlihatkan GPG Key sebagai SSH Key untuk tersambung ke komputer remote server. Dengan cara yang sama seperti itu, GPG Key dapat dipakai sebagai media sambungan SSH ke layanan Github dan Gitlab. Biasanya kita menyambungkan repository Git ke layanan Git Online dengan menggunakan SSH Key yang dibuat dari SSH Keygen. Namun kali ini kita akan menggantikan fungsi SSH Keygen dengan GPG Key sebagai SSH Key -nya.

Langkah yang dilakukan hampir sama dengan contoh latihan GPG Key untuk SSH Key Remote Server sebelumnya. Yaitu konfigurasi GPG Agent dan menambahkan keygrip untuk GPG Key Authentication pada SSH Control. Perbedaannya adalah kita mengambil kode RSA dari GPG Key Auth ini untuk koneksi dengan Github dan Gitlab. Jalankan perintah ini di Terminal, setelah kita menambahkan keygripnya di SSH Control, yaitu :

ssh-add -L
Menambilkan kode RSA dari GPG Key

Salin kode RSA tersebut ke text editor untuk menampung sementara waktu. Kemudian buka layanan Gitlab atau Github untuk menambahkan SSH Key. Pada layanan Gitlab, setelan ini tersedia pada menu Settings > SSH Key . Sedangkan pada layanan Github tersedia pada menu Settings > SSH and GPG Keys > New SSH Key. Salin tempel kode RSA tadi ke kotak isian yang tersedia, jangan lupa untuk memberi nama dari SSH Key tersebut. Kemudian tekan tombol Add SSH Key untuk menambahkan kode SSH dari GPG Key ini.

Menambahkan SSH Key pada Gitlab
Menambahkan SSH Key pada Github

Jika berhasil ditambahkan, maka akan muncul keterangan dari SSH Key dari GPG Key tadi. Seperti yang terlihat pada gambar di bawah ini.

SSH Key dari GPG Key yang berhasil ditambahkan ke Github
SSH Key dari GPG Key yang berhasil ditambahkan ke Gitlab

Selanjutnya kita tinggal menambahkan Git Remote dengan SSH seperti biasa, dari Repository Gitlab atau Github, dan kita bisa lakukan operasi Git seperti Push, Pull, Fetch, dst.

Contoh menggunakan link SSH untuk operasi Github

Dokumentasi mengenai koneksi SSH ke layanan Git bisa dilihat pada tautan di bawah ini.

F4. Menggunakan USB Flash Disk untuk Pengaman GPG Keys
Di pasaran terdapat kartu USB yang dikhususkan untuk penyimpanan GPG Key, yang bernama Yubikey. Kartu ini dapat dipakai untuk operasi autentikasi, enkripsi, dan dekripsi dengan menghubungkan kartu tersebut ke komputer. Kartu USB tersebut memang bagus namun harga yang ditebus juga cukup mahal. Beruntung kita dapat menggunakan metode penyimpanan tersendiri untuk mengamankan GPG Keys milik kita ke dalam USB Drive. Aplikasi yang digunakan juga gratis, yaitu Gnome Disk Utility, Cryptsetup , dan komputer dengan sistem operasi Linux berbasis Ubuntu.
Sebelum memulai, pastikan di dalam sistem operasi Linux ini terpasang Gnome Disk Utility dan Cryptsetup, dengan menjalankan perintah.

sudo apt install -y gnome-disk-utility cryptsetup

Setelah pemasangan aplikasi tersebut, kita sambungkan USB Disk yang akan kita enkripsi. Pastikan USB Disk ini dalam kondisi kosong dengan melakukan format ulang USB Disk terlebih dahulu. Kemudian jalankan aplikasi Gnome Disk Utility, dan pilih USB Disk yang akan kita enkripsi pada panel di sebelah kiri.

Gnome Disk Utility dan USB Disk yang akan dienkripsi

Lalu tekan tombol bergerigi yang ada di panel sebelah kanan, dan pilih Format Partition.

Pilih format partisi pada USB Disk

Sebuah jendela pop up akan muncul untuk opsi format partisi USB Disk. Yang perlu kita lakukan adalah mengisi nama USB Disk ini pada Volume Name. Opsi Erase ini bersifat opsional, bisa diaktifkan atau tidak. Tipe partisi yang akan dipakai adalah “Internal disk for use with Linux systems only (Ext4)”. Centang opsi “Password protect volume (LUKS)” , untuk melakukan enkripsi partisi USB Disk ini dengan algoritma LUKS.

Opsi partisi untuk enkripsi data dengan LUKS

Tekan tombol Next untuk melanjutkan proses partisi dan enkripsi USB Flash Disk ini. Pada jendela berikutnya, kita diminta untuk memasukkan kata sandi. Usahakan kata sandi terdiri dari kombinasi huruf dan angka dengan kombinasi huruf besar dan kecil, sehingga kata sandi lebih kuat.

Memasukkan kata sandi untuk proteksi USB Flash Disk

Setelah memasukkan kata sandi, tekan tombol Next untuk melanjutkan. Kita akan mendapatkan jendela konfirmasi format USB Flash Disk ini. Jika sudah yakin data yang dimasukkan sudah benar semua, tekan tombol Format berwarna merah.

Konfirmasi format USB Flash Disk

Setelah proses format selesai dan berhasil, kita akan mendapatkan sebuah partisi USB Flash Disk yang sedang terhubung ke komputer kita di File Manager. Pada contoh artikel ini, USB Flash Disk terhubung dengan nama 31 Gb Encrypted.

Sebuah USB Drive yang terhubung dan tanda enkripsi pada USB Drive tersebut

Ketika kita mencoba membuka partisi USB Drive tersebut dengan File Manager ataupun dengan Mount Partition, akan muncul jendela pop up seperti di bawah ini.

Jendela untuk konfirmasi memasukkan password ketika membuka partisi

Jendela konfirmasi tersebut muncul untuk memasukkan kata sandi dari partisi USB Drive. Masukkan kata sandi dengan benar agar partisi USB Drive yang dienkripsi ini dapat dibuka. Namun jika kata sandi ini salah, maka partisi USB Drive ini tidak dapat dibuka. Jangan lupa untuk memilih pilihan “Forget password immediately” agar komputer tidak mengingat dan menyimpan kata sandi yang kita masukkan.

Masukkan USB Drive Password pada jendela isian yang muncul

Setelah berhasil memasukkan kata sandi dengan benar, maka akan muncul nama partisi USB Drive tersebut. Pada contoh kali ini, USB Drive bernama WGEXT, dan logo gembok terbuka berwarna merah. Kita dapat melihat juga isi partisi tersebut yang masih kosong.

Partisi USB Drive yang telah dibuka dengan kata sandi

Ketika sudah tidak digunakan lagi, untuk melepas partisi USB Drive, lakukan dengan klik kanan pada partisi USB Drive tersebut, dan pilih Unmount. Setelah itu lanjutkan dengan proses Eject untuk melepas USB Drive dari komputer.

Proses melepas USB Drive dari sistem

USB Flash Disk yang terenkripsi tersebut dapat kita pakai untuk media penyimpanan data penting. Misalnya untuk menyimpan data GnuPG (GPG) Master Key, dan menyimpan USB Drive Master Key ini di tempat yang rahasia. Atau bisa juga menyimpan kunci duplikat GPG Key tanpa Master Key, yaitu GPG Subkeys untuk dipakai pada sistem yang membutuhkan, dan dapat kita bawa setiap saat.

Hal yang biasa orang lakukan adalah membawa USB Drive yang berisi GPG Subkeys saja ketika berpergian. Sedangkan USB Flash Disk yang berisi GPG Master Key disimpan ditempat lain yang aman. Ketika memerlukan operasi dengan GPG Key yaitu untuk enkripsi, dekripsi, atau operasi kunci SSH, barulah USB Flash Disk dengan GPG Subkeys tersebut dipakai. Misalnya menyalin subkeys dan public key tertentu untuk diimpor ke dalam GPG Keyring di komputer tertentu yang memerlukan.

Yang perlu diperhatikan adalah USB Flash Disk yang terenkripsi ini hanya dapat dibuka pada sistem operasi Linux yang telah terpasang Gnome Disk Utility dan Cryptsetup. Jika salah satu tidak terpenuhi, maka partisi USB Flash Disk ini tidak dapat dibuka (hal yang cukup aman bukan?). Dokumentasi lebih lanjut mengenai proteksi USB Drive ini dapat dilihat di artikel di bawah ini.

G. Contekan Singkat Cheatsheet

Penulis juga membuat suatu contekan singkat yang berisi beberapa perintah penting yang sering dipakai dalam penggunaan aplikasi GnuPG. Contekan ini berformat data PDF, dan dapat dicetak ke dalam kertas dan dilaminating agar tidak lekas rusak. Contekan atau cheatsheet ini dapat diunduh langsung disini.
https://gitlab.com/gulajava.mini/gnupgcheatsheets
https://github.com/GulajavaMinistudio/GnuPGCheatsheets

H. Pranala Luar

Beberapa sumber penting yang dapat dipakai latihan ini adalah hasil Googling dari Google Search. Kalian dapat juga mencari referensi lain jika ada kebingungan atau butuh referensi GnuPG yang lebih jelas. Berikut adalah referensi yang dipakai di dalam penulisan artikel ini.

Selamat latihan dan mencoba untuk mengamankan data. Jika ada tambahan komentar dan saran, silahkan tulis di kolom komentar artikel ini.

--

--

Rian Yulianto W
Kode dan Kodean

Suka pada yang simpel dan berguna. Suka sama penguin dan apel, tapi ga suka sama jendela.