Tóm tắt: Hệ thống tiền điện tử ngang hàng là hệ thống cho phép các bên thực hiện các giao dịch thanh toán trực tuyến trực tiếp mà không thông qua một tổ chức tài chính trung gian nào. Các chữ kí số được dùng như một giải pháp cho hệ thống, nhưng những lợi ích chính có thể sẽ bị thiệt hại nếu bên thứ ba được yêu cầu ngăn chặn hành vi gian lận double-spending (double-spending là hành vi gian lận sử dụng hai giao dịch khác nhau để cùng chi tiêu số dư của một tài khoản). Chúng tôi đề xuất một giải pháp cho vấn đề này, đó chính là sử dụng mạng lưới ngang hàng. Mạng lưới này 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 xử lý (tiếng Anh là Proof of work - PoW, là thuật toán đồng thuận ban đầu của Blockchain dùng để xác nhận giao dịch và tạo ra các block giao dịch mới), tạo thành một bản ghi dữ liệu không thể thay đổi nếu không thực hiện lại PoW. Chuỗi dài nhất không chỉ được sử dụng làm bằng chứng cho một chuỗi các sự kiện đã chứng kiến mà còn được dùng để chứng minh rằng nó đến từ nguồn sức mạnh CPU lớn nhất. Chỉ cần phần lớn nguồn CPU được kiểm soát bởi các nodes (hay gọi là nút - một phần mềm chạy trên một máy tính tham gia vào mạng lưới với các máy tính khác cũng chạy cùng phần mềm đó trên mạng ngang hàng) không cùng hoạt động nhằm tấn công mạng lưới, chúng sẽ sinh ra chuỗi dài nhất và vượt qua các chuỗi tấn công. Bản thân mạng lưới yêu cầu phải có cấu trúc tối thiểu. Tin nhắn được truyền đi với nỗ lực mạnh mẽ nhất, các node có thể sẽ rời khỏi và gia nhập lại mạng lưới bất kì lúc nào, chấp nhận chuỗi PoW dài nhất để chứng minh cho những gì đã diễn ra trong thời gian các node đó rời khỏi mạng lưới.
Vấn đề ở đây là người được trả tiền không thể xác minh được một trong những chủ sở hữu trước đó có thực hiện hành vi gian lận double-spending với đồng tiền đó hay không. Giải pháp thông thường là đến một cơ quan trung tâm tin cậy, hoặc đến công ty cung cấp để kiểm tra xem giao dịch có dính phải hành vi gian lận double-spending hay không. Sau mỗi giao dịch, đồng tiền buộc phải trở lại nguồn cung cấp để được thay thế bởi một đồng tiền mới và chỉ đồng tiền được xuất trực tiếp từ nguồn cung cấp đó mới được tin tưởng là không gian lận. Với giải pháp này, số phận của toàn bộ hệ thống tiền tệ sẽ phụ thuộc vào công ty cung cấp, nơi mà mọi giao dịch đều phải được thông qua, giống như ở một ngân hàng vậy.
Chúng ta cần phải có một giải pháp giúp người được trả tiền biết được chủ sở hữu trước có kí bất cứ giao dịch nào trước đó hay không. Với mục tiêu này, giao dịch đầu tiên sẽ là giao dịch thực hiện đếm, do đó chúng ta không cần quan tâm hành vi double-spending có được thực hiện sau đó hay không. Cách duy nhất để xác nhận sự thiếu vắng của một giao dịch là nhận biết được tất cả các giao dịch. Trong mô hình dựa vào nguồn cung cấp, nguồn cung cấp cần quan tâm đến tất cả mọi giao dịch và quyết định giao dịch nào được thực hiện đầu tiên. Để làm được điều đó mà không cần đến bên thứ ba, các giao dịch phải được thông báo công khai [1] thông qua một hệ thống để những người tham gia có thể đồng thuận về một lịch sử giao dịch duy nhất mà họ nhận được. Người được trả tiền cần phải chứng minh rằng vào thời điểm giao dịch, đa số các node trong mạng lưới phải đồng thuận rằng đó là lần nhận đầu tiên.
Đối với mạng lưới nhãn thời gian, chúng tôi thực hiện PoW bằng cách tăng thêm một dãy số ngẫu nhiên (còn gọi là tham số nonce - tham số 32 bit mà người đào bitcoin biến đổi từ số 0 để tìm ra giải pháp hàm băm) vào khối cho đến khi tìm thấy giá trị cho bảng băm của khối số bit 0 được yêu cầu. Một khi hiệu năng của CPU được sử dụng để đáp ứng PoW, khối này không thể bị thay đổi nếu không thực hiện lại công việc. Các khối sau sẽ được nối chuỗi sau nó và nếu muốn thay đổi khối cần phải thực hiện lại tất cả các khối sau nó.
PoW cũng giải quyết vấn đề về xác định đại diện trong những quyết định được đưa ra theo đa số. Nếu số đông dựa trên cơ chế một-địa-chỉ-IP-một-phiếu, vấn đề có thể bị phá hỏng nếu ai đó có khả năng cấp phát nhiều địa chỉ IP. PoW thực chất là một CPU ứng với một phiếu chọn. Quyết định theo đa số được thể hiện bởi chuỗi dài nhất tức là chuỗi có hiệu quả PoW cao nhất được đầu tư vào nó. Nếu phần lớn hiệu năng CPU được điều khiển bởi các nút thật, các chuỗi thật sẽ phát triển rất nhanh và vượt qua các chuỗi cạnh tranh khác. Để thay đổi một khối đã kết thúc, kẻ tấn công phải thực hiện PoW của khối đó và tất cả những khối sau nó, đồng thời phải bắt kịp và vượt qua công việc của các nodes thật. Ở phần sau, chúng tôi sẽ trình bày xác suất của những kẻ tấn công bắt kịp giảm theo cấp số nhân khi các khối sau đó được thêm vào.
Để bù cho việc tốc độ phần cứng ngày càng gia tăng và những lợi ích khác nhau trong việc vận hành các nút theo thời gian, độ khó của PoW được xác định bởi việc vận hành số khối giao dịch trung bình mỗi giờ. Một khi các khối được sinh ra càng nhanh thì độ khó sẽ càng tăng.
1. Những giao dịch mới được truyền đế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 PoW khó cho khối của nó.
4.Khi một nút tìm được PoW, nó sẽ truyền đến mọi nút khác.
5. Các nút chỉ chấp nhận khối khi mọi giao dịch trong khối đó hợp lệ và chưa qua sử dụng.
6. Các nút thể hiện sự chấp nhận khối bằng cách tạo ra khối tiếp theo trong chuỗi, sử dụng bảng băm của khối đã được chấp nhận làm bảng băm trước.
Các nút luôn xem chuỗi dài nhất là chuỗi đúng và tiếp tục mở rộng nó. Nếu hai nút truyền đến hai bản khác nhau của khối tiếp theo cùng một lúc, một số nút sẽ chấp nhận một trong hai bản đến trước tiên. Trong trường hợp này, chúng sẽ sử dụng bản đầu tiên chúng nhận được, nhưng chúng sẽ lấy bản đến sau nếu bản đó dài hơn. Sự ràng buộc sẽ bị phá vỡ nếu PoW tiếp theo được tìm thấy và một nhánh trở nên dài hơn, các nút khác đang sử dụng nhánh còn lại sẽ chuyển sang sử dụng nhánh dài hơn.
Các giao dịch mới được truyền đi không nhất thiết phải đến được tất cả các nút. Chỉ cần chúng đến được nhiều nút, chúng sẽ được nối thêm vào khối. Khối truyền đi cũng sẽ chấp nhận những tin nhắn bị bỏ sót. Nếu một nút không nhận được một khối giao dịch, nó sẽ yêu cầu nhận khối đó khi nó nhận được khối tiếp theo và nhận ra mình đã bị thiếu mất một khối.
Ưu đãi còn có thể được đóng góp bằng cách thu phí giao dịch. Nếu một giao dịch có giá trị đầu ra nhỏ hơn đầu vào, sự khác biệt chính là phí giao dịch được thêm vào giá trị ưu đãi của khối chứa giao dịch. Một khi có một số lượng tiền xác định trước đi vào lưu thông, toàn bộ ưu đãi có thể chuyển thành phí giao dịch và hoàn toàn không bị lạm phát.
Các ưu đãi có thể giúp các nút không bị làm giả. Nếu một kẻ tấn công đầy tham vọng có thể tập hợp lượng sức mạnh CPU lớn hơn tất cả các nút thực, hắn có thể chọn một là sử dụng nó để giành lấy thanh toán của người khác bằng cách ăn trộm chính các thanh toán của mình, hai là sử dụng nó để tạo ra những đồng tiền mới. Tuy nhiên hắn nên nhận ra rằng sẽ có lợi hơn nếu chơi theo luật, bởi các quy tắc sẽ giúp hắn có nhiều đồng tiền mới hơn tất cả mọi người hợp lại, hơn là hủy hoại cả hệ thống và giá trị tài sản của chính mình.
Phần đầu của một khối không có giao dịch có kích cỡ khoảng 80 bytes. Giả sử, cứ 10 phút có một khối được tạo ra thì sẽ có 80*6*24*365=4.2 MB mỗi năm. Với các hệ thống máy tính điển hình có RAM kích cỡ 2GB trong năm 2008, định luật Moore dự tính sức phát triển hiện tại là 1.2GB mỗi năm, không gian lưu trữ sẽ không thành vấn đề nếu bộ nhớ vẫn giữ phần đầu các khối giao dịch.
Việc xác nhận là đáng tin cậy miễn là các nút thật vẫn kiểm soát mạng lưới nhưng việc này cũng có thể bị nguy hại nếu mạng lưới bị áp đảo bởi kẻ tấn công. Trong khi các nút mạng có thể tự xác nhận các 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 tạo sẵn của những kẻ tấn công nếu chúng còn có thể tiếp tục áp đảo mạng lưới. Một chiến lược để tránh khỏi điều này là chấp nhận những cảnh báo từ các nút khi chúng phát hiện ra các khối không hợp lệ, nhắc nhở phần mềm của người dùng tải các khối đầy đủ và các giao dịch được cảnh báo để xác nhận sự mâu thuẫn. Các doanh nghiệp nhận thanh toán thường xuyên có thể vẫn muốn điều hành các nút của riêng họ để có sự an toàn độc lập và việc xác minh được nhanh chóng hơn.
Cũng cần lưu ý rằng, việc tách các giá trị cũng không thành vấn đề khi mà một giao dịch phụ thuộc vào nhiều giao dịch khác, và những giao dịch này còn phụ thuộc vào nhiều cái khác nữa. Không cần thiết phải trích xuất một bản sao hoàn chỉnh về lịch sử của các giao dịch.
Giống như việc thêm vào một bức tường lửa, một cặp khóa mới sẽ được sử dụng cho mỗi giao dịch để bảo đảm chúng được liên kết đến chủ sở hữu chung. Một số liên kết cũng không thể tránh khỏi được sử dụng bởi các giao dịch nhiều đầu vào, bởi việc công khai rằng đầu vào của chúng cũng được sở hữu bởi cùng một chủ sở hữu là cần thiết. Rủi ro ở đây là nếu chủ sở hữu một khóa nào đó bị tiết lộ, các liên kết có thể sẽ để lộ những giao dịch khác thuộc quyền sở hữu của người chủ này.
Cuộc đua giữa chuỗi thật và chuỗi của kẻ tấn công có thể được mô tả như một bước ngẫu nhiên nhị thức- Binomial Random Walk (phân phối của biến ngẫu nhiên X biểu diễn số lần thành công trong trong một dãy thí nghiệm độc lập, trong mỗi lần thử, xác suất thành công là một số cố định). Trường hợp thành công là khi một chuỗi thực được mở rộng thêm một khối, tăng vị trí dẫn đầu lên thêm 1 và trường hợp thất bại là khi chuỗi của kẻ tấn công được mở rộng thêm một khối, giảm khoảng cách đi 1.
Xác suất một kẻ tấn công bắt kịp từ một khoảng cách cho trước cũng tương tự như vấn đề phá sản của kẻ đánh bạc. Gỉa sử một kẻ đánh bạc với một lượng tiền tín dụng vô hạn bắt đầu từ một mức thiếu hụt nào đó và chơi vô vàn ván để đạt đến mức hòa vốn. Chúng ta có thể tính được xác suất mà người này hòa vốn, đây cũng chính là xác suất một 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 nodes thật tìm thấy khối tiếp theo
q= xác suất kẻ tấn công tìm thấy chuỗi tiếp theo
qz= xác suất kẻ tấn công bắt kịp từ z khối phía sau
qz=
Gỉa sử p>q, khả năng giảm theo cấp số nhân khi số khối giao dịch tăng lên và kẻ tấn công phải đuổi theo với tốc độ nhanh hơn. Với sự chênh lệch bất lợi chống lại kẻ tấn công như thế, nếu hắn không may mắn, cơ hội của hắn sẽ dần tiêu tan và bị tụt xa ở phía sau.
Bây giờ, chúng tôi sẽ xem xét khoảng thời gian mà người nhận trong giao dịch mới cần phải chờ bao lâu trước khi thật chắc chắn rằng người gửi không thể thay đổi giao dịch. Chúng tôi giả sử người gửi chính là kẻ tấn công muốn khiến người nhận tin rằng hắn sẽ thanh toán trong một khoảng thời gian ngắn, nhưng sau đó một khoảng thời gian lại chuyển sang thanh toán cho chính mình. Người nhận sẽ được cảnh báo khi nào điều này xảy ra, nhưng người gửi hi vọng thông tin cảnh báo sẽ đến chậm
Người nhận tạo ra một cặp khóa mới và đưa khóa công khai cho người gửi trong một khoảng thời gian ngắn trước khi kí. Điều này giúp ngăn chặn người gửi chuẩn bị một chuỗi các khối giao dịch trước thời hạn bằng cách chạy liên tục chương trình cho đến khi hắn có đủ may mắn có được chuỗi đủ dài, 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, người gửi bất chính bắt đầu làm việc bí mật trên các chuỗi song song chứa các phiên bản giao dịch thay thế của hắn.
Người nhận phải chờ cho đến khi giao dịch được thêm vào khối giao dịch và z khối khác được liên kết sau nó. Người nhận không biết được chính xác kẻ tấn công đã chạy chương trình được đến đâu, nhưng giả sử các khối giao dịch thực cần một khoảng thời gian trung bình trên mỗi khối, thì tốc độ của kẻ tấn công sẽ là một hàm phân phối Poisson với các giá trị như sau:
l=
Bây giờ, để có được xác suất kẻ tấn công sẽ bắt kịp, chúng tôi thực hiện nhân mật độ Poisson cho mỗi tiến trình mà hắn thực hiện với xác suất hắn có thể bắt kịp kể từ thời điểm đó:
Biến đổi biểu thức, ta có: Đổi sang ngôn ngữ C, ta có: #include 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 thử một số kết quả, ta thấy xác suất giảm theo hàm mũ 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 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
13. ReferencesW. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.
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.
S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.
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.
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.
A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.
R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980
Tác giả: Satoshi Nakamoto
1. Giới thiệu
Hầu như những người thực hiện giao dịch thương mại điện tử đều rất tin tưởng vào các tổ chức tài chính (được coi là bên thứ ba) trong việc xử lý các thanh toán điện tử. Tuy hệ thống đã xử lý khá tốt hầu hết các giao dịch, nhưng nó vẫn còn tồn tại những điểm yếu cố hữu của mô hình tín nhiệm (the trust based model). Các giao dịch hoàn toàn không thể đảo ngược không thực sự khả thi bởi các tổ chức tài chính không thể tránh khỏi các tranh chấp trung gian. Chi phí trung gian làm tăng các chi phí giao dịch, đồng thời hạn chế mức giao dịch tối thiểu và giảm khả năng giao dịch ở các giao dịch nhỏ thông thường, ngoài ra còn mất chi phí cao hơn để 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. Với khả năng đảo ngược, nhu cầu tín nhiệm dần mở rộng. Các thương nhân cần phải thận trọng hơn với khách hàng vì họ đã có được nhiều thông tin hơn cần thiết. Chấp nhận một tỉ lệ gian lận nhất định là một điều không thể tránh khỏi. Mỗi cá nhân có thể tránh những chi phí và thanh toán không chắc chắn này bằng cách sử dụng tiền tệ hữu hình, nhưng không tồn tại một cơ chế nào thực hiện thanh toán thông qua kênh thông tin liên lạc mà thiếu một bên thứ ba được tin cậy. Những gì chúng ta cần 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ự tín nhiệm, cho phép các bên giao dịch trực tiếp mà không cần bên thứ ba. Các giao dịch được tính toán để không thể bị đảo ngược sẽ bảo vệ người bán khỏi các hành vi gian lận, và cơ chế kí quỹ để bảo vệ người mua cũng được thực hiện dễ dàng. Trong bài viết này, chúng tôi đề xuất một giải pháp đối với hành vi gian lận double-spending bằng cách sử dụng máy chủ nhãn thời gian phân phối ngang hàng để tạo ra bằng chứng tính toán cho các giao dịch theo thứ tự thời gian. Hệ thống sẽ được bảo vệ an toàn nếu các node cùng tập trung kiểm soát nguồn sức mạnh CPU lớn hơn bất kỳ nhóm node của kẻ tấn công nào.2. Các giao dịch
Chúng tôi định nghĩa tiền điện tử như một chuỗi chữ kí số. Mỗi chủ sở hữu chuyển tiền cho người tiếp theo bằng cách kí số bảng băm của giao dịch trước, khóa công khai (public key) của chủ sở hữu tiếp theo và thêm chúng vào cuối đồng tiền. Người được trả tiền có thể xác nhận các chữ kí để xác nhận chuỗi sở hữu.Vấn đề ở đây là người được trả tiền không thể xác minh được một trong những chủ sở hữu trước đó có thực hiện hành vi gian lận double-spending với đồng tiền đó hay không. Giải pháp thông thường là đến một cơ quan trung tâm tin cậy, hoặc đến công ty cung cấp để kiểm tra xem giao dịch có dính phải hành vi gian lận double-spending hay không. Sau mỗi giao dịch, đồng tiền buộc phải trở lại nguồn cung cấp để được thay thế bởi một đồng tiền mới và chỉ đồng tiền được xuất trực tiếp từ nguồn cung cấp đó mới được tin tưởng là không gian lận. Với giải pháp này, số phận của toàn bộ hệ thống tiền tệ sẽ phụ thuộc vào công ty cung cấp, nơi mà mọi giao dịch đều phải được thông qua, giống như ở một ngân hàng vậy.
Chúng ta cần phải có một giải pháp giúp người được trả tiền biết được chủ sở hữu trước có kí bất cứ giao dịch nào trước đó hay không. Với mục tiêu này, giao dịch đầu tiên sẽ là giao dịch thực hiện đếm, do đó chúng ta không cần quan tâm hành vi double-spending có được thực hiện sau đó hay không. Cách duy nhất để xác nhận sự thiếu vắng của một giao dịch là nhận biết được tất cả các giao dịch. Trong mô hình dựa vào nguồn cung cấp, nguồn cung cấp cần quan tâm đến tất cả mọi giao dịch và quyết định giao dịch nào được thực hiện đầu tiên. Để làm được điều đó mà không cần đến bên thứ ba, các giao dịch phải được thông báo công khai [1] thông qua một hệ thống để những người tham gia có thể đồng thuận về một lịch sử giao dịch duy nhất mà họ nhận được. Người được trả tiền cần phải chứng minh rằng vào thời điểm giao dịch, đa số các node trong mạng lưới phải đồng thuận rằng đó là lần nhận đầu tiên.
3. Máy chủ nhãn thời gian
Giải pháp mà chúng tôi đề xuất bắt đầu với một máy chủ nhãn thời gian. Máy chủ nhãn thời gian hoạt động bằng cách nhận một bảng băm của một khối các đơn vị để gán nhãn thời gian rồi công bố rộng rãi các bảng băm đó, như công bố qua một tờ báo hay bài đăng Usenet (Hệ thống thông tin toàn cầu dưới dạng diễn đàn thảo luận) [2-5]. Nhãn thời gian chứng minh rằng dữ liệu được đưa vào bảng băm hiển nhiên đã tồn tại chính xác vào ở thời điểm lưu trong nhãn thời gian đó. Mỗi nhãn thời gian bao gồm một chuỗi nhãn thời gian liền trước trong bảng băm của nó với mỗi nhãn thời gian được thêm vào sau để củng cố nhãn trước nó.4.Bằng chứng xử lý (Proof of Work)
Để vận hành máy chủ nhãn thời gian phân phối trên cơ sở ngang hàng, chúng ta cần sử dụng hệ thống bằng chứng công việc PoW tương tự như sự phủ nhận cơ chế đo ngược Hashcash của Adam Back [6], chứ không phải công bố qua các tờ báo hay bài đăng Usenet. PoW bao gồm việc quét qua một giá trị được băm, như với SHA-256, bảng băm bắt đầu với những số bit 0. Mức công việc trung bình cần thiết là cấp số nhân của số bit 0 và có thể được xác định bằng cách thực hiện một bảng băm đơn.Đối với mạng lưới nhãn thời gian, chúng tôi thực hiện PoW bằng cách tăng thêm một dãy số ngẫu nhiên (còn gọi là tham số nonce - tham số 32 bit mà người đào bitcoin biến đổi từ số 0 để tìm ra giải pháp hàm băm) vào khối cho đến khi tìm thấy giá trị cho bảng băm của khối số bit 0 được yêu cầu. Một khi hiệu năng của CPU được sử dụng để đáp ứng PoW, khối này không thể bị thay đổi nếu không thực hiện lại công việc. Các khối sau sẽ được nối chuỗi sau nó và nếu muốn thay đổi khối cần phải thực hiện lại tất cả các khối sau nó.
PoW cũng giải quyết vấn đề về xác định đại diện trong những quyết định được đưa ra theo đa số. Nếu số đông dựa trên cơ chế một-địa-chỉ-IP-một-phiếu, vấn đề có thể bị phá hỏng nếu ai đó có khả năng cấp phát nhiều địa chỉ IP. PoW thực chất là một CPU ứng với một phiếu chọn. Quyết định theo đa số được thể hiện bởi chuỗi dài nhất tức là chuỗi có hiệu quả PoW cao nhất được đầu tư vào nó. Nếu phần lớn hiệu năng CPU được điều khiển bởi các nút thật, các chuỗi thật sẽ phát triển rất nhanh và vượt qua các chuỗi cạnh tranh khác. Để thay đổi một khối đã kết thúc, kẻ tấn công phải thực hiện PoW của khối đó và tất cả những khối sau nó, đồng thời phải bắt kịp và vượt qua công việc của các nodes thật. Ở phần sau, chúng tôi sẽ trình bày xác suất của những kẻ tấn công bắt kịp giảm theo cấp số nhân khi các khối sau đó được thêm vào.
Để bù cho việc tốc độ phần cứng ngày càng gia tăng và những lợi ích khác nhau trong việc vận hành các nút theo thời gian, độ khó của PoW được xác định bởi việc vận hành số khối giao dịch trung bình mỗi giờ. Một khi các khối được sinh ra càng nhanh thì độ khó sẽ càng tăng.
5. Mạng lưới
Vận hành mạng lưới được thực hiện qua các bước sau:1. Những giao dịch mới được truyền đế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 PoW khó cho khối của nó.
4.Khi một nút tìm được PoW, nó sẽ truyền đến mọi nút khác.
5. Các nút chỉ chấp nhận khối khi mọi giao dịch trong khối đó hợp lệ và chưa qua sử dụng.
6. Các nút thể hiện sự chấp nhận khối bằng cách tạo ra khối tiếp theo trong chuỗi, sử dụng bảng băm của khối đã được chấp nhận làm bảng băm trước.
Các nút luôn xem chuỗi dài nhất là chuỗi đúng và tiếp tục mở rộng nó. Nếu hai nút truyền đến hai bản khác nhau của khối tiếp theo cùng một lúc, một số nút sẽ chấp nhận một trong hai bản đến trước tiên. Trong trường hợp này, chúng sẽ sử dụng bản đầu tiên chúng nhận được, nhưng chúng sẽ lấy bản đến sau nếu bản đó dài hơn. Sự ràng buộc sẽ bị phá vỡ nếu PoW tiếp theo được tìm thấy và một nhánh trở nên dài hơn, các nút khác đang sử dụng nhánh còn lại sẽ chuyển sang sử dụng nhánh dài hơn.
Các giao dịch mới được truyền đi không nhất thiết phải đến được tất cả các nút. Chỉ cần chúng đến được nhiều nút, chúng sẽ được nối thêm vào khối. Khối truyền đi cũng sẽ chấp nhận những tin nhắn bị bỏ sót. Nếu một nút không nhận được một khối giao dịch, nó sẽ yêu cầu nhận khối đó khi nó nhận được khối tiếp theo và nhận ra mình đã bị thiếu mất một khối.
6.Ưu đãi
Theo quy ước, giao dịch đầu tiên trong khối phải là giao dịch đặc biệt bắt đầu một đồng tiền mới được sở hữu bởi người tạo khối giao dịch. Điều này tạo ưu đãi cho các nút để hỗ trợ mạng lưới cũng như khởi đầu tiến hành việc phân phối đồng tiền vào lưu thông, vì không có cơ quan trung tâm phát hành chúng. Việc thêm một số lượng đồng tiền mới ổn định cũng giống như người đào vàng sử dụng những nguồn lực của mình để thêm vàng vào dòng lưu thông. Trong hệ thống điện tử nhắc đến ở đây, nguồn lực cần sử dụng chính là điện và thời gian chạy CPU.Ưu đãi còn có thể được đóng góp bằng cách thu phí giao dịch. Nếu một giao dịch có giá trị đầu ra nhỏ hơn đầu vào, sự khác biệt chính là phí giao dịch được thêm vào giá trị ưu đãi của khối chứa giao dịch. Một khi có một số lượng tiền xác định trước đi vào lưu thông, toàn bộ ưu đãi có thể chuyển thành phí giao dịch và hoàn toàn không bị lạm phát.
Các ưu đãi có thể giúp các nút không bị làm giả. Nếu một kẻ tấn công đầy tham vọng có thể tập hợp lượng sức mạnh CPU lớn hơn tất cả các nút thực, hắn có thể chọn một là sử dụng nó để giành lấy thanh toán của người khác bằng cách ăn trộm chính các thanh toán của mình, hai là sử dụng nó để tạo ra những đồng tiền mới. Tuy nhiên hắn nên nhận ra rằng sẽ có lợi hơn nếu chơi theo luật, bởi các quy tắc sẽ giúp hắn có nhiều đồng tiền mới hơn tất cả mọi người hợp lại, hơn là hủy hoại cả hệ thống và giá trị tài sản của chính mình.
7.Cải tạo không gian đĩa
Một khi giao dịch mới nhất trong một đồng tiền được đưa vào một khối giao dịch vừa đủ, tự động những giao dịch trước nó sẽ bị loại bỏ nhằm tiết kiệm không gian đĩa. Để thuận tiện hơn mà không phá vỡ bảng băm của khối, giao dịch sẽ được băm thành một cây Merkle[7][2][5], và chỉ có gốc nằm trong bảng băm của khối giao dịch. Các khối cũ sau đó có thể được nén lại bằng cách chặt nhánh của cây. Các bảng băm ở phía trong thì không cần phải lưu.Phần đầu của một khối không có giao dịch có kích cỡ khoảng 80 bytes. Giả sử, cứ 10 phút có một khối được tạo ra thì sẽ có 80*6*24*365=4.2 MB mỗi năm. Với các hệ thống máy tính điển hình có RAM kích cỡ 2GB trong năm 2008, định luật Moore dự tính sức phát triển hiện tại là 1.2GB mỗi năm, không gian lưu trữ sẽ không thành vấn đề nếu bộ nhớ vẫn giữ phần đầu các khối giao dịch.
8. Xác nhận thanh toán đơn giản
Có thể xác nhận thanh toán mà không cần chạy đầy đủ một nút mạng. Người dùng chỉ cần giữ bản sao của phần đầu khối giao dịch của chuỗi PoW dài nhất, chuỗi mà họ có thể lấy bằng cách truy vấn các nút mạng cho đến khi họ được thuyết phục rằng họ đã có được chuỗi dài nhất, và chứa nhánh Merkle liên kết giao dịch đến khối mà nó được gán nhãn. 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 đó đến một vị trí trong chuỗi bằng chứng công việc, họ có thể thấy một nút mạng đã chấp nhận nó và khối sẽ được thêm vào sau khi xác nhận mạng lưới đã chấp nhận nó.Việc xác nhận là đáng tin cậy miễn là các nút thật vẫn kiểm soát mạng lưới nhưng việc này cũng có thể bị nguy hại nếu mạng lưới bị áp đảo bởi kẻ tấn công. Trong khi các nút mạng có thể tự xác nhận các 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 tạo sẵn của những kẻ tấn công nếu chúng còn có thể tiếp tục áp đảo mạng lưới. Một chiến lược để tránh khỏi điều này là chấp nhận những cảnh báo từ các nút khi chúng phát hiện ra các khối không hợp lệ, nhắc nhở phần mềm của người dùng tải các khối đầy đủ và các giao dịch được cảnh báo để xác nhận sự mâu thuẫn. Các doanh nghiệp nhận thanh toán thường xuyên có thể vẫn muốn điều hành các nút của riêng họ để có sự an toàn độc lập và việc xác minh được nhanh chóng hơn.
9. Kết hợp và phân tách giá trị
Mặc dù có thể sử dụng những đồng tiền một cách riêng lẻ với nhau, nhưng việc tạo ra các giao dịch riêng biệt cho mỗi đồng tiền trong một lần vận chuyển sẽ rất khó khăn. Để cho phép các giá trị có thể tách ra và kết hợp lại , các giao dịch cần nhiều giá trị đầu vào và đầu ra. Thông thường, sẽ có cả đầu vào đơn từ một giao dịch lớn hơn trước đó hay đầu vào đa hợp từ nhiều giá trị nhỏ lại, và thường nhất là có hai đầu ra: một là để thanh toán và một là, để hoàn lại một khoản tiền cho người gửi, nếu có.Cũng cần lưu ý rằng, việc tách các giá trị cũng không thành vấn đề khi mà một giao dịch phụ thuộc vào nhiều giao dịch khác, và những giao dịch này còn phụ thuộc vào nhiều cái khác nữa. Không cần thiết phải trích xuất một bản sao hoàn chỉnh về lịch sử của các giao dịch.
10. Sự bảo mật
Một trong những cách mà các mô hình ngân hàng truyền thống giữ tính bảo mật là giới hạn việc tiếp cận thông tin của các bên liên quan và bên thứ ba. Phương pháp này đã ngăn chặn sự cần thiết của việc tuyên bố mọi giao dịch một cách công khai, nhưng tính bảo mật vẫn có thể được duy trì nếu phá vỡ sự theo dõi thông tin ở nơi khác bằng cách ẩn danh các khóa công khai. Người ta có thể thấy được có người đang gửi một lượng tiền cho ai đó, nhưng sẽ không biết được thông tin liên kết giao dịch tới ai. Điều này tương tự như thông tin được đưa ra trong các giao dịch chứng khoán, thời gian và số lượng giao dịch cá nhân, các “băng” đều được công khai, nhưng không thể biết được các bên cụ thể là ai.Giống như việc thêm vào một bức tường lửa, một cặp khóa mới sẽ được sử dụng cho mỗi giao dịch để bảo đảm chúng được liên kết đến chủ sở hữu chung. Một số liên kết cũng không thể tránh khỏi được sử dụng bởi các giao dịch nhiều đầu vào, bởi việc công khai rằng đầu vào của chúng cũng được sở hữu bởi cùng một chủ sở hữu là cần thiết. Rủi ro ở đây là nếu chủ sở hữu một khóa nào đó bị tiết lộ, các liên kết có thể sẽ để lộ những giao dịch khác thuộc quyền sở hữu của người chủ này.
11. Tính toán
Chúng tôi cho rằng kịch bản của một kẻ tấn công là cố gắng tạo ra một chuỗi thay thế nhanh hơn chuỗi thực. Ngay cả khi điều này được thực hiện, hệ thống vẫn không bị mở để thay đổi tùy ý, như tạo ra giá trị khác hay việc lấy tiền người khác của những kẻ tấn công. Các nút sẽ từ chối thanh toán các giao dịch không hợp lệ, và các nodes thật sẽ không bao giờ chấp nhận các khối chứa các giao dịch ấy. 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 hắn để lấy lại số tiền mà hắn đã sử dụng.Cuộc đua giữa chuỗi thật và chuỗi của kẻ tấn công có thể được mô tả như một bước ngẫu nhiên nhị thức- Binomial Random Walk (phân phối của biến ngẫu nhiên X biểu diễn số lần thành công trong trong một dãy thí nghiệm độc lập, trong mỗi lần thử, xác suất thành công là một số cố định). Trường hợp thành công là khi một chuỗi thực được mở rộng thêm một khối, tăng vị trí dẫn đầu lên thêm 1 và trường hợp thất bại là khi chuỗi của kẻ tấn công được mở rộng thêm một khối, giảm khoảng cách đi 1.
Xác suất một kẻ tấn công bắt kịp từ một khoảng cách cho trước cũng tương tự như vấn đề phá sản của kẻ đánh bạc. Gỉa sử một kẻ đánh bạc với một lượng tiền tín dụng vô hạn bắt đầu từ một mức thiếu hụt nào đó và chơi vô vàn ván để đạt đến mức hòa vốn. Chúng ta có thể tính được xác suất mà người này hòa vốn, đây cũng chính là xác suất một 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 nodes thật tìm thấy khối tiếp theo
q= xác suất kẻ tấn công tìm thấy chuỗi tiếp theo
qz= xác suất kẻ tấn công bắt kịp từ z khối phía sau
qz=
Gỉa sử p>q, khả năng giảm theo cấp số nhân khi số khối giao dịch tăng lên và kẻ tấn công phải đuổi theo với tốc độ nhanh hơn. Với sự chênh lệch bất lợi chống lại kẻ tấn công như thế, nếu hắn không may mắn, cơ hội của hắn sẽ dần tiêu tan và bị tụt xa ở phía sau.
Bây giờ, chúng tôi sẽ xem xét khoảng thời gian mà người nhận trong giao dịch mới cần phải chờ bao lâu trước khi thật chắc chắn rằng người gửi không thể thay đổi giao dịch. Chúng tôi giả sử người gửi chính là kẻ tấn công muốn khiến người nhận tin rằng hắn sẽ thanh toán trong một khoảng thời gian ngắn, nhưng sau đó một khoảng thời gian lại chuyển sang thanh toán cho chính mình. Người nhận sẽ được cảnh báo khi nào điều này xảy ra, nhưng người gửi hi vọng thông tin cảnh báo sẽ đến chậm
Người nhận tạo ra một cặp khóa mới và đưa khóa công khai cho người gửi trong một khoảng thời gian ngắn trước khi kí. Điều này giúp ngăn chặn người gửi chuẩn bị một chuỗi các khối giao dịch trước thời hạn bằng cách chạy liên tục chương trình cho đến khi hắn có đủ may mắn có được chuỗi đủ dài, 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, người gửi bất chính bắt đầu làm việc bí mật trên các chuỗi song song chứa các phiên bản giao dịch thay thế của hắn.
Người nhận phải chờ cho đến khi giao dịch được thêm vào khối giao dịch và z khối khác được liên kết sau nó. Người nhận không biết được chính xác kẻ tấn công đã chạy chương trình được đến đâu, nhưng giả sử các khối giao dịch thực cần một khoảng thời gian trung bình trên mỗi khối, thì tốc độ của kẻ tấn công sẽ là một hàm phân phối Poisson với các giá trị như sau:
l=
Bây giờ, để có được xác suất kẻ tấn công sẽ bắt kịp, chúng tôi thực hiện nhân mật độ Poisson cho mỗi tiến trình mà hắn thực hiện với xác suất hắn có thể bắt kịp kể từ thời điểm đó:
Biến đổi biểu thức, ta có: Đổi sang ngôn ngữ C, ta có: #include 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 thử một số kết quả, ta thấy xác suất giảm theo hàm mũ 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 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
Chúng tôi vừa đề xuất một hệ thống giao dịch điện tử không dựa vào sự tín nhiệm từ bên trung gian. Với việc bắt đầu từ cơ cấu thông thường của tiền tệ được tạo ra từ chữ kí số, cho phép kiểm soát mạnh mẽ những mối quan hệ sở hữu, nhưng hệ thống sẽ không hoàn chỉnh nếu không có cơ chế chống hành vi gian lận double-spending. Để giải quyết vấn đề này, chúng tôi đề xuất mạng lưới ngang hàng sử dụng PoW để lưu lại lịch sử công khai của các giao dịch mà những kẻ tấn công không thể tính toán để thay đổi khi các nút thật kiểm soát phần lớn nguồn lực CPU. Mạng lưới này tỏ ra hiệu quả với cấu trúc đơn giản. Các nút làm việc đồng thời mà không cần sự sắp xếp nào. Chúng không cần phải được xác định bởi các tin nhắn không định hướng đến nơi nào cụ thể và chỉ cần được truyền đi với hiệu suất cao nhất. Các nút có thể rời khỏi và tham gia trở lại vào mạng lưới bất kì lúc nào, chấp nhận chuỗi PoW như bằng chứng chứng minh những gì đã xảy ra khi chúng rời khỏi. Các nút xác nhận thông qua CPU, thể hiện sự chấp nhận các khối giao dịch hợp lệ bằng cách mở rộng chúng và loại bỏ các khối không hợp lệ bằng cách từ chối làm việc trên chúng. Mọi quy tắc cần thiết và ưu đãi có thể được thực thi với cơ chế đồng thuận này.13. ReferencesW. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.
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.
S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.
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.
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.
A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.
R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980
Tác giả: Satoshi Nakamoto
268
|
6/22/2023 4:58:17 PM