
Cho đến nay trong loạt bài, chúng ta đã bao quát multisig là gì và ngưỡng nào nên chọn. Cả hai bài mô tả hành vi của một ví multisig — m trong n khóa ký, chain kiểm tra ngưỡng, tiền di chuyển. Cả hai chưa nói nhiều về việc ví thực sự được ráp lại như thế nào phía dưới. Bài này là vậy.
Phiên bản ngắn: khi SSP tạo ví cho bạn, nó không chỉ tạo ngẫu nhiên hai khóa rồi xong. Nó tạo chúng theo một chuẩn được lập tài liệu gọi là BIP48, để chiếc ví kết quả có khả năng tương tác, có thể phục hồi trong phần mềm khác ngoài SSP, và có thể kiểm tra trên chuỗi một cách dự đoán được. Đây là bài giải thích BIP48 là gì, vì sao nó tồn tại, và vì sao "ví này dùng BIP48" là một trong những câu vừa-nhàm-vừa-quan-trọng nhất trong multisig.
TL;DR
- Đường dẫn dẫn xuất là con đường từ một seed phrase duy nhất đến một khóa cụ thể (và địa chỉ) trong ví. Các đường dẫn tiêu chuẩn như BIP44 / BIP48 cho phép phần mềm ví khác nhau đi đến cùng các khóa từ cùng một seed.
- BIP48 là spec dành cho ví multisig nói riêng. Nó nói: đây là đường dẫn dẫn xuất tắc cho
mkhóa tạo nên ví 2-of-3, 3-of-5, v.v., xuyên qua các kiểu output script chính. - SSP dùng BIP48. Tức là hai seed do ví SSP của bạn tạo ra có thể dùng từ bất kỳ ví nào tương thích BIP48 khác (Sparrow, Electrum, descriptors của Bitcoin Core) — không chỉ từ chính SSP.
- BIP48 sửa một vấn đề mà spec multisig trước đó (BIP45) có: nó tách sạch sẽ các khóa cho các loại script khác nhau (legacy, P2SH-wrapped SegWit, native SegWit, Taproot) để một seed phrase có thể chứa tất cả mà không va chạm.
- Bạn không cần xử lý thủ công các đường dẫn dẫn xuất để dùng SSP. Bạn nên biết là chúng tồn tại để "phục hồi ví" không có cảm giác phép thuật — và để bạn hiểu seed của bạn thật sự ánh xạ tới cái gì.
Tour 30 giây qua các đường dẫn dẫn xuất
Trước khi BIP48 có ý nghĩa, máy móc phía dưới đã phải tồn tại. Máy móc đó là BIP32: ví hierarchical deterministic (HD). Ý tưởng cốt lõi là một khóa chủ — dẫn xuất từ một seed phrase — có thể tạo ra một cây vô hạn các khóa con, một cách tất định. Đi một con đường cụ thể qua cây và bạn luôn tới cùng một khóa con. Đi một con đường khác và bạn tới khóa khác.
Đường dẫn trông thế này:
m / purpose' / coin_type' / account' / change / index
Ví dụ, đường dẫn BIP44 m / 44' / 0' / 0' / 0 / 0 đến địa chỉ nhận đầu tiên của tài khoản đầu tiên của Bitcoin theo quy tắc BIP44. Đổi coin_type thành 60' và bạn ở không gian Ethereum; đổi purpose thành 84' và bạn ở không gian BIP84 (native SegWit); và vân vân. Dấu ngoặc đơn (') là dẫn xuất hardened — đứa con không thể đảo ngược về cha mẹ. Mỗi đoạn sau master là một số 32-bit, được phân hoạch theo quy ước.
Đây là phần thường bị bỏ qua: đường dẫn là metadata, không phải bí mật. Bất kỳ ai biết đường dẫn của bạn và khóa riêng (hoặc khóa mở rộng) của bạn đều có thể dẫn xuất các địa chỉ giống nhau. Đường dẫn nói cho ví nhìn vào đâu. Seed nói cho ví ở đó có gì.
Để ôn lại thân thiện chính seed là gì, bài seed phrase best practices là điều kiện tiên quyết.
BIP48 quy định gì
BIP48 ở tại m / 48' / coin_type' / account' / script_type' / change / index. Phần thêm thú vị là script_type' — đoạn áp chót.
Đoạn đó mã hóa loại output multisig mà đường dẫn phục vụ:
0'→ P2SH (multisig legacy)1'→ P2SH-wrapped SegWit (P2WSH-in-P2SH)2'→ native SegWit (P2WSH)3'→ multisig tương đương Taproot (theo các sửa đổi BIP48)
Điều này quan trọng vì trong thực tế, cùng một tập cosigners m-of-n tạo ra các địa chỉ khác nhau trên chuỗi tùy thuộc kiểu output script nào được dùng. Không có BIP48, một ví có thể âm thầm dùng một loại, phần mềm phục hồi giả định loại khác, và kết quả là hai ví trông như lẽ ra phải dẫn xuất cùng các đồng tiền — nhưng không, vì chúng tính các địa chỉ khác nhau.
BIP48 cũng cố định đoạn purpose' ở 48', nên các đường dẫn multisig không thể va chạm với đường dẫn single-sig BIP44/BIP49/BIP84. Một seed có thể chứa một ví single-sig ở BIP84 và một ví multisig 2-of-2 ở BIP48, không can thiệp lẫn nhau. Mỗi cái sống trong cây con riêng.
Ngoài đường dẫn, BIP48 còn quy định cách các khóa công khai của cosigner ("xpubs") phải được sắp xếp khi xây output multisig. Quy tắc tắc là sắp xếp lexicographic các khóa công khai trước khi đưa vào redeem script. Điều đó loại bỏ sự mơ hồ — mỗi ví tuân thủ BIP48 xây từ cùng các xpubs đều tính cùng một địa chỉ. Không có quy tắc đó, hai ví có thể kết hợp cùng các khóa theo thứ tự khác nhau và đáp xuống các địa chỉ khác nhau với cùng quy tắc redeem.
Nếu bạn muốn đọc spec nguyên văn, nó sống trong repo Bitcoin BIPs (bips/bip-0048.mediawiki).
SSP dùng BIP48 trong thực tế thế nào
Khi bạn cài đặt một ví SSP, hai seed phrase được tạo — một trên tiện ích trình duyệt, một trên ứng dụng di động SSP Key. Mỗi seed phrase tương ứng với một khóa riêng chủ. Từ mỗi chủ, SSP dẫn xuất đường dẫn BIP48 cho chain liên quan (Bitcoin, Ethereum, Flux và phần còn lại của tập SSP hỗ trợ) ở script_type' = 2' (native SegWit trên Bitcoin; các dạng tắc tương đương trên các chain khác khi áp dụng được).
Sau đó, xpubs của cả hai người ký được trao đổi. Mỗi bên giờ có cùng tập hai xpubs, được sắp xếp theo lexicographic theo BIP48. Từ cặp đó, mỗi bên độc lập tính cùng một địa chỉ. Hai nửa không bao giờ chia sẻ một khóa riêng — chỉ khóa công khai di chuyển giữa các thiết bị.
Khi bạn nhận tiền, địa chỉ hiển thị là địa chỉ dẫn xuất BIP48 tính từ cả hai xpubs. Khi bạn chi, mỗi thiết bị ký cùng một giao dịch dưới khóa riêng của nó. Redeem script trên chuỗi tham chiếu cả hai khóa công khai; mạng kiểm tra cả hai chữ ký. Đó là toàn bộ giao thức.
Lý do điều này quan trọng trong kịch bản phục hồi: nếu SSP, với tư cách một sản phẩm, biến mất vào ngày mai, bạn vẫn nắm hai seed phrase tuân thủ BIP48. Tải cả hai vào Sparrow (hoặc bất kỳ ví nào khác có khả năng multisig hỗ trợ các đường dẫn BIP48 mà SSP dùng) sẽ tái dựng cùng ví, ở cùng các địa chỉ, với khả năng chi tiêu đầy đủ. Ví không sống bên trong SSP — nó sống trên chuỗi, và seed cộng với spec BIP48 là đủ để chạm tới nó từ bất cứ đâu.
Tính chất đó là phần lớn lý do vì sao bài self-custody-without-cold-storage coi một ví SSP 2-of-2 là ví nghiêm túc chứ không phải một thứ tò mò pha vị custodial. Nó có thể phục hồi từ các chuẩn mở.
Vì sao BIP48 hơn BIP45 (và không phải BIP44)
Spec multisig trước đó là BIP45. Là một thử trung thực: m / 45' / cosigner_index' / change / index, với cosigner_index' mã hóa bạn là cosigner thứ mấy trong ví. Nhìn lại, nó có hai vấn đề.
Thứ nhất, cosigner_index' nướng thứ tự vào trong chính đường dẫn. Điều đó có nghĩa thứ tự thêm người ký ảnh hưởng đến dẫn xuất, làm cho setup chung dễ gãy — sai thứ tự và bạn dẫn xuất các địa chỉ khác với cosigner của mình. BIP48 giải quyết bằng cách loại hoàn toàn cosigner index khỏi đường dẫn và để cho việc sắp xếp lexicographic các khóa công khai xử lý.
Thứ hai, BIP45 không tách theo loại script. Cùng một đường dẫn sẽ được tái sử dụng dù ví dùng multisig P2SH legacy hay multisig SegWit-wrapped. Điều đó tạo cùng vấn đề va chạm-địa-chỉ-nhưng-không-phải-cùng-đồng-tiền mô tả ở trên.
BIP44, spec HD tổng quát hơn, chưa bao giờ tuyên bố bao quát multisig. Cố nhồi BIP44 với đường dẫn multisig tạo ra các xung đột riêng. BIP48 là bản vá rõ ràng: một số purpose chuyên biệt, một slot script-type rõ, và việc sắp xếp khóa tất định. Hôm nay phần lớn ví multisig hiện đại hội tụ về nó; đó là chuẩn de facto.
Để biết câu chuyện sâu hơn cách điều này kết nối với chương tiếp theo của multisig — gộp Schnorr, nơi nhiều chữ ký nén thành một — bài tiếp theo của loạt này, Schnorr signatures and multisig aggregation, tiếp tục mạch.
Điều này có nghĩa gì với khả năng tương tác
Phép thử sạch nhất cho câu "ví multisig này có thực sự self-custodial không?" là: tôi có thể phục hồi nó mà không cần phần mềm của ví không? Nếu câu trả lời là có — dùng seed có tài liệu, đường dẫn dẫn xuất có tài liệu, và công cụ chuẩn — thì ví thực sự là của bạn. Nếu câu trả lời là không, ví có những yếu tố custodial ẩn.
Sự tuân thủ BIP48 của SSP là điều cho phép chúng ta trả lời có. Seed phrase là BIP39 (mnemonic chuẩn), dẫn xuất là BIP48, cách xây địa chỉ là BIP48-tắc. Bất kỳ ví nào nói cùng các chuẩn này đều có thể tái dựng ví.
Đó là lý do phần giới thiệu Meet SSP Wallet khung SSP là "self-custody với multisig 2-of-2" chứ không phải một dịch vụ được quản lý. Các chuẩn phía dưới là lý do khung đó là trung thực.
Điều này có nghĩa gì với bạn
Ba điều rút ra:
- Bạn không phải thuộc đường dẫn để dùng SSP. Con số
m/48'/0'/0'/2'/0/0không phải thứ một người dùng bình thường nên gõ. Nhưng biết nó tồn tại là điều khiến "tôi có thể phục hồi ví này mà không cần SSP" thành tuyên bố thực thay vì marketing. - Hai seed của bạn có thể tương tác. Nếu bạn cần phục hồi vào một ví multisig bên thứ ba, BIP48 cộng với hai seed BIP39 cộng với
coin_typecủa chain là công thức. Checklist self-custody đặt tên điều này là bước diễn tập không phải tự nhiên. - Một ví multisig không dùng BIP48 (hoặc tương tự) đáng để chất vấn. Nếu một sản phẩm không thể nói chính xác địa chỉ được dẫn xuất từ khóa của bạn ra sao, đó không phải self-custody — đó là custody với các bước phụ. Tuân thủ chuẩn là điều khiến tuyên bố "chìa khóa của bạn, đồng tiền của bạn" có thể xác minh được.


