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/


Sabtu, 06 April 2019

Apa itu Blockchain?


Kenapa Anda harus mengetahuinya?


Dalam pergaulan sehari-hari, begitu banyak teman yang menanyakan tentang Bitcoin. Ya, Bitcoin...
Sebenarnya Bitcoin adalah pelopor tentang lahirnya teknologi blockchain ini. Karena konsep blockhain sangat bagus, dalam perkembangannya sampai saat ini banyak lahir blockchain-blockchain baru.

Teknologi blockchain menjanjikan banyak perubahan dalam banyak industri seperti; finansial, pembayaran, properti dan voting. Teknologi ini telah mampu menarik banyak investor masuk kedalamnya. Banyak diantara teman-teman kita dalam pergaulan sehari-hari yang menanyakan dan mempunyai Bitcoin adalah sebagain kecil dari orang yang tertarik dan masuk menjadi investor. Tetapi untuk diketahui, cukup banyak perusahaan/orang besar yang masuk baik sebagai investor maupun masuk langsung menerapkan teknologi blockchain seperti IBM, Fidelity, JP Morgan dan barisan-barisan banking yang ditarik oleh Ripple*.

Salah satu pemanfaatan teknologi blockchain yang paling populer adalah Initial Coin Offerings (ICO). Blockchain mengubah cara startup mengumpulkan modal dan memungkinkan banyak orang untuk investasi pada satu teknologi/startup.

Jadi, apa itu blockchain dan bagaimana cara kerjanya?


Secara sederhana, blockchain adalah sebuah database saja. Ya, hanya database. :) Sepertinya sederhana, tetapi revolusioner. Mari simak penjelasan berikut.

Database ini terdistribusi dan dapat dicopy oleh semua orang yang ingin menggunakannya. Ini sangat berbeda dengan konsep database yang konvensional yang dikontrol dan dikuasai oleh 'single entity'.

Hm... Semua orang dapat memiliki databasenya. Bukankah ini tidak aman? 


Dalam blockchain, ada pengguna yang berhak melakukan transaksi dan ada mesin-mesin yang bertugas untuk memvalidasi transaksi. 

Setiap pengguna dalam blockchain memiliki alamat dan masing-masing alamat tersebut adalah unik dan hanya pengguna itu saja yang dapat melakukan transaksi melalui alamat tersebut. Alamat ini sebenarnya adalah konsep enkripsi asimetrik. 

Kata-kata yang cukup membingungkan bukan? :) ini berkaitan dengan enkripsi asimetrik, mari terus membaca agar paham.

Enkripsi Asimetrik

Saat ini, ada 2 tipe enkripsi; enkripsi simetrik dan enkripsi asimetrik. 

Simetrik enkripsi cukup sederhana, dalam bahasa lain lebih sering disebut dengan enkripsi saja. Setiap pengguna yang ingin mendekrip kata-kata yang terenkripsi, maka pengguna ini harus saling berbagi kata kunci. 

Konsep ini tidak mungkin diterapkan dalam blockchain dimana sangat banyak pengguna. Anda tidak mungkin memberitahu password/kata-kunci Anda pada setiap orang.

Enkripsi asimetrik, mari saya jelaskan dengan kata-kata yang lebih sederhana melalui kasus yang terjadi pada kehidupan sehari-hari;
Kita ambil contoh interaksi antara si Anu dan si Budi, dimana si Budi akan mengirimkan satu batang emas kepada si Anu. 
- Untuk membuat transaksi ini aman, maka si Anu membeli sebuah gembok yang pastinya dilengkapi dengan kuncinya.
- Si Anu menyampaikan kepada si Budi; "Kalau kamu ingin mengirimkan emas kepada saya, tolong masukkan kedalam kotak kamu 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. 

Begitulah konsep asimetrik enkripsi jika dilogikakan dalam kehidupan nyata. Tukang pos tidak akan dapat membuka kotak tersebut karena dia tidak punya kuncinya. 
Anda dapat mencoba enkripsi asimetrik seperti yang pernah saya buat pada link berikut (RSA Boy).

Miner

Pada database konvensional, kita ambil contoh Bank, validatornya hanya satu yaitu bank itu sendiri. 

Dalam blockhain, validator lazim disebut dengan istilah penambang. Validator tugasnya adalah memastikan transaksi valid dan meletakkan transaksi dalam database. Masing-masing blockchain menerapkan teknik yang berbeda-beda dalam memvalidasi tranksaksi ini. Umumnya validasi membutuhkan komputasi yang rumit. Sehingga ini memerlukan komputer yang canggih dan tenaga listrik yang cukup banyak untuk melakukan komputasi tersebut.

Pada public blockchain, ada sangat banyak validator. Mereka saling berkompetisi untuk melakukan validasi transaksi. Siapa yang cepat melakukan validasi, maka dialah yang berhak meletakkan data kedalam database, medapatkan reward dan memberitahukan kepada validator lainnya bahwa transaksi telah divalidasi.




*) Sebuah blockchain yang fokus kepada pengiriman uang secara global, "One frictionless experience to send money globally"

Backup Semua Database PostgreSQL dalam Container

Langkah 1: Identifikasi Container PostgreSQL Gunakan perintah docker ps untuk menemukan container PostgreSQL: docker ps Cata...