BTC
$96,000
5.73%
ETH
$3,521.91
3.97%
HTX
$0.{5}2273
5.23%
SOL
$198.17
3.05%
BNB
$710
3.05%
lang
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
Trang chủ
AI AI
Tin nhanh
Bài viết
Sự kiện
BlockBeats Pro
Thêm
Thông tin tài chính
Chuyên đề
Hệ sinh thái chuỗi khối
Mục nhập
Podcast
Data
OPRR
Partnered With:

Sự phát triển của chữ ký Bitcoin

Đọc bài viết này mất 13 phút
Tìm hiểu về ECDSA và Schnorr trong một bài viết
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ý.


Chữ ký ECDSA được mã hóa DER


Ứ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


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.


Chữ ký Schnorr


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


Schnorr chứa giá trị r 32 byte và giá trị s 32 byte. Cờ SigHash được sử dụng phổ biến nhất, SIGHASH_ALL, là mặc định và không cần phải đặt rõ ràng, trong khi các cờ SigHash khác được đặt sau giá trị s. Độ dài của chữ ký Schnorr sử dụng cờ SIGHASH_ALL mặc định chính xác là 64 byte và 65 byte khi sử dụng cờ SigHash khác.



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.


Bài đọc liên quan


-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

举报 Báo lỗi/Báo cáo
Chọn thư viện
Thêm mới thư viện
Hủy
Hoàn thành
Thêm mới thư viện
Chỉ mình tôi có thể nhìn thấy
Công khai
Lưu
Báo lỗi/Báo cáo
Gửi