비트코인: 개인 간 전자 화폐 시스템
Abstract
Sebuah versi murni peer-to-peer dari uang elektronik akan memungkinkan pembayaran online dikirim langsung dari satu pihak ke pihak lain tanpa melalui lembaga keuangan. Tanda tangan digital menyediakan sebagian dari solusi, tetapi manfaat utama akan hilang jika pihak ketiga yang tepercaya masih diperlukan untuk mencegah double-spending. Kami mengusulkan solusi untuk masalah double-spending menggunakan jaringan peer-to-peer. Jaringan memberi cap waktu pada transaksi dengan melakukan hash ke dalam rantai proof-of-work berbasis hash yang berkelanjutan, membentuk catatan yang tidak dapat diubah tanpa mengulang proof-of-work. Rantai terpanjang tidak hanya berfungsi sebagai bukti urutan peristiwa yang disaksikan, tetapi juga bukti bahwa rantai tersebut berasal dari kumpulan daya CPU terbesar. Selama mayoritas daya CPU dikendalikan oleh node yang tidak bekerja sama untuk menyerang jaringan, mereka akan menghasilkan rantai terpanjang dan mengungguli penyerang. Jaringan itu sendiri memerlukan struktur minimal. Pesan disiarkan berdasarkan upaya terbaik, dan node dapat meninggalkan dan bergabung kembali dengan jaringan sesuka hati, menerima rantai proof-of-work terpanjang sebagai bukti atas apa yang terjadi saat mereka pergi.
Abstract
순수한 peer-to-peer 방식의 전자 화폐는 금융 기관을 거치지 않고 한쪽에서 다른 쪽으로 직접 온라인 지불을 가능하게 할 것이다. 전자 서명이 해결책의 일부를 제공하지만, 이중 지불을 방지하기 위해 여전히 신뢰할 수 있는 제3자가 필요하다면 주요 이점은 사라진다. 우리는 peer-to-peer 네트워크를 이용한 이중 지불 문제의 해결책을 제안한다. 이 네트워크는 거래를 hash 기반의 proof-of-work 체인에 hash하여 타임스탬프를 부여하며, proof-of-work를 다시 수행하지 않고는 변경할 수 없는 기록을 형성한다. 가장 긴 체인은 목격된 사건의 순서에 대한 증거일 뿐만 아니라, 그것이 가장 큰 CPU 연산 능력의 풀에서 나왔다는 증거이기도 하다. CPU 연산 능력의 과반수가 네트워크를 공격하려고 협력하지 않는 노드들에 의해 통제되는 한, 그들은 가장 긴 체인을 생성하여 공격자를 앞지를 것이다. 네트워크 자체는 최소한의 구조만을 필요로 한다. 메시지는 최선 노력(best effort) 기반으로 브로드캐스트되며, 노드들은 자유롭게 네트워크를 떠났다가 다시 참여할 수 있고, 부재 중에 일어난 일의 증거로서 가장 긴 proof-of-work 체인을 수용한다.
Introduction
Perdagangan di Internet telah bergantung hampir sepenuhnya 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 mengalami kelemahan bawaan dari model berbasis kepercayaan. Transaksi yang benar-benar tidak dapat dibatalkan sebenarnya tidak mungkin dilakukan, karena lembaga keuangan tidak dapat menghindari mediasi sengketa. Biaya mediasi meningkatkan biaya transaksi, membatasi ukuran transaksi minimum yang praktis dan menghilangkan kemungkinan transaksi kecil kasual, dan ada biaya yang lebih luas dalam hilangnya kemampuan untuk melakukan pembayaran yang tidak dapat dibatalkan untuk layanan yang tidak dapat dibatalkan. Dengan kemungkinan pembatalan, kebutuhan akan kepercayaan menyebar. Pedagang harus waspada terhadap pelanggan mereka, mengganggu mereka untuk mendapatkan lebih banyak informasi daripada yang seharusnya mereka butuhkan. Persentase tertentu dari penipuan diterima sebagai hal yang tidak dapat dihindari. Biaya-biaya dan ketidakpastian pembayaran ini dapat dihindari secara langsung dengan menggunakan mata uang fisik, tetapi tidak ada mekanisme yang ada untuk melakukan pembayaran melalui saluran komunikasi tanpa pihak yang tepercaya.
Yang dibutuhkan adalah sistem pembayaran elektronik berdasarkan bukti kriptografi alih-alih kepercayaan, yang memungkinkan dua pihak yang bersedia untuk bertransaksi langsung satu sama lain tanpa memerlukan pihak ketiga yang tepercaya. Transaksi yang secara komputasional 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 solusi untuk masalah double-spending menggunakan server cap waktu terdistribusi peer-to-peer untuk menghasilkan bukti komputasional dari urutan kronologis transaksi. Sistem ini aman selama node jujur secara kolektif mengendalikan lebih banyak daya CPU daripada kelompok node penyerang mana pun yang bekerja sama.
Introduction
인터넷 상의 상거래는 전자 지불을 처리하는 신뢰할 수 있는 제3자 역할을 하는 금융 기관에 거의 전적으로 의존하게 되었다. 이 시스템은 대부분의 거래에서 충분히 잘 작동하지만, 신뢰 기반 모델의 본질적인 약점으로부터 여전히 벗어나지 못한다. 금융 기관이 분쟁 중재를 피할 수 없기 때문에, 완전히 비가역적인 거래는 사실상 불가능하다. 중재 비용은 거래 비용을 증가시키며, 최소 실용적 거래 규모를 제한하고, 소규모 일상 거래의 가능성을 차단한다. 또한 비가역적 서비스에 대해 비가역적 지불을 할 수 없게 됨으로써 더 광범위한 비용이 발생한다. 취소 가능성이 존재하면 신뢰의 필요성이 확산된다. 상인은 고객을 경계해야 하며, 본래 필요하지 않을 정보까지 요구하게 된다. 일정 비율의 사기는 불가피한 것으로 받아들여진다. 이러한 비용과 지불 불확실성은 물리적 화폐를 사용하여 대면 거래에서는 피할 수 있지만, 신뢰할 수 있는 당사자 없이 통신 채널을 통해 지불하는 메커니즘은 존재하지 않는다.
필요한 것은 신뢰 대신 암호학적 증명에 기반한 전자 지불 시스템으로, 신뢰할 수 있는 제3자 없이도 두 당사자가 직접 거래할 수 있게 하는 것이다. 계산적으로 되돌리기가 실질적으로 불가능한 거래는 판매자를 사기로부터 보호하고, 일상적인 에스크로 메커니즘을 쉽게 구현하여 구매자를 보호할 수 있다. 이 논문에서 우리는 거래의 시간 순서에 대한 계산적 증명을 생성하기 위해 peer-to-peer 분산 타임스탬프 서버를 사용하는 이중 지불 문제의 해결책을 제안한다. 이 시스템은 정직한 노드들이 공격자 노드들의 어떤 협력 그룹보다 더 많은 CPU 연산 능력을 집합적으로 통제하는 한 안전하다.
Transactions
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 (public key) pemilik berikutnya, lalu menambahkannya ke ujung koin. Penerima pembayaran dapat memverifikasi tanda tangan untuk memverifikasi rantai kepemilikan.

Masalahnya tentu saja adalah penerima tidak dapat memverifikasi bahwa salah satu pemilik tidak melakukan double-spending terhadap koin tersebut. Solusi umum adalah memperkenalkan otoritas pusat tepercaya, atau percetakan uang, yang memeriksa setiap transaksi untuk double-spending. Setelah setiap transaksi, koin harus dikembalikan ke percetakan uang untuk menerbitkan koin baru, dan hanya koin yang diterbitkan langsung dari percetakan uang yang dipercaya tidak di-double-spend. Masalah dengan solusi ini adalah nasib seluruh sistem uang bergantung pada perusahaan yang menjalankan percetakan uang, dengan setiap transaksi harus melewati mereka, sama seperti bank.
Kita membutuhkan cara bagi penerima untuk mengetahui bahwa pemilik sebelumnya tidak menandatangani transaksi yang lebih awal. Untuk tujuan kita, transaksi paling awal adalah yang dihitung, jadi kita tidak peduli tentang upaya double-spending selanjutnya. Satu-satunya cara untuk mengonfirmasi ketiadaan suatu transaksi adalah mengetahui semua transaksi. Dalam model berbasis percetakan uang, percetakan uang mengetahui semua transaksi dan memutuskan mana yang tiba lebih dulu. Untuk mencapai ini tanpa pihak tepercaya, transaksi harus diumumkan secara publik [^1], dan kita membutuhkan sistem bagi peserta untuk menyepakati satu riwayat urutan penerimaan. Penerima membutuhkan bukti bahwa pada saat setiap transaksi, mayoritas node menyetujui bahwa transaksi tersebut adalah yang pertama diterima.
Transactions
우리는 전자 화폐를 전자 서명의 체인으로 정의한다. 각 소유자는 이전 거래의 hash와 다음 소유자의 공개 키를 전자 서명하고 이를 화폐의 끝에 추가함으로써 화폐를 다음 소유자에게 전달한다. 수취인은 서명을 검증하여 소유권의 체인을 확인할 수 있다.

물론 문제는 수취인이 소유자 중 한 명이 화폐를 이중 지불하지 않았는지 검증할 수 없다는 것이다. 일반적인 해결책은 모든 거래의 이중 지불 여부를 확인하는 신뢰할 수 있는 중앙 기관, 즉 조폐국을 도입하는 것이다. 각 거래 후, 화폐는 새로운 화폐를 발행하기 위해 조폐국으로 반환되어야 하며, 조폐국에서 직접 발행된 화폐만이 이중 지불되지 않았다고 신뢰된다. 이 해결책의 문제는 전체 화폐 시스템의 운명이 조폐국을 운영하는 회사에 달려 있으며, 은행처럼 모든 거래가 그들을 거쳐야 한다는 것이다.
우리는 수취인이 이전 소유자들이 어떤 더 이른 거래에도 서명하지 않았음을 알 수 있는 방법이 필요하다. 우리의 목적상, 가장 이른 거래가 유효한 것이므로 이후의 이중 지불 시도는 신경 쓰지 않는다. 거래의 부재를 확인하는 유일한 방법은 모든 거래를 인지하는 것이다. 조폐국 기반 모델에서, 조폐국은 모든 거래를 인지하고 어떤 것이 먼저 도착했는지 결정했다. 신뢰할 수 있는 당사자 없이 이를 달성하려면, 거래는 공개적으로 발표되어야 하며[^1], 참여자들이 거래가 수신된 순서에 대한 단일한 이력에 동의하는 시스템이 필요하다. 수취인은 각 거래 시점에 노드의 과반수가 그것이 최초로 수신되었다는 데 동의했다는 증거가 필요하다.
Timestamp Server
Solusi yang kami usulkan dimulai dengan server cap waktu. Server cap waktu bekerja dengan mengambil hash dari blok item yang akan diberi cap waktu dan mempublikasikan hash tersebut secara luas, seperti di surat kabar atau posting Usenet [^2] [^3] [^4] [^5]. Cap waktu membuktikan bahwa data pasti sudah ada pada saat itu, tentunya, agar dapat masuk ke dalam hash. Setiap cap waktu menyertakan cap waktu sebelumnya dalam hash-nya, membentuk rantai, dengan setiap cap waktu tambahan memperkuat yang sebelumnya.

Proof-of-Work
Untuk mengimplementasikan server cap waktu terdistribusi secara peer-to-peer, kita perlu menggunakan sistem proof-of-work yang mirip dengan Hashcash milik Adam Back [^6], alih-alih surat kabar atau posting Usenet. Proof-of-work melibatkan pemindaian nilai yang ketika di-hash, seperti dengan SHA-256, hash-nya dimulai dengan sejumlah bit nol. Rata-rata kerja yang diperlukan bersifat eksponensial terhadap jumlah bit nol yang diperlukan dan dapat diverifikasi dengan mengeksekusi satu hash.
Untuk jaringan cap waktu kami, kami mengimplementasikan proof-of-work dengan menambah nonce di blok sampai ditemukan nilai yang memberikan hash blok jumlah bit nol yang diperlukan. Setelah upaya CPU dikeluarkan untuk memenuhi proof-of-work, blok tidak dapat diubah tanpa mengulangi pekerjaan. Karena blok-blok selanjutnya dirangkai setelahnya, pekerjaan untuk mengubah blok akan mencakup pengulangan semua blok setelahnya.

Proof-of-work juga memecahkan masalah penentuan representasi dalam pengambilan keputusan mayoritas. Jika mayoritas didasarkan pada satu-alamat-IP-satu-suara, itu bisa disubversi oleh siapa saja yang mampu mengalokasikan banyak IP. Proof-of-work pada dasarnya adalah satu-CPU-satu-suara. Keputusan mayoritas diwakili oleh rantai terpanjang, yang memiliki upaya proof-of-work terbesar yang diinvestasikan di dalamnya. Jika mayoritas daya CPU dikontrol oleh node jujur, rantai jujur akan tumbuh paling cepat dan mengungguli rantai pesaing manapun. Untuk memodifikasi blok masa lalu, penyerang harus mengulangi proof-of-work blok tersebut dan semua blok setelahnya, lalu mengejar dan melampaui pekerjaan node jujur. Kami akan menunjukkan nanti bahwa probabilitas penyerang yang lebih lambat mengejar berkurang secara eksponensial saat blok-blok berikutnya ditambahkan.
Untuk mengkompensasi peningkatan kecepatan perangkat keras dan variasi minat dalam menjalankan node dari waktu ke waktu, kesulitan proof-of-work ditentukan oleh rata-rata bergerak yang menargetkan rata-rata jumlah blok per jam. Jika dihasilkan terlalu cepat, kesulitannya meningkat.
Proof-of-Work
peer-to-peer 기반으로 분산 타임스탬프 서버를 구현하려면, 신문이나 유즈넷 게시물 대신 Adam Back의 Hashcash[^6]와 유사한 proof-of-work 시스템을 사용해야 한다. proof-of-work는 SHA-256과 같은 방식으로 hash했을 때, hash가 일정 수의 0 비트로 시작하는 값을 찾는 것을 포함한다. 필요한 평균 작업량은 요구되는 0 비트 수에 대해 지수적이며, 단일 hash 실행으로 검증할 수 있다.
우리의 타임스탬프 네트워크에서, 블록의 hash가 요구되는 0 비트를 갖는 값이 발견될 때까지 블록 내의 nonce를 증가시키는 방식으로 proof-of-work를 구현한다. CPU 노력이 proof-of-work를 충족하도록 투입되면, 그 작업을 다시 수행하지 않고는 블록을 변경할 수 없다. 이후 블록들이 그 뒤에 체인으로 연결되므로, 해당 블록을 변경하려면 그 이후의 모든 블록을 다시 수행하는 작업이 포함된다.

proof-of-work는 다수결 의사 결정에서 대표성을 결정하는 문제도 해결한다. 만약 다수결이 1-IP-주소-1-투표에 기반한다면, 다수의 IP를 할당할 수 있는 누구라도 이를 전복할 수 있다. proof-of-work는 본질적으로 1-CPU-1-투표이다. 다수결 결정은 가장 큰 proof-of-work 노력이 투입된 가장 긴 체인으로 대표된다. CPU 연산 능력의 과반수가 정직한 노드에 의해 통제되면, 정직한 체인이 가장 빠르게 성장하여 경쟁하는 어떤 체인도 앞지를 것이다. 과거 블록을 수정하려면, 공격자는 해당 블록과 그 이후 모든 블록의 proof-of-work를 다시 수행한 후 정직한 노드들의 작업을 따라잡고 능가해야 한다. 뒤처진 공격자가 따라잡을 확률이 후속 블록이 추가됨에 따라 지수적으로 감소함을 나중에 보일 것이다.
증가하는 하드웨어 속도와 시간에 따라 변동하는 노드 운영에 대한 관심을 보상하기 위해, proof-of-work 난이도는 시간당 평균 블록 수를 목표로 하는 이동 평균에 의해 결정된다. 블록이 너무 빨리 생성되면 난이도가 증가한다.
Network
Langkah-langkah untuk menjalankan jaringan adalah sebagai berikut:
- Transaksi baru disiarkan ke semua node.
- Setiap node mengumpulkan transaksi baru ke dalam sebuah blok.
- Setiap node bekerja untuk menemukan proof-of-work yang sulit untuk bloknya.
- Ketika sebuah node menemukan proof-of-work, node tersebut menyiarkan blok ke semua node.
- Node menerima blok hanya jika semua transaksi di dalamnya valid dan belum dibelanjakan.
- Node mengekspresikan penerimaan mereka terhadap blok dengan bekerja membuat blok berikutnya dalam rantai, menggunakan hash dari blok yang diterima sebagai hash sebelumnya.
Node selalu menganggap rantai terpanjang sebagai yang benar dan akan terus bekerja untuk memperpanjangnya. Jika dua node menyiarkan versi berbeda dari blok berikutnya secara bersamaan, beberapa node mungkin menerima satu atau yang lainnya terlebih dahulu. Dalam kasus itu, mereka bekerja pada yang pertama diterima, tetapi menyimpan cabang lainnya untuk berjaga-jaga jika menjadi lebih panjang. Seri akan diputuskan ketika proof-of-work berikutnya ditemukan dan satu cabang menjadi lebih panjang; node yang bekerja pada cabang lain kemudian akan beralih ke yang lebih panjang.
Siaran transaksi baru tidak harus mencapai semua node. Selama mereka mencapai banyak node, mereka akan masuk ke blok dalam waktu singkat. Siaran blok juga toleran terhadap pesan yang hilang. Jika sebuah node tidak menerima blok, node tersebut akan memintanya ketika menerima blok berikutnya dan menyadari bahwa ada yang terlewat.
Network
네트워크를 운영하는 단계는 다음과 같다:
- 새로운 거래가 모든 노드에 브로드캐스트된다.
- 각 노드는 새로운 거래를 블록에 수집한다.
- 각 노드는 자신의 블록에 대한 어려운 proof-of-work를 찾기 위해 작업한다.
- 노드가 proof-of-work를 찾으면, 해당 블록을 모든 노드에 브로드캐스트한다.
- 노드들은 블록 내의 모든 거래가 유효하고 아직 지출되지 않은 경우에만 블록을 수락한다.
- 노드들은 수락된 블록의 hash를 이전 hash로 사용하여 체인의 다음 블록을 생성하는 작업을 함으로써 블록 수락을 표현한다.
노드들은 항상 가장 긴 체인을 올바른 것으로 간주하고 이를 연장하는 작업을 계속한다. 만약 두 노드가 다음 블록의 서로 다른 버전을 동시에 브로드캐스트하면, 일부 노드는 한쪽을, 다른 노드는 다른 쪽을 먼저 수신할 수 있다. 이 경우, 먼저 수신한 것에 대해 작업하되, 더 길어질 경우를 대비하여 다른 분기를 저장한다. 다음 proof-of-work가 발견되어 한 분기가 더 길어지면 동률은 깨지며, 다른 분기에서 작업하던 노드들은 더 긴 분기로 전환한다.
새로운 거래 브로드캐스트가 반드시 모든 노드에 도달할 필요는 없다. 많은 노드에 도달하는 한, 머지않아 블록에 포함될 것이다. 블록 브로드캐스트 역시 누락된 메시지에 대해 관대하다. 만약 노드가 블록을 수신하지 못하면, 다음 블록을 수신할 때 하나를 놓쳤음을 인지하고 해당 블록을 요청할 것이다.
Incentive
Secara konvensi, transaksi pertama dalam sebuah blok adalah transaksi khusus yang memulai koin baru yang dimiliki oleh pembuat blok. Ini menambahkan insentif bagi node untuk mendukung jaringan, dan menyediakan cara untuk mendistribusikan koin ke dalam peredaran pada awalnya, karena tidak ada otoritas pusat untuk menerbitkannya. Penambahan tetap sejumlah koin baru secara stabil dianalogikan dengan penambang emas yang mengeluarkan sumber daya untuk menambahkan emas ke peredaran. Dalam kasus kita, yang dikeluarkan adalah waktu CPU dan listrik.
Insentif juga dapat didanai dengan biaya transaksi. Jika nilai output suatu transaksi kurang dari nilai inputnya, selisihnya adalah biaya transaksi yang ditambahkan ke nilai insentif blok yang berisi transaksi tersebut. Setelah sejumlah koin yang telah ditentukan masuk ke peredaran, insentif dapat beralih sepenuhnya ke biaya transaksi dan sepenuhnya bebas inflasi.
Insentif dapat membantu mendorong node untuk tetap jujur. Jika penyerang serakah mampu mengumpulkan lebih banyak daya CPU daripada semua node jujur, ia harus memilih antara menggunakannya untuk menipu orang dengan mencuri kembali pembayarannya, atau menggunakannya untuk menghasilkan koin baru. Ia seharusnya menemukan bahwa bermain sesuai aturan lebih menguntungkan, aturan yang memberinya lebih banyak koin baru daripada semua orang lain digabungkan, daripada merusak sistem dan validitas kekayaannya sendiri.
Incentive
관례적으로, 블록의 첫 번째 거래는 블록 생성자가 소유하는 새로운 화폐를 시작하는 특별한 거래이다. 이는 노드들이 네트워크를 지원할 인센티브를 추가하며, 화폐를 발행할 중앙 기관이 없으므로 화폐를 유통에 최초로 배분하는 방법을 제공한다. 일정량의 새로운 화폐가 꾸준히 추가되는 것은 금 채굴자들이 자원을 투입하여 금을 유통에 추가하는 것과 유사하다. 우리의 경우, 투입되는 것은 CPU 시간과 전기이다.
인센티브는 거래 수수료로도 충당될 수 있다. 거래의 출력 값이 입력 값보다 작으면, 그 차이는 해당 거래를 포함하는 블록의 인센티브 값에 추가되는 거래 수수료이다. 사전에 정해진 수의 화폐가 유통에 들어가면, 인센티브는 완전히 거래 수수료로 전환될 수 있으며, 완전히 인플레이션이 없게 된다.
인센티브는 노드들이 정직하게 유지되도록 장려하는 데 도움이 될 수 있다. 탐욕스러운 공격자가 모든 정직한 노드보다 더 많은 CPU 연산 능력을 모을 수 있다면, 자신의 지불을 되돌려 훔치는 사기에 사용하거나, 새로운 화폐를 생성하는 데 사용하는 것 중에서 선택해야 한다. 그는 다른 모든 사람을 합친 것보다 더 많은 새로운 화폐를 자신에게 유리하게 하는 규칙대로 행동하는 것이, 시스템과 자신의 부의 유효성을 훼손하는 것보다 더 수익성이 높다고 판단해야 할 것이다.
Reclaiming Disk Space
Setelah transaksi terbaru dalam sebuah koin terkubur di bawah cukup banyak blok, transaksi yang sudah dibelanjakan sebelumnya dapat dibuang untuk menghemat ruang disk. Untuk memfasilitasi ini tanpa merusak hash blok, transaksi di-hash dalam Merkle Tree [^7] [^2] [^5], dengan hanya root yang disertakan dalam hash blok. Blok-blok lama kemudian dapat dipadatkan dengan memangkas cabang-cabang pohon. Hash interior tidak perlu disimpan.

Header blok tanpa transaksi akan berukuran sekitar 80 byte. Jika kita mengasumsikan blok dihasilkan 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 meskipun header blok harus disimpan di memori.
Reclaiming Disk Space
화폐의 최신 거래가 충분한 블록 아래에 묻히면, 그 이전의 지출된 거래들은 디스크 공간을 절약하기 위해 폐기할 수 있다. 블록의 hash를 깨뜨리지 않으면서 이를 용이하게 하기 위해, 거래들은 Merkle Tree[^7] [^2] [^5]로 hash되며, 루트만 블록의 hash에 포함된다. 오래된 블록은 트리의 가지를 잘라내어 압축할 수 있다. 내부 hash는 저장할 필요가 없다.

거래가 없는 블록 헤더는 약 80바이트이다. 블록이 10분마다 생성된다고 가정하면, 80바이트 * 6 * 24 * 365 = 연간 4.2MB이다. 2008년 기준으로 컴퓨터 시스템이 일반적으로 2GB RAM과 함께 판매되고, 무어의 법칙이 연간 1.2GB의 현재 성장률을 예측하고 있으므로, 블록 헤더가 메모리에 유지되어야 하더라도 저장 공간은 문제가 되지 않을 것이다.
Simplified Payment Verification
Dimungkinkan untuk memverifikasi pembayaran tanpa menjalankan node jaringan penuh. Pengguna hanya perlu menyimpan salinan header blok dari rantai proof-of-work terpanjang, yang bisa didapatkan dengan menanyakan node jaringan sampai yakin memiliki rantai terpanjang, dan mendapatkan cabang Merkle yang menghubungkan transaksi ke blok tempat transaksi tersebut diberi cap waktu. Pengguna tidak dapat memeriksa transaksi sendiri, tetapi dengan menghubungkannya ke tempat di rantai, pengguna dapat melihat bahwa node jaringan telah menerimanya, dan blok yang ditambahkan setelahnya semakin mengonfirmasi bahwa jaringan telah menerimanya.

Dengan demikian, verifikasi dapat diandalkan selama node jujur mengendalikan jaringan, tetapi lebih rentan jika jaringan dikuasai oleh penyerang. Sementara node jaringan dapat memverifikasi transaksi sendiri, metode yang disederhanakan dapat ditipu oleh transaksi palsu penyerang selama penyerang dapat terus menguasai jaringan. Satu strategi untuk melindungi terhadap ini adalah menerima peringatan dari node jaringan ketika mereka mendeteksi blok yang tidak valid, mendorong perangkat lunak pengguna untuk mengunduh blok penuh dan transaksi yang diperingatkan untuk mengonfirmasi inkonsistensi. Bisnis yang menerima pembayaran sering mungkin masih ingin menjalankan node mereka sendiri untuk keamanan yang lebih independen dan verifikasi yang lebih cepat.
Simplified Payment Verification
전체 네트워크 노드를 운영하지 않고도 지불을 검증하는 것이 가능하다. 사용자는 가장 긴 proof-of-work 체인의 블록 헤더 사본만 유지하면 되며, 이는 가장 긴 체인을 확보했다고 확신할 때까지 네트워크 노드에 질의하여 얻을 수 있고, 거래를 타임스탬프된 블록에 연결하는 Merkle 분기를 확보하면 된다. 거래를 직접 확인할 수는 없지만, 체인의 한 위치에 연결함으로써 네트워크 노드가 이를 수락했음을 알 수 있고, 그 이후에 추가된 블록들은 네트워크가 이를 수락했음을 추가로 확인해 준다.

이와 같이, 정직한 노드들이 네트워크를 통제하는 한 검증은 신뢰할 수 있지만, 네트워크가 공격자에 의해 압도되면 더 취약해진다. 네트워크 노드가 거래를 스스로 검증할 수 있는 반면, 간소화된 방법은 공격자가 네트워크를 계속 압도할 수 있는 한 공격자의 조작된 거래에 속을 수 있다. 이에 대한 한 가지 보호 전략은 네트워크 노드가 유효하지 않은 블록을 감지했을 때 경고를 수락하여, 사용자의 소프트웨어가 전체 블록과 경고된 거래를 다운로드하여 불일치를 확인하도록 하는 것이다. 빈번한 지불을 수신하는 사업체는 보다 독립적인 보안과 빠른 검증을 위해 자체 노드를 운영하기를 원할 것이다.
Combining and Splitting Value
Meskipun dimungkinkan untuk menangani koin secara individual, akan sangat merepotkan untuk membuat transaksi terpisah untuk setiap sen dalam transfer. Untuk memungkinkan nilai dipecah dan digabungkan, transaksi berisi banyak input dan output. Biasanya akan ada satu input dari transaksi sebelumnya yang lebih besar atau beberapa input yang menggabungkan jumlah lebih kecil, dan paling banyak dua output: satu untuk pembayaran, dan satu mengembalikan kembalian, jika ada, ke pengirim.

Perlu dicatat bahwa fan-out, di mana suatu transaksi bergantung pada beberapa transaksi, dan transaksi-transaksi tersebut bergantung pada lebih banyak lagi, bukanlah masalah di sini. Tidak pernah ada kebutuhan untuk mengekstrak salinan mandiri lengkap dari riwayat transaksi.
Combining and Splitting Value
화폐를 개별적으로 다루는 것이 가능하겠지만, 이체에서 매 센트마다 별도의 거래를 만드는 것은 다루기 어려울 것이다. 가치의 분할과 결합을 허용하기 위해, 거래는 다수의 입력과 출력을 포함한다. 일반적으로 더 큰 이전 거래로부터의 단일 입력 또는 더 작은 금액을 결합하는 다수의 입력이 있으며, 최대 두 개의 출력이 있다: 하나는 지불을 위한 것이고, 하나는 잔돈이 있는 경우 발신자에게 돌려주는 것이다.

하나의 거래가 여러 거래에 의존하고, 그 거래들이 다시 더 많은 거래에 의존하는 팬아웃(fan-out)은 여기서 문제가 되지 않음에 유의해야 한다. 거래 이력의 완전한 독립 사본을 추출할 필요는 결코 없다.
Privacy
Model perbankan tradisional mencapai tingkat privasi dengan membatasi akses informasi kepada pihak-pihak yang terlibat dan pihak ketiga tepercaya. Keharusan mengumumkan semua transaksi secara 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 mengirim sejumlah uang kepada orang lain, tetapi tanpa informasi yang menghubungkan transaksi kepada siapa pun. Ini mirip dengan tingkat informasi yang dirilis oleh bursa saham, di mana waktu dan ukuran perdagangan individual, yaitu "tape," dipublikasikan, tetapi tanpa memberi tahu siapa pihak-pihaknya.

Sebagai firewall tambahan, pasangan kunci baru harus digunakan untuk setiap transaksi agar tidak terhubung ke pemilik yang sama. Beberapa penautan masih tidak terhindarkan dengan transaksi multi-input, yang secara niscaya mengungkapkan bahwa input-inputnya dimiliki oleh pemilik yang sama. Risikonya adalah jika pemilik suatu kunci terungkap, penautan dapat mengungkapkan transaksi lain yang milik pemilik yang sama.
Privacy
전통적인 은행 모델은 관련 당사자와 신뢰할 수 있는 제3자에게만 정보 접근을 제한함으로써 일정 수준의 개인정보 보호를 달성한다. 모든 거래를 공개적으로 발표해야 하는 필요성은 이 방법을 배제하지만, 정보의 흐름을 다른 곳에서 끊음으로써 개인정보 보호는 여전히 유지될 수 있다: 공개 키를 익명으로 유지하는 것이다. 대중은 누군가가 다른 누군가에게 금액을 보내고 있음을 볼 수 있지만, 거래를 누구에게도 연결하는 정보가 없다. 이는 증권 거래소가 공개하는 정보 수준과 유사하며, 개별 거래의 시간과 규모, 즉 "시세 테이프"는 공개되지만 당사자가 누구인지는 알리지 않는다.

추가적인 방화벽으로, 각 거래마다 새로운 키 쌍을 사용하여 공통 소유자에게 연결되는 것을 방지해야 한다. 다중 입력 거래에서는 일부 연결이 여전히 불가피한데, 이는 그 입력들이 동일한 소유자의 것이었음을 필연적으로 드러내기 때문이다. 위험은 키의 소유자가 밝혀지면 연결을 통해 동일한 소유자에게 속한 다른 거래들이 드러날 수 있다는 것이다.
Calculations
Kita mempertimbangkan skenario penyerang yang mencoba menghasilkan rantai alternatif lebih cepat dari rantai jujur. Bahkan jika ini tercapai, sistem tidak terbuka untuk perubahan sewenang-wenang, seperti menciptakan nilai dari udara kosong atau mengambil uang yang tidak pernah milik penyerang. Node tidak akan menerima transaksi tidak valid sebagai pembayaran, dan node jujur tidak akan pernah menerima blok yang berisi transaksi tersebut. Penyerang hanya dapat mencoba mengubah salah satu transaksinya sendiri untuk mengambil kembali uang yang baru saja dibelanjakannya.
Perlombaan antara rantai jujur dan rantai penyerang dapat dikarakterisasi sebagai Jalan Acak Binomial. Peristiwa sukses adalah rantai jujur diperpanjang satu blok, meningkatkan keunggulannya sebesar +1, dan peristiwa gagal adalah rantai penyerang diperpanjang satu blok, mengurangi jarak sebesar -1.
Probabilitas penyerang mengejar dari defisit tertentu analog dengan masalah Kebangkrutan Penjudi. Misalkan seorang penjudi dengan kredit tak terbatas mulai dari defisit dan memainkan jumlah percobaan yang berpotensi tak terbatas untuk mencoba mencapai titik impas. Kita dapat menghitung probabilitas ia pernah mencapai titik impas, atau bahwa penyerang pernah mengejar rantai jujur, sebagai berikut [^8]:
p = probabilitas node jujur menemukan blok berikutnya
q = probabilitas penyerang menemukan blok berikutnya
q = probabilitas penyerang akan pernah mengejar dari z blok di belakang
``````
\[
qz =
\begin{cases}
1 & \text{if } p \leq q \\
\left(\frac{q}{p}\right) z & \text{if } p > q
\end{cases}
\]
Mengingat asumsi kita bahwa p q, probabilitas turun secara eksponensial seiring bertambahnya jumlah blok yang harus dikejar penyerang. Dengan peluang melawannya, jika ia tidak membuat lompatan beruntung ke depan di awal, peluangnya menjadi sangat kecil saat ia semakin tertinggal.
Sekarang kita mempertimbangkan berapa lama penerima transaksi baru perlu menunggu sebelum cukup yakin bahwa pengirim tidak dapat mengubah transaksi. Kita mengasumsikan pengirim adalah penyerang yang ingin membuat penerima percaya bahwa ia telah membayarnya untuk sementara waktu, kemudian mengalihkan pembayaran kembali ke dirinya sendiri setelah beberapa waktu berlalu. Penerima akan diperingatkan ketika itu terjadi, tetapi pengirim berharap sudah terlambat.
Penerima menghasilkan pasangan kunci baru dan memberikan kunci publik kepada pengirim sesaat sebelum menandatangani. Ini mencegah pengirim menyiapkan rantai blok lebih awal dengan terus bekerja sampai cukup beruntung untuk cukup jauh di depan, lalu mengeksekusi transaksi pada saat itu. Setelah transaksi dikirim, pengirim yang tidak jujur mulai bekerja secara rahasia pada rantai paralel yang berisi versi alternatif transaksinya.
Penerima menunggu sampai transaksi ditambahkan ke blok dan z blok telah ditautkan setelahnya. Ia tidak mengetahui jumlah pasti kemajuan yang telah dibuat penyerang, tetapi dengan mengasumsikan blok jujur mengambil rata-rata waktu yang diharapkan per blok, potensi kemajuan penyerang akan berupa distribusi Poisson dengan nilai harapan:
\[
\lambda = z\frac{q}{p}
\]
Untuk mendapatkan probabilitas penyerang masih bisa mengejar sekarang, kita mengalikan densitas Poisson untuk setiap jumlah kemajuan yang mungkin telah dibuatnya dengan probabilitas ia bisa mengejar dari titik tersebut:
\[
\sum_{k=0}^{\infty} \frac{\lambda^k e^{-\lambda}}{k!} \cdot \left\{
\begin{array}{cl}
\left(\frac{q}{p}\right)^{(z-k)} & \text{if } k \leq z \\
1 & \text{if } k > z
\end{array}
\right.
\]
Menyusun ulang untuk menghindari penjumlahan ekor tak terbatas dari distribusi...
\[
1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} \left(1-\left(\frac{q}{p}\right)^{(z-k)}\right)
\]
Mengonversi ke kode C...
```c
#include math.h
double AttackerSuccessProbability(double q, int z)
{
double p = 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));
}
return sum;
}
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 untuk 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
Calculations
우리는 공격자가 정직한 체인보다 더 빠르게 대안 체인을 생성하려고 시도하는 시나리오를 고려한다. 이것이 달성되더라도, 무에서 가치를 만들거나 공격자에게 속하지 않은 돈을 빼앗는 것과 같은 임의적인 변경에 시스템을 개방하지는 않는다. 노드들은 유효하지 않은 거래를 지불로 수락하지 않을 것이며, 정직한 노드들은 그러한 거래를 포함하는 블록을 절대 수락하지 않을 것이다. 공격자는 오직 자신의 거래 중 하나를 변경하여 최근에 지출한 돈을 되돌리려고 시도할 수 있을 뿐이다.
정직한 체인과 공격자 체인 간의 경쟁은 이항 랜덤 워크(Binomial Random Walk)로 특성화할 수 있다. 성공 사건은 정직한 체인이 한 블록 연장되어 리드를 +1만큼 증가시키는 것이고, 실패 사건은 공격자의 체인이 한 블록 연장되어 격차를 -1만큼 줄이는 것이다.
주어진 격차에서 공격자가 따라잡을 확률은 도박사의 파산 문제(Gambler's Ruin problem)에 비유된다. 무한한 신용을 가진 도박사가 적자에서 시작하여 손익분기점에 도달하기 위해 잠재적으로 무한한 횟수의 시도를 한다고 가정하자. 그가 손익분기점에 도달하는 확률, 또는 공격자가 정직한 체인을 따라잡는 확률은 다음과 같이 계산할 수 있다[^8]:
p = probability an honest node finds the next block
q = probability the attacker finds the next block
q = probability the attacker will ever catch up from z blocks behind
``````
\[
qz =
\begin{cases}
1 & \text{if } p \leq q \\
\left(\frac{q}{p}\right) z & \text{if } p > q
\end{cases}
\]
p q라는 가정하에, 공격자가 따라잡아야 하는 블록 수가 증가함에 따라 확률은 지수적으로 감소한다. 불리한 상황에서, 초반에 운 좋게 앞서 나가지 못하면, 뒤처질수록 그의 가능성은 극히 작아진다.
이제 새로운 거래의 수신자가 발신자가 거래를 변경할 수 없다고 충분히 확신하기 전에 얼마나 기다려야 하는지 고려한다. 발신자는 수신자에게 자신이 지불했다고 한동안 믿게 만든 후, 일정 시간이 지난 후 자신에게 되돌려 지불하도록 전환하려는 공격자라고 가정한다. 그런 일이 발생하면 수신자에게 경고가 가지만, 발신자는 그때쯤이면 너무 늦기를 바란다.
수신자는 새로운 키 쌍을 생성하고 서명 직전에 발신자에게 공개 키를 제공한다. 이는 발신자가 충분히 앞서 나갈 만큼 운이 좋을 때까지 블록 체인을 미리 연속적으로 작업하여 준비한 후 그 시점에 거래를 실행하는 것을 방지한다. 거래가 전송되면, 부정직한 발신자는 자신의 거래의 대안 버전을 포함하는 병렬 체인을 비밀리에 작업하기 시작한다.
수신자는 거래가 블록에 추가되고 z개의 블록이 그 뒤에 연결될 때까지 기다린다. 공격자가 이룬 정확한 진행 정도를 알 수 없지만, 정직한 블록이 블록당 평균 예상 시간이 걸렸다고 가정하면, 공격자의 잠재적 진행은 기대값이 다음과 같은 포아송 분포가 될 것이다:
\[
\lambda = z\frac{q}{p}
\]
공격자가 지금이라도 따라잡을 수 있는 확률을 구하기 위해, 그가 이룰 수 있었던 각 진행 정도에 대한 포아송 밀도에 그 지점에서 따라잡을 수 있는 확률을 곱한다:
\[
\sum_{k=0}^{\infty} \frac{\lambda^k e^{-\lambda}}{k!} \cdot \left\{
\begin{array}{cl}
\left(\frac{q}{p}\right)^{(z-k)} & \text{if } k \leq z \\
1 & \text{if } k > z
\end{array}
\right.
\]
분포의 무한 꼬리를 합산하는 것을 피하기 위해 재배열하면...
\[
1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} \left(1-\left(\frac{q}{p}\right)^{(z-k)}\right)
\]
C 코드로 변환하면...
```c
#include math.h
double AttackerSuccessProbability(double q, int z)
{
double p = 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));
}
return sum;
}
몇 가지 결과를 실행하면, 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.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
Conclusion
Kami telah mengusulkan sistem untuk transaksi elektronik tanpa bergantung pada kepercayaan. Kami memulai dengan kerangka biasa koin yang dibuat dari tanda tangan digital, yang memberikan kontrol kuat atas kepemilikan, tetapi tidak lengkap tanpa cara untuk mencegah double-spending. Untuk mengatasi ini, kami mengusulkan jaringan peer-to-peer yang menggunakan proof-of-work untuk mencatat riwayat publik transaksi yang dengan cepat menjadi tidak praktis secara komputasi bagi penyerang untuk diubah jika node jujur mengendalikan mayoritas daya CPU. Jaringan ini kuat dalam kesederhanaan tidak terstrukturnya. Node bekerja sekaligus dengan sedikit koordinasi. Mereka tidak perlu diidentifikasi, karena pesan tidak dirutekan ke tempat tertentu manapun dan hanya perlu dikirimkan berdasarkan upaya terbaik. Node dapat meninggalkan dan bergabung kembali dengan jaringan sesuka hati, menerima rantai proof-of-work sebagai bukti atas apa yang terjadi saat mereka pergi. Mereka memilih dengan daya CPU mereka, mengekspresikan penerimaan blok valid dengan bekerja memperpanjangnya dan menolak blok tidak valid dengan menolak bekerja pada blok tersebut. Setiap aturan dan insentif yang diperlukan dapat ditegakkan dengan mekanisme konsensus ini.
Conclusion
우리는 신뢰에 의존하지 않는 전자 거래 시스템을 제안했다. 전자 서명으로 만들어진 화폐의 일반적인 프레임워크에서 출발했는데, 이는 소유권의 강력한 통제를 제공하지만 이중 지불을 방지할 방법 없이는 불완전하다. 이를 해결하기 위해, 거래의 공개 이력을 기록하는 proof-of-work를 사용하는 peer-to-peer 네트워크를 제안했으며, 정직한 노드가 CPU 연산 능력의 과반수를 통제하는 한 공격자가 변경하는 것이 계산적으로 빠르게 실질적으로 불가능해진다. 네트워크는 비구조적 단순성에서 강건하다. 노드들은 거의 조율 없이 모두 동시에 작업한다. 메시지가 특정 장소로 라우팅되지 않고 최선 노력(best effort) 기반으로만 전달되면 되므로, 노드를 식별할 필요가 없다. 노드들은 자유롭게 네트워크를 떠났다가 다시 참여할 수 있으며, 부재 중에 일어난 일의 증거로서 proof-of-work 체인을 수용한다. 그들은 CPU 연산 능력으로 투표하며, 유효한 블록을 연장하는 작업을 통해 수락을 표현하고, 유효하지 않은 블록에 대한 작업을 거부함으로써 이를 거부한다. 필요한 규칙과 인센티브는 이 합의 메커니즘으로 시행될 수 있다.
References
-
H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.
-
S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.
-
D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.
-
S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.
-
A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.
-
R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.
-
W. Feller, "An introduction to probability theory and its applications," 1957.
References
-
H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.
-
S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.
-
D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.
-
S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.
-
A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.
-
R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.
-
W. Feller, "An introduction to probability theory and its applications," 1957.