Đồng thời Bitcoin cũng lật đổ thêm 1 quy luật tồn tại hàng chục năm trong thương mại điên tử: việc thanh toán điện tử phải qua bên thứ 3 có đủ uy tín đảm bảo (như ngân hàng hoặc PayPal).
Lâu lắm rồi mới có một phát minh kỹ thuật giải quyết được một vấn đề xã hội và kinh tế lớn như thế.
[Chú thích: Có người sẽ bảo, thanh toán qua ngân hàng cũng được chứ sao mà phải tránh.
Vấn đề ở đây là ngân hàng thích thu phí, mà lại thích thu phí ... cao. :)
Rất tiếc là có quá nhiều điều mờ ảo bao quanh Bitcoin, từ thuật toán khó hiểu đòi hỏi nhiều kiến thức chuyên ngành, sự bí ẩn của tác giả Satoshi Nakamoto, cho đến bê bối của các sàn giao dịch bitcoin và sự liên quan của các tổ chức tội phạm sử dụng để chuyển tiền.
Tất cả điều đấy dẫn đến mội thái độ không mấy thân thiện của truyền thông và các chính phủ đối với Bitcoin.
Tuy nhiên, thuật toán của Bitcoin vẫn rất có nhiều ứng dụng tiềm năng và rất đáng để học hỏi. Bài viết này nhằm giải thích một cách dễ hiểu cơ chế hoạt động của Bitcoin để mọi người tham khảo khi suy nghĩ các ứng dụng mới.
--------------------
A. Tại sao tiền tệ lại cần chính phủ phát hành, và cần ngân hàng để lưu thông.
Tiền tệ, để có thể sử dụng trong thương mại, cần đảm bảo ba tính chất sau:
1. Tổng lượng tiền lưu thông phải được khống chế bởi một tổ chức trung ương.
Nếu bất kỳ ai cũng có quyền phát hành thêm tiền, thì chẳng bao lâu số lượng tiền lưu thông sẽ tăng lên nhanh chóng, và tiền sẽ mất giá trị.
2. Phải dễ dàng phân biệt được tiền thật hay giả.
Nếu không có cách nào phân biệt được tiền thật và tiền copy, thì chẳng bao lâu thị trường sẽ tràn ngập tiền giả, và tiền sẽ mất giá trị.
3. Khi có giao dịch, thì tiền sẽ phải rút khỏi sở hữu của người này trước khi có thể chuyển sang sở hữu của người khác.
Mục đích là để đảm bảo tổng số lượng tiền lưu thông không thay đổi.
[Chú thích: Về bản chất, ba vấn đề trên chỉ là một, gọi chung là vấn đề tránh "sử dụng hai lần" (double-spending) của tiền tệ.]
Cách giải quyết ba vấn đề trên trong lịch sử là :
+ Chính phủ sẽ giải quyết vấn đề 1 bằng cách đứng ra phát hành tiền,
giải quyết vấn đề 2 bằng cách in tiền thật khó và bắt bỏ tù tất cả ai định copy tiền.
+ Ngân hàng sẽ giải quyết vấn đề 3 bằng cách dùng uy tín của mình đảm bảo là sẽ cộng trừ số tiền trong tài khoản cá nhân một cách chính xác.
--------------------
B. Các vấn đề của tiền tệ điện tử không qua ngân hàng.
Ngoài 3 vấn đề cơ bản của tiền tệ nói trên, một hệ thống tiền tệ điện tử dùng open source hoàn toàn và không có database tập trung như Bitcoin sẽ gặp thêm môt số vấn đề kỹ thuật như:
+ Không biết để database quản lý số dư tài khoản ở đâu.
Để ở máy của người nào cũng nguy hiểm, vì bất kỳ ai có quyền Administrator của máy đó đều có thể hack vào sửa vài con số.
+ Sẽ có người tìm cách sửa source code để khi chuyển tiền, program không trừ tiền trong tài khoản của họ đi.
+ Sẽ có người tìm xem "tiền" được lưu ở folder nào, và tìm cách copy nó lên.
--------------------
C. Bitcoin giải quyết các vấn đề trên như thế nào?
1
Trên mỗi "coin" (đơn vị tiền tệ), lưu lại toàn bộ chữ ký điện tử của các owner từ trước đến giờ của coin đấy.
Tập hợp các chũ ký điện tử này đóng vai trò như một ID (số seri) của coin đấy.
--
2
Khi một coin được chuyển từ người A sang người B, thì A sẽ ký một chữ ký điên tử với nội dung "Đã chuyển owner từ A sang B" lên coin.
[Chú thích: Bitcoin sử dụng kỹ thuật chữ ký điện tử phổ biến hiện nay dựa trên nguyên tắc của thuật toán RSA.
Chỉ có A có private key mới tạo chữ ký của A được, nhưng bất kỳ ai đều có thể check được là chữ ký đó có đúng là do A ký hay không bằng public key của A.]
--
3
Khi A chuyển 1 coin cho B, thì A sẽ tạo ra 1 yêu cầu có nội dung "Xin phép chuyển coin có ID xxxxxxx từ A sang B" và gửi cho toàn bộ network để xin phép thực hiện.
--
4
Mỗi máy tính trên network (node) khi nhận được yêu cầu trên sẽ xử lý như sau:
+ Check xem tất cả chữ ký điện tử lưu trên coin có đúng là do các owner ký không.
(việc này đơn giản vì public key của tất cả owner đều được công khai).
+ Check xem chuỗi chuyển quyền owner có vấn đề gì không.
(Chẳng hạn A không phải là owner cuối cùng của coin đấy mà lại tìm cách gửi coin đi).
--
5
Nếu tất cả nội dung trên coin không có vấn đề, từng node sẽ bỏ phiếu "Yes" để công nhận giao dịch "Xin phép chuyển coin có ID xxxxxxx từ A sang B".
Nếu node phát hiện có vấn đề gì, thì sẽ bỏ phiếu "No".
Tóm lại, một yêu cầu giao dịch có hợp lệ hay không sẽ không do ngân hàng hay chính phủ thẩm định , mà là do toàn bộ network bỏ phiếu.
Yêu cầu giao dịch nào có số phiếu "Ýes" nhiều hơn "No" thì sẽ được thực hiện.
Đây là cách của Bitcoin giải quyết vấn đề "độ tin cậy": lấy ý kiến của đa số node trên network để thẩm định độ tin cậy của từng giao dịch.
Có một khía cạnh xã hội thú vị mà Bitcoin khai thác ở đây:
'Một sự giao dịch được gọi là "gian lận" khi nó chỉ có thể mang lại lợi ích cho một số ít người. Còn nếu một sự gian lận nào mang lại lợi ích cho đa số, đủ hấp dẫn để thu hút quá nửa số phiếu, cả cộng đồng chấp nhận nó, thì có lẽ nó không còn gọi là gian lận nữa.
--
6
Trên network Bitcoin hiện tại, cứ 10 phút xảy ra một lần bỏ phiếu.
Yêu cầu giao dịch nào được đa số network công nhận thì mới được thực hiện.
Đây là lý do tại sao khi thanh toán bằng Bitcoin, phải đợi khoảng 10 phút trước khi giao dịch được thực hiện.
--------------------
D. Làm sao phương pháp trên ngăn chặn được gian lận.
1 Trường hợp có người A không sở hữu coin với ID xxxxxxxx, nhưng lại yêu cầu thực hiện lệnh "Chuyển coin xxxxxxxx cho B" (giao dịch gian lận).
- Giả sử dến thời điểm trước bỏ phiếu lần n, toàn bộ các giao dịch đã được thực hiện đến lần bỏ phiếu trước đó (n-1) đều hợp lệ.
- Do toàn bộ giao dịch cho đến lần bỏ phiếu (n-1) đều được lưu lại, tất cả các node đều có thể kiểm chứng được quyền sở hữu thực sự của coin xxxxxxxx là không phải của A.
Cho nên, giao dịch gian lận trên sẽ bị đa số node phủ quyết ở kỳ bỏ phiếu lần n, và không thực hiện được.
2 Trường hợp A có sở hữu coin xxxxxxxx, nhưng lại tìm cách gửi đồng thời cho B và C trong cùng 1 lần bỏ phiếu (giao dịch gian lận).
Khi này, cả 2 yêu cầu "A-->B" và "A-->C" đều hợp lệ.
Việc bỏ phiếu cho yêu cầu nào là tuỳ chọn của từng node, nhưng chắc chắn cuối cùng chỉ có thể có 1 yêu cầu đạt được số phiếu "Yes" nhiều hơn "No" chứ không thể cả 2.
Sẽ chỉ có một yêu cầu được công nhận ở kỳ bỏ phiếu lần n và được thực hiện.
Như vậy không xảy ra tình huống double-spending.
Bằng cách này, kết quả bỏ phiếu lần n sẽ đảm bảo tất cả giao dịch tới lần n đều hợp lệ.
--------------------
E.Các vấn đề của kiểm phiếu trong Bitcoin và cách giải quyết
Đến đây, chắc có bạn sẽ thắc mắc là:
1) Tại sao tôi (program trên máy tôi) phải bỏ phiếu trung thực ?
Tôi có lợi gì khi bỏ phiếu trung thưc ?
Tôi cứ thích sửa program để bỏ phiếu lung tung quấy rối đấy thì sao ?
2) Cứ cho là có cách làm toàn bộ network bỏ phiếu trung thực đi, nhưng thằng kiểm phiếu gian lận thì sao ?
Chúng ta xem cách Bitcoin giải quyết vấn đề "kiểm phiếu" trước.
--------------------
F. Cách phòng ngừa gian lận khi kiểm phiếu.
Đây là một chức năng được chú ý nhiều của Bitcoin, với nhiều kỳ vọng sẽ ứng dụng được vào việc thực hiện bầu cử online.
Bitcoin đảm bảo sự trung thực trong kiểm phiếu cũng bằng nguyên tắc đa số: Tất cả cùng kiểm phiếu, và sẽ lấy kết quả kiểm phiếu nào được nhiều node công nhận nhất.
Thực tế, việc bỏ phiếu & kiểm phiếu của Bitcoin hơi khác việc bỏ phiếu trong xã hội con người một chút.
--
i) Trước mỗi kỳ bỏ phiếu, mỗi node sẽ tập hợp các yêu cầu giao dịch được gửi trên toàn network, tiến hành kiểm tra, rồi tập hợp các giao dịch hợp lệ vào một cái "hộp".
(Mỗi node tạo một hộp riêng).
ii) Trêb cái hộp đấy, node sẽ dán "tem chứng thực" lên.
Cách tạo "tem chứng thực" đòi hỏi rất nhiều tài nguyên CPU tính toán.
Tuy nhiên, tem tạo ra có hợp lệ hay không, thì lại rất dễ kiểm chứng.
[Chú thích: Nội dung hộp sẽ được biến đổi về một bất phương trình không có cách giải số học. Cách tìm nghiệm khả dĩ nhất là phải dùng CPU lặp để mò nghiệm.
Tem chứng thực chính là nghiệm của bất phương trình này. Việc kiểm chứng nghiệm có đúng không thì cực kỳ đơn giản, thay vào bất phương trình là xong. ]
iii) Sau khi dán tem lên hộp, thì node sẽ gửi hộp đấy lên cho toàn bộ network.
iv) Các node khác lấy hộp đấy về. Kiểm chứng nội dung xem có phù hợp với tem không, rồi lại tính toán tạo 1 tem mới dán chồng lên hộp.
Xong thì node lại gửi hộp đấy lên cho toàn bộ network.
v) Đến thời điểm kết thúc bỏ phiếu, hộp nào đang lưu thông trên network có nhiều tem được dán nhất sẽ được công nhận.
Những yêu cầu giao dịch trong hộp ấy sẽ được công nhận là hợp lệ và được thực hiện.
Thuật toán tuy hơi khác với bỏ phiếu thông thường, nhưng bản chất vẫn là bỏ phiếu.
Các node sẽ bỏ phiếu "Yes" bằng hành động tạo tem và dán lên hộp,
bỏ phiếu "No" bằng cách bỏ qua hộp ấy.
[Chú thích; Bitcoin có vẻ có cơ chế đảm bảo hộp nào nhiều tem nhất (bucket có signature dài nhất) sẽ được giữ lại, nhưng người viết cũng chưa đủ kiến thức để hiểu phần này. ]
vi) Ở lần bỏ phiếu tiếp theo, các node sẽ lấy đúng cái hộp được công nhận ở lần trước,
cho vào một hộp mới, cho thêm các yêu cầu giao dịch vào, tạo tem, và làm lại từ bước (ii).
--------------------
G. Một số hệ quả:
- Trong cái hộp được công nhận ở lần bỏ phiếu cuối cùng, sẽ chứa dấu tích của toàn bộ các giao dịch hợp lệ trong lịch sử Bitcoin.
- Nếu một người muốn gian lận, thì phải huy động một lượng CPU tính toán lớn để tạo số lượng tem cực lớn dán lên cái hộp chứa giao dịch gian lận của mình.
Về nguyên tắc là phải quá nửa lượng CPU của toàn bộ network thì mới đảo ngược được kết quả bỏ phiếu.
- Đây là một giải pháp thông minh của Bitcoin để phòng ngừa gian lận.
Quyền bỏ phiếu không tính bằng số account (node), mà tính bằng tài nguyên CPU.
Số lượng account "ma", node "ma" thì có thể nguỵ tạo dễ dàng, nhưng tài nguyên CPU thì khó nguỵ tạo hơn.
--------------------
H. Cơ chế khuyến khích bỏ phiếu trung thực
Chúng ta quay lại câu hỏi phía trên.
"Tại sao tôi (program trên máy tôi) phải bỏ phiếu trung thực ?
Tôi có lợi gì khi bỏ phiếu trung thưc ?
Tôi cứ thích sửa program để bỏ phiếu lung tung quấy rối đấy thì sao ?"
Sau một lần bỏ phiếu, các node có tham gia đóng tem trên cái hộp được công nhận sẽ có cơ hội nhân được môt số coin do hệ thống cấp phát.
(Cơ chế này còn gọi là Coin Mining).
Đây chính là cơ chế làm cho các node có xu hướng chọn bỏ phiếu trung thực hơn là bỏ phiếu bất kỳ quấy phá.
Bỏ phiếu (dán tem) vào hộp chứa các giao dịch hợp lệ thì bạn còn có cơ hội (dù không cao) để nhận được coin.
Nhưng nếu dán tem bất kỳ vào hằng hà đa số các hộp có giao dịch không hợp lệ thì xác suất có đủ những người cũng "điên" như bạn để có thể thắng được cuộc bỏ phiếu và nhận thưởng là gần như bằng không.
Cho nên, chỉ cần là một người suy nghĩ hợp lý, chắc chắn sẽ chọn cách bỏ phiếu trung thực.
Đây lại là một khía cạnh xã hội mà Bitcoin đã khai thác rất tốt:
Khi không có sự kiểm soát, từng cá nhận sẽ hành động theo hướng nào có lợi nhất cho mình (có tiền/coin).
Nếu trung thực mang lại cái lợi thì mọi người sẽ trung thực.
--------------------
Kết luận:
Bitcoin đã giải quyết vấn đề lòng tham của con người (động cơ gian lận tài chính) bằng một cơ chế sử dụng lại đúng lòng tham ấy (mong muốn nhận coin) để đảm bảo cả hệ thống vận hành chuẩn xác.
Từng kỹ thuật cơ bản (cách tạo tem, cơ chế bỏ phiếu/kiểm phiếu v.v...) thật ra không mới, nhưng phải sau sự kết hợp trong thuật toán của Bitcoin người ta mới chú ý đến tính ứng dụng của chúng nhiều hơn.
Hy vọng Bitcoin là một gợi ý tốt về cách ứng dụng các kỹ thuật lý thuyết vào các vấn đề xã hội thiết thực.
--
A.N.Lab
VietHa.
[Tài liệu tham khảo]
1. Satoshi Nakamoto, "Bitcoin: A Peer-to-Peer Electronic Cash System", https://bitcoin.org/bitcoin.pdf .
2. Bản tiếng Nhật Blog A.N.Lab Japan.