GNU Privacy Guard
"Ilmu pengetahuan semakin banyak melahirkan keajaiban. Dongengan leluhur sampai malu tersipu. Tak perlu lagi orang bertapa bertahun untuk dapat bicara dengan seseorang di seberang lautan. Orang Jerman telah memasang kawat laut dari Inggris sampai India! Dan kawat semacam itu membiak berjuluran ke seluruh permukaan bumi. Seluruh dunia kini dapat mengawasi tingkah-laku seseorang. Dan orang dapat mengawasi tingkah-laku seluruh dunia"
(Pramoedya Ananta Toer: Bumi Manusia, hal. 316, 1980).
Dunia internet adalah dunia global dan transparan. Kedua sifat ini mempunyai kelebihan dan kekurangannya masing-masing, salah satu akibat dari transparan adalah privasi berkurang. Kini perlindungan terhadap privasi di internet semakin meningkat baik secara teknikal maupun birokrasi. Secara teknikal teknologi enkripsi semakin dikembangkan ke semua aplikasi di internet. Artikel ini akan meninjau secara teknikal bagaimana kita menjaga privasi dengan menggunakan enkripsi untuk aplikasi yang mungkin tertua di internet, yaitu email.
1. Sejarah PGP
Satu cara berkomunikasi melalui email dengan menjaga privasi adalah meng-encrypt (mengacak/mengsandikan) isi email kita dan hanya bisa dibuka oleh penerima yang berhak. Implementasi enkripsi dalam email ini dipelopori oleh Philip R. Zimmermann pada tahun 1991.
Zimmermann menulis program enkripsi email dengan nama Pretty Good Privacy (PGP) dan disebar ke internet secara freeware. Pemerintah Amerika mempunyai undang-undang yang melarang ekspor teknologi enkripsi/kriptografi, sehingga selama 3 tahun Zimmermann diinvestigasi pemerintah karena dianggap mengekspor teknologi ini dengan menyebarluaskan softwarenya secara freeware.
Selama proses investigasi tersebut PGP telah menyebar ke seluruh dunia sampai tahun 1996 pemerintah Amerika menutup kasus tersebut. Zimmermann kemudian membuat perusahaan dengan nama PGP Inc. yang kemudian perusahaan ini diakuisisi oleh Network Associates (NAI) bulan Desember 1997. Selanjutnya NAI melanjutkan pengembangan produk PGP untuk komersial dan freeware. Januari 2001 Zimmermann meninggalkan NAI dan beraliansi dengan OpenPGP.
OpenPGP menjadi protokol enkripsi standar terbuka terhadap PGP versi NAI. Working-group OpenPGP terus berusaha mendapatkan kualifikasi OpenPGP sebagai standar internet yang didefinisikan oleh Internet Engineering Task Force (IETF). Setiap standar internet dibuat sebuah dokumen yang dipublikasikan secara umum dengan nama Request for Comments (RFC). OpenPGP masuk dalam daftar RFC dengan nomor RFC2440. Saat ini OpenPGP berhasil masuk ke tahap kedua dar 4 tahap standar RFC untuk menjadi RFC yang bersifat draft standar.
2. Bagaimana PGP bekerja?
PGP menggunakan sistem pasangan kunci privat dan kunci publik. Kunci privat merupakan kunci yang dipegang oleh penggunanya dan tidak boleh diketahui orang lain, sedangkan kunci publik ditujukan untuk publik terutama orang yang akan menerima pesan enkripsi dari seseorang. Enkripsi yang digunakan dalam PGP menggunakan algoritma tertentu.
Proses sederhananya adalah anda meng-encrypt pesan dengan kunci publik rekan anda dan kemudian rekan anda membuka pesan ter-encrypt dengan kunci privatnya.
Proses enkripsi cukup memakan waktu dan utilitas CPU, dengan PGP dan algoritma ekripsinya proses ini bisa lebih cepat dengan cara PGP men-encrypt pesan dengan menggunakan kunci publik penerima dan meng-encrypt sebuah kunci pendek untuk meng-encrypt seluruh pesan. Pesan ter-encrypt dengan kunci pendek ini dikirim ke penerima. Penerima akan men-decrypt pesan dengan menggunakan kunci privatnya untuk mendapatkan kunci pendek tadi dan digunakan untuk men-decrypt seluruh pesan.
PGP lahir dua versi kunci publik yaitu Rivest-Shamir-Adleman (RSA) yang dikembangkan sejak 1977 dan Diffie-Hellman. Versi pertama menggunakan algoritma IDEA (International Data Encryption Algorithm) yang dikembangkan di Zurich untuk men-generate kunci pendek dan meng-encrypt seluruh pesan kemudian meng-encrypt kunci pendek tersebut dengan algoritma RSA. Sedangkan versi kedua menggunakan algoritma CAST untuk men-generate kunci pendek dari seluruh pesan untuk meg-encryptnya kemudian menggunakan algoritma Diffie-Hellman untuk meng-encrypt kunci pendek tersebut.
Selain faktor pasangan kunci dan algoritma di atas PGP mempunyai satu lagi fasilitas untuk menyatakan keabsahan dari kunci dan pesan yang terenkripsi yaitu sebuah digital signature (tanda tangan digital). PGP menggunakan algoritma yang efisien untuk men-generate kode hash (kode yang menyatakan integritas sebuah data) dari informasi nama dan informasi lainnya. Hash yang dihasilkan kemudian di-encrypt dengan kunci privat. Penerima kemudian akan menggunakan kunci publik pengirim untuk men-decrypt kode hash. Jika cocok maka kode hash tadi menjadi digital signature untuk pesan tersebut, sehingga penerima yakin bahwa pesan tersebut dikirim oleh pengirim yang diketahui. PGP versi RSA menggunakan algoritma MD5 (Message Digest 5, 128bit) untuk meng-generate kode hash sedangkan versi Diffie-Hellman menggunakan algoritma SHA-1.
3. GnuPG
GnuPG adalah software enkripsi email pengganti PGP yang lengkap dan bebas. Bebas karena tidak menggunakan algoritma enkripsi yang telah dipatenkan sehingga bisa dipakai oleh siapa saja tanpa batasan. GnuPG memenuhi spesifikasi OpenPGP RFC2440. Beberapa fitur yang ditawarkan GnuPG adalah:
* Penggantian penuh terhadap pemakaian PGP
* Tidak menggunakan algoritma yang telah dipatenkan
* Bebas, berlisensi GNU dan ditulis dari awal (from scratch)
* Fungsi yang lebih baik dibandingkan PGP
* Kompatibel dengan PGP versi 5 dan yang lebih tinggi
* Mendukung algoritma ElGamal (signature dan enkripsi), DSA, RSA, AES, 3DES, Blowfish, Twofish, CAST5, MD5, SHA-1, RIPE-MD-160 and TIGER.
* Mudah diimplementasikan jika ada algoritma baru (penggunaan extension modules)
* Easy implementation of new algorithms using extension modules.
* Menggunakan format standar untuk identitas user
* Banyak bahasa yang sudah mentranslasikan
* Terintegrasi dengan HKP keyservers (wwwkeys.pgp.net)
GnuPG bekerja sempurna di atas sistem operasi Linux dengan platform x86, mips, alpha, sparc64 ataupun powerpc. Sistem operasi lain dengan platform x86 yang juga bekerja adalah FreeBSD, OpenBSD, NetBSD dan bahkan Windows. Platform lain dengan sistem operasi selain Linux masih dalam pengembangan.
GnuPG dibuat oleh tim GnuPG yang terdiri dari Matthew Skala, Michael Roth, Niklas Hernaeus, R�mi Guyomarch and Werner Koch. Gael Queri, Gregory Steuck, Janusz A. Urbanowicz, Marco d'Itri, Thiago Jung Bauermann, Urko Lusa and Walter Koch yang membuat translasi resmi dan Mike Ashley yang mengerjakan GNU Privacy Handbook.
Berikut proses instalasi dari source-code di atas distribusi Linux Mandrake 8.0. Distribusi Mandrake sebenarnya sudah mempunyai paket GnuPG versi 1.0.4. Anda disarankan mengupgrade ke versi 1.0.6 dengan dua cara yaitu mendownload versi RPM di:
ftp://rpmfind.net/linux/Mandrake/updates/8.0/RPMS/gnupg-1.0.6-1.1mdk.i586.rpm
atau mengikuti penjelasan berikut dengan meng-compile versi terakhir dari sourcenya (jangan lupa compiler gcc, header/library gcc dan header Linux sudah anda install). Ambil source code dari situs resmi GnuPG:
ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-1.0.6.tar.gz
Ekstrak source code GnuPG
$ tar -zxvf gnupg-1.0.6.tar.gz
$ cd gnupg-1.0.6
$ ./configure --prefix=/usr --enable-m-guard
Di sini prefix kita arahkan ke /usr untuk menyesuaikan dengan sistem file standar.
$ make
$ make check
$ su
# make install
Kini GnuPG siap kita pakai.
3.1 Membuat kunci
Syarat pertama dalam menggunakan GnuPG adalah membuat pasangan kunci privat dan publik. Lakukan dengan cara:
$ gpg --gen-key
Ulangi sekali lagi karena GnuPG membutuhkan direktori konfigurasi di ~/.gnupg (langkah di atas hanya membuat direktori dan konfigurasi awal GnuPG)
$ gpg --gen-key
gpg (GnuPG) 1.0.6; Copyright (C) 2001 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
gpg: /home/jay/.gnupg/secring.gpg: keyring created
gpg: /home/jay/.gnupg/pubring.gpg: keyring created
Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(4) ElGamal (sign and encrypt)
Your selection?
Langkah pertama ini adalah pemilihan algoritma, anda bisa memilih option 1 atau 4, option 2 hanya signature tanpa enkripsi. Kita ambil default option 1.
DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
minimum keysize is 768 bits
default keysize is 1024 bits
highest suggested keysize is 2048 bits
What keysize do you want? (1024)
Langkah kedua ini adalah pemilihan tingkat enkripsi yang kita pakai. Kita ambil default 1024bit.
Requested keysize is 1024 bits
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0)
Langkah ketiga adalah pengisian sampai berapa lama kunci yang kita buat berlaku. Anda bisa memilih option di atas, misalnya kita pilih berlaku untuk satu tahun, isi dengan 1y.
Key expires at Sat 07 Sep 2002 02:00:20 AM JAVT
Is this correct (y/n)?
Jawab ya, jika tidak GnuPG akan menanyakan kembali pilihan di atas.
You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) "
Real name:
Email address:
Comment:
Langkah keempat adalah mengisi infomasi identitas kita. Bagian comment bisa anda isi atau tidak, menunjukkan informasi tambahan misalnya institusi tempat anda sekolah/bekerja.
You selected this USER-ID: "Yulian F. Hendriyana "
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
Tekan O jika sudah benar.
You need a Passphrase to protect your secret key.
Enter passphrase:
Passphrase adalah password kunci privat yang sedang dibuat. Berguna untuk melindungi kunci privat jika diketahui orang lain.
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.
Pada saat GnuPG membuat kunci dibutuhkan entropi sistem yang sangat banyak untuk membuat kombinasi kunci yang aman. Untuk menambah entropi di sistem gerakan mouse atau mengetik di keyboard secara cepat dan random.
public and secret key created and signed.
Terakhir adalah pesan dari GnuPG bahwa kunci privat dan publik telah selesai dibuat dan ditandatangani.
3.2 Mode konsol
GnuPG didesain sebagai fungsi backend, artinya dia berjalan di mode konsol dan sudah siap dipakai oleh software lain sebagai frontend. Berikut beberapa dasar perintah dalam GnuPG yang berkaitan dengan pertukaran kunci dan meng-encrypt/men-decrypt.
Melihat daftar kunci:
$ gpg --list-key
/home/jay/.gnupg/pubring.gpg
---------------------------------
pub 1024D/53E6DD86 2001-09-06 Yulian F. Hendriyana
sub 1024g/5E9C96E3 2001-09-06 [expires: 2002-09-06]
Mengekspor kunci publik dan disimpan menjadi sebuah file teks biasa.
$ gpg -a --export
$ gpg -a --export > gpgpub-key.asc
Kini anda sudah bisa mempublikasikan kunci publik (misalnya dipublikasikan di homepage personal) atau dikirim melalui email ke rekan anda yang menggunakan PGP, juga anda bisa mengirimkannya ke keyserver wwwkeys.pgp.net.
$ gpg --keyserver wwwkeys.pgp.net --send-keys
Mengimport kunci publik rekan anda. Misalnya anda mendapat kunci publik dalam sebuah file teks bernama gpgpub-firman.asc
$ gpg --import gpgpub-firman.asc
gpg: key 49B688BF: public key imported
gpg: /home/jay/.gnupg/trustdb.gpg: trustdb created
gpg: Total number processed: 1
gpg: imported: 1
Kini kita dapat berkorespondensi dengan aman dengan rekan kita yang juga telah mengimport kunci publik. Tanpa aplikasi frontend kita bisa mengirim pesan dalam bentuk file teks, kemudian kita encrypt dan dikirim melalui email. Penerima akan membuka email dan menyimpannya ke dalam file dan di-decrypt untuk bisa melihat pesan kita. Misalnya pesan kita tulis dalam file pesan.txt untuk dikirim ke rekan kita.
$ gpg -a -o pesan.gpg -e -r firmanp@teras.net.id pesan .txt
Anda tinggal mengirimkan file pesan.gpg melalui email. Rekan anda setelah menyimpan ke dalam file bisa men-decrypt dengan cara:
$ gpg -a -d pesan.gpg
Selain pesan yang diencrypt anda juga bisa menambahkan tandatangan (signature) terhadap pesan tersebut. Untuk kasus tertentu misalnya dalam diskusi melalui mailing list anda cukup membubuhkan tandatangan saja.
Fitur lain bisa anda pelajari melalui manual GnuPG atau GnuPG Handbook yang bisa anda dapatkan versi pdfnya di:
http://www.gnupg.org/gph/en/manual.pdf
Sekarang kita beralih ke aplikasi frontend yang mendukung GnuPG.
4. Mail-client
Berikut adalah beberapa Mail User Agent (MUA) atau mail client yang mendukung aplikasi GnuPG. Cara menggunakan mail client di bawah ini hanya seputar informasi yang berkaitan dengan GnuPG. Silakan lihat manual masing-masing MUA tentang cara menggunakannya.
4.1 Mutt
Mutt mempunyai konfigurasi global di /etc/Muttrc, anda bisa mengcopy file ini ke homedir anda menjadi .muttrc dan mengeditnya atau anda bisa mendownload konfigurasi mutt buatan rekan kita Ronny Haryanto di http://ronny.haryan.to/muttrc. Untuk fungsi GnuPG anda tinggal menambahkan konfigurasi berikut ke dalam .muttrc anda.
set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch \
--output - %f"
set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s \
%f"
set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch \
--output - %f"
set pgp_sign_command="gpg --no-verbose --batch --output - \
--passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
set pgp_clearsign_command="gpg --no-verbose --batch --output - \
--passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
set pgp_encrypt_only_command="pgpewrap gpg -v --batch --output - \
--encrypt --textmode --armor --always-trust -- -r %r -- %f"
set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 -v \
--batch --output - --encrypt --sign %?a?-u %a? --armor \
--always-trust -- -r %r -- %f"
set pgp_import_command="gpg --no-verbose --import -v %f"
set pgp_export_command="gpg --no-verbose --export --armor %r"
set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint \
--check-sigs %r"
set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons \
--list-keys %r"
set pgp_list_secring_command="gpg --no-verbose --batch --with-colons \
--list-secret-keys %r"
set pgp_getkeys_command="gpg --no-verbose --keyserver wwwkeys.pgp.net \
--recv-keys %r"
Untuk mengirim email yang ditandatangan atau di-encrypt anda cukup membuat mail seperti biasa dan pada saat sebelum dikirim (menekan tombol y sebelum yakin akan dikirim) ada option untuk menambahkan enkripsi. Defaultnya dengan menekan tombol p (lihat screenshot), akan keluar option:
(e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it?
Anda bisa menekan e untuk meng-encrypt pesan, s untuk menandatangai, a untuk menandatangani dengan user lain (jika anda mempunya dua atau lebih identitas/pasangan kunci GnuPG), b untuk menandatangani dan meng-encrypt dan f untuk batal. Jika anda menekan b (sign and encrypt) maka salah satu tampilan informasi di layar akan berubah menjadi:
PGP: Sign, Encrypt
sign as:
Selanjutnya mutt akan memilih kunci publik yang sesuai (mutt akan melihat identitas user yang sama dengan identitas user GnuPG dari kunci publik yang ada di dalam daftar). Sewaktu dikirim mutt akan meminta kita memasukkan passphrase dan kemudian mengirim email tersebut.
Rekan kita jika menggunakan mutt juga pada saat membaca email secara otomatis mutt akan men-decrypt pesan yang kita kirim setelah penerima mengisi passphrase yang diminta oleh mutt. Contoh pesan yang telah di-decrypt akan keluar di mutt seperti ini:
[-- PGP output follows (current time: Fri 07 Sep 2001 03:18:53 AM JAVT) --]
gpg: Signature made Thu 06 Sep 2001 10:04:34 PM JAVT using DSA key ID B399F52B
gpg: Good signature from "Yulian F. Hendriyana "
[-- End of PGP output --]
[-- The following data is signed --]
4.2 Kmail
Kmail merupakan MUA yang terintegrasi dengan desktop manager KDE. Dalam artikel ini penulis menggunakan Kmail dari KDE 2.2 yang terbaru. Di sini tidak akan dijelaskan lebih detail karena frontend grafis Kmail mudah dimengerti, berikut screenshot yang bisa menjadi contoh gambarannya.
1. Menambahkan identitas user GnuPG pada konfigurasi identitas Kmail. Isi pada bagian Identity di bagian kolom PGP User Identity.
2. Pada bagian Security tab PGP check list bagian Encryption tool. Bisa anda gunakan Auto-detect atau GPG - Gnu Privacy Guard
3. Pada waktu mengirim surat ada tombol bergambar kunci. Tekan jika akan mengirim pesan yang di-encrypt dengan GnuPG.
4. Kemudian anda diminta mengisi passphrase.
5. Jika alamat email tujuan tidak termasuk dalam daftar kunci publik maka Kmail akan mengeluarkan dialog kepada User ID yang mana email tersebut akan di-encrypt.
6. Jika anda mengaktifkan Show chipered/signed text after composing di penjelasan nomor 2 di atas maka Kmail akan menampilkan konfirmasi email yang di-encrypt.
Untuk membaca email yang di-encrypt akan lebih mudah karena kita cukup mengisi passphrase ketika email yang ter-encrypt kita buka.
4.3 Sylpheed
Sylpheed adalah MUA GUI yang berbasis GTK+, dibuat oleh Hiroyuki Yamamoto. Sylpheed dibuat dengan tujuan:
* Respon yang cepat
* Interface yang canggih
* Mudah dikonfigurasi
* Fitur yang banyak
Untuk mengcompile Sylpheed dibutuhkan paket GTK+ 1.2.6 atau lebih tinggi dan untuk mendukung GnuPG membutuhkan aplikasi GPGME (GnuPG Made Easy) yang merupakan library GnuPG untuk aplikasi lain dalam memudahkan akses program ke GnuPG. GPGME bisa anda download di:
ftp://ftp.gnupg.org/gcrypt/alpha/gpgme/
Sedangkan Sylpheed dapat anda download di:
http://sylpheed.good-day.net/sylpheed/sylpheed-0.6.1.tar.bz2
Catatan: GPGME saat ini masih belum dinyatakan stabil oleh pembuatnya.
Proses instalasi GPGME:
$ tar -zxvf gpgme-0.2.2.tar.gz
$ cd gpgme-0.2.2
$ ./configure --prefix=/usr
$ make
$ make check
$ su
# make install
Kemudian lanjutkan dengan kompilasi Sylpheed
$ tar -yxvf sylpheed-0.6.1.tar.bz2
$ cd sylpheed-0.6.1
$ ./configure --prefix=/usr --enable-gpgme --enable-ssl
Option enable-ssl bisa anda aktifkan jika menginginkan dukungan SSL untuk koneksi POP3 atau IMAP.
$ make
$ su
# make install
Kini anda siap menggunakan MUA Sylpheed, di KDE anda tinggal menekan tombol Alt-F2 dan mengisi sylpheed untuk menjalankannya. Berikut penjelasan beserta screenshotnya:
1. Di dalam Common Preferences bagian Privacy anda akan mendapat option enkripsi sign dan encrypt.
2. Jika anda mempunyai beberapa identitas atau account email lebih dari satu Sylpheed mempunyai option masing-masing untuk setiap account.
3. Untuk mengirim pesan ter-encrypt sewaktu mengedit email klik option Message, di sini anda akan mendapatkan pilihan apakah pesan akan ditandatangani atau di-encrypt atau kedua-duanya.
4. Setelah mengklik tombol Send Sylpheed akan meminta anda memasukkan passphrase.
5. Kemudian Sylpheed akan meminta konfirmasi anda kunci publik penerima yang akan dipakai, kemudian Sylpheed akan mengirimkan email.
6. Sama seperti MUA lainnya pada saat Sylpheed membaca email yang di-encrypt akan muncul dialog untuk memasukkan passphrase, berikut contoh email yang telah sukses di-decrypt, ada dua baris informasi attachment dan informasi tandatangan pengirim.
4.4 Utility GnuPG
Untuk memudahkan mengadministrasi daftar kunci publik ada aplikasi frontend GUI untuk GnuPG ini yang bernama GPA (GNU Privacy Assistant). GPA bisa anda download di:
ftp://ftp.gnupg.org/gcrypt/alpha/gpa/gpa-0.4.1.tar.gz