Nonce là viết tắt của “Number used once” (Số chỉ dùng một lần). Trong lĩnh vực mật mã và các giao thức truyền thông, nonce là một số ngẫu nhiên hoặc giả ngẫu nhiên được sinh ra để đảm bảo tính duy nhất cho quá trình truyền thông. Các thuộc tính cốt lõi của nonce gồm:
• Tính duy nhất: Đúng như tên gọi, số này chỉ sử dụng một lần duy nhất trong một phiên giao tiếp mã hóa nhất định và không bao giờ lặp lại.
• Không thể dự đoán: Trong ngữ cảnh mật mã, nonce phải là số ngẫu nhiên để ngăn kẻ tấn công dự đoán giá trị của nó.
Trong cơ chế Proof of Work (PoW) của Bitcoin, nonce là biến duy nhất mà thợ đào có thể tự điều chỉnh trong quá trình tính toán hàm băm. Thợ đào không thể thay đổi dữ liệu giao dịch; họ phải liên tục thử các giá trị nonce khác nhau và tính lại hàm băm mỗi lần. Khi thợ đào tìm được một nonce tạo ra hàm băm khối đáp ứng mức độ khó yêu cầu, nonce đó chính là bằng chứng công việc.
Quá trình này giống như mua vé số: dữ liệu khối là tên của bạn, còn nonce là số ngẫu nhiên bạn chọn. Bạn cứ đổi số (nonce) cho đến khi trúng (đáp ứng độ khó hàm băm).
Trong Ethereum, nonce có hai chức năng chính, phổ biến nhất là nonce của tài khoản:
Mục đích chủ yếu của nonce là tăng cường bảo mật và tính toàn vẹn cho hệ thống:
• Ngăn tấn công phát lại: Đây là chức năng căn bản nhất của nonce. Kẻ tấn công có thể chặn các thông điệp hợp lệ và cố ý gửi lại để truy cập trái phép. Nonce đảm bảo rằng, kể cả khi bị chặn lại, máy chủ sẽ từ chối yêu cầu vì số đó đã hết hạn.
Điều này giống như số seri trên tấm séc. Nếu ai đó rút tiền bằng séc số #001, ngân hàng sẽ vô hiệu hóa số đó. Dù ai đó sao chép tấm séc, cũng không thể rút tiền lần nữa.
• Đảm bảo tính mới của dữ liệu: Việc sử dụng nonce giúp bên nhận xác minh dữ liệu được tạo ra theo thời gian thực, không phải là phát lại thông tin cũ. Điều này ngăn kẻ tấn công sử dụng bản ghi phiên trước để giả mạo danh tính.
• Tăng tính không thể dự đoán: Nonce bổ sung biến số vào quy trình mã hóa, khiến việc phân tích mẫu và tấn công hệ thống khó hơn nhiều.
Dựa vào phương pháp sinh và nhu cầu ứng dụng, nonce chủ yếu chia thành hai loại:
• Nonce ngẫu nhiên: Sinh ra bằng bộ tạo số giả ngẫu nhiên an toàn mật mã (CSPRNG), có độ hỗn loạn cao, khó dự đoán. Thường dùng trong chữ ký số và các thuật toán mã hóa tiên tiến.
• Nonce tuần tự: Sinh ra bằng cách tăng dần một bộ đếm. Dù kém ngẫu nhiên hơn, nhưng đảm bảo tuyệt đối tính duy nhất và phù hợp cho các cơ chế xác thực.
Nonce được ứng dụng rộng rãi—từ duyệt web hàng ngày, giao dịch tiền điện tử đến các giao thức bảo mật và công nghệ mới nổi. Logic cốt lõi của nonce luôn xoay quanh tính duy nhất và không thể dự đoán.
• Quản lý danh tính và xác thực: Trong xác thực HTTP Digest, đăng nhập một lần (SSO), xác thực hai yếu tố (2FA), nonce được dùng để xác minh danh tính người dùng và đảm bảo tính xác thực của yêu cầu.
• Giao thức mật mã và chữ ký số:
◦ Trong quy trình bắt tay SSL/TLS, máy khách và máy chủ trao đổi nonce để xác thực danh tính.
◦ Trong các thuật toán như AES-GCM, nonce đóng vai trò là Initialization Vector (IV), đảm bảo cùng một bản rõ không tạo ra cùng một bản mã.
• Blockchain và sổ cái phân tán
Đây là ứng dụng nổi bật nhất của nonce hiện nay, giải quyết hai vấn đề: “ai được ghi nhận giao dịch” và “thứ tự giao dịch”.
Ví dụ, trong khai thác Proof of Work (PoW): Ở Bitcoin, nonce là một trường 32 bit. Thợ đào liên tục điều chỉnh số này cho đến khi hàm băm tiêu đề khối nhỏ hơn mức độ khó mục tiêu.
Trong quản lý tài khoản Ethereum: Mỗi tài khoản Ethereum duy trì một nonce tăng dần. Điều này vừa ngăn tấn công phát lại (gửi cùng một giao dịch hai lần), vừa cho phép người dùng “thay thế” hoặc “hủy” giao dịch bị kẹt bằng cách gửi giao dịch mới với cùng nonce và phí cao hơn.
Dù nonce và giá trị hash thường xuất hiện cùng nhau trong lĩnh vực blockchain, nhưng về bản chất chúng hoàn toàn khác nhau:
Giá trị hash là “dấu vân tay số” của dữ liệu, xác định bởi đầu vào và có kích thước cố định. Ngược lại, nonce là biến tạm thời dùng để thay đổi kết quả hàm băm.
Xét về thời điểm, giá trị hash là định danh cố định cho bộ dữ liệu, còn nonce thường bị loại bỏ sau một lần sử dụng.
Nếu quy trình sinh hoặc quản lý nonce có lỗ hổng, hệ thống sẽ đối mặt với rủi ro nghiêm trọng. Các hình thức tấn công phổ biến gồm:
◦ Tấn công tái sử dụng nonce: Kẻ tấn công lợi dụng nonce bị lặp lại để phá vỡ bảo vệ mật mã. Ví dụ, tháng 7 năm 2021, giao thức chuỗi chéo Anyswap Multichain Router V3 đã ký hai giao dịch với cùng một giá trị (một phần của chữ ký), cho phép kẻ tấn công suy ra khóa riêng và gây thiệt hại gần 8 triệu USD.
◦ Tấn công dự đoán nonce: Nếu quy trình sinh nonce có thể dự đoán, kẻ tấn công có thể thao túng quá trình khai thác hoặc xác thực.
◦ Tấn công vét cạn (Brute-Force): Kẻ tấn công thử mọi giá trị nonce để tìm ra hàm băm đạt tiêu chí. Ví dụ, năm 2018, Bitcoin Gold (BTG) bị tấn công 51% nhiều lần. Kẻ tấn công thuê sức mạnh tính toán lớn để vét cạn nonce, cuối cùng chiếm đoạt 388.200 BTG và gây thiệt hại khoảng 18 triệu USD.

Nguồn ảnh: Bitcoin Gold Explorer
Để phòng tránh các cuộc tấn công này, các nhà phát triển và dự án nên sử dụng các thuật toán sinh số ngẫu nhiên có độ hỗn loạn cao (như CSPRNG), kiểm tra nghiêm ngặt tính duy nhất và thường xuyên cập nhật thư viện mật mã.
Là thành phần nền tảng của công nghệ mật mã, đặc tính “chỉ dùng một lần” của nonce mang lại bảo mật vững chắc cho các giao tiếp internet phức tạp và sổ cái phân tán. Hiểu và triển khai đúng cơ chế nonce là điều kiện tiên quyết để bảo đảm an toàn, minh bạch và toàn vẹn cho thế giới số.
Đọc thêm:





