MODUL 5
KRIPTOGRAFI DENGAN OPENSSL
ASYMMETRIC CRYPTOGRAPHY
Dalam praktikum kali ini, kita akan menggunakan perintah OpenSSL seperti berikut:
Perintah ini akan dijelaskan pada percobaan ini. Sebagai tambahan, pada beberapa
perintah dalam percobaan kali ini, Anda juga akan menggunakan perintah openssl enc
dan dgst, yang sudah dipelajari pada Lab03. Untuk deskripsi lengkap, silahkan
menggunakan perintah man openssl.
openssl genrsa
Untuk melakukan operasi kriptografi asimetris sederhana dengan menggunakan
algoritma RSA, pertama Anda harus membangkitkan sepasang key RSA dengan perintah
openssl genrsa, dengan sintak sebagai berikut:
dimana:
-out, menyimpan pasangan key yang dibangkitkan oleh algoritma RSA ke dalam file
menunjukkan filename;
numbits menunjukkan panjang N bit (misalnya RSA modulo);
Network Security Prodi Telekomunikasi PENS
openssl rsa
untuk mengatur dan menggunakan operasi kriptografi dengan key RSA, Anda dapat
menggunakan perintah openssl rsa dengan sitak sebagai berikut:
openssl pkeyutl
perintah openssl pkeyutl dapat digunakan untuk melakukan proses
enkripsi/dekripsi asimetris, membuat signature dan memverikiasinya, dan pertukaran
key (key exchange) dengan menggunakan berbagai algoritma asimetris. Saat ini,
algoritma-algoritma yang didukung antara lain:
RSA, untuk proses enkripsi dan dekripsi, proses sign dan verify data.
Diffie-Hellman (DH) untuk pertukaran key simetris.
Elliptic Curve (EC) untuk proses sign dan verify dengan ECDSA dan untuk membangun
sebuah key simetris dengan ECDH.
dimana:
-in file_input, menunjukkan file input yang berisi pesan yang akan dienkripsi,
dekripsi, sign atau verify;
-out file_output, menunjukkan file hasil operasi pkeyutl ke dalam file_out;
-inkey file_key, menunjukkan bahwa file file_key berisi public key atau private
key.
Network Security Prodi Telekomunikasi PENS
openssl dgst
perintah ini digunakan untuk mengkalkulasi dan memverifikasi sebuah digital signature,
sintak perintah ini adalah:
dimana:
-sign private_key, menghitung signature pada file file_to_sign, dengan
menggunakan algoritma hash dan private key yang ditunjukkan oleh file private_key;
-verify public_key, memverifikasi signature yang diaplikasikan dalam file
file_to_sign, dengan menggunakan algoritma digest dan public key yang ditunjukkan
oleh file public_key. Perintah ini merupakan mandatory dimana file signature yang
digunakan dengan opsi –signature;
-signature signature_file, menunjukkan dimana file yang berisi signature
untuk diverifikasi untuk kasus dengan opsi –verify.
openssl rand
perintah ini membangkitkan nbytes pseudo-random dan menyimpannya ke dalam file
file_name.
untuk detail deskripsi perintah di atas, Anda dapat menggunakan perintah man.
Network Security Prodi Telekomunikasi PENS
1.4 PERCOBAAN
1. Prosedur Operasional pada Kriptografi Asimetris
1.1 Key Generation
PERCOBAAN 1:
Atas dasar perintah OpenSSL genrsa, coba Anda tulis perintah untuk membangkitkan
pasangan key dengan ukuran 2048 bit RSA dan menyimpannya ke dalam file rsa.key
dalam kotak di bawah ini:
Setelah Anda membangkitkan pasangan key di atas, sekarang periksa isi dari file
rsa.key dengan menggunakan perintah berikut ini:
openssl rsa –in rsa.key –text
PERTANYAAN:
(a) Apa tujuan dari parameter modulus.publicExponent.privateExponent,
dan prime* ?
(b) Parameter mana yang dapat digunakan untuk membuat public (sebagai bagian dari
public key) dan parameter mana yang digunakan sebagai informasi yang secret atau
sebagai bagian dari private key ?
(c) Bandingkan parameter-parameter tersebut dengan parameter-parameter teman
Anda. Apakah ada parameter yang sama (common) ?, jika “YA” tuliskan bagian
informasi yang mana dan apa tujuannya ?
(d) Misalkan, Anda ingin mendistribusikan RSA public key ke teman Anda. Coba Anda
tuliskan perintah yang digunakan untuk mengekstrak RSA public key dari file
rsa.key ke file rsa.public dalam kotak di bawah ini dan coba lihat isi dari file
rsa.public tersebut.
sebelumnya. Buat sebuah pesan teks, misalnya “Ini adalah pesan yang sangat rahasia”
(tanpa tanda “), dan simpan ke dalam file plain.
(a) PERTANYAAN awal: bagaimana Anda menggunakan pasangan RSA key untuk
memastikan kerahasiaan dari file plain tersebut ? RSA key mana yang harus Anda
gunakan ?
(b) Tulis perintah OpenSSL untuk mengenkripsi file plain, dan simpan hasilnya dalam
file encRSA (PETUNJUK: gunakan perintah pkeyutl – silahkan dilihat di
pembahasan sebelumnya tentang penggunaan perintah pkeyutl).
Catatan: Secara teori, RSA dapat mengenkripsi pesan apapun yang direpresentasikan
sebagai nilai biner yang lebih kecil daripada nilai dari modulo (yaitu sebuah string 2048
bit untuk sebuah RSA key 2048 bit). Akan tetapi, format dalam PKCS#1 memiliki
pembatasan karena proses enkapsulasi pesan menjadi pesan terenkripsi, dan juga
disebabkan karena pemakaian padding. Dalam prakteknya, jika Anda memiliki N Byte
RSA key, Anda dapat melakukan proses enkripsi/dekripsi dengan perintah OpenSSL jika
dan hanya jika data (plaintext) panjangnya maksimum N – 11 Byte.
(a) PERTANYAAN: error apa yang dialami oleh A (paling tidak ada 2 error di sini)
(b) Dengan menggunakan perintah OpenSSL enc dan pkeyutl, tulis perintah dengan
urutan yang benar yang harus dilakukan oleh A dan B dalam kotak di bawah ini:
(c) Serangan (attack) jenis apa yang dapat dilakukan oleh C agar dapat mendapatkan
dan memodifikasi pesan yang dilakukan oleh A dan B? dan bagaimana Anda dapat
mengatasi jenis serangan seperti ini?
(d) Algoritma asimetris apa lagi yang dapat digunakan oleh A dan B sebagai ganti
algoritma RSA? dan coba Anda tulis perintahnya dalam kotak di bawah ini.
(b) Apa yang terjadi pada saat C memodifikasi data yang dikirim oleh A ke B?. Dalam
prakteknya, apa yang terjadi jika C memodifikasi data aslinya atau jika C
Network Security Prodi Telekomunikasi PENS
memodifikasi signature? Dan apa yang terjadi jika C mengganti public key dari B
dengan public key nya C?
Catatan bahwa, disamping perintah pkeyutl, Anda juga dapat menggunakan perintah
dgst untuk melakukan proses signing dan verifying. Sebagai contoh, Anda dapat
membangun digital signature terhadapt file teks msg dengan perintah OpenSSL berikut
ini:
openssl dgst –sha1 –sign RSAkey –out msg.sig msg
(c) Coba Anda tulis perintah untuk memverifikasi signature dari perintah di atas dalam
kotak berikut ini:
- Memodifikasi file yang berisi public key A, misalnya a.pubkey, dengan cara
melakukan perintah berikut:
echo “ini adalah public key A, C boleh menggunakannya” >>
a.pubkey
- C sign (dengan perintah dgst) file a.pubkey yang sudah dimodifikasi tadi.
- C mengirimkan file a.pubkey dan file signature ke A.
- Dengan cara yang sama C juga melakukannya ke B.
Coba apa yang dapat Anda simpulkan dari percobaan ini?
3. Performance
PERCOBAAN 8:
Dengan menggunakan perintah OpenSSL speed untuk membandingkan performansi
dari algoritma:
- RSA dengan panjang key 512, 1024, 2048 dan 4096 bit.
Apakah performansi algoritma RSA akan turun terhadap perubahan panjang key?
Apa perbedaan antara perintah yang menggunakan public key dan private key?
- Digital signature dengan 1024 bit RSA, 1024 bit DSA, 160 bit ECDSA (ecdsap160).
Apa perbedaan yang Anda temukan? Apakah elliptic curve cryptography (ECC) lebih
efisien daripada RSA/DSA? Apakah juga lebih efisien untuk sign atau verify dengan
menggunakan DSA/ECDSA? Ataukah lebih efisien saat sign atau verify dengan
menggunakan RSA?
- High security dengan 2048 bit RSA, 2048 bit DSA, 256 bit ECDSA (ecdsap256).
(Catatan bahwa dalam prakteknya 256 bit ECC menjamin level security yang sama
dengan 3072 bit RSA/DSA). Apa perbedaan yang Anda temukan dibandingkan
dengan step sebelumnya? Bagaimana performansi untuk RSA/DSA dan ECDSA
dengan penambahan panjang bit key (dan juga bagaimana dengan level security
nya)?
- Simetris, asimetris kriptografi dan digest dengan 2048 bit RSA, 2048 bit DSA, 128 bit
AES dan SHA-256. (Catatan, 128 bit AES menjamin level security yang sama dengan
3072 bit RSA/DSA). Apa yang dapat Anda bandingkan dari hasil yang didapat?
Seberapa cepat kriptografi simetris (aes-128-cbc, sha256) jika dibandingkan
dengan kriptografi asimetris (rsa2048, dsa2048)?