Sunday, February 26, 2012

Enkripsi GPG Menggunakan Private Key dan Public Key

Enkripsi secara umum terbagi dua, simetris dan asimetris. Enkripsi simetris (symmetric encryption) menggunakan kunci yang sama untuk enkripsi dan dekripsi. Enkripsi asimetris (asymmetric encryption) sebaliknya, justru menggunakan dua kunci yang berdeda (public key dan private key) masing-masing satu kunci untuk enkripsi dan dekripsi. Enkripsi simetris mempunyai kelemahan karena dua pihak yang saling berkirim pesan memiliki kunci yang sama. Artinya pihak yang mengenkripsi pesan (pengirim) harus mengirimkan kunci yang digunakan ke penerima untuk mendekripsi pesan. Seandainya penyerang membajak kunci ketika dikirimkan, maka dia dapat membaca pesan yang dienkripsi.
Kelemahan ini diatasi dengan enkripsi asimetris. Pada metode ini, sebelum pengiriman pesan dimulai pihak pengirim akan membuat dua pasang kunci, private key dan public key. Public key akan dikirimkan ke pengirim data dan akan digunakan untuk mengenkripsi data. Penerima pesan nantinya akan mendekripsi pesan dengan private key pasangan kunci yang dikirimkan ke pengirim. Enkripsi asimetris maupun simetris dapat dilakukan dengan GPG (GNU Privacy Guard). Enkripsi simetris sudah dibahas di artikel sebelumnya, kali ini kita akan mencoba enkripsi asimetris.
Pertama-tama kita harus membuat pasangan kunci terlebih dahulu. Proses ini akan menghasilkan public key dan private key. Ketikkan perintah berikut dari terminal:
gpg --gen-key
GPG akan menanyakan beberapa informasi untuk pembuatan kunci.  Mulai dari jenis kunci dan algoritma yang digunakan (default menggunakan RSA), panjang kunci (default 2048 bit), lamanya masa aktif kunci, nama, alamat email, hingga komentar untuk kunci yang dibuat.
Di akhir pengisian informasi pembuatan kunci, ketik O untuk memulai pembuatan kunci. Pass phrase bisa diisi, bisa juga tidak karena sifatnya opsional. Setelah pembuatan kunci berhasil, GPG akan menampilkan informasi tentang kunci tersebut.
Supaya orang lain dapat mengenkripsi data yang hendak dikirimkan ke kita menggunakan public key milik kita, maka mereka harus mendapatkan kunci tersebut. Kita dapat mengirimkannya langsung atau menyediakannya di sebuah key server. Sebelum mengirimkan public key, terlebih dahulu kita buat versi ASCII dari kunci tersebut dengan perintah berikut.
gpg --armor --output pubkey.txt --export 'Rotua Damanik'
Perintah di atas akan menghasilkan public key dengan format teks ASCII di dalam berkas pubkey.txt.
Karena sudah memiliki pasangan kunci public dan private, kita sudah bisa mengenkripsi pesan untuk kepentingan pribadi. Untuk enripsi pesan menggunakan public key milik sendiri, gunakan perintah berikut.
gpg --encrypt --recipient 'Rotua Damanik' pesan.txt
Perintah di atas akan menghasilan pesan dalam berkas pesan.txt.gpg yang berbentuk biner. Jika ingin membuat pesan enkripsi dalam format teks ASCII ganti perintah tersebut menjadi:
gpg --armor --encrypt --recipient 'Rotua Damanik' pesan.txt
Output dari perintah ini nantinya akan terbentuk berkas dengan nama pesan.txt.asc.
Dekripsi pesan-pesan terenkripsi dilakukan dengan perintah yang sama, baik untuk enkripsi format biner maupun format teks ASCII.
gpg --output pesan_baru.txt --decrypt pesan.asc
Hasil dekripsinya akan disimpan di berkas pesan_baru.txt.
Untuk mengenkripsi pesan yang akan dikirimkan ke pihak lain, kita harus memiliki public key dari pihak tersebut. Kita dapat mengimpor sebuah public key dengan perintah:
gpg --import public_key.asc
Daftar kunci yang sudah diimpor di sistem dapat dilihat dengan:
gpg --list-keys
Ketika sudah tidak digunakan, sebuah kunci dapat dihapus menggunakan perintah:
gpg --delete-key 'email@perusahaan.com'
Referensi: dokumentasi GPG.