Bitcoin: A Peer-to-Peer Electronic Cash System

About this paperEnglishbeside English

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 Giới thiệu

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.

Đ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 Giao dịch

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.

Hình.

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.

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 Server dấu thời gian

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

Hình.

4 Bằng chứng công việc

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

Đố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ó.

Hình.

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.

Để 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 Mạng

Các bước vận hành mạng như sau:

  1. Các giao dịch mới được quảng bá đến tất cả các nút.
  2. Mỗi nút tập hợp các giao dịch mới vào một khối.
  3. 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.
  4. 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.
  5. 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 đó.
  6. 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 đó.

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.

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 Cơ chế khuyến khích

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.

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.

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 Thu hồi dung lượng đĩa

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.

Các giao dịch được băm trong một cây Merkle

Sau khi cắt tỉa Tx0-2 khỏi khối

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 Xác minh thanh toán đơn giản hóa

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.

Hình.

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 Kết hợp và Tách giá trị

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.

Hình.

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 Quyền riêng tư

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.

Mô hình quyền riêng tư truyền thống

Danh tính → Giao dịch → Bên thứ ba đáng tin cậy → Đối tác giao dịch → Công chúng

Mô hình quyền riêng tư mới

Danh tính → Giao dịch → Công chúng

Để 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 Tính toán

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.

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.

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]:

p=p = xác suất một nút trung thực tìm thấy khối tiếp theo q=q = xác suất kẻ tấn công tìm thấy khối tiếp theo qz=q_z = xác suất kẻ tấn công sẽ từng bắt kịp từ phía sau z khối

qz={1neˆˊu p≤q(q/p)zneˆˊu p>qq_z = \begin{cases} 1 & \text{nếu } p \leq q \\ (q/p)^z & \text{nếu } p > q \end{cases}

Với giả định của chúng ta rằng p>qp > q, 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.

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.

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.

Người nhận chờ cho đến khi giao dịch được thêm vào một khối và zz 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:

λ=zqp\lambda = z \frac{q}{p}

Để 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 đó:

∑k=0∞λke−λk!{(q/p)(z−k)neˆˊu k≤z1neˆˊu k>z\sum_{k=0}^{\infty} \frac{\lambda^k e^{-\lambda}}{k!} \left\{ \begin{array}{ll} (q/p)^{(z-k)} & \text{nếu } k \leq z \\ 1 & \text{nếu } k > z \end{array} \right.

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

1−∑k=0zλke−λk!(1−(q/p)(z−k))1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} (1 - (q/p)^{(z-k)})

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;
}
            
          

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

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
            
          

12 Kết luận

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

  1. W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.
  2. 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.
  3. S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.
  4. 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.
  5. 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.
  6. A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.
  7. R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.
  8. 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. Translated from the English.