Senin, 08 April 2019

Bermain enkripsi asimetrik dengan RSABoy

Internet, HTTP dan HTTPS


Internet erat kaitannya dengan kehidupan sehari-hari kita saat ini. Internet adalah sebuah sistem global yang saling terhubung yang biasanya menggunakan Transmission Control Protocol (TCP) / Internet Protocol (IP) untuk menghubungkan setiap perangkat.*

Internet dapat juga dikatakan sebagai sebuah sarana untuk komunikasi. Dalam komunikasi, sudah pasti menyertakan data-data. Untuk memudahkan transfer data-data tersebut yang biasanya terjadi melalui browser, maka dibuat protokol Hypertext Transfer Protocol (HTTP) yang merupakan turunan dari TCP/IP. **

Secara sederhana, HTTP ini mengatur komunikasi antara web browser dan web server. HTTP menggunakan clear text format. Penggunaan clear text format dalam mengirimkan data, tentu saja ini tidak aman. Jika saja ada orang yang berhasil meng-intercept pengiriman data ini, maka dia akan dapat melihat/menguasai data-data yang dikirimkan. Teknik intercept ini dalam dunia hacking biasanya disebut dengan Man in The Middle Attack.

Untuk membuat komunikasi aman, maka dibuatlah protokol HTTPs dimana penambahan S adalah sigkatan dari secure dimana data-data yang dikirimkan sudah di enkripsi sehingga orang-orang yang mencoba mendapatkan data tersebut tidak akan dapat membaca data tersebut. Pada tempat lain, penerima data perlu men-dekrip data tersebut sehingga dapat menbaca informasi yang dikirimkan.

Hampir semua proses tersebut diatas; enkripsi, dekripsi, kemanana komunikasi dinamakan dengan cryptografi.***


Enkripsi Simetrik dan Asimetrik


Sampai saat ini, ada 2 jenis enkripsi; simetrik dan asimetrik.

Pada enkripsi simetrik, kata kunci yang digunakan untuk enkrip dan dekrip adalah sama. Sehingga penerima dan pengirim harus saling mengirimkan kata kuncinya.

Pada enkripsi asimetrik, kata kunci yang digunakan tidak perlu dibagi kepada penerima. Begitu juga sebaliknya. Enkripsi ini menggunakan pasangan publick dan private key. Enkripsi ini lazim juga disebut dengan public-key encription/cryptography. Enkripsi jenis ini sangat praktis digunakan untuk berbagai macam keperluan karena pengirim tidak perlu mengirimkan kata-kuncinya kepada setiap orang yang menerimanya.

Enkripsi asimetrik dapat dijelaskan dengan contoh kehidupan nyata seperti berikut;
- Diketahui; si Anu dan si Budi ingin mengirimkan satu batang emas kepada si Anu.
- Untuk membuat transaksi ini aman, maka si Anu membeli sebuah gembok (pasti disertai kunci)
- Si Anu menyampaikan kepada si Budi; "Kalau kamu ingin mengirimkan emas kepada saya, tolong masukkan kedalam kotak yang kamu punya dan tutup dengan gembok saya ini", sambil memberikan gembok yang telah dibelinya.
 - Sehari setelah itu, si Budi pergi membeli emas dan meletakkan emas tersebut kedalam kotak dengan nama dia dan menutup kotak dengan gembok yang diberikan si Anu.
- Si Budi pergi ke kantor pos dan mengirimkan kotak tersebut kepada alamat si Anu.
Dengan contoh diatas, maka emas yang dikirim akan aman sampai di tujuan walaupun pak pos bisa melihat kotaknya.


Bermain dengan RSABoy


Sekitar satu tahun yang lalu, saya pernah membuatkan sebuah aplikasi sederhana yang saya beri nama RSABoy. Source code dapat dilihat pada https://github.com/nitzaalfinas/RSABoy

Mari mulai bermain-main RSABoy untuk dapat memahaminya melalui contoh kasus;

1. Disuatu kota Hoax, hiduplah Bolang yang mempunyai pendengaran tajam dan Batman kuat tetapi sudah cukup tua. Mereka adalah super hero yang baru saja kenal dan ingin saling bahu membahu menumpas kejahatan. Dikota ini banyak sekali informasi invalid yang beredar di masyarakat.

2. Untuk dapat berkomunikasi dengan aman dan tanpa hoax, maka mereka harus saling bertukan gembok. Eh... public key.

2.a. Bolang mengeksekusi perintah:
$ rsaboy.jar '{"command": "generate_key", "filename": "Bolang"}'

2.b. Batman mengeksekusi command:
$ rsaboy.jar '{"command": "generate_key", "filename": "Batman"}'

Perintah-perintah diatas menghasilkan private key dan public key. Bolang.priv.pem, Bolang.pub.pem, Batman.priv.pem, Batman.pub.pem.

3. Kemudian mereka saling bertukar public key.

4. Setelah satu minggu mereka berkenalan dan saling tukar gembok, eh... public key, maka tibalah saat yang ditunggu tunggu. Si Bolang mendengar sebuah keributan pencurian banteng di jalan Rabbit.

5. Dengan sigap si Bolang mengeksekusi perintah untuk mengirimkan pesan kepada si Batman.
Untuk mengirimkan perintah ini, Bolang perlu menggunakan gembok, eh... public key Batman. Perintah yang dijalankan adalah seperti berikut;

$ rsaboy.jar '{"command": "encrypt", "message": "Criminals are in action on Rabbit Road", "pubkey_file": "Batman.pub.pem"}' SKl21Quj/bGR1HMRNrc/qiNAFXIU8RAhBfJdQNmSwgHLKw1KFVfu78+jcQ8UAsXtG6hd8ih9y+Kpdu8aDSxGIh4MNaTBlibfuODdvjhRvBJEr+iX6rzN+2q3+2bwD/gyckePhdGyXNGEmQXTUCf9RWrsVur4gRNdzl5xiE/jQxDhrBo5IN8okTLYJ/5AQNQh2Ic7Rm91M4N70wOM/M0FWzrwFmBTFuQ3pC2+ZeMJfHR5KQ3EP1dNo4xA8GDjgSkE6fmkyWhbQspT3cLUKCHFfna9N+m8x0icbZ7MYFnzTREWrgewpNjuTFH9hmxnLQ7DWulyOlgR48V0RPQBCVr8Dg==

Setelah mendapatkan enkripsinya, maka dia perlu menempatkan dalam kotak bertanda Bolang. Atau dalam kata yang lebih rumit adalah memberikan tanda tangan atau signature.
Memberikan tanda tangan harus dilakukan dengan private key si Bolang sendiri. Perintahnya adalah seperti berikut:

$ rsaboy.jar '{"command": "sign", "message": "Criminals are in action on Rabbit Road", "privkey_file": "Bolang.priv.pem"}' btT3N2EFuokJUqXfW0IN9MrGe0pi/FuvQ3sFE987/B2OKHuzZnrLl0YVfRp1i3O4Nnrhf9AfCI9ELxQQ2OENDIPQa2iA8/hKEh23IwzZyYBCQGRHc6Gzreoo5OA3IvsXABtJLXJKaNJuKvwpIl0/lTMyqbxZt7Etbfh+LsOovXzSRlDwwvOWLPk5XF8b9UFJm9IWar/EsXhO4Ee6Me49nGc7CDApwzOvv1mufn36MyrdrmQGW6W9YYme58ZBWzYu9/UmH97JLcyXS/X6uYk/iXqWUC81uBO/QA0VpaaUkVXmwvKYLSHhzrEF5ubUrYsxGT/QSkbLK2IwPBD4kDYJUg==

Setelah itu, Bolang mengirimkan signature dan kata-kata yang sudah ter-enkripsi kepada Batman.

6. Batman menerima pesan dan langsung men-dekrip pesan yang diberikan menggunakan private key, eh... kunci Batman.

$ rsaboy.jar '{"command": "decrypt", "message": "SKl21Quj/bGR1HMRNrc/qiNAFXIU8RAhBfJdQNmSwgHLKw1KFVfu78+jcQ8UAsXtG6hd8ih9y+Kpdu8aDSxGIh4MNaTBlibfuODdvjhRvBJEr+iX6rzN+2q3+2bwD/gyckePhdGyXNGEmQXTUCf9RWrsVur4gRNdzl5xiE/jQxDhrBo5IN8okTLYJ/5AQNQh2Ic7Rm91M4N70wOM/M0FWzrwFmBTFuQ3pC2+ZeMJfHR5KQ3EP1dNo4xA8GDjgSkE6fmkyWhbQspT3cLUKCHFfna9N+m8x0icbZ7MYFnzTREWrgewpNjuTFH9hmxnLQ7DWulyOlgR48V0RPQBCVr8Dg==", "privkey_file": "Batman.priv.pem"}' 
Criminals are in action on Rabbit Road

Untuk mengetahui apakah benar ini pesan bukan hoax dan memang benar dikirimkan oleh sahabat super heronya yaitu Bolang, maka Batman harus memverifikasi dengan perintah berikut:

$ rsaboy.jar '{"command": "verify", "message": "Criminals are in action on Rabbit Road", "signature":"btT3N2EFuokJUqXfW0IN9MrGe0pi/FuvQ3sFE987/B2OKHuzZnrLl0YVfRp1i3O4Nnrhf9AfCI9ELxQQ2OENDIPQa2iA8/hKEh23IwzZyYBCQGRHc6Gzreoo5OA3IvsXABtJLXJKaNJuKvwpIl0/lTMyqbxZt7Etbfh+LsOovXzSRlDwwvOWLPk5XF8b9UFJm9IWar/EsXhO4Ee6Me49nGc7CDApwzOvv1mufn36MyrdrmQGW6W9YYme58ZBWzYu9/UmH97JLcyXS/X6uYk/iXqWUC81uBO/QA0VpaaUkVXmwvKYLSHhzrEF5ubUrYsxGT/QSkbLK2IwPBD4kDYJUg==", "pubkey_file": "Bolang.pub.pem"}' 
true

7. Ternyata benar, dan si Batman ganti sempak dulu sebelum mulai beraksi....



------------------------------------------------------

*) https://en.wikipedia.org/wiki/Internet
**) https://www.ibm.com/support/knowledgecenter/en/SSGMCP_5.2.0/com.ibm.cics.ts.internet.doc/topics/dfhtl_conintro.html
***) https://www.educba.com/cryptography-vs-encryption/


Tidak ada komentar:

Posting Komentar

Cara Mengetahui Besar Database PostgreSQL Tanpa Mendownloadnya

Berikut adalah langkah-langkah untuk mengetahui ukuran semua database di instance PostgreSQL yang berjalan di dalam kontainer Docker: 1. Men...