Tác giả: Jonas Nick
Nguồn: https://github.com/BlockstreamResearch/scriptless-scripts/blob/master/md/multi-hop-locks.md
"Khóa đa nhảy" đề cập đến các giao thức cho phép hai bên trao đổi tiền và bằng chứng thanh toán mà không cần thủ công tài trợ cho các đầu ra đa chữ ký. Nghĩa là, hai bên này sẽ được kết nối thông qua các nút trung gian có các đầu ra đa chữ ký chung. Hiện tại, các khóa đa nhảy dựa trên hàm băm mật mã đang được sử dụng để chuyển tiếp trong giao thức Mạng Sét.
Các khóa đa nhảy dựa trên "kịch bản vô hình (scriptless script)" đã xuất hiện trong một bài đăng trên nhóm thư mimblewimble, sau đó được định nghĩa chính thức trong tài liệu "Các khóa đa nhảy bảo mật riêng tư để đạt được khả năng mở rộng và tương tác của blockchain". Bằng cách sử dụng kịch bản vô hình, kích thước giao dịch cuối cùng nhỏ hơn và gần với các giao dịch thông thường, do đó có thể cải thiện tính riêng tư. Quan trọng hơn, nó có thể che giấu sự liên kết giữa các khoản thanh toán, nghĩa là các nút tham gia vào một khóa đa nhảy sẽ không thể xác định liệu họ có nằm trên cùng một đường dẫn hay không, tức là họ không thể biết liệu họ đang chuyển tiếp cùng một giao dịch hay không (trừ khi phân tích thời gian và số tiền). Các cuộc tấn công liên kết thanh toán trở nên đặc biệt nguy hiểm khi đầu và cuối của đường dẫn chuyển tiếp được kiểm soát bởi cùng một người, vì họ sẽ biết nguồn gốc và đích của một khoản thanh toán. Ngoài ra, các khóa đa nhảy kịch bản vô hình cũng hỗ trợ tối ưu hóa bằng chứng thanh toán và "thanh toán đa đường dẫn nguyên tử" (xem bên dưới).
Ký hiệu
Pij
là khóa công khai MuSig2 được tổng hợp của người dùngi
vàj
. Tài liệu MuSig2 cung cấp thêm chi tiết.T := t*G
, trong đót
là một số ngẫu nhiên được chọn, được gọi là "giá trị bí mật bộ điều hợp", vàT
được gọi là "điểm bộ điều hợp".psig(i, m, T)
biểu thị chữ ký mảnh của người kýi
trên thông điệpm
sử dụng điểm bộ điều hợpT
, chữ ký này có thể được tổng hợp thành một chữ ký MuSig2 2-of-2. Vì lý do đơn giản, người ký còn lại không được thể hiện trong ký hiệu; thường là nút mài
có kênh với, sẽ được xác định bởi ngữ cảnh. Nó được gọi là một "mảnh" vì nó cần được tổng hợp với mảnh chữ ký của bên kia để trở thành một chữ ký Schnorr hợp lệ. Ngoài ra, nó cũng được gọi là một chữ ký mảnh "sẵn sàng" vì nó vẫn cần thêm giá trị bí mật bộ điều hợpt
để trở thành một chữ ký mảnh thông thường.sig(m, T) := psig(i, m, T) + psig(j, m, T) + t
là chữ ký Schnorr hoàn chỉnh cuối cùng từ người dùngi
vàj
.
Giao thức
Trong giai đoạn khởi tạo, người nhận thanh toán trước tiên chọn ngẫu nhiên một z
và gửi z*G
cho người gửi thanh toán. Người gửi sẽ thiết lập một chuỗi các khóa đa nhảy để đảm bảo rằng một khoản thanh toán thành công sẽ tiết lộ z
cho họ và chỉ cho họ. Kiến thức về z
có thể trở thành một bằng chứng thanh toán, tương tự như "hình ảnh ngược" trong Mạng Sét hiện tại (xem chi tiết bên dưới).
Chúng tôi sẽ mô tả luồng thanh toán bắt đầu từ bên trái của người gửi, đi qua các nút trung gian, đến bên phải của người nhận.
Sau đó, người gửi sẽ thiết lập một bộ ba (Li, yi, Ri)
cho mỗi nút i
, bao gồm khóa trái Li
và khóa phải Ri
:
- Mỗi
yi
là một số nguyên ngẫu nhiên được chọn đều. - Khóa trái
L0
của chính người gửi được đặt thànhz*G
, là giá trị mà họ nhận được từ người nhận trước đó. - Đối với khóa phải của nút
0 <= i < n
và khóa tráiLj
của nútj = i + 1
, người gửi đặtRi <- Li + yi*G
vàLj <- Ri
(xem hình trên) (Lưu ý: trong Mạng Sét, người gửi không trực tiếp gửi(Li,yi,Ri)
cho các nút trung gian: họ sử dụng các gói dữ liệu hành lang để mang các giá trị này, đồng thời không để các nút trung gian biết danh tính của họ).
Trong giai đoạn cập nhật, các nút liền kề sẽ thêm một đầu ra đa chữ ký vào giao dịch ngoài chuỗi của họ, giống như việc thêm một đầu ra HTLC vào giao dịch trong Mạng Sét hiện tại. Chúng tôi gọi loại đầu ra kịch bản vô hình mới này là "Hợp đồng Khóa Thời Gian Điểm (PTLC)". Giống như HTLC, PTLC cũng có một điều kiện thời gian để cho phép nút bên trái thu hồi tiền của mình nếu thanh toán thất bại. Tuy nhiên, khác với HTLC, PTLC chỉ là một đầu ra MuSig2 2-of-2 thông thường, và khóa băm chỉ được thêm vào ngầm định khi nhận được một mảnh chữ ký (xem bên dưới để biết chi tiết). Vì mục đích minh họa, chúng tôi giả định sử dụng kênh dựa trên eltoo, có nghĩa là các bên có trạng thái đối xứng và không cần hủy bỏ.
Nếu thanh toán không quá hạn, tiền trong đầu ra PTLC được chia sẻ bởi hai nút sẽ được nút bên phải rút. Do đó, nút bên trái i
tạo một giao dịch txj
để tiêu thụ PTLC đó và gửi tiền đến một đầu ra được kiểm soát bởi nút bên phải j
. Giả sử rằng vòng trao đổi các giá trị nonce cần thiết cho giao thức chữ ký MuSig2 đã xảy ra sớm hơn ở một thời điểm thuận tiện hơn cho cả hai bên (ví dụ: khi thiết lập một kết nối), do đó vòng trao đổi này sẽ không xảy ra trong quá trình thanh toán quan trọng.
Sau khi nhận được thông báo về PTLC mới, nút bên phải j
sẽ tạo giao dịch txj
và chữ ký mảnh psig(j,txj,Lj)
cho txj
. Nút bên trái sẽ xác minh chữ ký mảnh này, sau đó gửi chữ ký mảnh của mình đối với txj
cho nút bên phải trong hai trường hợp sau:
- Nút bên trái là người gửi.
- Nút bên trái
i
đã nhận được chữ ký mảnhpsig(i-1,txi,T-yi*G)
đối vớitxi
từ nút trướci-1
. Kết hợp với chữ ký mảnh vừa nhận từ nút bên phải, nút bên trái có thể lưu giữ, và khi nút bên phải tiêu thụ tiền, nút bên trái có thể mở khóa trái bằngtxi
, như minh họa trên hình.
Do đó, giai đoạn cập nhật bắt đầu từ cặp nút bên trái nhất và tiếp tục đến nhóm nút bên phải nhất. Sau khi nhận được chữ ký mảnh từ nút bên trái, nút bên phải có thể nhanh chóng hoàn thành chữ ký sau khi biết giá trị bí mật của khóa trái của mình. Để giảm tổng số vòng trao đổi, giai đoạn khởi tạo và cập nhật có thể được kết hợp (ví dụ: sử dụng các gói dữ liệu hành lang trong Mạng Sét).
Giai đoạn thanh toán bắt đầu khi người nhận nhận được chữ ký mảnh từ nút bên trái của mình. Các khóa đa nhảy được thiết lập bởi người gửi, người nhận có thể thêm giá trị bí mật z
của mình vào chữ ký mảnh của nút bên trái, sau đó thêm chữ ký mảnh của mình vào kết quả. Cuối cùng, họ có thể nhận được một chữ ký hợp lệ đối với giao dịch của nút bên phải (người nhận). Lúc này, nút bên phải có thể phát sóng giao dịch và thanh toán trên chuỗi (nếu nút bên trái biến mất hoặc cố gắng lừa đảo).
Sau khi biết chữ ký giao dịch, nút bên trái có
sig(tx,T) - psig(i,tx,Ri) - psig(j,tx,Lj) = yj
Hoặc, nút bên phải có thể trực tiếp gửi giá trị bí mật yj
cho nút bên trái, sau đó yêu cầu cập nhật giao dịch cam kết (dựa trên LN-penalty) hoặc giao dịch thanh toán (dựa trên eltoo), từ đó loại bỏ PTLC, sau đó đầu ra của nút bên trái sẽ giảm đi số tiền thanh toán, trong khi đầu ra của nút bên phải sẽ tăng lên số tiền thanh toán. Nếu nút bên trái không cập nhật theo, nút bên phải vẫn có thể phát sóng giao dịch của mình trước khi PTLC hết hạn.
Dù thế nào, chỉ cần người nhận lĩnh nhận được khoản thanh toán, nút bên trái sẽ biết được giá trị bí mật của khóa hướng về phải, sau đó có thể tính toán giá trị bí mật của khóa hướng về trái của mình bằng cách trừ đi yi
, sau đó tạo ra chữ ký Schnorr cuối cùng cho giao dịch của chính mình. Quá trình này sẽ xảy ra trên mỗi nút cho đến khi đến người gửi, người đó sẽ biết bằng chứng thanh toán z
để hoàn thành việc thanh toán.- Trong giai đoạn cập nhật, họ sẽ nhận được Bitcoin từ các nút đối tác ở bên trái: họ chưa gửi bất cứ thứ gì, vì vậy động lực duy nhất là họ sẽ nhận được phí chuyển tiếp
- Trong giai đoạn quyết toán, họ đã gửi Bitcoin cho nút đối tác ở bên phải của họ: bây giờ, họ có động lực để chuyển lại bằng chứng thanh toán để nhận được thanh toán đến