Professional Documents
Culture Documents
Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org
1. Pendahuluan
Perdagangan di Internet hampir secara eksklusif bergantung pada lembaga keuangan yang
berfungsi sebagai pihak ketiga tepercaya untuk memproses pembayaran elektronik. Meskipun
sistem ini bekerja cukup baik untuk sebagian besar transaksi, sistem ini masih memiliki kelemahan
yang melekat pada model berbasis kepercayaan. Transaksi yang benar-benar tidak dapat
dibatalkan tidak benar-benar memungkinkan, karena lembaga keuangan tidak dapat menghindari
mediasi sengketa. Biaya mediasi meningkatkan biaya transaksi, membatasi ukuran transaksi
praktis minimum dan memotong kemungkinan untuk transaksi kasual kecil, dan ada biaya yang
lebih luas dalam hilangnya kemampuan untuk melakukan pembayaran non-reversibel untuk
layanan yang tidak dapat dibalikkan. Dengan adanya kemungkinan pembalikan, kebutuhan akan
kepercayaan menyebar. Pedagang harus waspada terhadap pelanggan mereka, merepotkan mereka
untuk mendapatkan lebih banyak informasi daripada yang seharusnya mereka butuhkan.
Persentase tertentu dari penipuan diterima sebagai hal yang tidak dapat dihindari. Biaya dan
ketidakpastian pembayaran ini dapat dihindari secara langsung dengan menggunakan mata uang
fisik, tetapi tidak ada mekanisme untuk melakukan pembayaran melalui saluran komunikasi tanpa
pihak yang dipercaya.
Yang dibutuhkan adalah sebuah sistem pembayaran elektronik berdasarkan bukti kriptografi
dan bukannya kepercayaan, yang memungkinkan dua pihak yang bersedia untuk bertransaksi
secara langsung satu sama lain tanpa memerlukan pihak ketiga yang terpercaya. Transaksi yang
secara komputasi tidak praktis untuk dibatalkan akan melindungi penjual dari penipuan, dan
mekanisme escrow rutin dapat dengan mudah diimplementasikan untuk melindungi pembeli.
Dalam makalah ini, kami mengusulkan sebuah solusi untuk masalah pembelanjaan ganda dengan
1
menggunakan server stempel waktu terdistribusi peer-to-peer untuk menghasilkan bukti komputasi
dari urutan kronologis transaksi. Sistem ini aman selama node-node yang jujur secara kolektif
mengontrol lebih banyak daya CPU daripada kelompok node penyerang yang bekerja sama.
2
2. Transaksi
Kami mendefinisikan koin elektronik sebagai rantai tanda tangan digital. Setiap pemilik
mentransfer koin ke pemilik berikutnya dengan menandatangani hash dari transaksi sebelumnya
dan kunci publik dari pemilik berikutnya secara digital dan menambahkannya ke akhir koin.
Penerima pembayaran dapat memverifikasi tanda tangan tersebut untuk memverifikasi rantai
kepemilikan.
Transaksi Transaksi Transaksi
Ve Ve
Tanda kas rifi Tanda kas rifi Tanda
Tangan i Tangan i Tangan
Pemilik 0 Pemilik 1 Pemilik 2
s s
Kunci Pribadi Mak Kunci Mak Kunci Pribadi
u u
Pemilik 1 Pribadi Pemilik 3
Pemilik 2
Masalahnya tentu saja adalah penerima pembayaran tidak dapat memverifikasi bahwa salah
satu pemilik tidak membelanjakan koin secara ganda. Solusi yang umum dilakukan adalah
dengan memperkenalkan sebuah otoritas pusat yang terpercaya, atau mint, yang memeriksa setiap
transaksi untuk mengetahui adanya pembelanjaan ganda. Setelah setiap transaksi, koin harus
dikembalikan ke percetakan untuk menerbitkan koin baru, dan hanya koin yang diterbitkan
langsung dari percetakan yang dipercaya tidak akan dibelanjakan ganda. Masalah dengan solusi ini
adalah bahwa nasib seluruh sistem uang bergantung pada perusahaan yang menjalankan
percetakan, dengan setiap transaksi harus melalui mereka, seperti halnya bank.
Kita membutuhkan cara agar penerima pembayaran mengetahui bahwa pemilik sebelumnya
tidak menandatangani transaksi sebelumnya. Untuk tujuan kami, transaksi paling awal adalah
transaksi yang dihitung, jadi kami tidak peduli dengan upaya pembelanjaan ganda di kemudian
hari. Satu-satunya cara untuk memastikan tidak adanya transaksi adalah d e n g a n mengetahui
semua transaksi. Dalam model berbasis mint, mint mengetahui semua transaksi dan memutuskan
mana yang lebih dulu tiba. Untuk mencapai hal ini tanpa pihak yang dipercaya, transaksi harus
diumumkan secara publik [1], dan kita membutuhkan sebuah sistem bagi para partisipan untuk
menyetujui riwayat tunggal dari pesanan yang mereka terima. Penerima pembayaran
membutuhkan bukti bahwa pada saat setiap transaksi, mayoritas node setuju bahwa transaksi
tersebut adalah yang pertama kali diterima.
Hash Hash
Blokir Blokir
Blokir Blokir
Tx Tx ... Tx Tx ...
5. Jaringan
Langkah-langkah untuk menjalankan jaringan adalah sebagai berikut:
Node selalu menganggap rantai terpanjang sebagai rantai yang benar dan akan terus bekerja
untuk memperpanjangnya. Jika dua node menyiarkan versi yang berbeda dari blok berikutnya
secara bersamaan, beberapa node mungkin akan menerima salah satunya terlebih dahulu. Dalam
4
hal ini, mereka akan mengerjakan yang pertama kali mereka terima, tetapi menyimpan cabang
yang lain untuk berjaga-jaga jika cabang tersebut menjadi lebih panjang. Ikatan akan terputus
ketika proof-of-work berikutnya ditemukan dan salah satu cabang menjadi lebih panjang; node
yang bekerja pada cabang yang lain kemudian akan beralih ke cabang yang lebih panjang.
5
Siaran transaksi baru tidak harus mencapai semua node. Selama mereka mencapai banyak
node, mereka akan masuk ke dalam blok tidak lama kemudian. Siaran blok juga toleran terhadap
pesan yang terputus. Jika sebuah node tidak menerima sebuah blok, node tersebut akan
memintanya ketika menerima blok berikutnya dan menyadari bahwa ia melewatkan satu blok.
6. Insentif
Sesuai dengan konvensi, transaksi pertama dalam sebuah blok adalah transaksi khusus yang
memulai koin baru yang dimiliki oleh pencipta blok tersebut. Hal ini menambah insentif bagi node
untuk mendukung jaringan, dan menyediakan cara untuk mendistribusikan koin ke dalam
sirkulasi, karena tidak ada otoritas pusat yang mengeluarkannya. Penambahan jumlah koin baru
yang konstan secara konstan dapat dianalogikan seperti penambang emas yang mengeluarkan
sumber daya untuk menambahkan emas ke dalam sirkulasi. Dalam kasus kita, waktu CPU dan
listrik yang dikeluarkan.
Insentif juga dapat didanai dengan biaya transaksi. Jika nilai output dari sebuah transaksi lebih
kecil dari nilai inputnya, selisihnya adalah biaya transaksi yang ditambahkan ke nilai insentif dari
blok yang berisi transaksi tersebut. Setelah sejumlah koin yang telah ditentukan telah beredar,
insentif dapat beralih sepenuhnya ke biaya transaksi dan sepenuhnya bebas dari inflasi.
Insentif ini dapat membantu mendorong node untuk tetap jujur. Jika seorang penyerang yang
serakah dapat mengumpulkan lebih banyak daya CPU daripada semua node yang jujur, dia harus
memilih antara menggunakannya untuk menipu orang dengan mencuri kembali pembayarannya,
atau menggunakannya untuk menghasilkan koin baru. Dia seharusnya merasa lebih
menguntungkan untuk bermain sesuai aturan, aturan yang menguntungkannya dengan lebih
banyak koin baru daripada gabungan koin orang lain, daripada merusak sistem dan keabsahan
kekayaannya sendiri.
Blokir Blokir
Tajuk Blok (Blok Hash) Tajuk Blok (Blok Hash)
Header blok tanpa transaksi akan menjadi sekitar 80 byte. Jika kita mengasumsikan bahwa
blok dibuat setiap 10 menit, 80 byte * 6 * 24 * 365 = 4,2MB per tahun. Dengan sistem komputer
yang biasanya dijual dengan RAM 2GB pada tahun 2008, dan Hukum Moore memprediksi
pertumbuhan saat ini sebesar
1,2GB per tahun, penyimpanan seharusnya tidak menjadi masalah, bahkan jika header blok harus
6
disimpan dalam memori.
7
8. Verifikasi Pembayaran yang Disederhanakan
Memverifikasi pembayaran dapat dilakukan tanpa harus menjalankan seluruh node jaringan.
Seorang pengguna hanya perlu menyimpan salinan header blok dari rantai proof-of-work
terpanjang, yang dapat diperolehnya dengan menanyakan kepada node jaringan sampai dia yakin
bahwa dia memiliki rantai terpanjang, dan mendapatkan cabang Merkle yang menghubungkan
transaksi ke blok yang dicap waktunya. Dia tidak dapat memeriksa transaksi tersebut untuk dirinya
sendiri, tetapi dengan menghubungkannya ke suatu tempat dalam rantai, dia dapat melihat bahwa
node jaringan telah menerimanya, dan blok yang ditambahkan setelahnya akan mengonfirmasi
bahwa jaringan telah menerimanya.
Hash01 Hash23
Hash2 Hash3
Tx3
Dengan demikian, verifikasi ini dapat diandalkan selama node yang jujur mengendalikan
jaringan, tetapi lebih rentan jika jaringan dikuasai oleh penyerang. Walaupun node jaringan dapat
memverifikasi transaksi untuk diri mereka sendiri, metode yang disederhanakan ini dapat tertipu
oleh transaksi yang dibuat oleh penyerang selama penyerang dapat terus menguasai jaringan.
Salah satu strategi untuk melindungi dari hal ini adalah dengan menerima peringatan dari node
jaringan ketika mereka mendeteksi blok yang tidak valid, meminta perangkat lunak pengguna
untuk mengunduh blok penuh dan memperingatkan transaksi untuk mengkonfirmasi
ketidaksesuaian. Bisnis yang sering menerima pembayaran mungkin masih ingin menjalankan
node mereka sendiri untuk keamanan yang lebih independen dan verifikasi yang lebih cepat.
Transaksi
Dal Kelu
am ar.
Dal ...
am
...
Perlu dicatat bahwa fan-out, di mana sebuah transaksi bergantung pada beberapa transaksi, dan
transaksi-transaksi tersebut bergantung pada banyak transaksi lainnya, tidak menjadi masalah di
8
sini. Tidak pernah ada kebutuhan untuk mengekstrak salinan lengkap dari riwayat transaksi.
9
10. Privasi
Model perbankan tradisional mencapai tingkat privasi dengan membatasi akses informasi kepada
pihak yang terlibat dan pihak ketiga yang dipercaya. Keharusan untuk mengumumkan semua
transaksi kepada publik menghalangi metode ini, tetapi privasi masih dapat dipertahankan dengan
memutus aliran informasi di tempat lain: dengan menjaga kunci publik tetap anonim. Publik dapat
melihat bahwa seseorang mengirimkan sejumlah uang kepada orang lain, tetapi tanpa informasi
yang menghubungkan transaksi tersebut kepada siapapun. Hal ini mirip dengan tingkat informasi
yang dikeluarkan oleh bursa saham, di mana waktu dan ukuran dari setiap transaksi, "rekaman",
dipublikasikan, tetapi tanpa memberitahukan siapa saja yang bertransaksi.
Sebagai firewall tambahan, pasangan kunci baru harus digunakan untuk setiap transaksi agar
tidak terhubung dengan pemilik yang sama. Beberapa penautan masih tidak dapat dihindari
dengan transaksi multi-input, yang tentu saja mengungkapkan bahwa input mereka dimiliki oleh
pemilik yang sama. Resikonya adalah jika pemilik dari sebuah kunci terungkap, penautan dapat
mengungkapkan transaksi lain yang dimiliki o l e h pemilik yang sama.
11. Perhitungan
Kami mempertimbangkan skenario penyerang yang mencoba untuk membuat rantai alternatif
lebih cepat daripada rantai yang jujur. Bahkan jika hal ini berhasil, hal ini tidak membuat sistem
terbuka terhadap perubahan yang sewenang-wenang, seperti menciptakan nilai secara tiba-tiba
atau mengambil uang yang tidak pernah menjadi milik penyerang. Node tidak akan menerima
transaksi yang tidak valid sebagai pembayaran, dan node yang jujur tidak akan pernah menerima
blok yang berisi transaksi tersebut. Seorang penyerang hanya dapat mencoba mengubah salah satu
transaksinya sendiri untuk mengambil kembali uang yang baru saja ia belanjakan.
Perlombaan antara rantai jujur dan rantai penyerang dapat dikarakteristikkan sebagai Binomial
Random Walk. Kejadian sukses adalah rantai jujur diperpanjang satu blok, meningkatkan
keunggulannya sebesar +1, dan kejadian gagal adalah rantai penyerang diperpanjang satu blok,
mengurangi jarak sebesar -1.
Probabilitas penyerang untuk mengejar ketertinggalan dari defisit yang diberikan dapat
dianalogikan dengan masalah Kehancuran Penjudi. Misalkan seorang penjudi dengan kredit tak
terbatas memulai dengan defisit dan memainkan percobaan dalam jumlah tak terbatas untuk
mencoba mencapai titik impas. Kita dapat menghitung probabilitas dia mencapai titik impas, atau
penyerang dapat mengejar rantai yang jujur, sebagai berikut [8]:
qz
={ 1 jika
(q / p)z jika p�q p≤q}
10
Dengan asumsi kita bahwa p > q, probabilitasnya turun secara eksponensial seiring bertambahnya
jumlah blok yang harus dikejar oleh penyerang. Dengan peluang yang tidak menguntungkannya,
jika dia tidak melakukan serangan yang beruntung ke depan sejak awal, peluangnya menjadi
semakin kecil saat dia semakin tertinggal.
Kita sekarang mempertimbangkan berapa lama penerima transaksi baru harus menunggu
sebelum merasa yakin bahwa pengirim tidak dapat mengubah transaksi. Kita asumsikan bahwa
pengirim adalah penyerang yang ingin membuat penerima percaya bahwa dia membayarnya untuk
sementara waktu, kemudian mengubahnya untuk membayar kembali kepada dirinya sendiri
setelah beberapa waktu berlalu. Penerima akan diberi tahu ketika hal itu terjadi, tetapi pengirim
berharap hal itu sudah terlambat.
Penerima membuat pasangan kunci baru dan memberikan kunci publik kepada pengirim sesaat
sebelum penandatanganan. Hal ini mencegah pengirim untuk mempersiapkan rantai blok
sebelumnya dengan mengerjakannya secara terus menerus sampai ia cukup beruntung untuk
mendapatkan cukup banyak blok, kemudian mengeksekusi transaksi pada saat itu juga. Setelah
transaksi terkirim, pengirim yang tidak jujur mulai bekerja secara rahasia pada rantai paralel yang
berisi versi alternatif dari transaksinya.
Penerima menunggu sampai transaksi ditambahkan ke sebuah blok dan z blok telah terhubung
setelahnya. Dia tidak mengetahui jumlah pasti dari kemajuan yang telah dibuat oleh penyerang,
tetapi dengan mengasumsikan bahwa blok-blok yang jujur membutuhkan waktu rata-rata yang
diharapkan per blok, potensi kemajuan penyerang akan menjadi sebuah distribusi Poisson dengan
nilai yang diharapkan:
q
λ=z
p
{ }
∞ k e−λ ⋅ (q / p) (z − k ) jika k ≤ z
∑λ k! 1 jika k
k =0
�z
Mengatur ulang untuk menghindari penjumlahan ekor distribusi yang tak terbatas...
z λk e-λ (z- k)
1- k!
(1-(q / p) )
∑
k =0
#include <math.h>
double AttackerSuccessProbability(double q, int z)
{
p ganda = 1,0 - q;
double lambda = z * (q / p);
double sum = 1.0;
int i, k;
for (k = 0; k <= z; k++)
{
double poisson = exp(-lambda);
for (i = 1; i <= k; i++)
poisson *= lambda / i;
sum -= poisson * (1 - pow(q / p, z - k));
}
jumlah pengembalian;
11
}
12
Menjalankan beberapa hasil, kita dapat melihat probabilitas turun secara eksponensial dengan z.
q=0.1
z=0 P=1.0000000
z=1 P=0.2045873
z=2 P=0.0509779
z=3 P=0.0131722
z=4 P=0.0034552
z=5 P=0.0009137
z=6 P=0.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
z=10 P=0.0000012
q=0.3
z=0 P=1.0000000
z=5 P=0.1773523
z=10 P=0.0416605
z=15 P=0.0101008
z=20 P=0.0024804
z=25 P=0.0006132
z=30 P=0.0001522
z=35 P=0.0000379
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006
P <0,001
q=0,10 z=5
q=0.15 z=8
q=0.20 z=11
q=0.25 z=15
q=0.30 z=24
q=0.35 z=41
q=0.40 z=89
q=0.45 z=340
12. Kesimpulan
Kami telah mengusulkan sebuah sistem untuk transaksi elektronik tanpa bergantung pada
kepercayaan. Kami memulai dengan kerangka kerja koin biasa yang terbuat dari tanda tangan
digital, yang memberikan kontrol yang kuat terhadap kepemilikan, tetapi tidak lengkap tanpa cara
untuk mencegah pembelanjaan ganda. Untuk mengatasi hal ini, kami mengusulkan sebuah
jaringan peer-to-peer yang menggunakan proof-of-work untuk mencatat riwayat transaksi publik
yang dengan cepat menjadi tidak praktis untuk diubah oleh penyerang jika node-node yang jujur
mengontrol mayoritas daya CPU. Jaringan ini kuat dalam kesederhanaannya yang tidak
terstruktur. Node bekerja secara bersamaan dengan sedikit koordinasi. Mereka tidak perlu
diidentifikasi, karena pesan tidak diarahkan ke tempat tertentu dan hanya perlu dikirimkan
berdasarkan upaya terbaik. Node dapat meninggalkan dan bergabung kembali dengan jaringan
s e s u k a h a t i , menerima rantai bukti kerja sebagai bukti dari apa yang terjadi saat mereka
pergi. Mereka memberikan suara dengan kekuatan CPU mereka, mengekspresikan penerimaan
mereka terhadap blok yang valid dengan bekerja untuk memperpanjangnya dan menolak blok
yang tidak valid dengan menolak untuk mengerjakannya. Aturan dan insentif yang dibutuhkan
dapat ditegakkan dengan mekanisme konsensus ini.
13
Referensi
[1] W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.
[2] H. Massias, X.S. Avila, dan J.-J. Quisquater, "Desain dari sebuah layanan timestamping yang aman
dengan persyaratan kepercayaan yang minimal," Dalam Simposium ke-20 tentang Teori Informasi
di Benelux, Mei 1999.
[3] S. Haber, W.S. Stornetta, "Bagaimana cara memberi stempel waktu pada dokumen digital," Dalam
Journal of Cryptology, vol 3, no 2, halaman 99-111, 1991.
[4] D. Bayer, S. Haber, W.S. Stornetta, "Meningkatkan efisiensi dan keandalan digital time-stamping,"
Dalam Sequences II: Methods in Communication, Security and Computer Science, halaman 329-334,
1993.
[5] S. Haber, W.S. Stornetta, "Secure names for bit-strings," Dalam Prosiding Konferensi ACM ke-4
tentang Keamanan Komputer dan Komunikasi, halaman 28-35, April 1997.
[6] A. Back, "Hashcash - sebuah tindakan balasan penolakan
layanan," http://www.hashcash.org/papers/hashcash.pdf,
2002.
[7] R.C. Merkle, "Protokol untuk kriptosistem kunci publik," Dalam Proc. 1980 Simposium
Keamanan dan Privasi, IEEE Computer Society, halaman 122-133, April 1980.
[8] W. Feller, "Pengantar teori probabilitas dan aplikasinya," 1957.
14