6.5. Zerocoin và Zerocash
Không có giải pháp ẩn danh tiền điện tử nào gây ra nhiều sự phấn khích như Zerocoin và người kế nhiệm của nó là Zerocash. Đó là cả vì mật mã khéo léo mà họ sử dụng và vì tính ẩn danh mạnh mẽ mà họ hứa hẹn. Trong khi tất cả các công nghệ tăng cường tính ẩn danh được thảo luận cho đến nay đều bổ sung tính năng ẩn danh lên trên giao thức cốt lõi, thì Zerocoin và Zerocash kết hợp tính năng ẩn danh ở cấp độ giao thức. Chúng ta trình bày quan điểm cấp cao của giao thức ở đây và nhất thiết phải đơn giản hóa một số chi tiết, nhưng bạn có thể tìm thấy các tham chiếu đến các tài liệu gốc trong phần Đọc thêm ở cuối chương.
Khả năng tương thích. Như chúng ta sẽ thấy, các đảm bảo ẩn danh mạnh mẽ của Zerocoin và Zerocash phải trả giá: không giống như trộn tập trung và CoinJoin, các giao thức này không tương thích với Bitcoin như ngày nay. Về mặt kỹ thuật, có thể triển khai Zerocoin với một soft fork cho Bitcoin, nhưng những khó khăn thực tế đủ nghiêm trọng để khiến điều này trở nên không khả thi. Với Zerocash, thậm chí không thể thực hiện được fork và altcoin là lựa chọn duy nhất.
Đảm bảo mật mã. Zerocoin và Zerocash kết hợp sự trộn lẫn ở cấp độ giao thức và các thuộc tính ẩn danh đi kèm với sự đảm bảo về mật mã. Những đảm bảo này có chất lượng tốt hơn so với những công nghệ trộn khác mà chúng ta đã thảo luận. Bạn không cần phải tin tưởng vào bất kỳ ai—hỗn hợp, đồng nghiệp hoặc trung gian thuộc bất kỳ loại nào, hoặc thậm chí cả những người khai thác và giao thức đồng thuận—để đảm bảo quyền riêng tư của bạn. Lời hứa về việc ẩn danh chỉ dựa vào giới hạn tính toán của đối thủ, như với hầu hết các đảm bảo về mật mã.
Zerocoin
Để giải thích về Zerocoin, trước tiên chúng ta xin giới thiệu khái niệm Basecoin. Basecoin là một altcoin giống như Bitcoin và Zerocoin là một phần mở rộng của altcoin này. Tính năng chính cung cấp tính ẩn danh là bạn có thể chuyển đổi tiền cơ sở thành tiền không và quay trở lại, và khi bạn làm điều đó, nó phá vỡ liên kết giữa tiền cơ sở gốc và tiền cơ sở mới. Trong hệ thống này, Basecoin là đơn vị tiền tệ mà bạn giao dịch và Zerocoin chỉ cung cấp một cơ chế để giao dịch tiền cơ sở của bạn lấy tiền mới không thể liên kết với tiền cũ.
Bạn có thể xem mỗi zerocoin mà bạn sở hữu như một mã thông báo mà bạn có thể sử dụng để chứng minh rằng bạn sở hữu một basecoin và khiến nó không thể sử dụng được. Bằng chứng không tiết lộ bạn sở hữu basecoin nào, chỉ đơn thuần là bạn đã sở hữu basecoin. Sau đó, bạn có thể đổi bằng chứng này cho một tiền cơ sở mới bằng cách xuất trình bằng chứng cho các thợ đào. Một trường hợp tương tự là vào sòng bạc và đổi tiền mặt của bạn lấy chip poker. Đây là bằng chứng cho thấy bạn đã gửi một số tiền mặt, sau này bạn có thể đổi lấy các loại tiền mặt khác có cùng giá trị khi thoát ra khỏi sòng bạc. Tất nhiên, không giống như chip poker, bạn thực sự không thể làm bất cứ điều gì với zerocoin ngoại trừ việc giữ nó và sau đó đổi nó thành basecoin.
Để làm cho điều này hoạt động trong một loại tiền điện tử, những bằng chứng này được thực hiện bằng mật mã. Chúng ta cần đảm bảo rằng mỗi bằng chứng chỉ có thể được sử dụng một lần để đổi tiền cơ sở. Nếu không, có thể có được tiền cơ sở miễn phí bằng cách chuyển tiền cơ sở thành đồng tiền không và sau đó đổi nó nhiều lần.
Bằng chứng Zero-Knowledge
Công cụ mật mã chính được sử dụng là bằng chứng không có kiến thức, là một cách để ai đó chứng minh một tuyên bố (toán học) mà không tiết lộ bất kỳ thông tin nào khác dẫn đến tuyên bố đó là đúng. Ví dụ: giả sử bạn đã làm rất nhiều việc để giải một câu đố băm và bạn muốn thuyết phục ai đó về điều này. Nói cách khác, bạn muốn chứng minh tuyên bố
Tôi biết x sao cho H(x ǁ các đầu vào đã biết khác) < 〈mục tiêu〉
Tất nhiên, bạn có thể làm điều này bằng cách tiết lộ x. Nhưng một bằng chứng không có kiến thức cho phép bạn làm điều này theo cách mà người khác không khôn ngoan hơn về giá trị của x sau khi nhìn thấy bằng chứng so với họ trước đây.
Bạn cũng có thể chứng minh những câu như “Tôi biết x sao cho H(x) thuộc tập sau: {…}.” Chứng minh sẽ không tiết lộ gì về x, cũng như về phần tử nào của tập hợp bằng H(x). Zerocoin chủ yếu dựa vào các bằng chứng không có kiến thức và trên thực tế, các tuyên bố được chứng minh trong Zerocoin rất giống với ví dụ sau. Trong cuốn sách này, chúng ta coi các bằng chứng không-kiến thức như hộp đen. Chúng ta trình bày các thuộc tính đạt được bằng các bằng chứng không có kiến thức và cho thấy chúng cần thiết ở đâu trong giao thức, nhưng chúng ta không đi sâu vào chi tiết kỹ thuật về cách thực hiện các bằng chứng này. Các bằng chứng không có kiến thức là nền tảng của mật mã hiện đại và là nền tảng của nhiều giao thức. Chúng ta giới thiệu người đọc có động cơ đến phần Đọc thêm để biết các phương pháp giải quyết chi tiết hơn.
Minting Zerocoins
Zerocoins ra đời bằng cách đúc tiền và bất kỳ ai cũng có thể đúc được zerocoin. Chúng có các mệnh giá tiêu chuẩn. Để đơn giản, giả sử rằng chỉ có một mệnh giá trị giá 1,0 zerocoin và mỗi zerocoin có giá trị bằng 1 basecoin. Mặc dù bất kỳ ai cũng có thể khai thác một đồng zerocoin, nhưng việc chỉ khai thác một đồng không tự động mang lại cho nó bất kỳ giá trị nào—bạn không thể nhận tiền miễn phí. Nó chỉ thu được giá trị khi bạn đưa nó vào chuỗi khối và làm điều đó sẽ yêu cầu từ bỏ 1 basecoin.
HÌNH 6.11. Cam kết số sê-ri. Tương tự trong thế giới thực của một cam kết mật mã là niêm phong một giá trị bên trong một phong bì.
Để khai thác một zerocoin, bạn sử dụng một cam kết mật mã. Hãy nhớ lại từ Chương 1 rằng một lược đồ cam kết là một tương tự mật mã của việc niêm phong một giá trị trong một phong bì và đặt nó trên bàn trong tầm nhìn của mọi người (Hình 6.11).
Việc đúc một zerocoin được thực hiện theo ba bước:
- Tạo ra số sê-ri S và một bí mật ngẫu nhiên r.
- Tính Commit(S, r), cam kết về số sê-ri.
- Xuất bản cam kết trên chuỗi khối, như trong Hình 6.12. Điều này đốt cháy một basecoin, khiến nó trở nên không thể sử dụng được và tạo ra một đồng zerocoin. Giữ bí mật về S và r ngay bây giờ.
Để chi tiêu một zerocoin và đổi một basecoin mới, bạn cần chứng minh rằng trước đó bạn đã khai thác một zerocoin. Bạn có thể làm điều này bằng cách mở cam kết trước đó của bạn, tức là, tiết lộ S và r. Nhưng điều này làm cho mối liên hệ giữa basecoin cũ của bạn và basecoin mới của bạn trở nên rõ ràng. Làm thế nào bạn có thể phá vỡ liên kết? Đây là lúc xuất hiện bằng chứng không có kiến thức. Tại bất kỳ thời điểm nào, sẽ có nhiều cam kết trên chuỗi khối—chúng ta hãy gọi chúng là c1,c2, …, cn.
HÌNH 6.12. Đưa một zerocoin vào chuỗi khối. Để đưa một zerocoin vào chuỗi khối, yêu cầu một giao dịch đúc đặc biệt có “địa chỉ” đầu ra là cam kết mật mã của số sê-ri của zerocoin. Đầu vào của giao dịch đúc tiền là một tiền cơ sở, hiện đã được sử dụng để tạo ra zerocoin. Giao dịch không tiết lộ số sê-ri.
HÌNH 6.13. Chi tiêu một zerocoin. Giao dịch chi tiêu tiết lộ số sê-ri S được cam kết bởi giao dịch đúc tiền trước đó, cùng với bằng chứng không có kiến thức rằng S tương ứng với một số giao dịch đúc tiền trước đó. Không giống như giao dịch đúc tiền (hoặc giao dịch Bitcoin / Basecoin thông thường), giao dịch chi tiêu không có đầu vào và do đó không có chữ ký. Thay vào đó, bằng chứng không có kiến thức phục vụ để thiết lập tính hợp lệ của nó.
Dưới đây là các bước chi tiêu một zerocoin có số sê-ri S để đổi một basecoin mới (Hình 6.13):
- Tạo một giao dịch “chi tiêu” đặc biệt có chứa S, cùng với bằng chứng không có kiến thức về tuyên bố:
“Tôi biết r sao cho Commit(S, r) nằm trong tập hợp {c1, c2, …, cn}”
- Các thợ đào sẽ xác minh bằng chứng không có kiến thức của bạn, điều này thiết lập khả năng của bạn để mở một trong các cam kết zerocoin trên chuỗi khối mà không thực sự mở nó.
- Người khai thác cũng sẽ kiểm tra xem số sê-ri S chưa từng được sử dụng trong bất kỳ giao dịch chi tiêu nào trước đây (vì đó sẽ là chi tiêu gấp đôi).
- Đầu ra của giao dịch chi tiêu của bạn bây giờ sẽ hoạt động như một tiền cơ sở mới. Đối với địa chỉ đầu ra, bạn nên sử dụng một địa chỉ mà bạn sở hữu.
Sau khi bạn chi tiêu một zerocoin, số sê-ri sẽ trở thành công khai và bạn sẽ không bao giờ có thể đổi lại số sê-ri này nữa. Và vì chỉ có một số sê-ri cho mỗi zerocoin, điều đó có nghĩa là mỗi zerocoin chỉ có thể được sử dụng một lần, chính xác như chúng ta yêu cầu để bảo mật.
Sự ẩn danh. Quan sát rằng r được giữ bí mật trong suốt thời gian; cả đúc tiền lẫn giao dịch chi tiêu đều không tiết lộ điều đó. Điều đó có nghĩa là không ai biết số sê-ri nào tương ứng với zerocoin nào. Đây là khái niệm chính đằng sau tính ẩn danh của Zerocoin. Không có liên kết nào trên chuỗi khối giữa giao dịch đúc tiền cam kết số sê-ri S và giao dịch chi tiêu sau đó tiết lộ S để đổi một basecoin. Tính chất nghe có vẻ kỳ diệu này có thể thực hiện được thông qua mật mã, nhưng nó không thể đạt được trong một hệ thống vật lý dựa trên phong bì. Nó giống như thể có một loạt các phong bì niêm phong chứa các số sê-ri khác nhau trên bàn, và bạn có thể chứng minh rằng một số sê-ri cụ thể là một trong số chúng mà không cần phải tiết lộ phong bì nào và không cần phải mở bất kỳ số sê-ri nào.
Hiệu quả. Nhớ lại tuyên bố đã được chứng minh trong một giao dịch chi tiêu:
“Tôi biết r sao cho Commit(S, r) nằm trong tập hợp {c1, c2, …, cn}”
Điều này nghe có vẻ như sẽ không hiệu quả một cách khủng khiếp để thực hiện, bởi vì kích thước của các bằng chứng không có kiến thức sẽ tăng lên một cách tuyến tính khi n tăng lên, đó là số lượng zerocoin đã từng được đúc. Đáng chú ý, Zerocoin quản lý để làm cho kích thước của những bằng chứng này chỉ là logarit theo n. Lưu ý rằng mặc dù tuyên bố được chứng minh có độ dài tuyến tính, nó không cần phải được đưa vào cùng với bằng chứng. Tuyên bố là ẩn ý; nó có thể được suy ra bởi những người khai thác, vì họ biết tập hợp của tất cả các zerocoins trên chuỗi khối. Bản thân bằng chứng có thể ngắn hơn nhiều. Tuy nhiên, so với Bitcoin, Zerocoin vẫn tăng thêm chi phí khá lớn, với các bằng chứng có kích thước khoảng 50 kilobyte.
Thiết lập đáng tin cậy
Một trong những công cụ mật mã được sử dụng để xây dựng Zerocoin (bộ tích lũy RSA) yêu cầu thiết lập tin cậy một lần. Cụ thể, một bên đáng tin cậy cần chọn hai số nguyên tố lớn p và q và xuất bản N = p · q, đây là một tham số mà mọi người sẽ sử dụng trong suốt thời gian tồn tại của hệ thống. Hãy coi N như một khóa công khai, ngoại trừ việc nó dành cho tất cả Zerocoin thay vì một thực thể cụ thể. Miễn là bên đáng tin cậy phá hủy bất kỳ bản ghi nào của p và q, hệ thống được cho là an toàn. Đặc biệt, niềm tin này dựa trên giả định được phổ biến rộng rãi rằng không khả thi khi thừa số một số là tích của hai số nguyên tố lớn. Nhưng nếu ai đó biết các thừa số bí mật p và q (được gọi là “cửa sập”), thì họ sẽ có thể tạo ra zerocoin mới cho chính mình mà không bị phát hiện. Vì vậy, những đầu vào bí mật này phải được sử dụng một lần khi tạo các tham số công khai và sau đó được hủy một cách an toàn.
Có một vấn đề xã hội học thú vị ở đây. Không rõ bằng cách nào mà một thực thể có thể chọn N và thuyết phục mọi người rằng họ đã phá hủy an toàn các thừa số p và q đã được sử dụng trong quá trình thiết lập. Các đề xuất khác nhau về cách đạt được điều này đã được đưa ra, bao gồm cả kỹ thuật “mật mã ngưỡng”, cho phép một nhóm đại biểu cùng tính toán N theo cách miễn là bất kỳ ai trong số họ xóa đầu vào bí mật của họ, hệ thống sẽ vẫn an toàn. .
Cũng có thể sử dụng cấu trúc mật mã hơi khác để tránh yêu cầu thiết lập đáng tin cậy. Cụ thể, người ta đã chỉ ra rằng chỉ cần tạo ra một giá trị ngẫu nhiên rất lớn cho N là an toàn với xác suất cao, bởi vì con số có lẽ không thể hoàn toàn được tính vào nhân tử. Thật không may, điều này mang lại một cú đánh hiệu quả rất lớn và do đó không được coi là thực tế.
Zerocash
Zerocash là một loại tiền điện tử ẩn danh khác được xây dựng dựa trên khái niệm về Zerocoin nhưng đưa mật mã lên cấp độ tiếp theo. Nó sử dụng một kỹ thuật mật mã được gọi là “các đối số kiến thức ngắn gọn không tương tác không có tri thức” (zk-SNARKs), là một cách để xác minh các bằng chứng không có tri thức nhỏ gọn và hiệu quả hơn nhiều. Kết quả là hiệu quả của toàn bộ hệ thống được cải thiện đến mức có thể chạy toàn bộ mạng mà không cần basecoin. Tất cả các giao dịch có thể được thực hiện theo cách không có kiến thức. Như đã thảo luận, Zerocoin hỗ trợ các giao dịch thông thường khi bạn không cần khả năng hủy liên kết, được tăng cường với các giao dịch tính toán đắt tiền chỉ được sử dụng để trộn. Các giao dịch hỗn hợp có mệnh giá cố định và việc tách và hợp nhất các giá trị chỉ có thể xảy ra trong Basecoin. Trong Zerocash, sự khác biệt đó không còn nữa. Số tiền giao dịch hiện nằm trong các cam kết và không còn hiển thị trên chuỗi khối. Các bằng chứng mật mã đảm bảo rằng việc tách và hợp nhất được thực hiện chính xác và người dùng không thể tạo ra zerocash từ không có gì.
Điều duy nhất mà sổ cái ghi lại công khai là sự tồn tại của các giao dịch này, cùng với các bằng chứng cho phép các thợ đào xác minh tất cả các thuộc tính cần thiết cho hoạt động chính xác của hệ thống. Cả địa chỉ và giá trị đều không được tiết lộ trên chuỗi khối tại bất kỳ thời điểm nào. Người dùng duy nhất cần biết số tiền của một giao dịch là người gửi và người nhận của giao dịch cụ thể đó. Các thợ đào không cần biết số tiền giao dịch. Tất nhiên, nếu có phí giao dịch, các thợ đào cần biết khoản phí đó, nhưng điều đó không thực sự ảnh hưởng đến tính ẩn danh của bạn.
Khả năng chạy như một hệ thống giao dịch hoàn toàn không thể theo dõi đặt Zerocash vào một danh mục riêng của nó khi có liên quan đến tính ẩn danh và quyền riêng tư. Zerocash miễn nhiễm với các cuộc tấn công kênh phụ chống lại sự trộn lẫn, vì sổ cái công khai không còn chứa số tiền giao dịch.
Thiết lập Zerocash
Về đặc tính kỹ thuật của nó, Zerocash nghe có vẻ quá tốt để trở thành sự thật. Thực sự là có một vấn đề. Cũng giống như Zerocoin, Zerocash yêu cầu các thông số công khai để thiết lập hệ thống bằng chứng không có kiến thức. Nhưng không giống như Zerocoin, chỉ yêu cầu một số N (chỉ vài trăm byte), Zerocash yêu cầu một bộ thông số công khai khổng lồ—dài hơn một gigabyte. Một lần nữa, để tạo ra các tham số công khai này, Zerocash yêu cầu các đầu vào ngẫu nhiên và bí mật, và nếu ai đó biết các đầu vào bí mật này, nó sẽ xâm phạm tính bảo mật của hệ thống bằng cách cho phép chi tiêu gấp đôi không thể phát hiện được.
Chúng ta sẽ không tìm hiểu sâu hơn về thách thức thiết lập hệ thống zk-SNARK ở đây. Nó vẫn là một lĩnh vực nghiên cứu tích cực, nhưng tính đến năm 2015, không ai biết chính xác cách thiết lập hệ thống trên thực tế theo cách đủ đáng tin cậy. Cho đến nay, zk-SNARKs vẫn chưa được sử dụng trong thực tế.
Để tất cả chúng cùng nhau
Bây giờ chúng ta hãy so sánh các giải pháp mà chúng ta đã thảo luận, cả về thuộc tính ẩn danh mà chúng cung cấp và về cách chúng có thể triển khai trong thực tế (Bảng 6.1).
Chúng ta bắt đầu với chính Bitcoin, vốn đã được triển khai và được coi là hệ thống mặc định ở đây. Nhưng nó chỉ có biệt danh và các phân tích đồ thị giao dịch mạnh mẽ có thể được triển khai chống lại nó. Chúng ta đã xem xét các cách để phân cụm các nhóm địa chỉ lớn và cách đôi khi gắn danh tính trong thế giới thực vào các nhóm đó.
BẢNG 6.1. SO SÁNH CÁC CÔNG NGHỆ ẨN DANH ĐƯỢC TRÌNH BÀY TRONG CHƯƠNG NÀY
Mức độ ẩn danh tiếp theo là sử dụng một kết hợp duy nhất theo cách thủ công hoặc thực hiện Coin-Join bằng cách tìm kiếm các đồng nghiệp theo cách thủ công. Điều này che khuất mối liên kết giữa đầu vào và đầu ra nhưng lại để lại quá nhiều manh mối tiềm ẩn trong đồ thị giao dịch. Bên cạnh đó, hỗn hợp và đồng nghiệp có thể độc hại, bị tấn công hoặc bị ép buộc tiết lộ hồ sơ của họ. Mặc dù không hoàn hảo về mặt ẩn danh, các dịch vụ trộn vẫn tồn tại, vì vậy tùy chọn này có thể sử dụng được ngày nay.
Cấp độ thứ ba mà chúng ta xem xét là một chuỗi hỗn hợp hoặc CoinJoins. Việc cải thiện tính ẩn danh là kết quả của việc giảm bớt sự phụ thuộc vào bất kỳ tổ hợp hoặc nhóm đồng nghiệp nào. Các tính năng như kích thước phân đoạn được tiêu chuẩn hóa và tự động hóa phía máy khách có thể giảm thiểu rò rỉ thông tin, nhưng một số kênh phụ vẫn hiện diện. Ngoài ra còn có nguy cơ đối thủ kiểm soát hoặc cấu kết với nhiều hỗn hợp hoặc đồng nghiệp. Các ví và dịch vụ thực hiện chuỗi hỗn hợp có thể được triển khai và áp dụng ngày nay, nhưng theo hiểu biết của chúng ta, giải pháp chuỗi hỗn hợp an toàn vẫn chưa có sẵn.
Zerocoin đưa tiền mã hóa trực tiếp vào giao thức và mang lại sự đảm bảo ẩn danh về mặt toán học. Chúng ta nghĩ rằng một số kênh phụ vẫn có thể thực hiện được, nhưng nó chắc chắn vượt trội hơn so với các giải pháp dựa trên kết hợp khác. Tuy nhiên, Zerocoin sẽ phải được tung ra như một loại tiền thay thế.
Cuối cùng, chúng ta đã xem xét Zerocash. Do hiệu quả được cải thiện, Zerocash có thể được chạy như một loại tiền điện tử hoàn toàn không thể theo dõi—và không chỉ ẩn danh —. Tuy nhiên, giống như Zerocoin, Zerocash không tương thích với Bitcoin. Tệ hơn nữa, nó đòi hỏi một quá trình thiết lập phức tạp mà cộng đồng vẫn đang tìm ra cách tốt nhất để hoàn thành.
Chúng ta đã đề cập rất nhiều công nghệ trong chương này. Bây giờ chúng ta hãy lùi lại một bước. Biệt danh của Bitcoin (và tiềm năng ẩn danh) rất mạnh mẽ và có được sức mạnh khi kết hợp với các công nghệ khác, đặc biệt là giao tiếp ẩn danh. Như chúng ta sẽ thấy trong Chương 7, đây là sự kết hợp mạnh mẽ đằng sau Con đường Tơ lụa và các thị trường trực tuyến ẩn danh khác.
Bất chấp sức mạnh của nó, tính ẩn danh rất mong manh. Một sai lầm có thể tạo ra một liên kết không mong muốn, không thể thay đổi. Nhưng ẩn danh rất đáng được bảo vệ, vì nó có nhiều công dụng tốt bên cạnh những công dụng xấu rõ ràng. Mặc dù những khác biệt về đạo đức này là quan trọng, nhưng chúng không thể diễn đạt được ở cấp độ kỹ thuật. Công nghệ ẩn danh dường như rất mơ hồ về mặt đạo đức và vốn có và là một xã hội, chúng ta phải học cách chung sống với thực tế này.
Tính ẩn danh của Bitcoin là một lĩnh vực tích cực của đổi mới kỹ thuật cũng như tranh luận về đạo đức. Chúng ta vẫn chưa biết hệ thống ẩn danh nào cho Bitcoin, nếu có, sẽ trở nên nổi bật hay chủ đạo. Đó là cơ hội tuyệt vời để bạn—cho dù là nhà phát triển, nhà hoạch định chính sách hay người dùng—tham gia và đóng góp. Hy vọng rằng những gì bạn đã học được trong chương này đã cung cấp cho bạn nền tảng phù hợp để làm điều đó.