Kamis, 08 Agustus 2019

Compile Bitcoin pada Ubuntu 18.04 Langsung dari Sourcenya

Ada salah satu faktor penting yang perlu diingat dari internet dan khususunya Bitcoin, yaitu: banyak scam dan banyak sumber yang sulit untuk dipercaya.

Jadi, mengkompile Bitcoin sendiri mungkin salah satu hal yang perlu dilakukan untuk menhindari hal-hal yang tidak diinginkan.

Pada tutorial kali ini, kita akan mengkompile Bitcoin pada mesin Ubuntu 18.04.

Langkah 1. Install Git

$ sudo apt-get install git

Anda bisa melewatkan bagian ini jika telah mempunyai GIT


Langkah 2. Clone Bitcoin langsung dari Github

$ git clone https://github.com/bitcoin/bitcoin.git


Langkah 3. Cek release dan checkout

Bitcoin sampai saat ini sangat aktif dikembangkan. Strategi developmentnya langsung diletakkan pada branch master. Sehingga dengan ini, branch master bukan merupakan branch stable. Untuk itu, kita perlu cek release Bitcoin.

Saat tulisan ini dibuat, Bitcoin Core 0.18.0 dengan commit 2472733

Pindah ke direktori setelah clone

$ cd bitcoin

Checkout Bitcoin Core 0.18.0

$ git checkout 2472733


Langkah 4. Install Dependensi

4.1. Build essential untuk membolehkan software di compile dari sourcenya

$ sudo apt-get install build-essential


4.2. Install Berkeley Database

Ubuntu 18.04 mempunyai Berkeley DB pada paketnya. Ini tidak kompatibel dengan persyaratan Bitcoin, sehingga kita harus men-install Berkeley DB sendiri.

Sebelum menginstal, kita akan download menggunakan perintah wget dan cek keaslian yang sudah kita download dengan sha256sum

$ cd ~
$ wget http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz
$ echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef  db-4.8.30.NC.tar.gz' | sha256sum -c
$ tar -xvf db-4.8.30.NC.tar.gz
$ cd db-4.8.30.NC/build_unix
$ mkdir -p build
$ BDB_PREFIX=$(pwd)/build
$ ../dist/configure --disable-shared --enable-cxx --with-pic --prefix=$BDB_PREFIX
$ make install
$ cd ~


4.3. Install dependensi lainnya

$ sudo apt-get install autoconf libtool pkg-config libboost-all-dev libssl-dev libprotobuf-dev protobuf-compiler libevent-dev libqt4-dev libcanberra-gtk-module


Langkah 5. Compile Bitcoin Core

$ cd bitcoin
$ ./autogen.sh
$ ./configure CPPFLAGS="-I${BDB_PREFIX}/include/ -O2" LDFLAGS="-L${BDB_PREFIX}/lib/" --with-gui
$ make

Untuk ./configure, jika Anda hanya menjalankan bitcoin tanpa GUI, maka opsi --with-gui dapat dihilangkan sehingga perintahnya menjadi 

$ ./configure CPPFLAGS="-I${BDB_PREFIX}/include/ -O2" LDFLAGS="-L${BDB_PREFIX}/lib/"

Langkah 6. Menjalankan Bitcoin

6.1. Menjalankan Bitcoin GUI

$ src/qt/bitcoin-qt

6.2. Menjalankan daemon (tanpa GUI)

$ src/bitcoind

Langkah 7. Membuat Bitcoin dapat dijalankan secara global (pilihan)

Dengan menjalankan ini, Bitcoin akan dapat dijalankan oleh setiap user yang terdaftar dalam sistem

$ sudo make install

Rabu, 07 Agustus 2019

Cara Install KVM pada Ubuntu 18.04

KVM (Kernel-based Virtual Machine) adalah modul virtualisasi pada kernel Linux yang membolehkan fungsi hypervisor.(1) KVM sangat ringan dan membuat fungsi khusus untuk virtualisasi pada Intel VT dan AMD-V.

Setiap menjalankan kvm, dia akan menjalankan modul kvm-intel.ko pada prosesor Intel dan kvm-amd.ko untuk prosesor AMD.

Halaman resmi KVM dapat dilihat di https://www.linux-kvm.org/page/Main_Page

Blog dari developer aktif untuk KVM dapat dilihat pada https://planet.virt-tools.org

Untuk tidak lama-lama, berikut langkah-langkah instalasi KVM pada Ubuntu 18.04

Langkah 1. Verifikasi apakah system support atau tidak untuk KVM

$ egrep -c '(vmx|svm)' /proc/cpuinfo

Jika outputnya lebih besar dari 1, maka komputer support KVM

Setelah itu, install aplikasi kvm-ok dengan command berikut:

$ sudo apt install cpu-checker

Verifikasi instalasi dengan command berikut:

$ sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used



Langkah 2. Install paket yang dibutuhkan oleh KVM


$ sudo apt update
$ sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager


User yang melakukan instalasi ini juga akan dimasukkan kedalam group pengguna kvm (libvirtd) secara otomatis.


Langkah 3. Menjalankan servis libvirtd

Ketika aplikasi KVM diinstal, dia akan otomatis berjalan. Tetapi jika dia tidak otomatis berjalan, maka servisnya dapat dilihat dengan peritah berikut

$ sudo systemctl status libvirtd

Jika tidak berjalan, perintah untuk membuat dia enable dan berjalan sama dengan perintah yang digunakan pada service Ubuntu 18.04 lainnya:

$ sudo systemctl daemon-reload
$ sudo systemctl enable libvirtd
$ sudo systemctl start libvirtd



Langkah 4. Jalankan Virtual Machine Manager

Jalankan

$ sudo virt-manager

File tersebut terlihat seperti berikut:



Langkah 5. Buat Server

Langkah ini cukup mudah;




Jika Anda mendapati langkah nomor 3 bermasalah, silahkan sesuaikan konfigurasi BIOS untuk enable Virtual Machine.




Sumber:
1. https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine

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"