Kamis, 07 November 2019

Berapa harga pembuatan software, website dan aplikasi mobile?

Jika Anda ingin membuat website, software atau aplikasi mobile, pasti pertanyaan seperti pada judul diatas terlintas dikepala Anda.

Untuk lebih mudah dalam tulisan ini, sofware, aplikasi web atau aplikasi mobile kita sebut sebagai aplikasi saja.

Pertanyaan tersebut diatas sangat umum ditanyakan oleh orang yang ingin membuat sebuah aplikasi.  Beberapa developer yang Anda tanya, mereka tidak langsung menjawab. Sebenarnya ini pertanda bagus, karena developer yang sedang Anda tanya cukup berpengalaman. Dia pasti akan balik menanyakan beberapa hal seperti deskripsi aplikasi, lingkup pekerjaan dan fitur yang diinginkan.

Mari kita kembali lagi dan membuat pertanyaan yang lebih spesifik. Misalnya; Berapakah harga untuk membuat aplikasi seperti Bukalapak?

Walaupun si developer sudah tahu bisnis model yang dijalankan oleh Bukalapak tesebut, mereka tidak serta merta langsung mengetahui bagaimana proses Bukalapak bekerja dibelakang layar. Lazimnya dia akan menganalisa halaman-halaman yang dibutuhkan untuk membuat aplikasi tersebut. Seperti; Login, lupa password, landing, halaman satu produk, halaman produk per-kategori, halaman dashboard penjual, halaman dashboard untuk admin (anda sebagai pemilik web app) dan lain sebagainya. Selain hal tersebut, pasti developer akan memikirkan bagaimana desain infrastrukturnya seperti; apakah menggunakan shared hosting, virtual private server atau colocation. Lebih jauh lagi analisanya tentang security seperti secure socket layer dan lain sebagainya.

Jadi, sudah terbayang bukan betapa sebenarnya relatif kompleknya sebuah proses development dan aplikasi bekerja. Tentu saja seorang developer yang berpengalaman tidak mau asal beri jawaban, terlalu murah jadi rugi, terlalu mahal pemesan lari/rugi. Sementara itu menyesuaikan harga layanan dengan kualitas software yang dihasilkan juga bukan merupakan solusi karena bisa merusak reputasi baik developer maupun pemesan aplikasi.

Setelah kalkulasi hal-hal tersebut, maka developer akan mengkalkulasi sumber daya  dan waktu yang dibutuhkan untuk menyelesaikan pekerjaan.

Software development adalah jenis pekerjaan penawaran jasa. Semua pekerjaan jasa erat kaitannya dengan sumber daya manusia.

Sebagai analogi yang relatif cocok dan dapat dipahami semua orang adalah pekerjaan membangun rumah. Dalam pekerjaan jasa membangun rumah, ada banyak tukang yang terlibat. Komponen harga utama dari jasa pembangunan rumah adalah upah harian.

Jadi, sangat tidak mungkin jika membuat website perusahaan yang waktu pengerjaan selama 30 hari dibayar 3 juta. Ini artinya membayar developer 100.000 IDR/hari. Bayangkan jika developernya tinggal di Jakarta, ini tidak mencukupi biaya hidup minimum di Jakarta. Dapat dipastikan software developernya bulan depan sudah ngutang alias rugi.

Selain faktor sumber daya manusia, development sangat erat juga kaitannya dengan waktu. Saya membagi 2 kategori hubungan antara sumber daya manusia dan upah per satuan waktu:
1. Developer yang berpengalaman, upah satuan waktu mahal.
2. Developer yang belum berpengalaman, upah satuan waktu relatif murah.

Jika kita ambil persamaan harga untuk developer yang berpengalaman dan developer yang tidak berpengalaman, maka hasil akhir harga sebenarnya sama.

Kita mengambil contoh kasus pengerjaan website perusahaan:
Jika kita berikan kepada developer yang berpengalaman, dia sanggup mengerjakan dalam waktu 15 hari dengan upah harian 2 juta. Total biaya yang harus dibayarkan oleh perusahaan pemesan adalah 30 juta.
Sementara jika kita berikan kepada developer yang belum berpengalaman, dia mengerjakan dalam waktu 30 hari dengan upah harian 1 juta. Total biaya yang dibayarkan oleh perusahaan adalah sama, yaitu 30 juta.

Jadi, berapakah harga pembuatan aplikasi itu?


Dari tulisan diatas, kita dapat menarik kesimpulan bahwa pembuatan aplikasi itu tidak ada standar bakunya tetapi harga sangat erat kaitannya dengan waktu yang dibutuhkan.

Sebagai seseorang yang sedang mencari jasa pembuatan aplikasi, Anda sebaiknya sedikit menganalisa bisnis model aplikasi yang akan Anda buat dan usahakan mampu menakar harga. Ibarat seperti dalam lelang baik swasta atau pemerintah, ada istilah harga perkiraan sendiri (HPS). Istilah ini sangat lazim pada proyek lelang di pemerintahan. Sehingga dengan ini Anda dapat menakar apakah harga yang ditawarkan oleh developer mahal atau tidak.


Sebagai penutup, saya ingin menambahkan 2 hal yang sebaiknya disiapkan untuk keberhasilan aplikasi yang Anda pesan;

1. Deskripsi
Tentau Anda punya gambaran tentang aplikasi yang diinginkan. Gambaran ini bisa diceritakan kepada developer* atau dituliskan pada sebuah dokumen. Gambaran atau deskripsi inilah yang akan diterjemahkan oleh developer menjadi sebuah aplikasi.

2. Fitur
Salah satu kunci sukses dalam pengembangan aplikasi adalah terpenuhinya fitur-fitur yang diinginkan.
Sebagai pemesan, tentu saja Anda dapat menggambarkan fitur-fitur yang diinginkan dan harus ada dalam aplikasi.




------
*) Idealnya disini yang lebih kompeten adalah sistem analis. Tetapi untuk memudahkan bercerita dan mengambil sudut pandang dari seorang pemesan jasa development langsung kepada seorang developer.

Senin, 16 September 2019

Apa itu Blockchain dan Kenapa Anda Harus Mengetahui tentang Blockchain

Blockchain menjadi topik yang hangat diperbincangkan belakangan ini. Penerapan teknologi blockchain sebenarnya sudah ada sejak tahun 1991 oleh Stuart Haber and W. Scott Stornetta. Tetapi, teknologi blockchain relatif baru populer sekitar 10 tahun belakangan ini karena munculnya Bitcoin sejak tahun 2009.

Secara rancangan teknologi, blockchain dapat mengubah banyak industri seperti finansial, pembayaran, properti dan pemilihan suara. Blockchain termasuk teknologi yang fenomenal karena secara singkat dapat membuat banyak investor tertarik. Menurut tradeix.com, pada tahun 2016, lebih dari 280 juta USD perusahaan meletakkan investasinya pada teknologi blockchain.(1) Investor-investor besar pada teknologi blockchain diantaranya; Fidelty, IBM, JP Morgan dan belakangan adalah Facebook.

Salah satu penerapan teknologi blockchain adalah cryptocurrency dan pembayaran. Dikutip dari techjury.net dan Nividous statistik memperlihatkan bahwa volume transaksi pada sektor crypto currency dan pembayaran ini mencapai 270 miliar USD. Dan sejak tahun 2010, teknologi blockchain telah mampu melampaui Western Union dalam hal pengiriman uang secara online.(2)

Lebih lanjut menurut interestingengineering.com, blockhain adalah salah satu trend yang perlu dipantau pada tahun 2019.

Dari statistik diatas, mungkin kiranya Anda patut untuk mengenal atau mengetahui lebih jauh tentang teknologi blockchain.


Jadi, apa itu blockchain?


Dalam istilah sederhana, blockchain adalah sebuah teknik penyimpanan data yang datanya satu sama lain terhubung dengan kriptografi, tidak bisa diubah, tidak bisa dipalsukan, transparan, mempunyai penanda waktu, terdistribusi dan mempunyai aturan tertentu (konsensus) yang dipatuhi oleh penggunanya.

Dengan keunggulan dan konsep dasar tersebut, para pengembang teknologi, investor dan pengguna yang haus akan penerapan teknologi baru berlomba-lomba untuk berpartisipasi dalam teknologi ini.

Investor, pengembang dan pengguna melihat teknologi ini dapat berdaya saing pada masa yang akan datang sehingga. Dikutip dari statista.com, pengguna wallet cryptocurrency di dunia sampai saat ini sudah mencapai 40 juta wallet.(3)

Jumlah pengguna wallet blockchain 2016 - 2019 (statista.com)



Blockchain dan Bitcoin serupa, tapi tidak sama


Tidak dipungkiri, teknologi blockchain populer karena Bitcoin sehingga banyak orang mengira bahwa Bitcoin adalah blockchain.

Untuk mengenal perbedaan dari blockchain dan bitcoin ini, saya membuatkan sebuah tabel perbandingan seperti berikut;


Bitcoin Blockchain
Pengertian Sebuah cryptocurrency yang menggunakan teknologi blockchain Sebuah teknik penyimpanan data yang datanya satu sama lain terhubung dengan kriptografi, tidak bisa diubah, tidak bisa dipalsukan
Fungsi Utama Sebagai alat pembayaran dan bekerja tanpa kontrol terpusat Secara konsep, blockchain dapat digunakan untuk apa saja
Apakah digunakan untuk perdagangan? Ya Karena merupakan sebuah teknologi, blockchain tidak terbatas untuk perdangangan saja
Apakah mempunyai fluktuasi harga? Ya Tidak


Jadi dapat ditarik kesimpulan, Bitcoin dan blockchain itu serupa, tetapi tidak sama. Blockchain adalah teknologi yang menggerakkan Bitcoin.


Teknologi blockchain digunakan untuk apa saja?

Keuangan

Teknologi blockchain mampu menciptakan cara yang aman dalam penyimpanan nilai. Teknologi blockchain juga mampu mengeliminasi pihak tengah dalam transaksinya sehingga digunakan sebagai alat tukar atau yang lebih familiar dengan istilah crypto currency. 

Properti

Bisnis properti adalah bisnis yang sangat besar. Banyak praktek-praktek jahat digunakan oleh berbagai macam pihak untuk menarik keuntungan dengan cara-cara yang tidak baik. Salah satu cara yang paling populer digunakan pada bisnis ini adalah pemalsuan dokumen. 

Pada teknologi blockchain, data-data yang disimpan didalamnya dipastikan tidak dapat dipalsukan. Data-data yang ada dalam blockchain hanya akan berpindah jika ada entitas yang berhak menggerakkanya. Sehingga, pada bisnis ini blockhain dapat dijadikan sebagai alat pencatatan kepemilikan properti. 

Supply chain management

Pemalsuan produk pada industri global merugikan bisnis milyaran dollar setiap tahunnya. 

Dengan karakteristik blockchain yang historynya saling terhubung dan tidak dapat dipalsukan, maka teknologi blockchain dapat mengatasi masalah ini. 

Pemilihan

Pemilihan baik itu untuk memilih kepala negara maupun sampai pemilihan ketua sebuah organisasi kadang-kadang berjalan dengan tidak baik. Pada organisasi yang korup, kita akan banyak menemui praktek yang tidak benar. 

Dengan karakteristik blockchain yang transparan dan hanya satu entitas yang mampu memindahkan data (satu key untuk satu surat suara), persoalan ini dapat diatasi. 

Kesimpulan

Blockchain adalah teknologi yang sangat menarik. Penerapan teknologi blockchain tidak hanya sebatas empat kategori diatas. Konsep-konsep dasar blockhain membuat blockchain akan banyak diadopsi penerapannya pada masa yang akan datang.

Sumber:
(1) https://tradeix.com/essential-blockchain-technology-concepts/
(2) https://techjury.net/stats-about/blockchain/
(3) https://www.statista.com/statistics/647374/worldwide-blockchain-wallet-users/

Kamis, 29 Agustus 2019

Cara Instal OpenVPN pada Ubuntu 18.04

1. BAGIAN SERVER

1.1. Update system
$ sudo apt update
$ sudo apt upgrade

1.2. Buat direktori supaya supaya mudah mengelompokkan pekerjaan
$ mkdir openvpn

1.3. Download menggunakan perintah wget
$ wget https://git.io/vpn -O openvpn-install.sh

1.4. Instal
$ sudo bash openvpn-install.sh

Ikuti perintahnya seperti berikut
Welcome to this OpenVPN "road warrior" installer!

I need to ask you a few questions before starting the setup.
You can leave the default options and just press enter if you are ok with them.

First, provide the IPv4 address of the network interface you want OpenVPN
listening to.
IP address: 157.23.3.8

Which protocol do you want for OpenVPN connections?
   1) UDP (recommended)
   2) TCP
Protocol [1-2]: 1

What port do you want OpenVPN listening to?
Port: 1194

Which DNS do you want to use with the VPN?
   1) Current system resolvers
   2) 1.1.1.1
   3) Google
   4) OpenDNS
   5) Verisign
DNS [1-5]: 3

Finally, tell me your name for the client certificate.
Please, use one word only, no special characters.
Client name: myopenvpnclient

Okay, that was all I needed. We are ready to set up your OpenVPN server now.
Press any key to continue...

Catatan tambahan:
- Untuk pemilihan DNS, selalu pilih 1.1.1.1 atau Google karena koneksi dengan Google atau 1.1.1.1 selalu dapat diakses darimana saja.
- Jika server VPN Anda dilindungi oleh Firewall, maka perlu diaktifkan port 1194 agar dapat diakses darimana saja.

1.5. Jalankan service
Untuk dapat menjalankan service walaupun server di restart, maka jalankan perintah
$ sudo systemctl enable openvpn.service

Untuk menjalakan service
$ sudo systemctl start openvpn.service

Sama seperti perintah systemctl lainnya, Anda dapat mengetikkan perintah; status, restart, stop


1.6. Pindahkan hasil konfigurasi yang dihasilkan
Biasanya, file konfigurasi akan diletakkan pada /home/username/namafile.ovpn
Maka, untuk dapat dikelompokkan sehingga kita tidak mencari-cari file konfigurasi ini dikemudian hari, maka letakkan pada folder yang telah kita buat diata /home/username/openvpn

$ sudo mv /home/username/myopenvpnclient.ovpn /home/username/openvpn/myopenvpnclient.ovpn

1.7. Pindahkan kepemilikan sehingga bisa di download
$ sudo chown username:username myopenvpnclient.ovpn

1.8. Download file tersebut menggunakan Filezilla atau perintah SCP


2. BAGIAN CLIENT

2.1. Client untuk Mac, Windows, IOS dan Android
Untuk client cukup mudah, Anda hanya perlu install openvpn client:
1. Mac https://tunnelblick.net
2. Windows https://openvpn.net/community-downloads/
3. IOS https://apps.apple.com/us/app/openvpn-connect/id590379981
Untuk memasukkan file konfigurasi dengan ekstensi .ovpn kedalam IPhone, bisa melalui email dan itunes. Tetapi ada cara yang lebih praktis jika Anda adalah pengguna Mac, cukup hanya dengna menggunakan Airdrop untuk menginstal konfigurasinya kedalam IPhone
4. Android https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=en

2.2. Client untuk Ubuntu 18.04
2.2.1. Install OpenVPN
$ sudo apt install openvpn

2.2.2. Download file konfigurasi pada OpenVPN server dan jadikan sebagai file konfigurasi pada client
$ sudo cp myopenvpnclient.ovpn   /etc/openvpn/client.conf

2.2.3. Jalankan client
$ sudo openvpn --client --config /etc/openvpn/client.conf

OK, Selamat! sekarang Anda sudah dapat menggunakan VPN.

Sabtu, 24 Agustus 2019

Terungkap, Beginilah Cara Membuat Module NodeJS Berjalan pada Client Side (Browser)

Haha... lupakan soal judul. Ini nge-blog malas-malasan. Lihat saja, tampilan blog-nya berantakan.

Tanpa basa-basi, mari kita mulai saja...

NodeJS runtime tidak berjalan pada client side. Tetapi pada dasarnya NodeJS menggunakan JavaScript.

Module-module NodeJS ini sangat banyak dan bagus, tetapi lagi... dia tidak dapat dijalankan melalui client side.

Tetapi lagi dan lagi... untungnya ada module NodeJS yang bernama browserify. Module ini dapat membuat module NodeJS lainnya berjalan pada browser.

Klik disini untuk melihat lebih lengkap tentang browserify.org

Mari ikuti langkah-langkahnya:

1. Install Browserify
$ npm install -g browserify

2. Buat module untuk diconvert
Ide untuk aplikasi ini sangat sederhana, yaitu meng-convert string kedalam base64 menggunakan module base64.

2.1. Buat folder
$ mkdir appbase64
$ cd appbase64

2.2. Install base64
$ npm install base-64

2.3. Convert module base64 dengan browserify

2.3.1. Buat file untuk di convert
$ vim index.js
Kode diatas menggunakan Vim. Tetapi Anda boleh mengganti sesuai editor favorit Anda.

2.3.2. Isikan baris berikut kedalam index.js
var base64 = require('base-64');

2.3.3. Convert menggunakan browserify
$ browserify index.js -o baseme.js

2.3.4. Ganti code sedikit supaya dapat digunakan pada browser;
Pada dasarnya hasil convert terlihat seperti berikut:

Variabel base64 pada code tersebut tidak dapat digunakan diluar function. 
Untuk dapat menggunakannya, kita harus membuat variabel global.

Masukkan baris ini paling atas;
var base64; 
Dan hilangkan var pada baris ke 3 sehingga menjadi seperti ini:
base64 = require('base-64');

Kode akan terlihat seperti gambar berikut:


3. Buat aplikasi web
Buat file index.html dengan editor favorit Anda dan masukkan code berikut:

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<script src="baseme.js" type="text/javascript" ></script>
</head>
<body>

<h1>My First Heading</h1>
<p>My first paragraph.</p>

</body>
</html>

4. Uji dengan developer console pada browser;
Terlihat seperti berikut:

Selesai... Semoga bermanfaat :)



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"

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...