#dusk $DUSK @Dusk
Tài liệu về giao dịch Moonlight có một mục mà hầu hết mọi người coi như phần “mặc định” — danh sách đầy đủ các thuộc tính bảo mật mà whitepaper chính thức nêu ra. Có bốn thuộc tính, và mục cuối cùng thú vị hơn vẻ bề ngoài.
Các thuộc tính bảo mật của Moonlight: Tính không thể giả mạo (được đảm bảo bằng chữ ký số), ngăn chặn chi tiêu kép (mạng kiểm tra số dư trước khi chấp nhận), tính không thể sửa đổi (chữ ký bao phủ băm của toàn bộ các trường giao dịch, nên mọi thay đổi đều làm nó vô hiệu), và phòng chống tấn công phát lại (được đảm bảo bằng nonce).
Đáng suy nghĩ về việc nonce thực sự làm gì ở đây.
Tấn công phát lại xảy ra khi ai đó lấy một giao dịch đã ký hợp lệ và gửi lại lần nữa. Chữ ký là thật — chính bạn là người đã ký — nhưng bạn đã không cho phép việc gửi đúng phiên bản cụ thể này. Nếu không có cơ chế chống phát lại, một giao dịch hợp lệ được gửi một lần có thể bị bất kỳ ai đã bắt được nó phát lại vô hạn.
Nonce giải quyết vấn đề đó. Mỗi tài khoản Moonlight có một nonce hiện tại — một bộ đếm tăng lên mỗi khi một giao dịch được mạng chấp nhận. Khi bạn gửi một giao dịch, trường nonce phải chính xác bằng current_nonce + 1. Mạng sẽ từ chối mọi thứ mà phép kiểm tra này không khớp. Sau khi được chấp nhận, nonce của tài khoản sẽ tăng lên, vì vậy cùng một giao dịch không thể được phát lại.
Không nói đây là điều bất thường. Mọi chuỗi nghiêm túc dựa trên tài khoản đều dùng nonce đúng cho mục đích này. Ethereum cũng làm tương tự.
Nhưng cũng không nói là đơn giản. Nonce đang thực hiện một nhiệm vụ riêng biệt so với chữ ký — chữ ký chứng minh việc ủy quyền, còn nonce chứng minh rằng phiên bản cụ thể của giao dịch này là mới. Bạn cần cả hai, và chúng đang bao phủ các vector tấn công khác nhau.
Điều tôi chưa kịp làm rõ là nonce của Moonlight là toàn cục theo tài khoản hay theo từng hợp đồng — việc gọi một hợp đồng và gửi một khoản chuyển trực tiếp từ cùng một tài khoản có dùng chung một bộ đếm nonce hay mỗi loại tương tác lại có chuỗi nonce riêng. @Dusk
$DUSK #dusk
Tài liệu về giao dịch Moonlight có một mục mà hầu hết mọi người coi như phần “mặc định” — danh sách đầy đủ các thuộc tính bảo mật mà whitepaper chính thức nêu ra. Có bốn thuộc tính, và mục cuối cùng thú vị hơn vẻ bề ngoài.
Các thuộc tính bảo mật của Moonlight: Tính không thể giả mạo (được đảm bảo bằng chữ ký số), ngăn chặn chi tiêu kép (mạng kiểm tra số dư trước khi chấp nhận), tính không thể sửa đổi (chữ ký bao phủ băm của toàn bộ các trường giao dịch, nên mọi thay đổi đều làm nó vô hiệu), và phòng chống tấn công phát lại (được đảm bảo bằng nonce).
Đáng suy nghĩ về việc nonce thực sự làm gì ở đây.
Tấn công phát lại xảy ra khi ai đó lấy một giao dịch đã ký hợp lệ và gửi lại lần nữa. Chữ ký là thật — chính bạn là người đã ký — nhưng bạn đã không cho phép việc gửi đúng phiên bản cụ thể này. Nếu không có cơ chế chống phát lại, một giao dịch hợp lệ được gửi một lần có thể bị bất kỳ ai đã bắt được nó phát lại vô hạn.
Nonce giải quyết vấn đề đó. Mỗi tài khoản Moonlight có một nonce hiện tại — một bộ đếm tăng lên mỗi khi một giao dịch được mạng chấp nhận. Khi bạn gửi một giao dịch, trường nonce phải chính xác bằng current_nonce + 1. Mạng sẽ từ chối mọi thứ mà phép kiểm tra này không khớp. Sau khi được chấp nhận, nonce của tài khoản sẽ tăng lên, vì vậy cùng một giao dịch không thể được phát lại.
Không nói đây là điều bất thường. Mọi chuỗi nghiêm túc dựa trên tài khoản đều dùng nonce đúng cho mục đích này. Ethereum cũng làm tương tự.
Nhưng cũng không nói là đơn giản. Nonce đang thực hiện một nhiệm vụ riêng biệt so với chữ ký — chữ ký chứng minh việc ủy quyền, còn nonce chứng minh rằng phiên bản cụ thể của giao dịch này là mới. Bạn cần cả hai, và chúng đang bao phủ các vector tấn công khác nhau.
Điều tôi chưa kịp làm rõ là nonce của Moonlight là toàn cục theo tài khoản hay theo từng hợp đồng — việc gọi một hợp đồng và gửi một khoản chuyển trực tiếp từ cùng một tài khoản có dùng chung một bộ đếm nonce hay mỗi loại tương tác lại có chuỗi nonce riêng. @Dusk
$DUSK #dusk

