Chữ ký số là dữ liệu mật mã cho phép kiểm tra rằng một thông điệp được tạo bằng khóa riêng tương ứng với một khóa công khai, và chưa bị thay đổi sau khi ký. Trong Bitcoin, đó là cách node kiểm tra một giao dịch có đáp ứng điều kiện chi tiêu hay không. Trang này giải thích luồng ký và xác minh, cùng những điều chữ ký không chứng minh được.
Một giao dịch được phát tán tới nhiều máy tính không đi kèm cuộc gọi xác nhận danh tính của người gửi. Các máy phải kiểm tra dữ liệu mà chúng nhận được. Chữ ký số là một phần của cơ chế ấy: nó nối một thông điệp với một khóa theo quy tắc có thể xác minh.
Chữ ký số là gì?
Chữ ký số — digital signature — là dữ liệu mật mã được tạo trong quá trình ký và được kiểm tra cùng thông điệp, khóa công khai và quy tắc thuật toán. NIST mô tả chữ ký số như công cụ hỗ trợ phát hiện thay đổi trái phép và xác thực người ký trong mô hình khóa. Điều đó phụ thuộc việc gắn khóa với chủ thể và bảo vệ khóa; không nên hiểu là chữ ký tự xác minh mọi thông tin về con người. Nguồn: NIST FIPS 186-5.
Khóa riêng, khóa công khai và địa chỉ có các vai trò riêng, được giải thích tại Khóa riêng, khóa công khai và địa chỉ.
Luồng ký và luồng xác minh
Có thể hình dung cơ chế bằng hai phía. Phía ký có dữ liệu cần ký và vật liệu khóa bí mật. Phía xác minh có dữ liệu cần kiểm tra, chữ ký và public key. Bộ kiểm tra đưa ra kết quả hợp lệ hoặc không hợp lệ theo thuật toán; không cần người ký cung cấp khóa riêng cho mọi node.
Schnorr trong BIP340 là một đặc tả cụ thể của chữ ký trên đường cong secp256k1. Bitcoin Core cũng có hàm kiểm tra chữ ký ECDSA trong mã xử lý public key. Đây là hai bằng chứng riêng về cơ chế, không phải căn cứ để nói mọi loại đầu ra đều dùng một thuật toán giống nhau. Nguồn: BIP340; Bitcoin Core — pubkey.cpp.
Chữ ký trong một giao dịch Bitcoin
Khi một điều kiện chi tiêu yêu cầu chữ ký, node kiểm tra chữ ký theo các quy tắc tương ứng. Song chữ ký chỉ là một phần của việc đánh giá giao dịch. Một giao dịch vẫn phải đáp ứng các điều kiện khác, chẳng hạn tham chiếu đầu ra được phép chi. Vì vậy, “đã ký” chưa đồng nghĩa “giao dịch đã được mạng chấp nhận”. Xem UTXO và điều kiện chi tiêu và Hành trình giao dịch Bitcoin.
Cũng cần cẩn thận với cụm “ký toàn bộ giao dịch”. Phạm vi dữ liệu được chữ ký cam kết do quy tắc ký quyết định. Bài tra cứu này không liệt kê các chế độ ký, nên không dùng khẳng định rằng mọi chữ ký luôn bảo vệ mọi trường theo cùng một cách.
Ví dụ có thể đối chiếu: thay đổi dữ liệu
Giả định một bộ dữ liệu A được ký đúng và cho kết quả hợp lệ. Nếu thay thông điệp đầu vào thành B, không được mặc định chữ ký cũ vẫn hợp lệ. Thay dữ liệu là thay câu hỏi mà bộ xác minh phải trả lời.
Để kiểm chứng mà không tạo ví hay giao dịch thật, có thể đối chiếu bộ test vector chính thức BIP340. Trong bảng của tác giả đặc tả, vector số 1 có kết quả TRUE và vector số 7 có kết quả FALSE. Đây là hai ca độc lập có cùng giá trị trong cột thông điệp nhưng dùng chữ ký khác nhau. Chú thích “negated message” ở ca số 7 mô tả cách tác giả tạo ca lỗi. Các kết quả được trích từ bộ kiểm thử công bố. Bài không sao chép khóa hoặc chuỗi chữ ký. Nguồn: BIP340 test vectors, index 1 và 7.
Chữ ký khác mã hóa thế nào?
Mục tiêu của chữ ký là cho phép kiểm tra mối liên hệ mật mã với dữ liệu được ký. Mã hóa nhằm bảo vệ nội dung khỏi những người không có khả năng giải mã phù hợp. Hai mục tiêu này khác nhau; một thông điệp được ký có thể vẫn đọc được. Độc giả có thể xem Mật mã học trong tài sản mã hóa để đặt hai công cụ trong cùng bối cảnh.
Các giới hạn cần nhớ
Chữ ký hợp lệ không chứng minh người ký đã hiểu giao dịch, không biết khóa có bị đánh cắp và không xác nhận giao dịch có lợi cho người ký. Bộ kiểm tra chỉ xử lý những gì quy tắc cho phép nó kiểm tra. Vì thế, mô tả một chữ ký là “bằng chứng không thể chối bỏ trong mọi hoàn cảnh” vượt quá ý nghĩa kỹ thuật của nó.
Kết luận
Chữ ký số cho phép mạng kiểm tra một giao dịch được tạo bằng khóa phù hợp và dữ liệu không bị sửa sau khi ký. Nhưng nó chỉ chứng minh mối liên hệ mật mã đó: không chứng minh người ký hiểu giao dịch, khóa không bị đánh cắp hay giao dịch có lợi cho người ký. Chữ ký cũng khác mã hóa — mục tiêu của nó là cho phép kiểm tra, không phải che giấu nội dung.
Đọc tiếp
- Khóa riêng, khóa công khai và địa chỉ — phân biệt dữ liệu để ký, kiểm tra và nhận.
- Blockchain và sổ cái phân tán — đặt kiểm tra giao dịch trong kiến trúc chung.
- Ví và quyền kiểm soát — xem rủi ro khi khóa bị lộ hoặc mất.
- Thư viện thuật ngữ — tra cứu khái niệm liên quan.