Uploaded by Anh Văn Trần

Bitcoin whitepaper Dao Duy Tung Translate

advertisement
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
Download