Professional Documents
Culture Documents
Bitcoin Whitepaper Dao Duy Tung Translate
Bitcoin Whitepaper Dao Duy Tung Translate
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
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.
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. Các giao dịch mới được lan truyền rộng rãi đến tất cả các node;
2. Mỗi node tập hợp các giao dịch mới vào một khối;
3. Mỗi node tìm một bằng chứng công việc cho khối của nó;
4. 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;
5. 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.
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.
(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...)
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ố.
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 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 đó:
#include
double p = 1.0 - q;
int i, k;
poisson *= lambda / i;
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.
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
Người dịch: Đào Duy Tùng
Facebook: https://www.facebook.com/daoduytung0902
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.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
Nguồn: https://bitcoin.org/bitcoin.pdf
[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 time-
stamping," In Sequences II: Methods in Communi-cation, Security and Computer Science, pages
329-334, 1993.
[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.