Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

Abstrak: Uang elektronik versi peer-to-peer murni memungkinkan pembayaran online dikirim langsung dari satu pihak ke pihak lain tanpa melalui lembaga keuangan. Tanda tangan digital merupakan salah satu solusinya, namun manfaat utamanya akan hilang jika pihak ketiga yang terpercaya masih diperlukan untuk mencegah pembelanjaan ganda. Kami mengusulkan solusi terhadap masalah pembelanjaan ganda dengan menggunakan jaringan peer-to-peer. Jaringan mencatat waktu transaksi dengan melakukan hashing ke dalam rantai bukti kerja berbasis hash yang sedang berlangsung, sehingga membentuk catatan yang tidak dapat diubah tanpa mengulangi bukti kerja tersebut. Rantai terpanjang tidak hanya berfungsi sebagai bukti rangkaian peristiwa yang disaksikan namun juga bukti bahwa rantai tersebut berasal dari kumpulan daya CPU terbesar. Selama sebagian besar daya CPU dikendalikan oleh node yang tidak bekerja sama untuk menyerang jaringan, node tersebut akan menghasilkan rantai terpanjang dan melampaui penyerang. Jaringan itu sendiri memerlukan struktur minimal. Pesan disiarkan berdasarkan upaya terbaik dan node dapat keluar dan bergabung kembali dengan jaringan sesuka hati, menerima rantai bukti kerja terpanjang sebagai bukti atas apa yang terjadi saat mereka pergi.
1. Perkenalan
Perdagangan di Internet hampir sepenuhnya bergantung pada lembaga keuangan yang bertindak sebagai pihak ketiga tepercaya untuk memproses pembayaran elektronik. Meskipun sistem ini berfungsi cukup baik untuk sebagian besar transaksi, sistem ini masih memiliki kelemahan yang melekat pada model berbasis kepercayaan. Transaksi yang sepenuhnya tidak dapat dibatalkan sebenarnya tidak mungkin dilakukan, karena lembaga keuangan tidak dapat menghindari mediasi perselisihan. Biaya mediasi meningkatkan biaya transaksi, membatasi ukuran transaksi praktis minimum dan memotong kemungkinan transaksi kecil yang biasa-biasa saja, dan terdapat biaya yang lebih besar dalam hilangnya kemampuan untuk melakukan pembayaran yang tidak dapat diubah untuk layanan yang tidak dapat dibatalkan. Dengan adanya kemungkinan pembalikan, kebutuhan akan kepercayaan pun menyebar. Pedagang harus waspada terhadap pelanggan mereka, mengganggu mereka untuk mendapatkan lebih banyak informasi daripada yang seharusnya mereka perlukan. Persentase penipuan tertentu dianggap tidak dapat dihindari. Ketidakpastian biaya dan pembayaran ini dapat dihindari secara langsung dengan menggunakan mata uang fisik, namun tidak ada mekanisme untuk melakukan pembayaran melalui saluran komunikasi tanpa pihak yang dipercaya.
Yang dibutuhkan adalah sistem pembayaran elektronik berdasarkan bukti kriptografi dan bukan kepercayaan, yang memungkinkan dua pihak yang berkeinginan untuk bertransaksi secara langsung satu sama lain tanpa memerlukan pihak ketiga yang tepercaya. Transaksi yang secara komputasi tidak praktis untuk dibalik akan melindungi penjual dari penipuan, dan mekanisme escrow rutin dapat dengan mudah diterapkan untuk melindungi pembeli. Dalam makalah ini, kami mengusulkan solusi terhadap masalah pembelanjaan ganda menggunakan server stempel waktu terdistribusi peer-to-peer untuk menghasilkan bukti komputasi dari urutan kronologis transaksi. Sistem ini aman selama node yang jujur secara kolektif mengontrol lebih banyak daya CPU dibandingkan kelompok node penyerang mana pun yang bekerja sama.
2. Transaksi
Kami mendefinisikan koin elektronik sebagai rantai tanda tangan digital. Setiap pemilik mentransfer koin ke pemilik berikutnya dengan menandatangani secara digital hash dari transaksi sebelumnya dan kunci publik dari pemilik berikutnya dan menambahkannya ke akhir koin. Penerima pembayaran dapat memverifikasi tanda tangan untuk memverifikasi rantai kepemilikan.

Masalahnya tentu saja adalah penerima pembayaran tidak dapat memverifikasi bahwa salah satu pemilik tidak membelanjakan dua kali koin tersebut. Solusi yang umum adalah dengan memperkenalkan otoritas pusat tepercaya, atau mint, yang memeriksa setiap transaksi untuk mengetahui adanya pembelanjaan ganda. Setelah setiap transaksi, koin harus dikembalikan ke percetakan uang untuk menerbitkan koin baru, dan hanya koin yang dikeluarkan langsung dari percetakan uang yang dipercaya tidak akan dibelanjakan ganda. Masalah dengan solusi ini adalah nasib seluruh sistem uang bergantung pada perusahaan yang menjalankan percetakan uang tersebut, dan setiap transaksi harus melalui mereka, seperti halnya bank. Kami memerlukan cara agar penerima pembayaran mengetahui bahwa pemilik sebelumnya tidak menandatangani transaksi sebelumnya. Untuk tujuan kami, transaksi paling awal adalah transaksi yang diperhitungkan, jadi kami tidak peduli dengan upaya pembelanjaan ganda di kemudian hari. Satu-satunya cara untuk memastikan tidak adanya transaksi adalah dengan mengetahui semua transaksi. Dalam model berbasis mint, mint mengetahui semua transaksi dan memutuskan mana yang lebih dulu sampai. Untuk mencapai hal ini tanpa pihak yang dipercaya, transaksi harus diumumkan secara publik [1], dan kita memerlukan sistem agar peserta dapat menyepakati satu riwayat urutan penerimaannya. Penerima pembayaran memerlukan bukti bahwa pada saat setiap transaksi, mayoritas node setuju bahwa transaksi tersebut adalah transaksi pertama yang diterima.
3. Server Stempel Waktu
Solusi yang kami usulkan dimulai dengan server stempel waktu. Server stempel waktu bekerja dengan mengambil hash dari blok item yang akan diberi stempel waktu dan mempublikasikan hash tersebut secara luas, seperti di surat kabar atau postingan Usenet [2-5]. Stempel waktu membuktikan bahwa data pasti ada pada saat itu, tentu saja, untuk bisa masuk ke dalam hash. Setiap stempel waktu menyertakan stempel waktu sebelumnya dalam hashnya, membentuk sebuah rantai, dengan setiap stempel waktu tambahan memperkuat stempel waktu sebelumnya.

4. Bukti Kerja
Untuk mengimplementasikan server stempel waktu terdistribusi secara peer-to-peer, kita perlu menggunakan sistem bukti kerja yang mirip dengan Hashcash Adam Back [6], daripada postingan surat kabar atau Usenet. Bukti kerja melibatkan pemindaian nilai yang ketika di-hash, misalnya dengan SHA-256, hash dimulai dengan sejumlah bit nol. Pekerjaan rata-rata yang diperlukan adalah eksponensial dalam jumlah nol bit yang diperlukan dan dapat diverifikasi dengan mengeksekusi satu hash.
Untuk jaringan stempel waktu, kami menerapkan bukti kerja dengan menambahkan nonce pada blok hingga ditemukan nilai yang memberikan hash blok tersebut bit nol yang diperlukan. Setelah upaya CPU dikeluarkan untuk memenuhi bukti kerja, blok tidak dapat diubah tanpa mengulangi pekerjaan. Karena blok-blok selanjutnya dirangkai setelahnya, pekerjaan untuk mengubah blok tersebut akan mencakup pengerjaan ulang semua blok setelahnya.

Bukti kerja juga memecahkan masalah penentuan keterwakilan dalam pengambilan keputusan mayoritas. Jika mayoritas didasarkan pada satu alamat IP satu suara, maka hal tersebut dapat ditumbangkan oleh siapa pun yang mampu mengalokasikan banyak IP. Proof-of-work pada dasarnya adalah satu CPU-satu suara. Keputusan mayoritas diwakili oleh rantai terpanjang, yang memiliki upaya pembuktian kerja terbesar yang diinvestasikan di dalamnya. Jika sebagian besar daya CPU dikendalikan oleh node yang jujur, rantai yang jujur akan tumbuh paling cepat dan melampaui rantai pesaing mana pun. Untuk memodifikasi blok sebelumnya, penyerang harus mengulang bukti kerja blok tersebut dan semua blok setelahnya, lalu mengejar dan melampaui pekerjaan node yang jujur. Kami akan menunjukkan nanti bahwa kemungkinan penyerang yang lebih lambat mengejar berkurang secara eksponensial seiring dengan penambahan blok berikutnya.
Untuk mengimbangi peningkatan kecepatan perangkat keras dan minat yang berbeda-beda dalam menjalankan node dari waktu ke waktu, kesulitan proof-of-work ditentukan oleh rata-rata bergerak yang menargetkan jumlah rata-rata blok per jam. Jika dihasilkan terlalu cepat, kesulitannya akan meningkat.
5. Jaringan
Langkah-langkah menjalankan jaringan adalah sebagai berikut:
1) Transaksi baru disiarkan ke semua node.
2) Setiap node mengumpulkan transaksi baru ke dalam satu blok.
3) Setiap node berupaya menemukan bukti kerja yang sulit untuk bloknya.
4) Ketika sebuah node menemukan bukti kerja, ia menyiarkan blok tersebut ke semua node.
5) Node menerima blok hanya jika semua transaksi di dalamnya valid dan belum dibelanjakan.
6) Node menyatakan penerimaannya terhadap blok tersebut dengan berupaya membuat blok berikutnya dalam rantai, menggunakan hash dari blok yang diterima sebagai hash sebelumnya.
Node selalu menganggap rantai terpanjang sebagai rantai yang benar dan akan terus berupaya untuk memperpanjangnya. Jika dua node menyiarkan versi berbeda dari blok berikutnya secara bersamaan, beberapa node mungkin menerima salah satu versi tersebut terlebih dahulu. Dalam hal ini, mereka mengerjakan cabang pertama yang mereka terima, tetapi menyimpan cabang lainnya jika cabang tersebut menjadi lebih panjang. Ikatan akan putus ketika bukti kerja berikutnya ditemukan dan satu cabang menjadi lebih panjang; node yang tadinya bekerja di cabang lain kemudian akan beralih ke cabang yang lebih panjang.
Siaran transaksi baru tidak perlu menjangkau semua node. Selama mereka mencapai banyak node, mereka akan segera masuk ke dalam satu blok. Blokir siaran juga toleran terhadap pesan yang dijatuhkan. Jika sebuah node tidak menerima sebuah blok, ia akan memintanya ketika menerima blok berikutnya dan menyadari bahwa ia melewatkan satu blok.
6. Insentif
Berdasarkan konvensi, transaksi pertama dalam sebuah blok adalah transaksi khusus yang memulai koin baru milik 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 menerbitkannya. Penambahan jumlah koin baru yang konstan dapat dianalogikan dengan penambang emas yang mengeluarkan sumber daya untuk menambahkan emas ke dalam peredaran. Dalam kasus kami, yang dikeluarkan adalah waktu CPU dan listrik.
Insentif juga dapat didanai dengan biaya transaksi. Jika nilai output suatu transaksi lebih kecil dari nilai inputnya, maka selisihnya adalah biaya transaksi yang ditambahkan ke nilai insentif blok yang memuat transaksi tersebut. Setelah sejumlah koin memasuki peredaran, insentif dapat dialihkan sepenuhnya ke biaya transaksi dan sepenuhnya bebas inflasi.
Insentif ini dapat membantu mendorong node untuk tetap jujur. Jika penyerang yang rakus mampu mengumpulkan lebih banyak daya CPU dibandingkan semua node yang jujur, ia 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 menguntungkan dia dengan lebih banyak koin baru daripada gabungan semua orang, daripada merusak sistem dan validitas kekayaannya sendiri.
7. Mendapatkan Kembali Ruang Disk
Setelah transaksi terbaru dalam sebuah koin terkubur di bawah blok yang cukup, transaksi yang telah dihabiskan sebelumnya dapat dibuang untuk menghemat ruang disk. Untuk memfasilitasi hal ini tanpa merusak hash blok, transaksi di-hash di Pohon Merkle [7] [2] [5], dengan hanya root yang disertakan dalam hash blok. Balok-balok tua kemudian dapat dipadatkan dengan mematikan dahan-dahan pohon. Hash interior tidak perlu disimpan.

Header blok tanpa transaksi akan berukuran sekitar 80 byte. Jika kita misalkan blok dihasilkan setiap 10 menit, 80 byte 6 24 * 365 = 4,2 MB per tahun. Dengan sistem komputer yang biasanya dijual dengan RAM 2 GB pada tahun 2008, dan Hukum Moore memperkirakan pertumbuhan saat ini sebesar 1,2 GB per tahun, penyimpanan seharusnya tidak menjadi masalah meskipun header blok harus disimpan di memori.
8. Verifikasi Pembayaran yang Disederhanakan
Verifikasi pembayaran dapat dilakukan tanpa menjalankan node jaringan penuh. Seorang pengguna hanya perlu menyimpan salinan header blok dari rantai bukti kerja terpanjang, yang dapat diperolehnya dengan menanyakan node jaringan hingga ia yakin bahwa ia memiliki rantai terpanjang, dan mendapatkan cabang Merkle yang menghubungkan transaksi ke blok tersebut. transaksi tersebut sudah tertera waktunya. Dia tidak dapat memeriksa sendiri transaksinya, tetapi dengan menghubungkannya ke suatu tempat dalam rantai, dia dapat melihat bahwa node jaringan telah menerimanya, dan blok ditambahkan setelah node tersebut mengkonfirmasi lebih lanjut bahwa jaringan telah menerimanya.

Dengan demikian, verifikasi dapat diandalkan selama node jujur mengendalikan jaringan, namun lebih rentan jika jaringan dikuasai oleh penyerang. Meskipun node jaringan dapat memverifikasi sendiri transaksinya, metode yang disederhanakan dapat ditipu oleh transaksi buatan penyerang selama penyerang dapat terus menguasai jaringan. Salah satu strategi untuk melindungi terhadap hal ini adalah dengan menerima peringatan dari node jaringan ketika mereka mendeteksi blok yang tidak valid, mendorong perangkat lunak pengguna untuk mengunduh blok penuh dan memperingatkan transaksi untuk mengkonfirmasi ketidakkonsistenan tersebut. Bisnis yang sering menerima pembayaran mungkin masih ingin menjalankan node mereka sendiri untuk keamanan yang lebih independen dan verifikasi yang lebih cepat.
9. Menggabungkan dan Memisahkan Nilai
Meskipun dimungkinkan untuk menangani koin satu per satu, akan sulit untuk melakukan transaksi terpisah untuk setiap sen dalam transfer. Untuk memungkinkan nilai dipisahkan dan digabungkan, transaksi berisi banyak input dan output. Biasanya akan ada satu masukan dari transaksi sebelumnya yang lebih besar atau beberapa masukan yang menggabungkan jumlah yang lebih kecil, dan paling banyak dua keluaran: satu untuk pembayaran, dan satu lagi mengembalikan uang kembalian, jika ada, kembali ke pengirim.

Perlu dicatat bahwa fan-out, dimana suatu transaksi bergantung pada beberapa transaksi, dan transaksi tersebut bergantung pada lebih banyak lagi, tidak menjadi masalah di sini. Tidak pernah ada kebutuhan untuk mengekstrak salinan lengkap riwayat transaksi.
10. Privasi
Model perbankan tradisional mencapai tingkat privasi dengan membatasi akses informasi kepada pihak-pihak yang terlibat dan pihak ketiga yang dipercaya. Keharusan untuk mengumumkan semua transaksi secara publik menghalangi metode ini, namun privasi masih dapat dipertahankan dengan memutus arus informasi di tempat lain: dengan menjaga kunci publik tetap anonim. Masyarakat dapat melihat seseorang mengirimkan sejumlah uang kepada orang lain, namun tanpa adanya informasi yang menghubungkan transaksi tersebut dengan siapapun. Hal ini serupa dengan tingkat informasi yang dikeluarkan oleh bursa saham, di mana waktu dan ukuran perdagangan individu, yang disebut “rekaman”, dipublikasikan, namun tanpa memberitahukan siapa pihak-pihak yang terlibat.

Sebagai firewall tambahan, pasangan kunci baru harus digunakan untuk setiap transaksi agar tidak ditautkan ke pemilik bersama. Beberapa keterkaitan masih tidak dapat dihindari dengan transaksi multi-input, yang tentu saja menunjukkan bahwa input tersebut dimiliki oleh pemilik yang sama. Risikonya adalah jika pemilik kunci terungkap, penautan dapat mengungkap transaksi lain milik pemilik yang sama.
11. Perhitungan
Kami mempertimbangkan skenario penyerang yang mencoba menghasilkan rantai alternatif lebih cepat daripada rantai jujur. Bahkan jika hal ini tercapai, sistem tidak akan terbuka terhadap perubahan sewenang-wenang, seperti menciptakan nilai secara tiba-tiba atau mengambil uang yang bukan 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. Penyerang hanya dapat mencoba mengubah salah satu transaksinya untuk mengambil kembali uang yang baru saja dibelanjakannya. Perlombaan antara rantai jujur dan rantai penyerang dapat dicirikan sebagai Binomial Random Walk. Peristiwa sukses adalah rantai jujur yang diperpanjang satu blok, meningkatkan keunggulannya sebesar +1, dan peristiwa kegagalan adalah rantai penyerang diperpanjang satu blok, mengurangi kesenjangan sebesar -1.
Probabilitas penyerang untuk mengejar defisit yang ada dapat dianalogikan dengan masalah Kehancuran Penjudi. Misalkan seorang penjudi dengan kredit tidak terbatas memulai dengan defisit dan berpotensi memainkan percobaan dalam jumlah tak terbatas untuk mencoba mencapai titik impas. Kita dapat menghitung kemungkinan dia mencapai titik impas, atau penyerang berhasil mengejar rantai jujur, sebagai berikut [8]:
p = probabilitas node yang jujur menemukan blok berikutnya
q = probabilitas penyerang menemukan blok berikutnya
qz = probabilitas penyerang akan mengejar ketinggalan dari z blok di belakang
qz= { 1 jika p≤q
(q/ p)^z jika p>q}
Berdasarkan asumsi kita bahwa p > q, probabilitasnya turun secara eksponensial seiring dengan meningkatnya jumlah blok yang harus dikejar oleh penyerang. Dengan peluang yang ada di depannya, jika dia tidak berhasil melakukan sepak terjang sejak awal, peluangnya menjadi semakin kecil karena dia semakin tertinggal.
Kami sekarang mempertimbangkan berapa lama penerima transaksi baru harus menunggu sebelum cukup yakin bahwa pengirim tidak dapat mengubah transaksi. Kami berasumsi pengirim adalah penyerang yang ingin membuat penerima percaya bahwa dia telah membayarnya untuk sementara waktu, lalu mengalihkannya untuk membayar kembali kepada dirinya sendiri setelah beberapa waktu berlalu. Penerima akan diberitahu ketika hal itu terjadi, namun pengirim berharap hal itu akan terlambat.
Penerima membuat pasangan kunci baru dan memberikan kunci publik kepada pengirim sesaat sebelum penandatanganan. Hal ini mencegah pengirim mempersiapkan rantai blok terlebih dahulu dengan mengerjakannya terus menerus sampai dia cukup beruntung untuk maju cukup jauh, kemudian mengeksekusi transaksi pada saat itu juga. Setelah transaksi dikirim, pengirim yang tidak jujur mulai bekerja secara rahasia pada rantai paralel yang berisi versi alternatif dari transaksinya.
Penerima menunggu hingga transaksi ditambahkan ke satu blok dan z blok telah ditautkan setelahnya. Dia tidak mengetahui jumlah pasti kemajuan yang telah dicapai penyerang, namun dengan asumsi blok jujur memerlukan waktu rata-rata yang diharapkan per blok, potensi kemajuan penyerang akan berupa distribusi Poisson dengan nilai yang diharapkan:

Mengonversi ke kode C...

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
Menyelesaikan P kurang dari 0,1%...
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 sistem transaksi elektronik tanpa mengandalkan kepercayaan. Kami memulai dengan kerangka koin biasa yang terbuat dari tanda tangan digital, yang memberikan kontrol kepemilikan yang kuat, namun tidak lengkap tanpa cara untuk mencegah pembelanjaan ganda. Untuk mengatasi hal ini, kami mengusulkan jaringan peer-to-peer menggunakan proof-of-work untuk mencatat riwayat transaksi publik yang dengan cepat menjadi tidak praktis secara komputasi untuk diubah oleh penyerang jika node yang jujur mengontrol sebagian besar daya CPU. Jaringan ini kuat dalam kesederhanaannya yang tidak terstruktur. Node bekerja sekaligus dengan sedikit koordinasi. Mereka tidak perlu diidentifikasi, karena pesan tidak diarahkan ke tempat tertentu dan hanya perlu disampaikan berdasarkan upaya terbaik. Node dapat keluar dan bergabung kembali dengan jaringan sesuka hati, menerima rantai bukti kerja sebagai bukti atas apa yang terjadi saat node tersebut pergi. Mereka memilih dengan kekuatan CPU mereka, menyatakan penerimaan mereka atas blok yang valid dengan berupaya memperluasnya dan menolak blok yang tidak valid dengan menolak mengerjakannya. Aturan dan insentif apa pun yang diperlukan dapat ditegakkan melalui mekanisme konsensus ini.
Referensi
[1] W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.
[2] H. Massias, XS. Avila, dan J.-J. Quisquater, "Desain layanan timestamping yang aman dengan minimal
persyaratan kepercayaan," Dalam Simposium ke-20 Teori Informasi di Benelux, Mei 1999.
[3] S. Haber, WS. Stornetta, "Cara memberi stempel waktu pada dokumen digital," Dalam Jurnal Kriptologi, jilid 3, no
2, halaman 99-111, 1991.
[4] D. Bayer, S. Haber, WS. Stornetta, "Meningkatkan efisiensi dan keandalan pencatatan waktu digital,"
Dalam Urutan II: Metode Komunikasi, Keamanan dan Ilmu Komputer, halaman 329-334, 1993.
[5] S. Haber, WS. Stornetta, "Nama aman untuk bit-string," Dalam Prosiding Konferensi ACM ke-4
tentang Keamanan Komputer dan Komunikasi, halaman 28-35, April 1997.
[6] A. Kembali, "Hashcash - tindakan balasan penolakan layanan,"
http://www.hashcash.org/papers/hashcash.pdf, 2002.
[7] RC Merkle, "Protokol untuk sistem kriptografi kunci publik," Dalam Proc. Simposium 1980 tentang Keamanan dan
Privasi, IEEE Computer Society, halaman 122-133, April 1980.
[8] W. Feller, "Pengantar teori probabilitas dan penerapannya," 1957.



