BITCOIN : HỆ THỐNG TIỀN TỆ ĐIỆN TỬ NGANG HÀNG Satoshi Nakamoto satoshin@gmx.com www.bitcoin.org TÓM TẮT NỘI DUNG Hệ thống tiền tệ điện tử ngang hàng là hệ thống cho phép các khoản thanh toán được gửi trực tiếp từ một thành viên tới một thành viên khác không cần thông qua các định chế tài chính. Các chữ ký số là một phần của giải pháp, nhưng các lợi ích cốt lõi sẽ bị mất đi nếu vẫn cần phải có một bên thứ 3 được tín nhiệm đứng ra để chống việc lặp chi (double-spending - một khoản thanh toán được tiêu nhiều lần). Chúng tôi đề xuất một giải pháp để giải quyết vấn đề lặp chi bằng cách sử dụng mạng lưới ngang hàng. Mạng lưới sẽ gán nhãn thời gian cho các giao dịch bằng cách băm chúng thành chuỗi liên tục các “bằng chứng công việc – POW” dựa trên hàm băm (hash), hình thành nên một bản ghi không thể bị thay đổi nếu không làm lại các “bằng chứng công việc”. Chuỗi dài nhất không chỉ được xem như là bằng chứng của các sự kiện liên tục đã được chứng thực, mà còn thể hiện rằng nó được sinh ra từ tập hợp các node tạo nên sức mạnh CPU lớn nhất. Cho đến khi nào phần lớn sức mạnh của CPU vẫn được kiểm soát bởi các node trung thực, mà các node này không liên kết với nhau để tấn công mạng lưới, thì các node này sẽ sinh ra chuỗi dài nhất và chống lại được những kẻ tấn công mạng lưới. Bản thân mạng lưới tự yêu cầu nó phải có cấu trúc tối thiểu. Các thông điệp sẽ được truyền đi rộng rãi trên mạng lưới với nỗ lực cao nhất, các node có thể rời đi rồi tham gia trở lại mạng lưới theo ý muốn, và chấp nhận chuỗi "bằng chứng công việc" dài nhất làm bằng chứng cho những gì đã diễn ra trong thời gian chúng nằm ở ngoài mạng lưới. 1. Giới thiệu Thương mại điện tử gần như phải dựa hoàn toàn vào một bên thứ ba được tín nhiệm - các định chế tài chính - trong quá trình xử lý các khoản thanh toán điện tử. Hệ thống này làm việc khá tốt đối với hầu hết các giao dịch, nhưng nó vẫn tồn tại những điểm yếu cố hữu của mô hình tín nhiệm. Thực hiện các giao dịch không thể đảo ngược dựa trên mô hình này là một việc không thực sự khả thi, vì các tranh chấp trung gian là điều không thể tránh khỏi khi sử dụng các định chế tài chính. Phí trung gian làm tăng phí giao dịch, làm cho việc thực hiện các giao dịch nhỏ thông thường trở nên không khả thi, và phải mất chi phí cao hơn do không có khả năng thực hiện các thanh toán không thể đảo ngược cho các dịch vụ không thể đảo ngược. Do có khả năng bị đảo ngược nên nhu cầu phải có sự tín nhiệm giữa các bên tăng cao. Các thương gia phải thận trọng với khách hàng của họ, làm phiền nhiễu khách hàng để có nhiều thông tin hơn những gì thực sự cần. Gian lận được xem như là một điều không thể tránh khỏi, và người ta phải chấp nhận sống chung với các gian lận ở một tỷ lệ nhất định nào đó. Giao dịch bằng tiền mặt sẽ tránh được các chi phí và rủi ro trên, nhưng hiện tại chưa có hệ thống nào tồn tại để đảm bảo việc thanh toán qua một kênh thông tin liên lạc mà không cần đến bên trung gian thứ ba. Vì thế thứ chúng ta cần là một hệ thống thanh toán điện tử được xây dựng dựa trên bằng chứng mật mã thay vì dựa trên sự tín nhiệm, hệ thống này cho phép hai bên giao dịch trực tiếp với nhau mà không cần đến một bên trung gian thứ ba nào cả. Các giao dịch được tính toán để không thể bị đảo ngược nhằm bảo vệ người bán khỏi các gian lận, và các cơ chế ký quỹ có thể dễ dàng thực hiện được nhằm bảo vệ người mua. Trong bài viết này, chúng tôi đề xuất một giải pháp để giải quyết vấn đề lặp chi bằng cách sử dụng một mạng máy chủ nhãn thời gian phân phối ngang hàng để tạo ra các bằng chứng theo trình tự thời gian của các giao dịch dựa trên sức mạnh tính toán của Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 máy tính. Hệ thống này sẽ đảm bảo được sự an toàn, cho đến khi nào các node trung thực tập hợp với nhau kiểm soát được phần lớn sức mạnh CPU hơn so với tập nợp các node của những kẻ tấn công phá hoại. 2. Các giao dịch Chúng tôi định nghĩa một đồng tiền điện tử là một chuỗi các chữ ký số. Mỗi chủ sở hữu chuyển đồng tiền cho người tiếp theo bằng cách ký số vào một mã băm của giao dịch trước đó và khóa công khai của người sở hữu tiếp theo rồi thêm chúng vào phía cuối cùng của đồng tiền. Người nhận tiền có thể xác nhận các chữ ký để xác nhận chuỗi của quyền sở hữu. Tất nhiên, vấn đề ở đây là người nhận tiền không thể xác nhận rằng một trong những người sở hữu có gian lận bằng cách lặp chi đồng tiền của họ hay không. Giải pháp thông thường là dùng một cơ quan có quyền lực tập trung để đảm bảo sự tín nhiệm giữa các bên hoặc là dùng một nhà phát hành để kiểm tra từng giao dịch một. Sau mỗi giao dịch, đồng tiền sẽ phải được trả lại nơi phát hành để tạo ra một đồng tiền mới, và chỉ có những đồng tiền được tạo ra trực tiếp từ nguồn phát hành đó mới được tin là không gian lận. Vấn đề với 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 nhà phát hành, tức là tất cả mọi giao dịch đều phải đi qua đó, như một ngân hàng. Chúng ta cần một cách để người nhận tiền có thể biết rằng những người sở hữu phía trước đã không dùng số tiền này vào bất kỳ giao dịch nào trước đó. Giải pháp của chúng tôi là giao dịch đầu tiên sẽ được tính, nên chúng tôi không quan tâm đến các nỗ lực để thực hiện việc lặp chi sau đó. Cách duy nhất để xác nhận một giao dịch khống là phải nhận biết được tất cả các giao dịch trên hệ thống. Trong mô hình dựa trên nguồn phát hành, nhà phát hành sẽ nắm được tất cả các giao dịch và quyết định giao dịch nào là đầu tiên. Để làm được điều đó mà không cần bên thứ ba được tín nhiệm, các giao dịch phải được công bố công khai [1], và chúng ta cần một hệ thống để những người tham gia đều đồng thuận với một bảng lịch sử duy nhất về thứ tự mà họ nhận được tiền của Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 mình. Người nhận tiền cần có bằng chứng thể hiện rằng, tại thời điểm của mỗi giao dịch, số đông các node đồng thuận rằng giao dịch đó là đầu tiên. 3. Máy chủ nhãn thời gian Giải pháp của chúng tôi đưa ra bắt đầu với một máy chủ nhãn thời gian. Máy chủ nhãn thời gian làm việc bằng cách lấy một mã băm của một khối chứa các phần tử để gán nhãn thời gian cho nó rồi công bố rộng rãi mã băm đó, nó cũng giống như công bố thông tin qua một tờ báo hoặc đăng thông tin lên Usenet (Unix User Network) chẳng hạn. Nhãn thời gian chứng tỏ rằng dữ liệu phải tồn tại chính xác ở thời điểm nhất định để có thể được đưa vào mã băm. Mỗi nhãn thời gian gồm nhãn thời gian liền trước trong mã băm của nó, tạo thành một chuỗi, và mỗi nhãn thời gian thêm vào phía sau lại củng cố thêm cho nhãn thời gian trước đó. 4. Bằng chứng công việc - PoW Để vận hành một máy chủ nhãn thời gian phân tán trên cơ sở mạng ngang hàng, chúng ta cần sử dụng một hệ thống “bằng chứng công việc” tương tự như Hashcash của Adam Back [6], chứ không đơn thuần như hệ thống báo chí hay Usenet. Bằng chứng công việc liên quan đến việc quét tìm một giá trị mà khi giá trị đó được băm, ví dụ như với SHA-256, thì mã băm bắt đầu với một số lượng nhất định chữ số 0. Mức công việc trung bình cần thiết là cấp số mũ của số lượng chữ số 0 ở trên và có thể xác nhận bằng cách thi hành một mã băm đơn lẻ. Với mạng lưới nhãn thời gian, chúng ta thi hành bằng chứng công việc bằng cách gia tăng dần một số ngẫu nhiên trong khối cho đến khi tìm thấy một giá trị làm cho mã băm của khối đạt được yêu cầu về số lượng chữ số 0 ở phía đầu. Một khi sức mạnh CPU đã được sử dụng để đáp ứng yêu cầu của bằng chứng công việc, khối đó sẽ không thể bị thay đổi mà không thực hiện lại công việc. Khi các khối về sau được nối thêm vào, muốn thay đổi khối đó thì phải làm lại tất cả các khối ở phía sau nó nữa. Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 Chú thích thêm: Tx = Transaction: Giao dịch Bằng chứng công việc cũng giải quyết vấn đề xác định đại diện trong việc đưa ra quyết định theo cơ chế đa số. Nếu dựa vào cơ chế mỗi-địa-chỉ-IP-một-phiếu, thì bằng chứng công việc có thể bị lật đổ nếu ai đó có khả năng sử dụng nhiều địa chỉ IP một lúc. Về bản chất, bằng chứng công việc dựa trên cơ chế một CPU – một phiếu bầu. Quyết định của đa số được đại diện bởi chuỗi khối dài nhất, tức là chuỗi được đầu tư nhiều tài nguyên máy tính nhất để giải quyết bằng chứng công việc. Nếu phần đa số sức mạnh CPU được kiểm soát bởi các node trung thực (hay các node “chân chính”), chuỗi thật sẽ phát triển nhanh nhất và vượt qua bất cứ chuỗi cạnh tranh nào khác. Để thay đổi được một khối trong quá khứ, kẻ tấn công phải làm lại bằng chứng công việc của khối đó và tất cả các khối sau nó rồi bắt kịp và vượt qua công việc của các node trung thực. Sau này chúng tôi sẽ chứng minh rằng khả năng để một kẻ tấn công chậm hơn có thể bắt kịp giảm dần theo cấp số mũ khi các khối tiếp theo được thêm vào (Xem mục 11). Để bù cho việc tốc độ phần cứng ngày càng tăng và những lợi ích khác nhau trong việc vận hành các node, độ khó của bằng chứng công việc được xác định bởi số khối trung bình tiềm năng được sinh ra trong một giờ. Nếu các khối được sinh ra càng nhanh thì độ khó càng tăng. 5. Mạng Dưới đây là các bước vận hành của mạng: 1. 2. 3. 4. 5. Các giao dịch mới được lan truyền rộng rãi đến tất cả các node; Mỗi node tập hợp các giao dịch mới vào một khối; Mỗi node tìm một bằng chứng công việc cho khối của nó; Khi một node tìm được bằng chứng công việc, nó sẽ thông báo đến tất cả các node khác; Các node khác chỉ chấp nhận khối đó nếu tất cả các giao dịch trong khối là hợp lệ và chưa được sử dụng; 6. Các node thể hiện sự chấp nhận với khối đó bằng cách tạo khối tiếp theo trong chuỗi và sử dụng mã băm của khối đó trong việc tạo khối mới. Các node luôn xem chuỗi dài nhất là chuỗi đúng và sẽ làm việc để mở rộng chuỗi đó. Nếu hai node thông báo hai phiên bản khác nhau của khối tiếp theo cùng một lúc, một số node sẽ nhận được một trong hai bản trước. Trong trường hợp đó, chúng sẽ làm việc với phiên bản đầu tiên mà chúng nhận được, nhưng sẽ lưu nhánh còn lại để phòng trường hợp nhánh đó trở nên dài hơn. Trạng thái này 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 node đang làm việc trên nhánh còn lại sẽ chuyển sang nhánh dài hơn. Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 Các giao dịch mới không nhất thiết phải được truyền đi đến tất cả các node. Miễn là các giao dịch đó vẫn đến được nhiều node, chúng sẽ được thêm vào khối. Các khối truyền đi cũng có thể không đến được vài node. Nếu một node không nhận được một khối, khi nó nhận được khối tiếp theo và nhận ra mình đang thiếu một khối, nó sẽ yêu cầu lại khối bị thiếu đó. 6. Cơ chế khích lệ bằng phần thưởng Theo quy ước, giao dịch đầu tiên trong mỗi khối là một giao dịch đặc biệt, nó tạo ra một lượng tiền mới thuộc quyền sở hữu của người tạo ra khối đó. Điều này tạo ra một phần thưởng khích lệ cho các node tham gia vận hành mạng lưới, và đó cũng là cách để phát hành thêm một lượng tiền nhất định đưa vào lưu thông, bởi vì không có một trung tâm nào chịu tránh nhiệm phát hành này. Việc phát hành thêm một lượng tiền mới nhất định cũng tương tự như việc các thợ đào vàng sử dụng các nguồn lực để khai thác vào đưa thêm vàng vào lưu thông. Trong trường hợp này, các nguồn lực chính là thời gian vận hành các CPU và điện năng bị tiêu tốn. Phần thưởng cũng có thể được lấy từ phí giao dịch. Nếu như giá trị đầu ra của một giao dịch nhỏ hơn giá trị đầu vào thì phần bị giảm đi đó chính là phí giao dịch, phí này được thêm vào để tăng giá trị phần thưởng cho khối chứa các giao dịch. Khi mà một lượng tiền nhất định đã được phát hành (ND: đối với Bitcoin là 21 triệu đồng BTC vào năm 2140) thì toàn bộ phần thưởng cho thợ đào được lấy từ phí giao dịch, và đồng tiền sẽ hoàn toàn không bị lạm phát. Phần thưởng cũng khuyến khích các node duy trì sự chính trực (không làm giả các giao dịch, khối). Nếu một kẻ tấn công tham lam nào đó có thể tập hợp lượng sức mạnh CPU lớn hơn tất cả các node trung thực cộng lại, hắn sẽ phải chọn giữa việc sử dụng sức mạnh đó để lừa đảo mọi người bằng cách đánh cắp lại các khoản thanh toán của mình hay sử dụng sức mạnh đó để tạo ra các đồng tiền mới (đào thêm). Hắn ta nên thấy rằng chơi đúng luật sẽ có lợi hơn là phá hoại hệ thống và chính sự giàu có của chính mình, vì các luật này sẽ tạo lợi thế và mang lại cho hắn nhiều đồng coin hơn tất cả những người khác. 7. Cải thiện không gian lưu trữ Một khi giao dịch cuối cùng của một đồng tiền được “vùi lấp” dưới một số lượng khối vừa đủ thì những giao dịch diễn ra trước đó có thể được loại bỏ để tiết kiệm không gian lưu trữ. Để thực thi việc này mà không phá vỡ mã băm của khối, các giao dịch được băm theo mô hình cây Merkle [7][2][5], theo đó, chỉ có phần gốc là nằm trong mã băm của khối. Các khối cũ sau đó có thể được nén lại bằng cách cắt đi các nhánh của cây. Các mã băm nằm phía trong các block đó không cần phải lưu trữ. (ND: Theo như hình ảnh bên dưới, để cắt nhánh cây mã băm 0 và mã băm 1, người ta dùng hàm băm để băm hai mã này, và tạo ra mã băm 01, tương tự với mã băm 23, sau đó, người ta tiếp tục dùng hàm băm để băm mã băm 01 và mã băm 23 để tạo ra mã băm 0123...) Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 Mã băm của một khối không chứa giao dịch nào sẽ có kích cỡ khoảng 80 byte. Với tốc độ sinh ra mỗi khối dự kiến là 10 phút thì mỗi năm sẽ tiêu tốn 80 bytes * 6 * 24 * 365 = 4,2 MB tài nguyên bộ nhớ. Hệ thống máy tính thông thường của năm 2008 có bộ nhớ RAM là 2GB, và theo định luật Moore, tốc độ phát triển sẽ là 1,2GB/năm, thì không gian lưu trữ không phải là một vấn đề cho dù là tất cả mã băm của các khối phải được lưu trong bộ nhớ. 8. Đơn giản hóa quá trình xác nhận thanh toán Ta có thể xác thực các khoản thanh toán mà không cần chạy một node mạng đầy đủ. Người dùng chỉ cần giữ một bản sao các mã băm của các khối ứng với chuỗi bằng chứng công việc dài nhất, anh ta có thể lấy được chuỗi này bằng cách truy vấn các node mạng cho đến khi bị thuyết phục chắc chắn là mình đã có được chuỗi dài nhất, và có được nhánh Merkle liên kết giao dịch đó với khối mà giao dịch đó được gắn nhãn thời gian vào. Anh ta không thể tự kiểm tra giao dịch, nhưng bằng cách liên kết giao dịch đó tới một vị trí trong chuỗi, anh ta có thể thấy rằng một node mạng đã chấp nhận nó, và các khối được thêm vào sau đó sẽ xác nhận mạnh hơn rằng mạng lưới đã chấp nhận giao dịch này. Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 Như vậy, việc xác thực là đáng tin cậy miễn là các node trung thực vẫn kiểm soát mạng lưới, nhưng việc xác thực sẽ có thể bị tấn công nếu mạng lưới nằm dưới sự chế ngự của một kẻ tấn công. Trong khi các node mạng có thể tự xác nhận các giao dịch, phương pháp rút gọn lại có thể bị đánh lừa bởi các giao dịch giả mạo do kẻ tấn công tạo ra khi nó tiếp tục kiểm soát được mạng lưới. Chiến lược để chống lại việc làm này chính là chấp nhận cảnh báo từ các node mạng khi họ phát hiện ra một khối nào đó không hợp lệ, khuyến khích phần mềm của người dùng tải toàn bộ khối và các giao dịch bị cảnh báo để xác minh sự mâu thuẫn. Các doanh nghiệp thường xuyên nhận thanh toán chắc hẳn vẫn muốn tự chạy các node của riêng mình để tăng tính bảo mật độc lập và thúc đẩy quá trình xác thực nhanh hơn. 9. Hợp và tách giá trị Mặc dù chúng ta hoàn toàn có thể sử dụng từng đồng coin riêng lẻ, nhưng sẽ rất khó để tạo ra các giao dịch riêng lẻ cho mỗi cent được gửi đi. Để cho phép giá trị các giao dịch có thể tách ra và hợp lại, mỗi giao dịch sẽ chứa nhiều đầu vào và đầu ra. Thông thường, hoặc là sẽ có một đầu vào từ một giao dịch lớn hơn trước đó hoặc là sẽ có nhiều đầu vào gộp từ các lượng tiền nhỏ hơn lại, và trong đa số các trường hợp sẽ có hai đầu ra: một đầu ra là khoản thanh toán cho người nhận, một đầu là phần dư, nếu có, trả lại cho người gửi. Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 Lưu ý rằng, ngay cả khi một giao dịch dựa vào một số giao dịch khác, và các giao dịch đó lại dựa trên nhiều giao dịch khác nữa, thì việc chia tách và gộp các giá trị cũng không phải là một vấn đề. Việc trích xuất một bản lịch sử hoàn chỉnh của giao dịch là điều không cần thiết. 10. Sự riêng tư Mô hình ngân hàng truyền thống đảm bảo được một mức độ riêng tư nào đó bằng cách hạn chế sự tiếp cận thông tin của các bên liên quan và bên tín nhiệm thứ ba. Sự cần thiết phải công bố tất cả các giao dịch một cách công khai khiến phương pháp trên trở nên vô dụng, nhưng sự riêng tư vẫn có thể được duy trì bằng cách ngắt dòng chảy thông tin ở một nơi khác: giữ các khóa công khai ở trạng thái ẩn danh. Mọi người có thể thấy rằng ai đó đang gửi một lượng tiền nhất định cho một người nào đó, nhưng họ không thực sự biết giao dịch đó liên quan đến chủ sở hữu cụ thể nào ở ngoài đời. Điều này tương tự như mức độ công bố thông tin trong việc giao dịch chứng khoán, trong đó thời điểm và kích thước của từng giao dịch được công bố, nhưng các bên tham gia vào giao dịch đó là ai thì không được công bố. Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 Giống như một bức tường lửa bổ sung, một cặp khóa mới sẽ được sử dụng cho mỗi giao dịch để đảm bảo các chìa khóa này không làm lộ danh tính của chủ sở hữu. Một số “dấu vết liên quan” là không thể tránh khỏi trong các giao dịch có nhiều đầu vào, các giao dịch này này nhất thiết sẽ tiết lộ rằng rằng các đầu vào của chúng được sở hữu bởi cùng một người. Rủi ro ở trong tình huống này là nếu như người sở hữu của một khóa nào đó bị tiết lộ, thì các liên kết sẽ để lộ cả các giao dịch khác của người đó. 11. Tính toán Chúng tôi đã xem xét kịch bản mà trong đó kẻ tấn công nỗ lực tạo ra một chuỗi thay thế nhanh hơn chuỗi thật. Ngay cả khi điều đó được thực thi xong, hệ thống cũng vẫn sẽ không bị mở để có thể bị thay đổi tùy ý, như bí mật tạo ra giá trị khống nào đó hoặc lấy tiền của người khác. Các node sẽ không chấp nhận một giao dịch không hợp lệ như là một khoản thanh toán, và các node trung thực sẽ không bao giờ chấp nhận một khối chứa các giao dịch đó. Một kẻ tấn công chỉ có thể cố gắng để thay đổi được một trong các giao dịch của mình nhằm lấy lại số tiền hắn mới tiêu xài. Cuộc đua giữa chuỗi thật và một chuỗi gian lận của kẻ tấn công có thể mô tả như một bài toán bước đi ngẫu nhiên hai chiều (Binomial Random Walk). Sự kiện thành công là khi chuỗi thật được mở rộng thêm một khối, khi đó khoảng dẫn trước của chuỗi thật sẽ tăng thêm 1 điểm nữa; sự kiện thất bại là khi chuỗi gian lận của kẻ tấn công mở rộng thêm một khối, khi đó khoảng cách giữa hai chuỗi sẽ bị giảm đi 1 điểm. Xác suất một kẻ tấn công có thể bắt kịp từ một khoảng cách cho trước cũng tương tự như trong bài toán về sự phá sản của một con bạc. Giả sử có một con bạc với mức tín dụng không giới hạn bắt đầu chơi với một mức thua lỗ nào đó và chơi vô vàn những ván bạc để cố gắng hòa vốn. Chúng ta có thể tính được xác suất mà con bạc đó có thể hòa vốn, cũng giống như là xác suất mà một chuỗi gian lận của kẻ tấn công có thể bắt kịp chuỗi thật, như dưới đây [8]: p = xác suất một node trung thực tìm thấy khối tiếp theo q = xác suất node tấn công tìm thấy khối tiếp theo qz = xác suất kẻ tấn công có thể bắt kịp từ khoảng cách z khối chậm hơn so với chuỗi thật Với giả định rằng p > q, khi đó xác suất bắt kịp sẽ càng ngày càng giảm theo cấp số mũ khi số khối mà kẻ tấn công cần phải băt kịp ngày càng tăng. Với bất lợi như thế, nếu ngay từ đầu kẻ tấn công không may mắn lao về phía trước thật nhanh thì cơ hội của hắn sẽ tiêu tan dần khi ngày càng bị tụt sâu lại phía sau. Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 Bây giờ chúng ta hãy xem xét xem người nhận trong một giao dịch mới sẽ phải đợi bao lâu trước khi chắc chắn rằng người gửi sẽ không thể thay đổi giao dịch. Giả sử người gửi là một kẻ tấn công, kẻ muốn người nhận tin rằng hắn đã thanh toán cho anh ấy trong một lúc (trong khoảng x giây chẳng hạn), ngay sau đó hắn chuyển sang thanh toán lại cho chính mình (kẻ tấn công sẽ thực hiện việc này trong khoảng thời gian x giây đó). Người nhận sẽ được cảnh báo khi điều đó xảy ra, nhưng người gửi (kẻ tấn công) thì hi vọng rằng thông tin cảnh báo sẽ đến muộn. Người nhận sinh ra một cặp khóa mới và trao khóa công khai tới người gửi ngay trước khi thực hiện việc ký số. Điều này giúp ngăn chặn việc người gửi chuẩn bị trước một chuỗi các khối phía sau bằng cách làm việc liên tục trên chuỗi đó cho đến khi may mắn đi được đủ xa, sau đó thực hiện giao dịch ngay tại thời điểm ấy. Một khi giao dịch đã được gửi đi, kẻ lừa đảo đó sẽ bắt đầu bí mật làm việc trên một chuỗi song song tương tự chứa bản thay thế giao dịch của hắn ta. Người nhận sẽ đợi cho đến khi giao dịch được thêm vào một khối và z khối khác đã liên kết phía sau nó. Anh ta sẽ không biết kẻ tấn công đã tiến lên được bao nhiêu, nhưng giả sử rằng mỗi khối thật cần một khoảng thời gian trung bình để được sinh ra, thì tiến độ tiềm năng của kẻ tấn công phải là một hàm phân phối Poisson với giá trị mong đợi phải là: Để có được xác suất mà kẻ tấn công có thể bắt kịp lúc bây giờ, chúng ta nhân mật độ Poisson của mỗi bước tiến mà có thể hắn đã thực hiện được với xác suất hắn có thể bắt kịp từ điểm đó: Biến đổi biểu thức, ta có... Chuyển sang ngôn ngữ C... #include double AttackerSuccessProbability(double q, int z) Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 { 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 với một vài kết quả, chúng ta có thể thấy xác suất giảm theo hàm mũ của z. z=0 q=0.1 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 Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 z=9 P=0.0000046 z=10 P=0.0000012 z=0 q=0.3 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 Với 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 Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 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ự tín nhiệm. Chúng tôi đã bắt đầu với cơ chế thông thường về tiền tệ được tạo ra từ các chữ ký số, nó cung cấp khả năng kiểm soát mạnh mẽ cho quyền sở hữu, nhưng nó sẽ không hoàn chỉnh nếu thiếu một phương pháp để ngăn chặn hiện tượng lặp chi. Để giải quyết vấn đề này, chúng tôi đã đề xuất một mạng lưới 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 mà những kẻ tấn công sẽ không thể thay đổi được bản ghi đó nếu các node trung thực - kiểm soát được phần lớn sức mạnh CPU. Mạng lưới có sức mạnh trong chính sự đơn giản không cấu trúc của nó. Các node cùng làm việc tại một thời điểm với một chút phối hợp. Chúng không cần thiết phải được nhận dạng, vì các tin nhắn không định hướng đến một vị trí cụ thể nào cả và chỉ cần truyền đi với nỗ lực cao nhất. Các node có thể rời đi và tham gia trở lại vào mạng lưới bất cứ lúc nào, chấp nhận chuỗi bằng chứng công việc như là minh chứng cho những gì đã diễn ra khi chúng không nằm trong mạng lưới. Chúng bỏ phiếu thông qua sức mạnh CPU của mình, bày tỏ sự chấp nhận các khối hợp lệ bằng cách phát triển chuỗi đó và loại bỏ các khối không hợp hệ bằng cách không làm việc để mở rộng chuỗi đó. Bất kỳ điều luật và khích lệ cần thiết nào cũng có thể được được thực thi với cơ chế đồng thuận này. Nguồn: https://bitcoin.org/bitcoin.pdf Tài liệu tham khảo [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 times-tamping 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 timestamping," In Sequences II: Methods in Communi-cation, Security and Computer Science, pages 329-334, 1993. Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902 [5] S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceed-ings of the 4th ACM Conference on Computer and Communications Security,pages 28-35, April 1997. [6] A. Back, "Hashcash a denial "http://www.hashcash.org/papers/hashcash.pdf, 2002. of service counter-measure, [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. Người dịch: Đào Duy Tùng Facebook: https://www.facebook.com/daoduytung0902