Nonce bền: ký bằng hai thiết bị trên Solana

·7 phút đọc·Bởi SSP Editorial Team
Ảnh bìa thương hiệu SSP cho bài viết Giải thích Multisig về nonce bền của Solana và ký bằng hai thiết bị

Nonce bền: ký bằng hai thiết bị trên Solana

SSP là ví 2-trên-2. Mọi giao dịch đều cần hai chữ ký: một từ Wallet, tiện ích trình duyệt trên máy tính của bạn, và một từ SSP Key trên điện thoại. Chính thiết kế đó là toàn bộ điểm mấu chốt — kẻ trộm lấy được một thiết bị vẫn không thể chuyển tiền của bạn. Nhưng nó tạo ra một vấn đề rất con người. Máy tính dựng và ký một giao dịch trong một phần nhỏ của giây. Điện thoại có thể phải hai hoặc ba phút sau mới đồng ký, vì một người cần cầm điện thoại lên, xem yêu cầu, và chạm vào phê duyệt.

Trên Solana, khoảng trống đó là một vấn đề. Bài viết này giải thích vì sao, và SSP giải quyết nó như thế nào mà không lưu bất cứ thứ gì mong manh.

Blockhash hết hạn

Mọi giao dịch Solana thông thường đều mang theo một dữ liệu gọi là blockhash gần đây. Nó là dấu vân tay của một khối gần đây trên chuỗi, và làm hai việc cùng lúc. Nó chứng minh giao dịch được tạo gần đây và ngăn cùng một giao dịch đã ký bị phát lại mãi mãi.

Cái bẫy nằm ở từ gần đây. Một blockhash chỉ có hiệu lực trong khoảng 150 khối. Trên Solana khối đến nhanh, nên 150 khối chỉ là khoảng 60 đến 90 giây. Quá khung thời gian đó, mạng từ chối thẳng giao dịch — không phải vì có gì sai với các chữ ký, mà vì blockhash đã cũ.

Bây giờ đặt luồng ký của SSP đối diện với chiếc đồng hồ đó. Wallet dựng giao dịch, gắn một blockhash tươi mới và ký. Sau đó người dùng được thông báo trên điện thoại. Nếu họ trả lời trong vòng 90 giây thì ổn. Nếu họ đang họp, điện thoại ở phòng khác, hoặc chỉ đơn giản muốn đọc giao dịch một cách thong thả, blockhash lặng lẽ chết. Chữ ký của Wallet vẫn hợp lệ về mặt mật mã, nhưng giao dịch mà nó gắn vào giờ chẳng còn giá trị. Tất cả phải dựng lại và ký lại từ đầu.

Với một ví một người ký, ký và phát đi trong một hơi thở, khung 90 giây là rộng rãi. Với một ví 2-trên-2 nơi một con người đứng giữa hai chữ ký, đó là một cuộc đua mà người dùng cứ thua mãi.

Nonce bền là gì

Solana có một câu trả lời tích hợp sẵn cho điều này, và nó có trước SSP: nonce bền. Ý tưởng là thay blockhash hết hạn bằng một giá trị không hết hạn.

Một nonce bền sống trong tài khoản nhỏ của riêng nó trên chuỗi — một tài khoản nonce. Tài khoản này thuộc hệ thống, chỉ giữ 80 byte dữ liệu, và một trong các phần dữ liệu đó chính là giá trị nonce: một kẻ thế vai sống lâu thay cho blockhash. Một giao dịch có thể được dựng để dùng giá trị của tài khoản nonce thay vì một blockhash gần đây. Vì giá trị đó không già đi, giao dịch vẫn hợp lệ trong bao lâu cũng được — phút, giờ, ngày.

Tuy vậy chẳng có gì miễn phí, và một nonce cần một lớp bảo vệ chống phát lại. Lớp bảo vệ đó là một quy tắc: mọi giao dịch dùng nonce bền phải mang một lệnh cụ thể, nonceAdvance, làm lệnh đầu tiên của nó. Khi giao dịch cuối cùng đáp xuống, nonceAdvance tiêu thụ giá trị nonce hiện tại và xoay tài khoản sang một giá trị mới. Nonce là dùng một lần. Giao dịch bạn ký hôm thứ Hai có thể chờ đến thứ Tư, nhưng một khi nó thực thi, đúng nonce đó không bao giờ có thể ủy quyền cho một giao dịch khác. Nếu bạn muốn đọc mô tả của chính Solana về cơ chế này, tài liệu về nonce giao dịch bền là nguồn gốc.

Vậy nên một nonce bền mua thời gian mà không mua rủi ro phát lại. Đó đúng là tính chất mà một ví hai thiết bị cần.

Cú xoay của SSP: một tài khoản nonce bạn không bao giờ phải lưu

Một tài khoản nonce bền vẫn là một tài khoản, và trên Solana mọi tài khoản đều có một địa chỉ. Cách tiếp cận ngây thơ là tạo một tài khoản nonce ở một địa chỉ ngẫu nhiên nào đó, rồi cẩn thận ghi nhớ địa chỉ ấy mãi mãi — viết nó vào bộ nhớ cục bộ của ví, sao lưu, hy vọng nó sống sót qua một lần đặt lại thiết bị. Đó là thêm một thứ mong manh nữa để mất.

SSP từ chối lưu nó. Thay vào đó, chương trình multisig của SSP cho Solana có một lệnh tên là provision_nonce, và nó tạo tài khoản nonce ở một địa chỉ được suy ra. Địa chỉ đến từ một công thức tất định: nó được tính từ chính tài khoản multisig, từ nhãn văn bản cố định "nonce", và từ Chương trình Hệ thống của Solana. Cùng một multisig đầu vào, cùng một địa chỉ nonce đầu ra — mỗi lần đều thế.

Điều này quan trọng vì những gì phần còn lại của loạt bài này đã thiết lập. Multisig của SSP cho Solana suy ra địa chỉ multisig từ tập thành viên, và suy ra địa chỉ kho từ multisig. (Nếu các phép suy ra này còn mới với bạn, bài multisig tự khởi tạo của Solana đi qua từng cái.) Tài khoản nonce giờ gia nhập cùng một gia đình: nó cũng là một phép suy ra thuần túy. Bất kỳ thiết bị SSP nào — máy tính của bạn, điện thoại của bạn, một ví vừa cài lại — đều có thể tính lại địa chỉ tài khoản nonce từ đầu. Không có địa chỉ bí mật nào để mất, vì không có địa chỉ nào được lưu cả.

Vài lưu ý thực tế nảy sinh từ thiết kế. provision_nonce là không cần cấp phép (permissionless): bất kỳ ai cũng có thể trả khoản thuê nhỏ (khoảng 0,00144 SOL) để khiến tài khoản nonce tồn tại, và người trả trở thành cơ quan ban đầu của nó — trên thực tế là paymaster của relay SSP. Cơ quan đó về sau có thể được giao lại mà địa chỉ của tài khoản không bao giờ đổi, nên địa chỉ bạn suy ra hôm nay vẫn đúng kể cả khi khóa vận hành phía sau nó được xoay. Vị trí của tài khoản nonce neo vào multisig của bạn, không neo vào người tình cờ cấp vốn cho nó.

Luồng ký điềm tĩnh

Ghép các mảnh lại với nhau và cuộc đua biến mất. Wallet dựng một giao dịch dùng tài khoản nonce được suy ra thay cho một blockhash gần đây, đặt nonceAdvance làm lệnh đầu tiên và ký. Một thông báo đẩy đi tới điện thoại. Người dùng phê duyệt bất cứ khi nào họ sẵn sàng — không có chiếc đồng hồ nào tích tắc chống lại họ. SSP Key thêm chữ ký thứ hai, và giao dịch đã ký đầy đủ được phát đi. Vì nó được dựng trên một nonce bền, nó vẫn hợp lệ, và nonceAdvance xoay nonce để giao dịch không thể bị phát lại.

Có thêm một ràng buộc đáng nêu tên. Solana giới hạn một giao dịch đơn lẻ ở 1232 byte. Một giao dịch multisig phải nhét danh sách thành viên và các lệnh chi tiêu vào trong giới hạn đó, đó là lý do SSP dùng định dạng giao dịch có phiên bản gọn của Solana và truyền dữ liệu chặt nhất có thể. Nonce bền không thay đổi ngân sách kích thước; nó chỉ thay đổi ngân sách thời gian.

Suy ra tất cả, không lưu gì cả

Đây là sợi chỉ chạy xuyên suốt cả loạt bài Multisig trên Solana, theo cách SSP. Địa chỉ multisig, kho giữ tiền của bạn, và giờ là tài khoản nonce cho hai thiết bị thời gian để đồng thuận — không cái nào là một giá trị mà SSP phải lưu và bảo vệ. Mỗi cái được tính lại theo yêu cầu từ những đầu vào mà ví vốn đã biết. Có ít thứ hơn để sao lưu, ít thứ hơn có thể rò rỉ, và ít thứ hơn có thể trục trặc khi đặt lại thiết bị. Những thiết kế multisig dựa vào ý tưởng này, như cách tiếp cận multisig một người ký của SSP, thường là những thiết kế có ít bộ phận chuyển động dễ hỏng nhất.

Một ghi chú kết thúc với cùng tinh thần trung thực như phần còn lại của loạt bài: chương trình multisig của SSP cho Solana hiện chỉ được triển khai trên devnet, và đang chờ một cuộc kiểm toán bảo mật bên ngoài trước bất kỳ lần phát hành mainnet nào. Thiết kế được mô tả ở đây — gồm cả provision_nonce và tài khoản nonce được suy ra của nó — là có thật và đọc được trong chương trình mã nguồn mở, nhưng nó chưa phải là hạ tầng sản xuất. Nếu chính mô hình hai thiết bị của SSP còn mới với bạn, bài giới thiệu multisig 2-trên-2 là gì là nơi để bắt đầu.

Nonce bền là một mảnh nhỏ và cũ trong hệ thống đường ống của Solana. Đóng góp của SSP là biến địa chỉ của nó thành thêm một thứ bạn không bao giờ phải nhớ.

Chia sẻ bài viết này

Bài viết liên quan