tutorial asymmetric cryptografphy

ASYMMETRIC CRYPTOGRAPHY

PGP Secara Umum 

PGP adalah suatu metode enkripsi informasi yang bersifat rahasia sehingga jangan sampai diketahui oleh orang lain yang tidak berhak. Informasi ini bisa berupa E-mail yang sifatnya rahasia, nomor kode kartu kredit, atau pengiriman dokumen rahasia perusahaan melalui Internet. PGP menggunakan metode kriptografi yang disebut “public key encryption”: yaitu suatu metode kriptografi yang sangat sophisticated.

 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 megencryptnya 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 mengenerate 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 menggenerate kode hash sedangkan versi Diffie-Hellman menggunakan algoritma SHA-1.

Adapun prinsip kerja dari PGP adalah sebagai berikut : 
  •  PGP menggunakan teknik yang disebut public kec encryption dengan dua kode. Kode-kode ini berhubungan secara intrinstik, namun tidak mungkin untuk memecahkan satu sama lain, 
  • Ketika dibuat satu kunci, maka secara otomatis akan dihasilkan sepanjang kunci,yaitu kunci publik dan kunci rahasia. 
  • PGP menggunakan dua kunci, Pertama, kunci untuk proses enkripsi (kunci publik). Disebut kunci publik karena kunci yang digunakan untuk enkripsi ini akan diberitahukan kepada umum. Orang yang akan mengirimkan e-mail rahasia kepada kita harus mengetahui kunci publik ini. Kedua, kunci untuk proses deskripsi (kunci pribadi). Disebut kunci pribadi karena kunci ini hanya diketahui oleh kita sendiri. 
  • Karena dengan conventional crypto, di saat terjadi transfer informasi kunci, diperlukan suatu secure channel. Jika kita memiliki suatu secure channel, mengapa masih menggunakan crypto? Dengan public key system, tidak akan menjadi masalah siapa yang melihat kunci milik kita, karena kunci yang dilihat orang lain adalah yang digunakan hanya untuk enkripsi dan hanya pemiliknya saja yang mengetahui kunci rahasia tersebut. 

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, Rmi 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
Gambar 1. Cara kerja PGP encryption dan decryption 

A. Percobaan dengan asymmetric cryptography 

Pembuatan kunci (private dan public key) dengan pgp

a. Pada percobaan ini satu berfungsi untuk mengirim pesan yang terenkripsi (PC Client), dan satunya berfungsi untuk menerima pesan terenkripsi dan melakukan dekripsi terhadap pesan tersebut (PC Server). Sebelum PC Client mengirim pesan, maka PC Server akan membuat kunci terlebih dahulu, dan mengirimkan public key-nya ke PC Client. 
b. Pastikan FTP Server terinstall pada komputer PC Server. # apt-get install proftpd 
c. Pastikan wireshark diinstall pada komputer PC Client 
d. Jalankan wireshark pada komputer PC Client 
e. Pastikan komputer Client dan Server diinstall pgp # apt-get install gnupg 
f. Pada komputer PC Server lakukan langkah berikut : 
  •  Lakukan pemilihan algoritma yang digunakan untuk membuat keypair
debian:~# gpg --gen-key 
gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 

Please select what kind of key you want: 
 (1) DSA and Elgamal (default) 
 (2) DSA (sign only) 
 (5) RSA (sign only) 
Your selection? 1

  • Menentukan panjang keypair
DSA keypair will have 1024 bits
 ELG-E keys may be between 1024 and 4096 bits long. 
What keysize do you want? (2048) 1024

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

  • Memasukkan identitas diri
You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter)
Real name: Zen Hadi 
Email address: hadi@eepis-its.edu 
Comment: Percobaan dengan gpg 
You selected this USER-ID: "Zen Hadi (Percobaan dengan gpg)

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

  • Memasukkan passphrase 
You need a Passphrase to protect your secret key. 
Enter passphrase: => masukkan password anda disini 
 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. +++++..++++++++++.+++++++++++++++++++++++++.++++++++++++++++++++++++++++++.. .+++++.++++++++++++++++++++++++++++++..++++++++++.+++++++++++++++.+++++.. ......................................................>+++++............. ......................+++++ 
Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 282 more bytes) 
JIKA RANDOM BYTES YANG DIBUTUHKAN KURANG, ANDA DIMINTA UNTUK MENGETIKKAN BEBERAPA HURUF SECARA ACAK DAN CEPAT DARI KEYBOARD 

  • Hasil akhir dari pembuatan kunci 
gpg: key 14D0B4B3 marked as ultimately trusted 
public and secret key created and signed. 
gpg: checking the trustdb 
gpg: 3 marginal(s) needed, 1 complete(s) needed, 
PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u 
pub 1024D/14D0B4B3 2009-12-21 
 Key fingerprint = 6C4E 92F8 3263 BEC6 293C 4E2C 8F3E 41D4 14D0 B4B3 uid  Zen Hadi (Percobaan dengan PGP)
  sub 1024g/66715799 2009-12-21 

  • Untuk mengetahui kunci public yang sudah dibuat 
debian:~# gpg --list-keys 
/root/.gnupg/pubring.gpg 
------------------------ 
pub 1024D/14D0B4B3 2009-12-21 => public key uid  Zen Hadi (Percobaan dengan PGP) 
sub 1024g/66715799 2009-12-21 => subkey 
catatan: 1024D (menggunakan DSA), 1024g (dengan elgamal) 14D0B4B3 : keyID 

  • Untuk mengetahui kunci privat yang sudah dibuat 
debian:~# gpg --list-secret-keys 
/root/.gnupg/secring.gpg
 ------------------------ 
sec 1024D/14D0B4B3 2009-12-21 => private key uid Zen Hadi (Percobaan dengan PGP) 
ssb 1024g/66715799 2009-12-21 => subkey

Proses eksport kunci public dengan pgp 

Sebelum komputer Client mengirim pesan ke komputer Server, maka komputer Server harus mengekspor terlebih dahulu kuncinya ke komputer Client 

debian:~# gpg --export -a zenhadi@eepis-its.edu 
-----BEGIN PGP PUBLIC KEY BLOCK----- 
Version: GnuPG v1.4.9 (GNU/Linux) mQGiBEsvQLURBADuWgukfl0ab8H6AhTwTUDx3rIgGnOFKGilzAO/a/xzEV/yULWf Wc37maXpNMIkY3755Y+mg86K4f2MOx2yFLZLqeQqk7R95bffueKJvkULCPeAsMkb M4pv8nSMF74fcDXguEr7WAnDNKQe48AiCJyxKsQJehJPn8SGPP1Egl6Z7wCg1sdd qLIHN11vPDAzvEAbgBHRDqkD/RwA0GueQmsHURDbqLi4rRX6aqkKj/vn5xp6Mdes VYA9mV44rp6ompOA3N7hrb6Asu15I2+AnWGeM/swoyA6eKJQLJ9rRC//XE+/vw1L dOqStsHOqY/jVXz2f+sVJk7DxTqafRcHcALoGOI6bh+2RTm9ftzRXeS3hqSHTMiH 4SrrA/0TpVdx9q7y/hrEV2C43tbCOIrKQdDHslSd2YZ4VZ1PRHTOe8c1xJdTOA3f ruVZuph9oIj/avPV/9/FzemLXPv/PoYSfghQmrkVQoo5WVkCUJSRM8i01ErsuKdC BpJjRerWMcGn6wpd2uF+eZaxk6C01QHwelisJVk0Zv8vYpd9ELRATXVoYW1tYWQg WmVuIEhhZGkgKFBlcmNvYmFhbiBkZW5nYW4gUEdQKSA8emVuaGFkaUBlZXBpcy1p dHMuZWR1PohgBBMRAgAgBQJLL0C1AhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AA CgkQjz5B1BTQtLO6nACgip74hWf40JAwxYybCNgSXnrFdSgAoKeMcoyuM/V5xxJh 0aaDWZVeANwtuQENBEsvQLUQBACCHI+nDTEqTwNPPDKkvSeOmvgXk8QGW27ykmtE phHoPTNqhZCJZFFvZgDq376caDZjeHIGLEEsxehqNkTATUGnEHN75e6PrjYe1ruJ 0F3v3vWwNoObKEe9JCxU8XD5SyjRqjM3EZBO2gNoCn8mssQWHa9ti02dhBTbXIZg 0S9R1wADBQP+Msgk9jtdrCsytcKdPaND+XT7YxMRRIPGvq29zvkXkxmludQMkWBR EYkFqy6kzth2XE140nwRRX13QthE0ijVyRI94ZEv+q5XVITClP8udreUgUZB6mIG 463XjS/XGXLYVUw65bq5G492rZbKB69YBPvGvv5z5jwWnsv2Wp3TrmKISQQYEQIA CQUCSy9AtQIbDAAKCRCPPkHUFNC0sw+kAJ9RjiUrIh+PfwerQRzAyOyR8c+W9ACg qM3ae2XOXreafMPtZwENBgBOY6o= =3ul+ 
-----END PGP PUBLIC KEY BLOCK----- 

Note : Agar kunci tersebut bisa dikirim ke komputer Client, bisa disimpan dulu public key-nya dalam sebuah file 
 # gpg --export –a zenhadi@eepis-its.edu > zenhadiPub.asc -a : menghasilkan output ASCII

Untuk mengetahui isi kunci private bisa digunakan perintah :
debian:~# gpg --export-secret-keys -a zenhadi@eepis-its.edu

Proses pengiriman public key 

Ketika komputer client ingin mengirim pesan ke komputer server, maka server harus memberikan kunci publiknya terlebih dahulu ke komputer client, bisa dilakukan dengan ftp : 
debian:~# ftp 10.252.42.99     => no ip dari computer server 
Connected to 10.252.42.99. 
220 ProFTPD 1.3.1 Server (Debian) [::ffff:10.252.42.99] 
Name (10.252.42.99:root): faruq 
331 Password required for faruq 
Password: 
230 User faruq logged in Remote system type is UNIX. 
Using binary mode to transfer files. 
ftp> get zenhadiPub.asc        => send public key ke computer client 
local: zenhadiPub.asc remote: zenhadiPub.asc 
200 PORT command successful 
150 Opening BINARY mode data connection for zenhadiPub.asc
226 Transfer complete 
1377 bytes sent in 0.00 secs (40749.3 kB/s) 
ftp> quit 
221 Goodbye. 

Proses enkripsi dengan public key dan pengiriman pesan 

Pada komputer client, lakukan beberapa perintah berikut ini : 
 Import kunci yang sudah dikirim oleh Server.
 # gpg --import zenhadiPub.asc 

NOTE : Jika di computer client pada waktu mengimport kunci public terdapat error, warp error atau clock in the future, itu artinya jam dan tanggal di computer client tidak matching dengan computer server, dan harus disamakan dulu. 
 Cek kunci publik, apakah sudah diterima oleh Client atau belum. 
# gpg --list-keys 
 Buat file text berisi pesan yang akan dikirim ke komputer Server. 
debian:~# nano coba.txt 
Praktikum dengan kriptograpi asimetris PGP 
Lakukan proses enkripsi terhadap 
file coba.txt # gpg --encrypt –r zenhadi@eepis-its.edu -a coba.txt 
Keterangan :
 -a : plain text 
-r : recipient 
 Hasil enkripsi diatas akan menghasilkan file coba.txt.asc 
debian:~# cat coba.txt.asc 
-----BEGIN PGP MESSAGE----- 
Version: GnuPG v1.4.9 (GNU/Linux) hQEOAysCPq5mcVeZEAP+N1QNYGs7HNIKu+uLaOdWdPQ9nCTIQ50JVHu7bLGop9B2 fyJu0ky2roeWiIwFmsINBAPF4WZeuFUMlYiWJk7hV9zdtxUcnipmBbmMriPwaazn ZC6clboh9C3k2SMtNIWQp7XOgOObnYhJNj7N55fBspOyP8SBrRb57Ekdw97MUVkD /1FZaCY2JKGLeJ4C4V75uWUuHLYIYAnpUx8SnGb54C1XiATx25cB++rYDs8K3Dd+ 7ntosYLDwemai3i7lfjVAC1SitLrS62xZhscbkJEMilXG0y6p6Fiiwa2DNPzpbWX QsHQdoIX9T+QIdRwaGE9dpQa74pfEnG0ibJul95OU8C90lEBamLEJdE+lETcCsRH 33i6nSE9DYrQ8V6Cy/YRKdD53KLLZ97fDgH4o4QdYP4JFWw1YmtQutL7wzrIl0VY GctdADblPINxMCBpk9z0+DskWL8= =LqAh 
-----END PGP MESSAGE----- 

 Kirim file yang telah dienkripsi tersebut ke komputer tujuan (Server), dengan menggunakan ftp seperti langkah sebelumnya. 

Proses dekripsi 

Pastikan di komputer Server telah menerima pesan yang telah dienkripsi dari komputer client. Lakukan proses dekripsi file tersebut dengan menggunakan private key agar bisa membaca pesan aslinya. 

debian:~# gpg --decrypt coba.txt.asc 

You need a passphrase to unlock the secret key for 
user: "Zen Hadi (Percobaan dengan PGP) " 1024-bit ELG-E key, ID 66715799, created 2009-12-21 (main key ID 14D0B4B3) 
Enter passphrase: 
gpg: encrypted with 1024-bit ELG-E key, ID 66715799, created 2009-12-21 "Zen Hadi (Percobaan dengan PGP) " Praktikum dengan kriptograpi asimetris PGP => pesan asli


EmoticonEmoticon