
Schnorr signature là lớp chữ ký số hậu kýết họa sinh dựa trên elip, cho phép chữ ký nhỏ hơn, nhanh hơn và xác minh nhanh hơn so với ECDSA trên cùng đường cong secp256k1. Bitcoin đã chọn Schnorr cho chữ ký Taproot, giúp giảm phí giao dịch và mở đường cho các script khó hơn. Bài viết này giải thích cơ chế hoạt động, so sánh với ECDSA và đánh giá ưu điểm cùng hạn chế thực tế.

Schnorr signature là gì
Chữ ký số chứng minh người ký sở hữu khoá bí mật mà không lộ khoá đó. Schnorr là cách xác minh dựa trên bằng chứng tri thức bằng zero: người ký chứng minh mình biết x là sao cho G·x = P, với P là khoá công khai. Vì đường cong elip có tính chất nhóm, bằng chứng này có thể được xác minh bằng vài phép toán điểm hình, không cần tính lại lời giải log rời rạc như ECDSA.
Trước Schnorr, ECDSA là lựa chọn mặc định vì nó an toàn theo giả định chữ ký không bị phá vỡ, nhưng cấu trúc toán học của nó khó tối ưu và có vấn đề về tính duy nhất của nonces. Schnorr sửa cả hai điểm đó bằng cách dùng nonce bất biến và công thức tuyến tính.

Nguyên lý hoạt động
Chuỗi khóa trong Bitcoin BIP-340 dùng dấu chấm nhân trong trường secp256k1. Quy trình ký gồm các bước:
- Chọn nonce ngẫu nhiên
k, tínhR = k·Gvà điểmr = x(R). - Tính thử thách
e = int(tagged_hash("BIP0340/challenge", r ‖ P ‖ m)) mod n. - Tính
s = k + e·x mod n. - Chữ ký là cặp
(r, s), 64 byte.
Ở bước xác minh, người nhận tính lại e từ cùng thông điệp và khoá công khai P, sau đó kiểm tra s·G = R + e·P. Phép toán này là duy nhất, không có nhánh nào phụ thuộc vào giá trị của r hay s, nên tránh được các lỗi timing mà ECDSA từng mắc phải.
Điểm khác biệt về bảo mật nằm ở chỗ ECDSA cần một “nonce ngẫu nhiên” hoàn toàn, nếu tái sử dụng nonce theo bất kỳ cách nào thì khoá bí mật lộ ngay qua vài phương trình tuyến tính. Schnorr chỉ cần nonce được sinh ra một cách khó đoán nhưng không bắt buộc phải hoàn toàn ngẫu nhiên, vì mọi thông tin từ khóa đều được trộn vào thử thách e qua P. Đây là lý do các thuật toán sinh nonce như RFC 6979 tương thích tốt với Schnorr.
| Đặc tính | Schnorr (BIP-340) | ECDSA (secp256k1) |
|---|---|---|
| Kích thước chữ ký | 64 byte | 70-72 byte (DER, có thể nén còn 64-66) |
| Không gian khóa công khai | 32 byte (x-only) | 33 byte có nén |
| Xác minh | Một phép toán điểm, không nhánh | Có nhánh, cần kiểm tra phạm vi r, s |
| Nonce | Không bắt buộc ngẫu nhiên tuyệt đối | Bắt buộc ngẫu nhiên tuyệt đối |
| Khả năng tổng hợp khóa | Có, theo chuẩn MuSig | Không, khó tổng hợp |
Tại sao Bitcoin chọn Schnorr
Taproot, kích hoạt qua soft fork vào năm, thay thế cơ chế multisig P2WSH bằng cây Merkle của các output theo script-path và một khóa Taproot. Khi chi tiêu theo đường khóa thường, giao dịch chỉ cần một chữ ký Schnorr 64 byte thay vì nhiều chữ ký ECDSA, giúp giảm trọng số giao dịch và do đó giảm phí.
Ngoài tiết kiệm không gian, Taproot còn cải thiện quyền riêng tư: với một khóa thường không có script-path nào, hệ thống không tiết lộ có bao nhiêu điều kiện thay thế hay cấu trúc cây ra sao. Các giao dịch đơn giản trông giống hệt nhau từ góc nhìn bên ngoài.
Khả năng tổng hợp khoá theo chuẩn MuSig2 là điểm đáng chú ý khác. Trước Taproot, một ví multisig với 15 người ký sẽ cần 15 chữ ký ECDSA đưa vào cùng witness, làm phí tăng vọt. Với Schnorr, mười lăm chữ ký được tổng hợp thành đúng một chữ ký duy nhất, giảm chi phí tuyến tính theo số người ký.
So sánh chi phí giao dịch
Xét một giao dịch P2WPKH truyền thống (chữ ký ECDSA) và một giao dịch P2TR (chữ ký Schnorr):
| Thành phần | P2WPKH | P2TR |
|---|---|---|
| Witness | Khoá công khai 33 byte + chữ ký 71-72 byte | Khoá x-only 32 byte + chữ ký 64 byte |
| Tổng witness | 105 byte | 97 byte |
| vSize xấp xỉ | ~141 vbyte | ~138 vbyte |
Chênh lệch khoảng 3 vbyte cho giao dịch đơn giản không lớn. Điểm giảm phí đáng kể đến ở ví multisig: script-path với 15 chữ ký sẽ tốn hơn 1.000 vbyte so với một chữ ký Schnorr duy nhất.
Thách thức và hạn chế
- Độ khó hình thức bằng chứng: Schnorr về cơ bản dựa trên bài toán logarithm rời rạc trong nhóm. Với secp256k1 và cấu hình bảo mật 128 bit, đây là mức chấp nhận được, nhưng cần hiểu rằng nó không mạnh hơn ECDSA về mặt lý thuyết.
- Phần mềm ví: giai đoạn đầu nhiều ví phần cứng chưa hỗ trợ Taproot. Người dùng vẫn có thể nhận nhưng cần ký theo script-path cũ.
- Quản lý nonce: dù dễ hơn ECDSA, trình tạo nonce yếu vẫn có thể làm lộ khoá. Bắt buộc dùng RFC 6979 hoặc PRNG chất lượng.
- Tương thích ngược: ví cũ không hiểu output P2TR, nên giao dịch có thể bị hiểu nhầm là không hợp lệ. Điều này đã gây mất tiền cho một số người dùng đầu ngày.
Hiệu năng thực tế
Trên phần cứm thương mại, việc xác minh Schnorr nhanh hơn ECDSA khoảng 10-20% do thiếu các phép toán modular inverse và các nhánh kiểm tra phạm vi. Phía ký, nếu dùng nonce xác định, cả hai loại chữ ký đều nhanh; điểm khác biệt nằm ở khả năng dùng chữ ký tổng hợp cho nhiều bên, nơi Schnorr giảm từ N chữ ký xuống còn 1.
Trong ngữ cảnh rollup, zk-rollup thường yêu cầu xác minh hàng loạt chữ ký bên trong mạch. Schnorr thân thiện với zk hơn ECDSA vì biểu thức xác minh tuyến tính, không cần ràng buộc phạm vi, nên nhiều rollup đã chuyển sang dùng chữ ký Schnorr trong thiết kế batching.
Kết luận
Schnorr signature đã đi từ một đề xuất học thuật lâu năm thành tiêu chuẩn thực tế của Bitcoin. Nó mang ba lợi ích rõ ràng: chữ ký nhỏ hơn, xác minh đơn giản hơn không bị nhánh, và quan trọng nhất là tổng hợp khoá được giúp tổng hợp cho ví nhiều chữ ký. Hạn chế nằm ở hệ sinh thái phần mềm và phần cứng còn đang bù lấp, chứ không phải ở bản thân thuật toán. Tham khảo BIP-340, BIP-341 và tài liệu Bitcoin BIPs để đi sâu hơn.
