Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định

Chúng tôi tiếp tục loạt bài về chuỗi khối Monero và bài viết hôm nay sẽ tập trung vào giao thức RingCT (Giao dịch bí mật của vòng), giới thiệu các giao dịch bí mật và chữ ký vòng mới. Thật không may, có rất ít thông tin trên Internet về cách thức hoạt động của nó và chúng tôi đã cố gắng lấp đầy khoảng trống này.

Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định

Chúng ta sẽ nói về cách mạng ẩn số tiền chuyển bằng giao thức này, lý do tại sao họ từ bỏ chữ ký vòng tiền điện tử cổ điển và công nghệ này sẽ phát triển hơn nữa như thế nào.

Vì giao thức này là một trong những công nghệ phức tạp nhất trong Monero nên người đọc sẽ cần có kiến ​​thức cơ bản về thiết kế của chuỗi khối này và kiến ​​thức cơ bản về mật mã đường cong elip (để nâng cao kiến ​​thức này, bạn có thể đọc các chương đầu tiên trong cuốn sách của chúng tôi). bài viết trước về đa chữ ký).

Giao thức RingCT

Một trong những cuộc tấn công có thể xảy ra đối với tiền điện tử là phân tích blockchain dựa trên kiến ​​thức về số lượng và thời gian của giao dịch được gửi. Điều này cho phép thu hẹp đáng kể khu vực tìm kiếm các lối thoát mà kẻ tấn công quan tâm. Để bảo vệ khỏi những phân tích như vậy, Monero đã triển khai một giao thức giao dịch ẩn danh nhằm che giấu hoàn toàn số tiền chuyển trên mạng.

Điều đáng chú ý là ý tưởng giấu số tiền không phải là mới. Nhà phát triển Bitcoin Core Greg Maxwell là một trong những người đầu tiên mô tả nó trong bài viết của mình. bài viết Giao dịch bí mật. Việc triển khai RingCT hiện tại là bản sửa đổi của nó với khả năng sử dụng chữ ký vòng (dù không có chúng) và đó là lý do nó có tên - Giao dịch bí mật vòng.

Trong số những thứ khác, giao thức giúp loại bỏ các vấn đề khi trộn lẫn các đầu ra bụi - đầu ra với số lượng nhỏ (thường nhận được dưới dạng thay đổi từ các giao dịch), điều này tạo ra nhiều vấn đề hơn giá trị của chúng.

Vào tháng 2017 năm 6, một hard fork của mạng Monero đã diễn ra, cho phép tùy chọn sử dụng các giao dịch bí mật. Và vào tháng XNUMX cùng năm, với hard fork phiên bản XNUMX, những giao dịch như vậy đã trở thành những giao dịch duy nhất được phép trên mạng.

RingCT sử dụng một số cơ chế cùng một lúc: chữ ký nhóm ẩn danh tự phát được liên kết nhiều lớp (Chữ ký nhóm ẩn danh tự phát có thể liên kết nhiều lớp, sau đây gọi là MLSAG), sơ đồ cam kết (Cam kết Pedersen) và bằng chứng phạm vi (thuật ngữ này không có bản dịch sang tiếng Nga) .

Giao thức RingCT giới thiệu hai loại giao dịch ẩn danh: đơn giản và đầy đủ. Ví tạo ra cái đầu tiên khi một giao dịch sử dụng nhiều hơn một đầu vào, cái thứ hai - trong tình huống ngược lại. Chúng khác nhau ở cách xác thực số tiền giao dịch và dữ liệu được ký bằng chữ ký MLSAG (chúng ta sẽ nói thêm về vấn đề này bên dưới). Hơn nữa, các giao dịch thuộc loại đầy đủ có thể được tạo với bất kỳ số lượng đầu vào nào, không có sự khác biệt cơ bản. Trong cuốn sách "Không đến Monero" Về vấn đề này, người ta cho rằng quyết định giới hạn toàn bộ giao dịch ở một đầu vào được đưa ra một cách vội vàng và có thể thay đổi trong tương lai.

chữ ký MLSAG

Hãy nhớ đầu vào giao dịch đã ký là gì. Mỗi giao dịch chi tiêu và tạo ra một số tiền. Việc tạo tiền xảy ra bằng cách tạo ra đầu ra giao dịch (tương tự trực tiếp là hóa đơn) và đầu ra mà giao dịch chi tiêu (xét cho cùng, trong đời thực, chúng ta tiêu tiền giấy) trở thành đầu vào (hãy cẩn thận, rất dễ bị nhầm lẫn đây).

Một đầu vào tham chiếu nhiều đầu ra nhưng chỉ dành một đầu ra, do đó tạo ra “màn khói” gây khó khăn cho việc phân tích lịch sử dịch thuật. Nếu một giao dịch có nhiều đầu vào thì cấu trúc như vậy có thể được biểu diễn dưới dạng ma trận, trong đó các hàng là đầu vào và các cột là đầu ra hỗn hợp. Để chứng minh với mạng rằng giao dịch sử dụng chính xác đầu ra của nó (biết khóa bí mật của chúng), đầu vào được ký bằng chữ ký vòng. Chữ ký như vậy đảm bảo rằng người ký biết khóa bí mật cho tất cả các phần tử của bất kỳ cột nào.

Giao dịch bí mật không còn sử dụng giao dịch cổ điển cryptonote chữ ký vòng, chúng được thay thế bằng MLSAG - một phiên bản của chữ ký vòng một lớp tương tự được điều chỉnh cho nhiều đầu vào, LSAG.

Chúng được gọi là nhiều lớp vì chúng ký một số đầu vào cùng một lúc, mỗi đầu vào được trộn lẫn với một số đầu vào khác, tức là một ma trận được ký chứ không phải một hàng. Như chúng ta sẽ thấy sau, điều này giúp tiết kiệm kích thước chữ ký.

Chúng ta hãy xem cách hình thành chữ ký vòng, sử dụng ví dụ về giao dịch sử dụng 2 đầu ra thực và sử dụng m - 1 đầu ra ngẫu nhiên từ chuỗi khối để trộn. Hãy để chúng tôi biểu thị các khóa công khai của đầu ra mà chúng tôi sử dụng dưới dạng
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác địnhvà hình ảnh chính cho chúng tương ứng: Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định Vì vậy, chúng ta thu được một ma trận có kích thước 2xm. Đầu tiên, chúng ta cần tính toán những thách thức đối với từng cặp đầu ra:
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định
Chúng tôi bắt đầu tính toán với kết quả đầu ra mà chúng tôi sử dụng bằng khóa chung của chúng:Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác địnhvà số ngẫu nhiênCác giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác địnhKết quả là chúng ta nhận được các giá trị sau:
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định, mà chúng tôi sử dụng để tính toán thách thức
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác địnhcặp đầu ra tiếp theo (để dễ hiểu hơn những gì chúng tôi đang thay thế ở đâu, chúng tôi đã đánh dấu các giá trị này bằng các màu khác nhau). Tất cả các giá trị sau được tính theo vòng tròn bằng cách sử dụng các công thức được đưa ra trong hình minh họa đầu tiên. Điều cuối cùng cần tính toán là thách thức đối với một cặp đầu ra thực.

Như chúng ta có thể thấy, tất cả các cột ngoại trừ cột chứa kết quả đầu ra thực đều sử dụng các số được tạo ngẫu nhiênCác giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định. Đối với π- cột chúng tôi cũng sẽ cần chúng. Hãy biến đổiCác giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác địnhtrong s:Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định
Bản thân chữ ký là một bộ gồm tất cả các giá trị sau:

Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định

Dữ liệu này sau đó được ghi vào một giao dịch.

Như chúng ta có thể thấy, MLSAG chỉ có một thử thách c0, cho phép bạn tiết kiệm kích thước chữ ký (vốn vốn đã cần nhiều dung lượng). Tiếp theo, bất kỳ thanh tra viên nào, sử dụng dữ liệuCác giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định, khôi phục các giá trị c1,…, cm và kiểm tra xemCác giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định. Như vậy, vòng của chúng tôi đã đóng và chữ ký đã được xác minh.

Đối với các giao dịch RingCT thuộc loại đầy đủ, một dòng nữa sẽ được thêm vào ma trận với các đầu ra hỗn hợp, nhưng chúng ta sẽ nói về điều này bên dưới.

Cam kết của Pedersen

Đề án nghĩa vụ (thuật ngữ cam kết trong tiếng Anh thường được sử dụng nhiều hơn) được sử dụng để một bên có thể chứng minh rằng họ biết một (con số) bí mật nào đó mà không thực sự tiết lộ nó. Ví dụ: bạn gieo một con xúc xắc nhất định, xem xét cam kết và chuyển nó cho bên xác minh. Do đó, tại thời điểm tiết lộ số bí mật, người xác minh sẽ tính toán một cách độc lập cam kết, từ đó đảm bảo rằng bạn không lừa dối anh ta.

Cam kết Monero được sử dụng để che giấu số tiền chuyển và sử dụng tùy chọn phổ biến nhất - cam kết Pedersen. Nhân tiện, có một sự thật thú vị - lúc đầu, các nhà phát triển đề xuất ẩn số lượng bằng cách trộn thông thường, nghĩa là thêm đầu ra với số lượng tùy ý để tạo ra sự không chắc chắn, nhưng sau đó họ chuyển sang cam kết (thực tế không phải là họ đã tiết kiệm quy mô giao dịch, như chúng ta sẽ thấy bên dưới).
Nói chung, cam kết trông như thế này:
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác địnhГде C - ý nghĩa của chính sự cam kết, a - số tiền ẩn, H là một điểm cố định trên đường cong elip (bộ tạo bổ sung) và x - một loại mặt nạ tùy ý, một yếu tố ẩn giấu được tạo ngẫu nhiên. Ở đây cần có mặt nạ để bên thứ ba không thể đoán được giá trị của cam kết.

Khi một đầu ra mới được tạo, ví sẽ tính toán cam kết cho nó và khi chi tiêu, nó sẽ lấy giá trị được tính trong quá trình tạo hoặc tính toán lại, tùy thuộc vào loại giao dịch.

RingCT đơn giản

Trong trường hợp giao dịch RingCT đơn giản, để đảm bảo rằng giao dịch tạo ra đầu ra bằng với lượng đầu vào (không tạo ra tiền tự nhiên), tổng số cam kết của giao dịch thứ nhất và thứ hai phải là giống nhau, đó là:
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định
Hoa hồng cam kết xem xét nó hơi khác một chút - không có mặt nạ:
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác địnhĐâu a — số tiền hoa hồng, nó được công khai.

Cách tiếp cận này cho phép chúng tôi chứng minh với bên ủy thác rằng chúng tôi đang sử dụng số tiền tương tự mà không tiết lộ chúng.

Để làm cho mọi thứ rõ ràng hơn, chúng ta hãy xem một ví dụ. Giả sử một giao dịch sử dụng hai đầu ra (có nghĩa là chúng trở thành đầu vào) là 10 và 5 XMR và tạo ra ba đầu ra trị giá 12 XMR: 3, 4 và 5 XMR. Đồng thời, anh ta trả hoa hồng 3 XMR. Như vậy, số tiền chi tiêu cộng với số tiền tạo ra và hoa hồng bằng 15 XMR. Hãy thử tính toán các cam kết và xem xét sự khác biệt về số lượng của chúng (hãy nhớ phép toán):

Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định
Ở đây chúng ta thấy rằng để phương trình hội tụ, chúng ta cần tổng của mặt nạ đầu vào và đầu ra bằng nhau. Để làm điều này, ví sẽ tạo ngẫu nhiên x1, y1, y2 và y3, và phần còn lại x2 tính toán như thế này:
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định
Bằng cách sử dụng những mặt nạ này, chúng tôi có thể chứng minh với bất kỳ người xác minh nào rằng chúng tôi không tạo ra nhiều tiền hơn số tiền chúng tôi chi tiêu mà không tiết lộ số tiền. Bản gốc, phải không?

RingCT đầy đủ

Trong các giao dịch RingCT đầy đủ, việc kiểm tra số tiền chuyển phức tạp hơn một chút. Trong các giao dịch này, ví không tính toán lại các cam kết cho đầu vào mà sử dụng những cam kết được tính khi chúng được tạo. Trong trường hợp này, chúng ta phải giả định rằng chúng ta sẽ không còn nhận được chênh lệch về tổng bằng XNUMX nữa mà thay vào đó:
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định
Здесь z - sự khác biệt giữa mặt nạ đầu vào và đầu ra. Nếu chúng ta xem xét zG dưới dạng khóa công khai (trên thực tế nó là như vậy), sau đó z là khóa riêng. Vì vậy, chúng ta biết khóa công khai và khóa riêng tương ứng. Với dữ liệu này trong tay, chúng ta có thể sử dụng nó trong chữ ký vòng MLSAG cùng với các khóa chung của đầu ra được trộn:
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định
Do đó, chữ ký vòng hợp lệ sẽ đảm bảo rằng chúng tôi biết tất cả khóa riêng của một trong các cột và chúng tôi chỉ có thể biết khóa riêng ở hàng cuối cùng nếu giao dịch không tạo ra nhiều tiền hơn số tiền chi tiêu. Nhân tiện, đây là câu trả lời cho câu hỏi “tại sao sự khác biệt về số lượng cam kết không dẫn đến con số XNUMX” - nếu zG = 0, thì chúng ta sẽ mở rộng cột với kết quả đầu ra thực tế.

Làm sao người nhận tiền biết được số tiền đã được gửi cho mình? Ở đây mọi thứ đều đơn giản - người gửi giao dịch và người nhận trao đổi khóa bằng giao thức Diffie-Hellman, sử dụng khóa giao dịch và khóa xem của người nhận và tính toán bí mật chung. Người gửi ghi dữ liệu về số tiền đầu ra, được mã hóa bằng khóa chung này, trong các trường đặc biệt của giao dịch.

Bằng chứng phạm vi

Điều gì xảy ra nếu bạn sử dụng số âm làm số tiền trong cam kết? Điều này có thể dẫn đến việc tạo ra thêm tiền! Kết quả này là không thể chấp nhận được, vì vậy chúng tôi cần đảm bảo rằng số tiền chúng tôi sử dụng không bị âm (tất nhiên là không tiết lộ số tiền này, nếu không thì sẽ có quá nhiều công việc và tất cả đều vô ích). Nói cách khác, chúng ta phải chứng minh rằng tổng nằm trong khoảng [0, 2n - 1].

Để làm điều này, tổng của mỗi đầu ra được chia thành các chữ số nhị phân và cam kết được tính riêng cho từng chữ số. Tốt hơn là hãy xem điều này xảy ra như thế nào bằng một ví dụ.

Giả sử rằng số lượng của chúng tôi nhỏ và vừa với 4 bit (trong thực tế là 64 bit) và chúng tôi tạo ra đầu ra có giá trị 5 XMR. Chúng tôi tính toán cam kết cho từng hạng mục và tổng cam kết cho toàn bộ số tiền:Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác định
Tiếp theo, mỗi cam kết được trộn lẫn với một người thay thế (Ci-2iH) và được ký theo cặp với chữ ký vòng Borromeo (một chữ ký vòng khác), do Greg Maxwell đề xuất vào năm 2015 (bạn có thể đọc thêm về nó đây):
Các giao dịch bí mật trong Monero hoặc cách chuyển những thứ chưa biết đến các điểm đến không xác địnhTổng hợp lại, điều này được gọi là bằng chứng phạm vi và cho phép bạn đảm bảo rằng các cam kết sử dụng số tiền trong phạm vi [0, 2n - 1].

Cái gì tiếp theo?

Trong quá trình triển khai hiện tại, bằng chứng phạm vi chiếm nhiều dung lượng - 6176 byte cho mỗi đầu ra. Điều này dẫn đến các giao dịch lớn hơn và do đó phí cao hơn. Để giảm quy mô giao dịch Monero, các nhà phát triển đang giới thiệu các biện pháp chống đạn thay vì chữ ký Borromeo - một cơ chế chứng minh phạm vi không có cam kết bitwise. Theo một số ước tính, họ có thể giảm kích thước của bằng chứng phạm vi tới 94%. Nhân tiện, vào giữa tháng XNUMX, công nghệ đã thông qua kiểm toán từ Kudelski Security, công ty không tiết lộ bất kỳ thiếu sót đáng kể nào trong bản thân công nghệ cũng như trong quá trình triển khai nó. Công nghệ này đã được sử dụng trong mạng thử nghiệm và với hard fork mới, nó có thể chuyển sang mạng chính.

Đặt câu hỏi của bạn, đề xuất chủ đề cho các bài viết mới về công nghệ trong lĩnh vực tiền điện tử và cũng đăng ký nhóm của chúng tôi trong Facebookđể cập nhật các sự kiện và ấn phẩm của chúng tôi.

Nguồn: www.habr.com

Thêm một lời nhận xét