1.5. Hai tiền tệ đơn giản
Bây giờ chúng ta hãy chuyển từ mật mã học sang tiền điện tử. Ăn rau mật mã của chúng tôi sẽ bắt đầu mang lại lợi nhuận ở đây, và chúng ta sẽ dần dần xem các mảnh khớp với nhau như thế nào và tại sao các hoạt động mật mã như hàm băm và chữ ký số lại thực sự hữu ích. Trong phần này, chúng ta thảo luận về hai loại tiền điện tử rất đơn giản. Tất nhiên, phần lớn phần còn lại của cuốn sách là cần thiết để giải thích tất cả các chi tiết về cách Bitcoin hoạt động.
Goofycoin
Đầu tiên trong số hai là Goofycoin, đây là loại tiền điện tử đơn giản nhất mà chúng ta có thể tưởng tượng. Chỉ có hai quy tắc của Goofycoin. Quy tắc đầu tiên là một thực thể được chỉ định, Goofy, có thể tạo tiền mới bất cứ khi nào anh ta muốn và những đồng tiền mới tạo này thuộc về anh ta.
Để tạo một đồng xu, Goofy tạo một ID đồng xu duy nhất uniqueCoinID mà anh ta chưa bao giờ tạo trước đây và xây dựng chuỗi CreateCoin [uniqueCoinID]. Sau đó, anh ta tính chữ ký số của chuỗi này với khóa ký bí mật của mình. Chuỗi, cùng với chữ ký của Goofy, là một đồng xu. Bất kỳ ai cũng có thể xác minh rằng đồng tiền này có chứa chữ ký hợp lệ của Goofy trong tuyên bố CreateCoin và do đó, đồng tiền này là một đồng tiền hợp lệ.
Quy tắc thứ hai của Goofycoin là bất kỳ ai sở hữu một đồng xu có thể chuyển nó cho người khác. Việc chuyển một đồng xu không chỉ đơn giản là gửi cấu trúc dữ liệu đồng xu đến người nhận — nó được thực hiện bằng cách sử dụng các phép toán mật mã.
Giả sử Goofy muốn chuyển một đồng xu mà anh ấy tạo ra cho Alice. Để làm điều này, anh ấy tạo một tuyên bố mới có nội dung “Trả cái này cho Alice” trong đó “đây” là một con trỏ băm tham chiếu đến đồng xu được đề cập. Và như chúng ta đã thấy trước đó, danh tính thực sự chỉ là khóa công khai, vì vậy “Alice” dùng để chỉ khóa công khai của Alice. Cuối cùng, Goofy ký chuỗi đại diện cho câu lệnh. Vì Goofy là người ban đầu sở hữu đồng tiền đó, anh ta phải ký bất kỳ giao dịch nào sử dụng đồng tiền đó. Sau khi cấu trúc dữ liệu đại diện cho giao dịch của Goofy được anh ta ký, Alice sở hữu đồng tiền. Cô ấy có thể chứng minh với bất kỳ ai rằng cô ấy sở hữu đồng xu, vì cô ấy có thể trình bày cấu trúc dữ liệu với chữ ký hợp lệ của Goofy. Hơn nữa, nó chỉ ra một đồng tiền hợp lệ thuộc sở hữu của Goofy. Vì vậy, tính hợp lệ và quyền sở hữu của tiền xu được thể hiện rõ ràng trong hệ thống.
Khi Alice sở hữu đồng xu, cô ấy có thể tiêu nó lần lượt. Để làm điều này, cô ấy tạo ra một tuyên bố có nội dung: “Hãy trả khoản này cho khóa công khai của Bob” trong đó “đây” là một con trỏ băm tới đồng tiền mà cô ấy sở hữu. Và tất nhiên, Alice ký vào tuyên bố này. Bất kỳ ai, khi được đưa ra đồng xu này, đều có thể xác minh rằng Bob là chủ sở hữu. Họ có thể theo dõi chuỗi con trỏ băm trở lại việc tạo ra đồng xu và xác minh rằng ở mỗi bước, chủ sở hữu hợp pháp đã ký một tuyên bố có nội dung “trả đồng xu này cho [chủ sở hữu mới]” (Hình 1.10).
Tóm lại, các quy tắc của Goofycoin là:
- Goofy có thể tạo đồng tiền mới bằng cách chỉ cần ký vào một tuyên bố rằng anh ấy đang tạo ra một đồng tiền mới với một ID đồng tiền duy nhất.
- Bất kỳ ai sở hữu đồng xu có thể chuyển nó cho người khác bằng cách ký vào một tuyên bố có nội dung “Chuyển đồng xu này cho X” (trong đó X được chỉ định làm khóa công khai).
- Bất kỳ ai cũng có thể xác minh tính hợp lệ của đồng xu bằng cách theo dõi chuỗi con trỏ băm trở lại quá trình tạo của nó bởi Goofy, xác minh tất cả các chữ ký trong suốt quá trình.
Tất nhiên, có một vấn đề bảo mật cơ bản với Goofycoin. Giả sử Alice đã chuyển tiền của cô ấy cho Bob bằng cách gửi bản tuyên bố có chữ ký của cô ấy cho Bob nhưng không nói với bất kỳ ai khác. Cô ấy có thể tạo một tuyên bố có chữ ký khác trả cùng một đồng tiền cho Chuck. Đến Chuck, có vẻ như đó là một giao dịch hoàn toàn hợp lệ và bây giờ anh ấy là chủ sở hữu của đồng xu. Bob và Chuck đều có tuyên bố hợp lệ là chủ sở hữu của đồng xu này. Đây được gọi là cuộc tấn công chi tiêu gấp đôi (double-spending attack)—Alice đang chi tiêu cùng một đồng xu hai lần. Theo trực giác, chúng ta biết rằng tiền xu không được phép hoạt động theo cách đó.
HÌNH 1.10. Đồng xu Goofycoin. Được hiển thị ở đây là một đồng xu đã được tạo (dưới cùng) và được sử dụng hai lần (giữa và trên).
Trên thực tế, các cuộc tấn công chi tiêu gấp đôi là một trong những vấn đề quan trọng mà bất kỳ loại tiền điện tử nào cũng phải giải quyết. Goofycoin không giải quyết được cuộc tấn công chi tiêu gấp đôi và do đó nó không an toàn. Goofycoin rất đơn giản và cơ chế chuyển tiền của nó thực sự tương tự như Bitcoin, nhưng vì nó không an toàn nên nó không phù hợp như một loại tiền điện tử.
Scroogecoin
Để giải quyết vấn đề chi tiêu gấp đôi, chúng ta sẽ thiết kế một loại tiền điện tử khác, được gọi là Scroogecoin. Scroogecoin được xây dựng dựa trên Goofycoin, nhưng nó phức tạp hơn một chút về cấu trúc dữ liệu.
Ý tưởng quan trọng đầu tiên là một thực thể được chỉ định có tên là Scrooge xuất bản một sổ cái chỉ thêm (append-only ledger) chứa lịch sử của tất cả các giao dịch. Thuộc tính append-only đảm bảo rằng mọi dữ liệu được ghi vào sổ cái này sẽ tồn tại mãi mãi trong sổ cái. Nếu sổ cái chỉ thực sự là thêm, chúng ta có thể sử dụng nó để bảo vệ chống lại việc chi tiêu gấp đôi bằng cách yêu cầu tất cả các giao dịch phải được ghi vào sổ cái trước khi chúng được chấp nhận. Bằng cách đó, nó sẽ được ghi lại công khai nếu tiền xu trước đó đã được gửi cho một chủ sở hữu khác.
Để triển khai chức năng chỉ dành cho phần thêm này, Scrooge có thể xây dựng một chuỗi khối (cấu trúc dữ liệu được thảo luận trong Phần 1.2), mà anh ta sẽ ký số. Nó bao gồm một loạt các khối dữ liệu, mỗi khối có một giao dịch trong đó (trong thực tế, để tối ưu hóa, chúng tôi thực sự sẽ đặt nhiều giao dịch trong cùng một khối, giống như Bitcoin.) Mỗi khối có ID của một giao dịch, nội dung của giao dịch và một con trỏ băm tới khối trước đó. Scrooge ký kỹ thuật số vào con trỏ băm cuối cùng, liên kết tất cả dữ liệu trong toàn bộ cấu trúc này và anh ta xuất bản chữ ký cùng với chuỗi khối (Hình 1.11).
HÌNH 1.11. Chuỗi khối Scroogecoin.
Trong Scroogecoin, một giao dịch chỉ được tính nếu nó nằm trong chuỗi khối được Scrooge ký. Bất kỳ ai cũng có thể xác minh rằng một giao dịch đã được Scrooge xác nhận bằng cách kiểm tra chữ ký của Scrooge trên khối ghi lại giao dịch. Scrooge đảm bảo rằng anh ta không xác nhận một giao dịch cố gắng tăng gấp đôi số tiền đã chi tiêu.
Tại sao chúng ta cần một chuỗi khối với con trỏ băm ngoài việc có ký hiệu Scrooge cho mỗi khối? Điều này đảm bảo thuộc tính chỉ nối thêm. Nếu Scrooge cố gắng thêm hoặc xóa một giao dịch hoặc thay đổi một giao dịch hiện có, thì điều đó sẽ ảnh hưởng đến tất cả các khối tiếp theo do các con trỏ băm. Miễn là ai đó đang theo dõi con trỏ băm mới nhất do Scrooge công bố, sự thay đổi sẽ rõ ràng và dễ nắm bắt. Trong một hệ thống mà Scrooge đã ký các khối riêng lẻ, bạn sẽ phải theo dõi mọi chữ ký Scrooge từng được phát hành. Một chuỗi khối giúp bất kỳ hai cá nhân nào dễ dàng xác minh rằng họ đã quan sát lịch sử giao dịch giống nhau do Scrooge ký.
Trong Scroogecoin, có hai loại giao dịch. Loại đầu tiên là CreateCoins, giống như hoạt động mà Goofy có thể thực hiện trong Goofycoin để tạo ra một đồng tiền mới. Với Scroogecoin, chúng ta sẽ mở rộng ngữ nghĩa một chút để cho phép tạo nhiều đồng tiền trong một giao dịch (Hình 1.12).
HÌNH 1.12. Giao dịch CreateCoins. Giao dịch CreateCoins này tạo ra nhiều đồng tiền. Mỗi đồng xu có một số sê-ri trong giao dịch. Mỗi đồng tiền cũng có một giá trị; nó có giá trị bằng một số scroogecoin nhất định. Cuối cùng, mỗi đồng xu có một người nhận, đó là một khóa công khai nhận được đồng tiền khi nó được tạo ra. Vì vậy, CreateCoins tạo ra nhiều đồng tiền mới với các giá trị khác nhau và giao chúng cho mọi người với tư cách là chủ sở hữu ban đầu. Chúng ta đề cập đến tiền xu bằng CoinID. CoinID là sự kết hợp của ID giao dịch và số sê-ri của đồng xu trong giao dịch đó.
HÌNH 1.13. Một giao dịch PayCoins.
Theo định nghĩa, một giao dịch CreateCoins luôn hợp lệ nếu nó được Scrooge ký. Chúng ta sẽ không lo lắng về việc Scrooge được quyền tạo ra khi nào hoặc bao nhiêu đồng tiền, giống như chúng ta đã không lo lắng trong Goofycoin về cách Goofy được chọn làm thực thể được phép tạo tiền.
Loại giao dịch thứ hai là PayCoins. Nó tiêu thụ một số đồng tiền (tức là phá hủy chúng) và tạo ra các đồng tiền mới có cùng tổng giá trị. Các đồng tiền mới có thể thuộc về những người khác nhau (khóa công khai). Giao dịch này phải được ký bởi tất cả những người đang thanh toán bằng tiền xu. Vì vậy, nếu bạn là chủ sở hữu của một trong những đồng tiền sẽ được sử dụng trong giao dịch này, thì bạn cần phải ký số vào giao dịch để nói rằng bạn đồng ý với việc chi tiêu số tiền này.
Các quy tắc của Scroogecoin nói rằng giao dịch PayCoins hợp lệ nếu nó đáp ứng bốn điều kiện:
- Số xu đã tiêu dùng là hợp lệ, tức là chúng đã được tạo trong các giao dịch trước đó.
- Số xu đã tiêu dùng chưa được tiêu thụ trong một số giao dịch trước đó. Đó là, đây không phải là một giao dịch chi tiêu gấp đôi.
- Tổng giá trị của các đồng xuất ra từ giao dịch này bằng tổng giá trị của các đồng đã đi vào. Nghĩa là, chỉ Scrooge mới có thể tạo ra giá trị mới.
- Giao dịch được ký hợp lệ bởi chủ sở hữu của tất cả các đồng xu được sử dụng trong giao dịch.
Nếu các điều kiện này được đáp ứng, thì giao dịch PayCoins này hợp lệ và Scrooge sẽ chấp nhận nó (Hình 1.13). Anh ấy sẽ ghi nó vào sổ cái bằng cách gắn nó vào chuỗi khối, sau đó mọi người có thể thấy rằng giao dịch này đã xảy ra. Chỉ tại thời điểm này, những người tham gia mới có thể chấp nhận rằng giao dịch đã thực sự xảy ra. Cho đến khi nó được xuất bản, nó có thể được thực hiện trước bởi một giao dịch chi tiêu gấp đôi ngay cả khi nó được xác thực bởi ba điều kiện đầu tiên.
Các đồng tiền trong hệ thống này là bất biến — chúng không bao giờ được thay đổi, chia nhỏ hoặc kết hợp với nhau. Mỗi đồng xu được tạo ra, một lần, trong một giao dịch và sau đó được tiêu thụ trong một giao dịch khác. Nhưng chúng ta có thể nhận được hiệu quả tương tự như có thể chia nhỏ hoặc kết hợp các đồng tiền bằng cách sử dụng các giao dịch. Ví dụ: để chia nhỏ một đồng xu, Alice tạo một giao dịch mới tiêu thụ một đồng tiền đó và sau đó tạo ra hai đồng tiền mới có cùng tổng giá trị. Hai đồng tiền mới đó có thể được giao lại cho cô ấy. Vì vậy, mặc dù tiền xu là bất biến trong hệ thống này, nhưng nó có tất cả tính linh hoạt của một hệ thống không có đồng xu bất biến.
Bây giờ chúng ta đến vấn đề cốt lõi với Scroogecoin. Scroogecoin sẽ hoạt động theo nghĩa mà mọi người có thể thấy những đồng tiền nào là hợp lệ. Nó ngăn chặn việc chi tiêu gấp đôi, bởi vì mọi người có thể nhìn vào chuỗi khối và thấy rằng tất cả các giao dịch đều hợp lệ và mỗi đồng xu chỉ được tiêu thụ một lần. Nhưng vấn đề là Scrooge—anh ta có quá nhiều ảnh hưởng. Anh ta không thể tạo giao dịch giả mạo, bởi vì anh ta không thể giả mạo chữ ký của người khác. Nhưng anh ta có thể ngừng xác nhận các giao dịch từ một số người dùng, từ chối dịch vụ của họ và làm cho đồng tiền của họ không thể chi tiêu được. Nếu Scrooge tham lam (như tên gọi trong tiểu thuyết của anh ta cho thấy), anh ta có thể từ chối công bố các giao dịch trừ khi họ chuyển một số phí giao dịch được ủy thác cho anh ta. Scrooge tất nhiên cũng có thể tạo ra bao nhiêu đồng tiền mới cho chính mình tùy thích. Hoặc Scrooge có thể chán toàn bộ hệ thống và ngừng cập nhật chuỗi khối hoàn toàn.
Vấn đề ở đây là tập trung hóa. Mặc dù Scrooge hài lòng với hệ thống này, nhưng chúng ta, với tư cách là những người sử dụng nó, có thể không. Trong khi Scroogecoin có vẻ như là một đề xuất không thực tế, phần lớn các nghiên cứu ban đầu về các hệ thống mật mã đã giả định rằng thực sự sẽ có một số cơ quan trung ương đáng tin cậy, thường được gọi là ngân hàng. Rốt cuộc, hầu hết các loại tiền tệ trong thế giới thực đều có một tổ chức phát hành đáng tin cậy (thường là cơ quan đúc tiền của chính phủ) chịu trách nhiệm tạo tiền tệ và xác định tờ tiền nào hợp lệ. Tuy nhiên, tiền điện tử với cơ quan trung ương phần lớn không thành công trong thực tế. Có nhiều lý do giải thích cho điều này, nhưng nhìn nhận lại thì có vẻ như rất khó để khiến mọi người chấp nhận một loại tiền điện tử có cơ quan quản lý tập trung.
Do đó, thách thức kỹ thuật trung tâm mà chúng ta cần giải quyết để cải thiện Scroogecoin và tạo ra một hệ thống khả thi là: Chúng ta có thể khử Scrooge-ify hệ thống không? Đó là, liệu chúng ta có thể loại bỏ hình ảnh Scrooge tập trung đó không? Liệu chúng ta có thể có một loại tiền điện tử hoạt động giống như Scroogecoin theo nhiều cách nhưng không có bất kỳ cơ quan trung ương đáng tin cậy nào không?
Để làm được điều đó, chúng ta cần tìm ra cách tất cả người dùng có thể đồng ý về một chuỗi khối được xuất bản duy nhất làm lịch sử có thẩm quyền của tất cả các giao dịch. Tất cả họ phải đồng ý về giao dịch nào là hợp lệ và giao dịch nào đã thực sự xảy ra. Họ cũng cần có thể chỉ định ID theo cách phi tập trung. Cuối cùng, việc đúc tiền mới cũng cần được phi tập trung. Nếu chúng ta có thể giải quyết những vấn đề này, thì chúng ta có thể xây dựng một loại tiền tệ giống như Scroogecoin nhưng không có một bên tập trung. Trên thực tế, đây sẽ là một hệ thống giống như Bitcoin.