Bitcoin: A Peer-to-Peer Electronic Cash System
Abstract. A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution. Digital signatures provide part of the solution, but the main benefits are lost if a trusted third party is still required to prevent double-spending. We propose a solution to the double-spending problem using a peer-to-peer network. The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers. The network itself requires minimal structure. Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone.
Bitcoin: Hệ thống tiền mặt điện tử ngang hàng
Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org
Tóm tắt. Một phiên bản tiền mặt điện tử hoàn toàn ngang hàng sẽ cho phép các khoản thanh toán trực tuyến được gửi trực tiếp từ một bên này sang một bên khác mà không cần thông qua một tổ chức tài chính. Chữ ký số cung cấp một phần của giải pháp, nhưng các lợi ích chính sẽ mất đi nếu vẫn cần một bên thứ ba đáng tin cậy để ngăn chặn việc chi tiêu hai lần. Chúng tôi đề xuất một giải pháp cho vấn đề chi tiêu hai lần bằng cách sử dụng một mạng ngang hàng. Mạng gắn dấu thời gian cho các giao dịch bằng cách băm chúng vào một chuỗi liên tục của bằng chứng công việc dựa trên băm, tạo thành một bản ghi không thể thay đổi nếu không thực hiện lại bằng chứng công việc. Chuỗi dài nhất không chỉ đóng vai trò là bằng chứng về chuỗi các sự kiện đã được chứng kiến, mà còn là bằng chứng rằng nó đến từ nhóm lớn nhất của năng lực CPU. Miễn là phần lớn năng lực CPU được kiểm soát bởi các nút không hợp tác để tấn công mạng, chúng sẽ tạo ra chuỗi dài nhất và vượt qua những kẻ tấn công. Bản thân mạng yêu cầu cấu trúc tối thiểu. Các thông điệp được phát đi trên cơ sở nỗ lực tốt nhất, và các nút có thể rời khỏi và tham gia lại mạng tùy ý, chấp nhận chuỗi bằng chứng công việc dài nhất làm bằng chứng về những gì đã xảy ra trong thời gian chúng vắng mặt.
1 Introduction
1 Giới thiệu
Commerce on the Internet has come to rely almost exclusively on financial institutions serving as trusted third parties to process electronic payments. While the system works well enough for most transactions, it still suffers from the inherent weaknesses of the trust based model. Completely non-reversible transactions are not really possible, since financial institutions cannot avoid mediating disputes. The cost of mediation increases transaction costs, limiting the minimum practical transaction size and cutting off the possibility for small casual transactions, and there is a broader cost in the loss of ability to make non-reversible payments for non-reversible services. With the possibility of reversal, the need for trust spreads. Merchants must be wary of their customers, hassling them for more information than they would otherwise need. A certain percentage of fraud is accepted as unavoidable. These costs and payment uncertainties can be avoided in person by using physical currency, but no mechanism exists to make payments over a communications channel without a trusted party.
Thương mại trên Internet đã gần như hoàn toàn dựa vào các tổ chức tài chính đóng vai trò là bên thứ ba đáng tin cậy để xử lý các khoản thanh toán điện tử. Mặc dù hệ thống hoạt động đủ tốt cho hầu hết các giao dịch, nó vẫn chịu những điểm yếu vốn có của mô hình dựa trên sự tin cậy. Các giao dịch hoàn toàn không thể đảo ngược thực sự không khả thi, vì các tổ chức tài chính không thể tránh việc đứng ra phân xử tranh chấp. Chi phí của việc phân xử làm tăng chi phí giao dịch, giới hạn kích thước giao dịch thực tế tối thiểu và loại bỏ khả năng thực hiện các giao dịch nhỏ mang tính ngẫu nhiên, đồng thời còn có một chi phí rộng hơn do mất khả năng thực hiện các khoản thanh toán không thể đảo ngược cho các dịch vụ không thể đảo ngược. Với khả năng đảo ngược, nhu cầu về sự tin cậy lan rộng hơn. Người bán phải cảnh giác với khách hàng của mình, gây phiền hà cho họ bằng cách yêu cầu nhiều thông tin hơn mức họ cần trong những trường hợp khác. Một tỷ lệ gian lận nhất định được chấp nhận như điều không thể tránh khỏi. Những chi phí và sự không chắc chắn trong thanh toán này có thể được tránh khi giao dịch trực tiếp bằng cách sử dụng tiền tệ vật lý, nhưng không tồn tại cơ chế nào để thực hiện thanh toán qua một kênh liên lạc mà không cần một bên đáng tin cậy.
What is needed is an electronic payment system based on cryptographic proof instead of trust, allowing any two willing parties to transact directly with each other without the need for a trusted third party. Transactions that are computationally impractical to reverse would protect sellers from fraud, and routine escrow mechanisms could easily be implemented to protect buyers. In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions. The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes.
Điều cần thiết là một hệ thống thanh toán điện tử dựa trên bằng chứng mật mã thay vì sự tin cậy, cho phép bất kỳ hai bên tự nguyện nào giao dịch trực tiếp với nhau mà không cần một bên thứ ba đáng tin cậy. Các giao dịch không khả thi về mặt tính toán để đảo ngược sẽ bảo vệ người bán khỏi gian lận, và các cơ chế ký quỹ thông thường có thể dễ dàng được triển khai để bảo vệ người mua. Trong bài báo này, chúng tôi đề xuất một giải pháp cho vấn đề chi tiêu kép bằng cách sử dụng một server dấu thời gian phân tán ngang hàng để tạo ra bằng chứng tính toán về thứ tự thời gian của các giao dịch. Hệ thống an toàn miễn là các nút trung thực cùng kiểm soát nhiều sức mạnh CPU hơn bất kỳ nhóm các nút tấn công nào hợp tác với nhau.
2 Transactions
2 Giao dịch
We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin. A payee can verify the signatures to verify the chain of ownership.
Chúng tôi định nghĩa một đồng tiền điện tử là một chuỗi chữ ký số (digital signature). Mỗi chủ sở hữu chuyển đồng tiền cho người tiếp theo bằng cách ký số lên giá trị băm của giao dịch trước đó và khóa công khai (public key) của chủ sở hữu tiếp theo, rồi thêm chúng vào cuối đồng tiền. Người nhận thanh toán có thể xác minh các chữ ký để xác minh chuỗi quyền sở hữu.
Figure.
Hình.
The problem of course is the payee can't verify that one of the owners did not double-spend the coin. A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank.
Vấn đề hiển nhiên là người nhận thanh toán không thể xác minh rằng không có chủ sở hữu nào đã chi tiêu hai lần (double-spending) cùng một đồng tiền. Một giải pháp phổ biến là đưa vào một cơ quan trung ương đáng tin cậy, hay cơ sở phát hành tiền, để kiểm tra mọi giao dịch nhằm phát hiện việc chi tiêu hai lần. Sau mỗi giao dịch, đồng tiền phải được trả lại cho cơ sở phát hành tiền để phát hành một đồng tiền mới, và chỉ những đồng tiền do cơ sở này trực tiếp phát hành mới được tin là chưa bị chi tiêu hai lần. Vấn đề của giải pháp này là số phận của toàn bộ hệ thống tiền tệ phụ thuộc vào công ty vận hành cơ sở phát hành tiền, với mọi giao dịch đều phải thông qua công ty đó, giống như một ngân hàng.
We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received.
Chúng tôi cần một cách để người nhận thanh toán biết rằng các chủ sở hữu trước đó chưa ký bất kỳ giao dịch nào sớm hơn. Với mục đích của chúng tôi, giao dịch sớm nhất là giao dịch được tính, nên chúng tôi không quan tâm đến những nỗ lực chi tiêu hai lần về sau. Cách duy nhất để xác nhận một giao dịch không tồn tại là biết tất cả các giao dịch. Trong mô hình dựa trên cơ sở phát hành tiền, cơ sở này biết tất cả các giao dịch và quyết định giao dịch nào đến trước. Để thực hiện điều này mà không cần một bên đáng tin cậy, các giao dịch phải được công bố công khai [1], và chúng tôi cần một hệ thống để những người tham gia thống nhất về một lịch sử duy nhất ghi lại thứ tự tiếp nhận các giao dịch. Người nhận thanh toán cần bằng chứng rằng tại thời điểm của mỗi giao dịch, đa số các nút đã đồng ý rằng đó là giao dịch được tiếp nhận đầu tiên.
3 Timestamp Server
3 Server dấu thời gian
The solution we propose begins with a timestamp server. A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post [2-5]. The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it.
Giải pháp chúng tôi đề xuất bắt đầu bằng một server dấu thời gian (timestamp server). Server dấu thời gian hoạt động bằng cách tính giá trị băm (hash) của một khối các mục cần được gắn dấu thời gian và công bố rộng rãi giá trị băm đó, chẳng hạn trên một tờ báo hoặc trong một bài đăng trên Usenet [2-5]. Dấu thời gian chứng minh rằng dữ liệu phải đã tồn tại vào thời điểm đó, vì hiển nhiên dữ liệu phải tồn tại thì mới có thể được đưa vào phép băm. Mỗi dấu thời gian bao gồm dấu thời gian trước đó trong giá trị băm của nó, tạo thành một chuỗi, trong đó mỗi dấu thời gian được thêm vào củng cố các dấu thời gian đứng trước nó.
Figure.
Hình.
4 Proof-of-Work
4 Bằng chứng công việc
To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof-of-work system similar to Adam Back's Hashcash [6], rather than newspaper or Usenet posts. The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash.
Để triển khai một server dấu thời gian phân tán trên cơ sở ngang hàng, chúng tôi sẽ cần sử dụng một hệ thống bằng chứng công việc (proof-of-work) tương tự như Hashcash của Adam Back [6], thay vì các bài đăng trên báo hoặc Usenet. Bằng chứng công việc bao gồm việc tìm kiếm một giá trị mà khi được băm, chẳng hạn như với SHA-256, giá trị băm bắt đầu bằng một số lượng bit 0. Công việc trung bình cần thiết tăng theo hàm mũ với số lượng bit 0 được yêu cầu và có thể được xác minh bằng cách thực thi một lần băm duy nhất.
For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it.
Đối với mạng dấu thời gian của chúng tôi, chúng tôi triển khai bằng chứng công việc bằng cách tăng dần một nonce trong khối cho đến khi tìm thấy một giá trị khiến giá trị băm của khối có số lượng bit 0 cần thiết. Một khi nỗ lực CPU đã được tiêu tốn để khiến nó thỏa mãn bằng chứng công việc, khối không thể được thay đổi nếu không thực hiện lại công việc. Khi các khối sau được nối chuỗi sau nó, công việc để thay đổi khối sẽ bao gồm việc thực hiện lại tất cả các khối sau nó.
Figure.
Hình.
The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added.
Bằng chứng công việc cũng giải quyết vấn đề xác định biểu diễn trong việc ra quyết định theo đa số. Nếu đa số được dựa trên một-IP-address-một-phiếu-bầu, nó có thể bị phá hoại bởi bất kỳ ai có khả năng cấp phát nhiều IP. Bằng chứng công việc về cơ bản là một-CPU-một-phiếu-bầu. Quyết định theo đa số được biểu diễn bởi chuỗi dài nhất, chuỗi có nỗ lực bằng chứng công việc lớn nhất được đầu tư vào đó. Nếu đa số sức mạnh CPU được kiểm soát bởi các nút trung thực, chuỗi trung thực sẽ phát triển nhanh nhất và vượt qua mọi chuỗi cạnh tranh. Để sửa đổi một khối trước đó, kẻ tấn công sẽ phải thực hiện lại bằng chứng công việc của khối đó và tất cả các khối sau nó, sau đó bắt kịp và vượt qua công việc của các nút trung thực. Chúng tôi sẽ chỉ ra sau rằng xác suất một kẻ tấn công chậm hơn bắt kịp giảm theo hàm mũ khi các khối tiếp theo được thêm vào.
To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases.
Để bù đắp cho tốc độ phần cứng ngày càng tăng và sự quan tâm thay đổi trong việc chạy các nút theo thời gian, độ khó của bằng chứng công việc được xác định bởi một trung bình trượt nhằm đạt được một số lượng khối trung bình mỗi giờ. Nếu chúng được tạo ra quá nhanh, độ khó sẽ tăng lên.
5 Network
5 Mạng
The steps to run the network are as follows:
Các bước vận hành mạng như sau:
- New transactions are broadcast to all nodes.
- Each node collects new transactions into a block.
- Each node works on finding a difficult proof-of-work for its block.
- When a node finds a proof-of-work, it broadcasts the block to all nodes.
- Nodes accept the block only if all transactions in it are valid and not already spent.
- Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash.
- Các giao dịch mới được quảng bá đến tất cả các nút.
- Mỗi nút tập hợp các giao dịch mới vào một khối.
- Mỗi nút tìm một bằng chứng công việc (proof-of-work) có độ khó cao cho khối của mình.
- Khi một nút tìm được bằng chứng công việc, nó quảng bá khối đó đến tất cả các nút.
- Các nút chỉ chấp nhận khối nếu tất cả các giao dịch trong khối đều hợp lệ và chưa được chi tiêu trước đó.
- Các nút thể hiện việc chấp nhận khối bằng cách tạo khối tiếp theo trong chuỗi, sử dụng giá trị băm của khối đã được chấp nhận làm giá trị băm trước đó.
Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof-of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one.
Các nút luôn coi chuỗi dài nhất là chuỗi đúng và sẽ tiếp tục mở rộng chuỗi đó. Nếu hai nút đồng thời quảng bá các phiên bản khác nhau của khối tiếp theo, một số nút có thể nhận được phiên bản này hoặc phiên bản kia trước. Trong trường hợp đó, chúng tiếp tục làm việc trên phiên bản nhận được đầu tiên, nhưng lưu lại nhánh còn lại phòng khi nhánh đó trở nên dài hơn. Thế cân bằng sẽ bị phá vỡ khi bằng chứng công việc tiếp theo được tìm thấy và một nhánh trở nên dài hơn; các nút đang làm việc trên nhánh còn lại khi đó sẽ chuyển sang nhánh dài hơn.
New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one.
Thông điệp quảng bá giao dịch mới không nhất thiết phải đến được tất cả các nút. Miễn là chúng đến được nhiều nút, các giao dịch đó sẽ sớm được đưa vào một khối. Việc quảng bá khối cũng có khả năng chịu được tình trạng mất thông điệp. Nếu một nút không nhận được một khối, nó sẽ yêu cầu khối đó khi nhận được khối tiếp theo và nhận ra rằng mình đã bỏ lỡ một khối.
6 Incentive
6 Cơ chế khuyến khích
By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended.
Theo quy ước, giao dịch đầu tiên trong một khối (block) là một giao dịch đặc biệt tạo ra một đồng tiền mới thuộc sở hữu của người tạo khối. Điều này tạo thêm động lực để các nút hỗ trợ mạng, đồng thời cung cấp một cách phân phối tiền ban đầu vào lưu thông, vì không có cơ quan trung ương nào phát hành tiền. Việc đều đặn bổ sung một lượng tiền mới cố định tương tự như việc thợ đào vàng tiêu tốn tài nguyên để đưa thêm vàng vào lưu thông. Trong trường hợp của chúng tôi, những thứ được tiêu tốn là thời gian CPU và điện năng.
The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free.
Phần thưởng khuyến khích cũng có thể được lấy từ phí giao dịch (transaction fee). Nếu giá trị đầu ra của một giao dịch nhỏ hơn giá trị đầu vào, phần chênh lệch là phí giao dịch được cộng vào giá trị phần thưởng khuyến khích của khối chứa giao dịch đó. Khi một số lượng tiền được định trước đã đi vào lưu thông, phần thưởng khuyến khích có thể chuyển sang hoàn toàn dựa vào phí giao dịch và hoàn toàn không gây lạm phát.
The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth.
Cơ chế khuyến khích có thể giúp khuyến khích các nút duy trì sự trung thực. Nếu một kẻ tấn công tham lam có thể tập hợp sức mạnh CPU lớn hơn tất cả các nút trung thực, hắn sẽ phải lựa chọn giữa việc dùng sức mạnh đó để lừa đảo bằng cách lấy cắp lại những khoản tiền mình đã thanh toán, hoặc dùng nó để tạo ra tiền mới. Hắn hẳn sẽ thấy việc tuân thủ các quy tắc có lợi hơn, vì các quy tắc đó cho phép hắn nhận được nhiều tiền mới hơn tất cả những người khác cộng lại, so với việc phá hoại hệ thống và tính hợp lệ của chính tài sản của mình.
7 Reclaiming Disk Space
7 Thu hồi dung lượng đĩa
Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space. To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash. Old blocks can then be compacted by stubbing off branches of the tree. The interior hashes do not need to be stored.
Khi giao dịch mới nhất của một đồng tiền đã được chôn dưới đủ số khối, các giao dịch đã chi tiêu trước đó có thể được loại bỏ để tiết kiệm dung lượng đĩa. Để thực hiện việc này mà không làm thay đổi giá trị băm của khối, các giao dịch được băm trong một cây Merkle (Merkle Tree) [7][2][5], trong đó chỉ có gốc cây được đưa vào phép băm của khối. Khi đó, các khối cũ có thể được thu gọn bằng cách cắt bỏ các nhánh của cây. Không cần lưu trữ các giá trị băm bên trong cây.
Transactions Hashed in a Merkle Tree
Các giao dịch được băm trong một cây Merkle
After Pruning Tx0-2 from the Block
Sau khi cắt tỉa Tx0-2 khỏi khối
A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes 6 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory.
Phần đầu của một khối không chứa giao dịch sẽ có kích thước khoảng 80 byte. Nếu giả sử các khối được tạo mỗi 10 phút, thì 80 byte 6 24 * 365 = 4.2MB mỗi năm. Với các hệ thống máy tính thường được bán kèm 2GB RAM vào năm 2008, và định luật Moore dự đoán mức tăng hiện tại là 1.2GB mỗi năm, việc lưu trữ sẽ không phải là vấn đề ngay cả khi các phần đầu khối phải được giữ trong bộ nhớ.
8 Simplified Payment Verification
8 Xác minh thanh toán đơn giản hóa
It is possible to verify payments without running a full network node. A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in. He can't check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accepted it, and blocks added after it further confirm the network has accepted it.
Có thể xác minh các khoản thanh toán mà không cần vận hành một nút mạng đầy đủ. Người dùng chỉ cần giữ một bản sao các phần đầu khối của chuỗi bằng chứng công việc (proof-of-work) dài nhất, có thể lấy được bằng cách truy vấn các nút mạng cho đến khi tin chắc rằng mình có chuỗi dài nhất, và lấy nhánh Merkle (Merkle branch) liên kết giao dịch với khối chứa dấu thời gian của giao dịch đó. Người dùng không thể tự kiểm tra giao dịch, nhưng bằng cách liên kết giao dịch với một vị trí trong chuỗi, họ có thể thấy rằng một nút mạng đã chấp nhận giao dịch đó, và các khối được thêm vào sau đó tiếp tục xác nhận rằng mạng đã chấp nhận giao dịch.
Figure.
Hình.
As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker. While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker's fabricated transactions for as long as the attacker can continue to overpower the network. One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user's software to download the full block and alerted transactions to confirm the inconsistency. Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification.
Do đó, việc xác minh là đáng tin cậy chừng nào các nút trung thực còn kiểm soát mạng, nhưng dễ bị tấn công hơn nếu kẻ tấn công chiếm ưu thế áp đảo trên mạng. Trong khi các nút mạng có thể tự xác minh giao dịch, phương pháp đơn giản hóa có thể bị đánh lừa bởi các giao dịch giả mạo của kẻ tấn công chừng nào kẻ tấn công còn có thể duy trì ưu thế áp đảo trên mạng. Một chiến lược để phòng chống điều này là tiếp nhận cảnh báo từ các nút mạng khi chúng phát hiện một khối không hợp lệ, qua đó kích hoạt phần mềm của người dùng tải xuống toàn bộ khối và các giao dịch bị cảnh báo để xác nhận sự thiếu nhất quán. Các doanh nghiệp thường xuyên nhận thanh toán có lẽ vẫn muốn vận hành các nút riêng để bảo đảm an toàn một cách độc lập hơn và xác minh nhanh hơn.
9 Combining and Splitting Value
9 Kết hợp và Tách giá trị
Although it would be possible to handle coins individually, it would be unwieldy to make a separate transaction for every cent in a transfer. To allow value to be split and combined, transactions contain multiple inputs and outputs. Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender.
Mặc dù có thể xử lý từng đồng tiền riêng lẻ, việc tạo một giao dịch riêng cho mỗi cent trong một lần chuyển tiền sẽ rất bất tiện. Để cho phép giá trị được tách và kết hợp, các giao dịch chứa nhiều đầu vào và đầu ra. Thông thường sẽ có hoặc là một đầu vào duy nhất từ một giao dịch trước đó có giá trị lớn hơn, hoặc nhiều đầu vào kết hợp các khoản nhỏ hơn, và tối đa hai đầu ra: một cho khoản thanh toán, và một trả lại phần tiền thừa, nếu có, về cho người gửi.
Figure.
Hình.
It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction's history.
Cần lưu ý rằng fan-out, trong đó một giao dịch phụ thuộc vào nhiều giao dịch, và các giao dịch đó lại phụ thuộc vào nhiều giao dịch hơn nữa, không phải là vấn đề ở đây. Không bao giờ cần phải trích xuất một bản sao độc lập hoàn chỉnh của lịch sử giao dịch.
10 Privacy
10 Quyền riêng tư
The traditional banking model achieves a level of privacy by limiting access to information to the parties involved and the trusted third party. The necessity to announce all transactions publicly precludes this method, but privacy can still be maintained by breaking the flow of information in another place: by keeping public keys anonymous. The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone. This is similar to the level of information released by stock exchanges, where the time and size of individual trades, the "tape", is made public, but without telling who the parties were.
Mô hình ngân hàng truyền thống đạt được một mức độ riêng tư bằng cách giới hạn quyền truy cập thông tin cho các bên liên quan và bên thứ ba đáng tin cậy (trusted third party). Việc phải công bố công khai tất cả các giao dịch khiến phương pháp này không thể áp dụng, nhưng quyền riêng tư vẫn có thể được duy trì bằng cách ngắt luồng thông tin ở một vị trí khác: giữ cho các khóa công khai (public keys) ẩn danh. Công chúng có thể thấy rằng ai đó đang gửi một khoản tiền cho người khác, nhưng không có thông tin liên kết giao dịch đó với bất kỳ ai. Điều này tương tự như mức độ thông tin được các sở giao dịch chứng khoán công bố, trong đó thời điểm và quy mô của từng giao dịch, tức "băng ghi giao dịch", được công khai, nhưng không cho biết các bên tham gia là ai.
Traditional Privacy Model
Mô hình quyền riêng tư truyền thống
Identities → Transactions → Trusted Third Party → Counterparty → Public
Danh tính → Giao dịch → Bên thứ ba đáng tin cậy → Đối tác giao dịch → Công chúng
New Privacy Model
Mô hình quyền riêng tư mới
Identities → Transactions → Public
Danh tính → Giao dịch → Công chúng
As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner. Some linking is still unavoidable with multi-input transactions, which necessarily reveal that their inputs were owned by the same owner. The risk is that if the owner of a key is revealed, linking could reveal other transactions that belonged to the same owner.
Để tạo thêm một lớp tường lửa, nên sử dụng một cặp khóa mới cho mỗi giao dịch nhằm ngăn các giao dịch bị liên kết với cùng một chủ sở hữu. Một số liên kết vẫn không thể tránh khỏi với các giao dịch có nhiều đầu vào, vì các giao dịch này tất yếu tiết lộ rằng các đầu vào của chúng thuộc về cùng một chủ sở hữu. Rủi ro là nếu chủ sở hữu của một khóa bị lộ, việc liên kết có thể làm lộ những giao dịch khác thuộc về cùng chủ sở hữu đó.
11 Calculations
11 Tính toán
We consider the scenario of an attacker trying to generate an alternate chain faster than the honest chain. Even if this is accomplished, it does not throw the system open to arbitrary changes, such as creating value out of thin air or taking money that never belonged to the attacker. Nodes are not going to accept an invalid transaction as payment, and honest nodes will never accept a block containing them. An attacker can only try to change one of his own transactions to take back money he recently spent.
Chúng tôi xem xét kịch bản một kẻ tấn công cố gắng tạo ra một chuỗi thay thế nhanh hơn chuỗi trung thực. Ngay cả khi điều này được thực hiện, nó không mở hệ thống cho các thay đổi tùy ý, chẳng hạn như tạo ra giá trị từ hư không hoặc lấy tiền chưa từng thuộc về kẻ tấn công. Các nút sẽ không chấp nhận một giao dịch không hợp lệ làm khoản thanh toán, và các nút trung thực sẽ không bao giờ chấp nhận một khối chứa chúng. Kẻ tấn công chỉ có thể cố gắng thay đổi một trong các giao dịch của chính mình để lấy lại tiền mà hắn vừa chi tiêu gần đây.
The race between the honest chain and an attacker chain can be characterized as a Binomial Random Walk. The success event is the honest chain being extended by one block, increasing its lead by +1, and the failure event is the attacker's chain being extended by one block, reducing the gap by -1.
Cuộc đua giữa chuỗi trung thực và chuỗi của kẻ tấn công có thể được mô tả như một Random Walk Nhị thức. Sự kiện thành công là chuỗi trung thực được mở rộng thêm một khối, tăng khoảng cách dẫn trước của nó lên +1, và sự kiện thất bại là chuỗi của kẻ tấn công được mở rộng thêm một khối, làm giảm khoảng cách xuống -1.
The probability of an attacker catching up from a given deficit is analogous to a Gambler's Ruin problem. Suppose a gambler with unlimited credit starts at a deficit and plays potentially an infinite number of trials to try to reach breakeven. We can calculate the probability he ever reaches breakeven, or that an attacker ever catches up with the honest chain, as follows [8]:
Xác suất một kẻ tấn công bắt kịp từ một mức thiếu hụt nhất định tương tự với bài toán Gambler's Ruin. Giả sử một người đánh bạc với tín dụng không giới hạn bắt đầu từ mức thiếu hụt và thực hiện có thể là vô hạn lần thử để cố gắng đạt đến điểm hòa vốn. Chúng ta có thể tính xác suất anh ta từng đạt đến điểm hòa vốn, hoặc một kẻ tấn công từng bắt kịp chuỗi trung thực, như sau [8]:
probability an honest node finds the next block probability the attacker finds the next block probability the attacker will ever catch up from z blocks behind
xác suất một nút trung thực tìm thấy khối tiếp theo xác suất kẻ tấn công tìm thấy khối tiếp theo xác suất kẻ tấn công sẽ từng bắt kịp từ phía sau z khối
Given our assumption that , the probability drops exponentially as the number of blocks the attacker has to catch up with increases. With the odds against him, if he doesn't make a lucky lunge forward early on, his chances become vanishingly small as he falls further behind.
Với giả định của chúng ta rằng , xác suất giảm theo cấp số nhân khi số lượng khối mà kẻ tấn công phải bắt kịp tăng lên. Khi tỷ lệ cược chống lại hắn, nếu hắn không thực hiện một cú tiến lên may mắn ngay từ đầu, cơ hội của hắn trở nên nhỏ đến mức không đáng kể khi hắn tụt lại phía sau ngày càng xa.
We now consider how long the recipient of a new transaction needs to wait before being sufficiently certain the sender can't change the transaction. We assume the sender is an attacker who wants to make the recipient believe he paid him for a while, then switch it to pay back to himself after some time has passed. The receiver will be alerted when that happens, but the sender hopes it will be too late.
Bây giờ chúng ta xem xét người nhận một giao dịch mới cần phải chờ bao lâu trước khi có đủ sự chắc chắn rằng người gửi không thể thay đổi giao dịch. Chúng ta giả định người gửi là một kẻ tấn công muốn khiến người nhận tin rằng hắn đã thanh toán cho người nhận trong một khoảng thời gian, sau đó chuyển nó thành thanh toán lại cho chính hắn sau khi một khoảng thời gian trôi qua. Người nhận sẽ được cảnh báo khi điều đó xảy ra, nhưng người gửi hy vọng sẽ quá muộn.
The receiver generates a new key pair and gives the public key to the sender shortly before signing. This prevents the sender from preparing a chain of blocks ahead of time by working on it continuously until he is lucky enough to get far enough ahead, then executing the transaction at that moment. Once the transaction is sent, the dishonest sender starts working in secret on a parallel chain containing an alternate version of his transaction.
Người nhận tạo một cặp khóa mới và đưa khóa công khai cho người gửi ngay trước khi ký. Điều này ngăn người gửi chuẩn bị trước một chuỗi các khối bằng cách liên tục làm việc trên nó cho đến khi hắn đủ may mắn để vượt lên đủ xa, sau đó thực hiện giao dịch vào thời điểm đó. Khi giao dịch được gửi đi, người gửi không trung thực bắt đầu bí mật làm việc trên một chuỗi song song chứa một phiên bản thay thế của giao dịch của hắn.
The recipient waits until the transaction has been added to a block and blocks have been linked after it. He doesn't know the exact amount of progress the attacker has made, but assuming the honest blocks took the average expected time per block, the attacker's potential progress will be a Poisson distribution with expected value:
Người nhận chờ cho đến khi giao dịch được thêm vào một khối và khối đã được liên kết sau nó. Anh ta không biết chính xác mức độ tiến triển mà kẻ tấn công đã đạt được, nhưng giả sử các khối trung thực mất thời gian trung bình kỳ vọng cho mỗi khối, tiến triển tiềm năng của kẻ tấn công sẽ là một phân phối Poisson với giá trị kỳ vọng:
To get the probability the attacker could still catch up now, we multiply the Poisson density for each amount of progress he could have made by the probability he could catch up from that point:
Để có được xác suất kẻ tấn công vẫn có thể bắt kịp vào lúc này, chúng ta nhân mật độ Poisson cho mỗi mức tiến triển mà hắn có thể đã đạt được với xác suất hắn có thể bắt kịp từ điểm đó:
Rearranging to avoid summing the infinite tail of the distribution...
Sắp xếp lại để tránh tính tổng phần đuôi vô hạn của phân phối...
Converting to C code...
Chuyển đổi sang mã 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;
}
#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;
}
Running some results, we can see the probability drop off exponentially with z.
Chạy một số kết quả, chúng ta có thể thấy xác suất giảm theo cấp số nhân với 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.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
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
Solving for P less than 0.1%...
Giải để tìm P nhỏ hơn 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
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 Conclusion
12 Kết luận
We have proposed a system for electronic transactions without relying on trust. We started with the usual framework of coins made from digital signatures, which provides strong control of ownership, but is incomplete without a way to prevent double-spending. To solve this, we proposed a peer-to-peer network using proof-of-work to record a public history of transactions that quickly becomes computationally impractical for an attacker to change if honest nodes control a majority of CPU power. The network is robust in its unstructured simplicity. Nodes work all at once with little coordination. They do not need to be identified, since messages are not routed to any particular place and only need to be delivered on a best effort basis. Nodes can leave and rejoin the network at will, accepting the proof-of-work chain as proof of what happened while they were gone. They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism.
Chúng tôi đã đề xuất một hệ thống cho các giao dịch điện tử mà không cần dựa vào sự tin cậy. Chúng tôi bắt đầu với khung thông thường của các đồng tiền được tạo từ chữ ký số, cung cấp quyền kiểm soát mạnh mẽ đối với quyền sở hữu, nhưng không hoàn chỉnh nếu thiếu một cách để ngăn chặn việc chi tiêu kép. Để giải quyết vấn đề này, chúng tôi đề xuất một mạng ngang hàng sử dụng bằng chứng công việc để ghi lại lịch sử công khai của các giao dịch, lịch sử này nhanh chóng trở nên không khả thi về mặt tính toán để kẻ tấn công thay đổi nếu các nút trung thực kiểm soát phần lớn sức mạnh CPU. Mạng có tính bền vững nhờ sự đơn giản không có cấu trúc của nó. Các nút hoạt động cùng lúc với rất ít sự phối hợp. Chúng không cần được xác định danh tính, vì các thông điệp không được định tuyến đến bất kỳ nơi cụ thể nào và chỉ cần được phân phối theo cơ chế nỗ lực tốt nhất. Các nút có thể rời khỏi và tham gia lại mạng tùy ý, chấp nhận chuỗi bằng chứng công việc như bằng chứng về những gì đã xảy ra trong thời gian chúng vắng mặt. Chúng bỏ phiếu bằng sức mạnh CPU của mình, thể hiện sự chấp nhận các khối hợp lệ bằng cách làm việc để mở rộng chúng và từ chối các khối không hợp lệ bằng cách không làm việc trên chúng. Bất kỳ quy tắc và động lực cần thiết nào đều có thể được thực thi bằng cơ chế đồng thuận này.
References
- W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.
- 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.
Read off the page by a vision model reading the page images using olmOCR-2-7B-1025-FP8.
Read off the page by a vision model reading the page images using olmOCR-2-7B-1025-FP8. Translated from the English.