Tiêu đề gốc: "The Rock from Another Mountain丨Hardcore giải thích cách rút ngắn chữ ký Bitcoin từng bước"
Văn bản gốc được biên soạn bởi: Viện nghiên cứu chuỗi khối Binance
Chữ ký số là một khối xây dựng quan trọng trong giao thức Bitcoin và chiếm phần lớn dữ liệu được lưu trữ trên chuỗi khối. Bài viết này nêu chi tiết cách kích thước chữ ký Thuật toán chữ ký số đường cong Elliptic (ECDSA) được mã hóa tiếp tục giảm trong vài năm qua, cũng như so sánh độ dài của chữ ký Schnorr mới được đề xuất với chữ ký ECDSA hiện đang được sử dụng.
Trong giao thức Bitcoin, không có giao dịch nào sử dụng Segregated Witness (Segwit). Chữ ký số được lưu trữ trong trường đầu vào SigScript trong UTXO và các giao dịch sử dụng Nhân chứng tách biệt được lưu trữ trong trường Nhân chứng. Chữ ký số bao gồm các giá trị r và s được mã hóa, cả số nguyên 256 bit (32 byte) và cờ SigHash cho biết phần nào của giao dịch đã được ký.
Ứng dụng khách Bitcoin kể từ phiên bản đầu tiên, Tất cả đều dựa vào OpenSSL để xác minh chữ ký và mã hóa. Chữ ký ECDSA được mã hóa bằng Quy tắc mã hóa duy nhất (DER) được xác định trong Quy tắc mã hóa ANS.1. Mặc dù mã hóa DER chỉ cho phép một chuỗi byte biểu thị chữ ký theo một cách duy nhất, thư viện OpenSSL sẽ coi các mã hóa khác bắt nguồn từ tiêu chuẩn DER có giá trị như nhau. Khi tính năng này thay đổi trong thư viện OpenSSL, nó sẽ khiến một số nút sử dụng phiên bản OpenSSL mới hơn từ chối liên kết từ các nút sử dụng phiên bản cũ hơn của thư viện. Để đạt được mục đích này, BIP-66 đã đề xuất một đề xuất soft fork và chỉ những chữ ký tuân thủ nghiêm ngặt mã hóa DER mới được chấp nhận.
Chữ ký ECDSA được mã hóa DER kết thúc bằng 0x30 Bắt đầu bằng một mã định danh, xác định cấu trúc tổng hợp. Tiếp theo là byte độ dài biểu thị độ dài của cấu trúc, sau đó là cấu trúc tổng hợp. Cấu trúc tổng hợp chứa các giá trị số nguyên cho r và s đứng trước mã định danh 0x02 dùng để biểu thị số nguyên, theo sau là byte độ dài xác định độ dài của giá trị tương ứng.

Định dạng chữ ký số được mã hóa DER bằng Bitcoin
p>
Tuy nhiên, quy tắc mã hóa ANS.1 sử dụng số nguyên có dấu (Đã ký), trong khi giá trị r và giá trị s trong ECDSA là số nguyên không dấu (Unsigned), vì vậy khi bit đầu tiên của giá trị r hoặc giá trị s là When được đặt thành 1, giá trị sẽ được đánh giá không chính xác. Để giải quyết vấn đề này, một byte 0x00 được thêm vào trước giá trị để số nguyên không dấu được mã hóa thành số nguyên dương. Trong giá trị r và giá trị s ban đầu, nếu bit đầu tiên là 1 thì chúng ta gọi là cao, ngược lại thì gọi là thấp.

Chữ ký Bitcoin ECDSA 73 byte bao gồm r cao và s cao
Việc tạo ra giá trị r và giá trị s là ngẫu nhiên, khi cả hai giá trị đều cao (bit đầu tiên của cả hai giá trị là 1), cả hai đều yêu cầu byte 0x00 ở đầu. Với hai byte bổ sung cộng với cờ SigHash, tổng chiều dài của chữ ký là 73 byte. Có thể thấy rằng trong cùng một chữ ký, xác suất cả hai giá trị r và s đều cao là 25%. Cho đến đầu năm 2014, có thể quan sát thấy sự phân phối khoảng 25% của 73 byte, 50% của 72 byte và khoảng 25% của 71 byte đối với chữ ký trên chuỗi khối Bitcoin. Trong chữ ký 72 byte, một trong hai giá trị cao và giá trị còn lại thấp, trong khi ở chữ ký 71 byte, cả hai giá trị đều thấp.
Sau khi phát hành Bitcoin Core v0.9.0 vào tháng 3 năm 2014, tỷ lệ chữ ký có giá trị s cao bắt đầu giảm. Bản phát hành này bao gồm các sửa đổi đối với ví Bitcoin Core để ví chỉ tạo chữ ký có giá trị s thấp. Với việc phát hành Bitcoin Core v0.10.3 và v0.11.1 vào tháng 10 năm 2015, chữ ký có giá trị s cao được coi là chữ ký không chuẩn để loại bỏ hoàn toàn các vectơ biến đổi. Điều này cấm các giao dịch có giá trị s cao được chuyển tiếp hoặc sử dụng để khai thác. Bắt đầu từ tháng 12 năm 2015, hầu hết tất cả các giao dịch trên chuỗi khối Bitcoin đều có giá trị chữ ký thấp.

Chữ ký Bitcoin ECDSA 72 byte bao gồm r cao và s thấp
Từ tháng 12 năm 2015 đến đầu năm 2018, độ dài chữ ký trung bình gần như trung bình trên blockchain là từ 72 đến 71 byte. Chữ ký 72 byte có giá trị r cao và giá trị s thấp và yêu cầu byte 0x00 đặt trước. Chữ ký 71 byte bao gồm giá trị r thấp và giá trị s thấp.
Vào cuối tháng 8 năm 2017, soft fork Segregated Witness (Segwit) đã được kích hoạt. Segregated Witness di chuyển SigScript chứa chữ ký và nội dung khác vào trường Witness. Mặc dù chữ ký giao dịch SegWit sẽ không được đưa vào tính toán kích thước giao dịch, nhưng kích thước của chữ ký trên blockchain thực tế không thay đổi.

Chữ ký Bitcoin ECDSA 71 byte bao gồm r thấp và s thấp
Bitcoin Core v0.17.0, được phát hành vào tháng 10 năm 2018, bao gồm các cải tiến cho ví Bitcoin Core và chỉ tạo ra chữ ký 71 byte. Bằng cách ký lại giao dịch với một nonce khác, các giá trị r mới có thể được tạo cho đến khi tìm thấy giá trị r thấp. Công nghệ này đã được áp dụng bởi các dự án khác như thư viện NBitcoin và ví Bitcoin Electrum.
BIP-340 giới thiệu chữ ký Schnorr cho Bitcoin, BIP- 341 đề xuất phiên bản đầu tiên của loại đầu ra SegWit và các quy tắc chi tiêu của nó dựa trên chữ ký Schnorr, các nhánh Taproot và Merkle. Không giống như chữ ký ECDSA, chữ ký Schnorr không được mã hóa DER.

Định dạng chữ ký Schnorr

Chữ ký SIGHASH_ALL Bitcoin Schnorr 64 byte
Chữ ký Schnorr ngắn hơn chữ ký ECDSA từ 6 đến 9 byte. Những khoản tiết kiệm này đến từ chi phí mã hóa bị loại bỏ và cờ SigHash mặc định. Với tỷ lệ chấp nhận chữ ký Schnorr là 20%, giả sử rằng mỗi trong số 800.000 đầu vào UTXO được sử dụng mỗi ngày chỉ chứa một chữ ký, thì hơn 1 MB dung lượng blockchain có thể được lưu mỗi ngày.
-Hướng dẫn dành cho người không chuyên về tập hợp con ASN.1, BER và DER - An Ghi chú Kỹ thuật của Phòng thí nghiệm RSA - 1993
-Tạo giao dịch ngắn nhất - Blog Tường vĩnh cửu - 2017
-Xác suất chính xác để có được chữ ký được mã hóa DER có độ dài nhất định - Blog Tường vĩnh cửu
Liên kết gốc
Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:
Nhóm Telegram đăng ký: https://t.me/theblockbeats
Nhóm Telegram thảo luận: https://t.me/BlockBeats_App
Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia