banner
banner
Background VIC News
Thứ tư, 21/08/2019, 11:06 (GMT + 7)
Thứ tư, 21/08/2019, 11:06 (GMT + 7)

Chữ ký số trong tiền điện tử hoạt động thế nào?

Mục lục bài viết
  1. Xác minh chữ ký

Chữ ký số là một mô hình toán học bao gồm 2 phần. Phần đầu tiên là một thuạt toán dùng khóa bí mật (khóa để ký) để taọ chữ ký từ một tin nhắn (giao dịch). Phần thứ hai là một thuật toán cho phép bất cứ ai cũng có thể xác minh chữ ký này, nếu họ biết tin nhắn và một khóa công khai.

Tạo chữ ký số

Trong bản thực thi thuật toán ECDSA của bitcoin, "tin nhắn" được kỹ chính là giao dịch, hay nói chính xác hơn là mã băm của một tập con cụ thể của dự liệu trong giao dịch. Khóa đẻ ký là một bí mật của người dùng. Kết quả là một chữ ký dạng:

Sig = F-sig (F-hash(m), dA)

Trong đó:

  • dA là khóa bí mật để ký
  • m là giao dịch (hoặc một phần giao dịch)
  • F-hash là hàm băm
  • F-sig là hàm ký
  • Sig là chữ ký kết quả

Hàm F-sig tạo ra một chữ ký Sig chứa 2 giá trị, thường gọi là R và S:

Sig = (R, S)

Sau khi đã được tính ra, hai giá trị R và S được chuỗi hóa thành một dãy byte bằng một mô hình mã hóa chuẩn quốc tees gọi là các quy tắc mã hoa phân biệt (DER)

Chuỗi hóa chữ ký (DER)

Ví dụ đầu vào giao dịch có một kịch bản mở khóa cchuwas chữ ký mã hóa DER như sau:

3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e381301

Chữ ký này là một dãy byte chuỗi hóa của các giá trị R và S do ví tạo ra nhằm chứng minh rằng người nắm giữ ví sở hữu khóa bí mật đã được cấp phép để chi tiêu đầu ra. Định dạng chuỗi hóa này bao gồm 9 thành phần sau:

  • 0x30: Điểm bắt đầu dãy DER
  • 0x45: Độ dài của dãy (69 byte)
  • 0x02: Giá trị số nguyên theo sau
  • 0x21: Độ dài của số nguyên này (33 byte)
  • R00884d142d86652a3f47ba4746ec719bbfbd040570b1deccbb6498c75c4ae24cb
  • 0x02: Một số nguyên khác theo sau
  • 0x20: Độ dài của số nguyên này (32 byte)
  • S-4b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813
  • Một hậu tố 0x01 chỉ ra loại hàm băm được sử dụng (SIGHASH_ALL)

Những con số quan trọng là R và S, còn lại của dữ liệu thuộc về mô hình mã hóa DER.

Xác minh chữ ký

Để xác minh chữ ký, cần có chữ ký (R và S), giao dịch chuỗi hóa, và khóa công khai (tương ứng với kháo bí mật dùng để tạo chữ ký). Về bản chất, việc xác minh một chữ ký có nghĩa là:" Chỉ chủ sở hữu khóa bí mật đã tạo ra khóa công khai này mới có thể trình ra chữ ký này trên giao dịch này."

Thuật toán xác minh chữ ký lấy tin nhắn (một mã băm của giao dịch hay của một phần giao dịch), khóa công khai của người ký và chữ ký (các giá trị R và S), và trả về giá trị TRUE, nếu chữ ký hợp lệ đối với tin nhắn và khóa công khai này.

Các kiểu băm chữ ký (SIGHASH)

Chữ ký số được áp dụng cho các tin nhắn, mà trong trường hợp của bitcoin thì đó chính là bản thân các giao dịch. Chữ ký ngầm định một cam kết của người ký đối với dữ liệu giao dịch cụ thể. Ở dạng đơn giản nhất, chữ ký áp dụng lên toàn bộ giao dịch, nghĩa là cam kết về tất cả các trường dữ liệu đầu vào, đầu ra cũng như các trường dữ liệu khác của giao dịch. Tuy nhiên, một chữ ký cũng có thể chỉ cam kết về một tập con của dữ liệu trong giao dịch, đây là tính năng hữu hiệu trong một số tình huống.

Các chữ ký bitcoin có một phương thức để chỉ ra phần nào của dữ liệu giao dịch được đưa vào mã băm do khóa bí mật kỹ thông qua một số cờ hiệu SIGHASH. Cờ hiệu SIGNHASH là một byte lẻ được thêm vào cuối chữ ký. Mọi chữ ký đều đều có một cờ hiệu SIGNHASH và cờ hiệu này nằm ở đầu vào có thể khác nhau. Một giao dịch có 3 đầu vào được ký có thể có 3 chữ ký với các cờ hiệu SIGNHASH khác nhau, mỗi chữ ký lại ký (cam kết) một phần khác nhau của giao dịch.

Lư ý, mỗi đầu vào có thể chứa một chữ ký trong khi kịch bản mở khóa của nó. Kết quả là một giao dịch chứa nhiều đầu vào có thể có nhiều cờ hiệu SIGHASH khác nhau cam kết các phần khác nhau của giao dịch đó trong từng đầu vào. Cũng lưu ý rằng các giao dịch bitcoin có thể chứa các đầu vào từ các "chủ sở hữu" khác nhau, và mỗi người chỉ ký một đầu vào trong một giao dịch được tạo bán phần (và không hợp lệ), kết hợp với những người khác để thu thập đủ tất cả chữ ký cần thiết nhằm tạo ra mootj giao dịch hợp lệ. Sự tồn tại của nhiều loại cờ hiệu SIGNHASH chỉ có ý nghĩa nếu xét đến trường hợp nhiều bên tham gia cùng phối hợp bên ngoài mạng bitcoin và mỗi bên cập nhật một giao dịch được ký một phần.

Có 3 cờ hiệu SIGHASH: ALL, NONE và SINGLE

ALL: 0X01, là chữ ký áp dụng cho tất cả các đầu vào và đầu ra

NONE: 0x02, là chữ ký áp dụng cho tất cả các đầu vào và không áp dụng cho đầu ra nào

SINGLE: 0x03, là chữ ký áp dụng cho tất cả các đầu vào nhưng chỉ cho một đầu ra với cùng số thứ tự như đầu vào được ký.

Ngoài ra, còn có một số cờ hiệu thay đổi SIGHASH_ANYONECANPAY, có thểm đem kết hợp với các cờ nêu trên. Khi thiết lập cờ ANYONECANPAY thì chỉ có một đầu vào được ký, phần còn lại có thể được điều chỉnh. Cờ ANYONECANPAY có giá trị 0x80 và được áp dụng với toán tử OR theo từng bit, trả về các cờ kết hợp.

ALLINANYONECANPAY: 0x81, là chữ ký áp dụng cho một đầu vào và tất cả đầu ra

NONEIANYONECANPAY: 0x82, là chữ ký áp dụng cho một đầu vào và không đầu ra

SINGLEIANYONECANPAY: 0x83, là chữ ký áp dụng cho một đầu vào và một đầu ra với cùng số thứ tự.

Cách áp dụng cờ SIGHASH trong quá trình ký và xác minh giao dịch như sau" tạo một bản sao giao dịch có bỏ đi một số trường dữ liệu (đặt độ dài về 0 và làm rỗng các trường đó). Tiếp đến, thực hiện chuỗi hóa giao dịch thu về. Thêm cờ SIGHASH vào cuối giao dịch vừa đọc chuỗi hóa và đem băm kết quả này. Bản thân mã băm này chính là "tin nhắn" được ký. Các trường giao dịch bị bỏ đi sẽ khác nhau tùy theo cờ SIGHASH nào được sử dụng. Mã băm kết quả phụ thuộc vào các tập con dữ liệu khác nhau trong giao dịch. Thông qua thao tác thêm vào SIGHASH ở bước cuối trước khi băm, chữ ký cũng đã cam kết cả loại SIGHASH, vì thế không thể bị thay đổi.

Tất cả các loại SIGHASH đều ký trường nLocktime của giao dịch. Thêm vào đó, bản thân loại SIGHASH đã được đính vào giao dịch trước khi ký, vì thế sau khi giao dịch được ký, nó không thể thay đổi.

VIC.News. Nguồn: Andreas M.Antonopoulos

? Kèo & Tool + Airdrop MIỄN PHÍ
https://Vicion.app/index-vi.html
IOS: vicion.app/ios
Android: vicion.app/android

? Kênh VIC chia sẻ kiến thức, kèo trade, IEO, pool
https://t.me/Vicvietnamese

? Group VIC thảo luận từ A-Z
https://t.me/xoadoigiamngheo

? Cập nhật tin HOT
https://viccrypto.com




Disclaimer: Bài viết chỉ nhằm mục đích cung cấp thông tin và không được coi là lời khuyên đầu tư. Đầu tư Crypto là một hình thức đầu tư mạo hiểm và người tham gia phải chịu hoàn toàn trách nhiệm với khoản đầu tư của mình. 

Follow us: Fanpage | Group FB | Group chat | Channel Analytics | Channel NFT Youtube 

Mục Lục Bài Viết
  1. Xác minh chữ ký