Đây là bài 2 trong loạt bài các công nghệ được sử dụng trong TomoP. Chúng ta sẽ đi sâu vào kỹ thuật chia sẻ key ECDH , cơ chế địa chỉ TomoP, Stealth address .
Bạn có thể xem lại bài 1 ở đây
Bài này chúng tôi giả định bạn đã từng sử dụng private key trong bitcoin và ethereum.
Elliptic Curve Digital Signature Algorithm (ECDSA) được sử dụng rộng rãi trong hệ thống blockchain ie Bitcoin, Ethereum, Tomochain để sinh ra chữ ký điện tử cho phép kiểm tra tính xác thực của giao dịch, đường cong được sử dụng rộng rãi nhất là Secp256k1 .
Về mặt kỹ thuật, secp256k1 cấu thành bởi các tham số
Tóm tắt lại bạn cần biết vài thông tin sau để tiếp tục
- Điểm: Giá trị bất kỳ nằm trên đường cong (có tọa độ x, y) được biểu diễn dạng ngắn (tiền tố 02 + giá trị của 32 bytes x) hoặc (03|04 + gía trị của x + giá trị của y). Chúng ta luôn ký hiệu điểm bởi chữ hoa.
- Có 2 phép toán cho các điểm là phép toán nhân vô hướng và phép cộng điểm.
- G : Điểm cơ sở. Mọi điểm trên secp256k1 đều được sinh dựa vào điểm này
- p: Modulo nguyên tố
- Bậc của điểm: số điểm của đường cong secp256k1 sinh ra bởi G.
- pvk: một số ngẫu nhiên 32 bytes. Luôn được ký hiệu bởi chữ thường.
- Pbk: Public key - tương đương giá trị 1 điểm , Pbk = Pvk*G
Cơ chế private key và địa chỉ của TomoP
Mỗi user trong TomoP có 2 private keys, private view key và private spend key. Đúng như tên gọi nếu user có private view key có thể xem được thông tin balance, lịch sử giao dịch. Private spend key được sử dụng để decrypt UTXO’s private key và sử dụng UTXO.
Các bước sinh private key và privacy address
- Sử dụng privatekey người dùng đăng nhập làm private spend key, ký hiệu psk
- Private view key = Keccak_256(psk), ký hiệu pvk
- Public spend key = psk*G, ký hiệu PSK
- Public view key = pvk*G, ký hiệu PVK
- Hash = Keccak_256 (PSK + PVK) .
- Lấy 4 bytes đầu của hash, Hash[0:4] làm checksum
- Privacy address = base58_encode(PSK + PVK + Hash[0:4])
Khi người gửi nhận được địa chỉ này thì hoàn toàn có thể tách được Public spend key, public view key của người nhận. Hai thông tin này rất quan trọng giúp người gửi tạo ra một One-time-address được sinh bởi kỹ thuật Stealth Address.
Trước khi đi sâu vào Stealth Address chúng ta sẽ tìm hiểu về kỹ thuật chia sẻ key Elliptic-curve Diffie–Hellman (ECDH).
Kỹ thuật Elliptic-curve Diffie–Hellman
Đây là một kỹ thuật phổ biến để chia sẻ một secret_key mà không làm bị lộ thông tin.
Giả sử Tí có private key t, publickey T = t*G.
Tương tự Tồ có private key o, publickey O = o*G.
Điều hiển nhiên là Tí có thể tính được giá trị tO và Tồ có thể tính được giá trị oT nhưng không ai khác ngoài 2 bạn này có thể tính ra giá trị đó. Vậy giá trị này có thể sử dụng như là một secret giữa Tí và Tồ. Cụ thể
- Sử dụng điểm cơ sở G.
- Sử dụng t = 3; T = 3 G.
- Sử dụng o = 4; O = 4 G .
- *t o = 12.
- Tí secret = tO* = 3 **4G = 12 G.
- Tồ secret = oT* = 4 **3G = 4*3 G = 12 G
Stealth Addresses
TomoP’s stealth address được base trên Cryptonote protocol và điều chỉnh sao cho phù hợp với Tomochain-ecosystem. Stealth address được sử dụng để sinh ra One-time-address chứa balance và chỉ người nhận mới có thể biết được privatekey.
Diagram dưới đây được trích từ Cryptonote.
Một vài ký hiệu trước khi chúng ta đi vào giải thích chi tiết
- Cặp public keys của người nhận là (A, B), private keys (a,b). Chúng ta không quan tâm keys của người gửi.
- G - generator point
- r một số ngẫu nhiên 32 bytes được sinh trong quá trình tạo giao dịch
- R = r*G
- Hs - keccka256 hàm hash được sử dụng phổ thông trong bitcoin và ethereum
- P = Hs ( rA ) G + B công thức tính one-time-address
Ta quay lại với Tí và Tồ, lần này Tí muốn tạo một transaction cho Tồ. Tí làm theo các bước:
- Tí sinh ra r, thực hiện ECDH với giá trị rA* (public view key) của Tồ. Chỉ tí và Tồ biết được thông tin này vì thông tin R(r*G) được gửi sang cho Tồ
- Tí sinh ra một số ngẫu nhiêu khác f = Hs (r*A).
- Tí tính P = fG + B(public spend key).
- P là one-time-address!
- Tí gửi cho Tồ P, R .
Đối với Tồ:
- Tồ nhận được thông tin giao dịch, Tồ muốn biết được giao dịch này có sở hữu của mình không (trong thực tế, wallet phải quyét UTXOs giống mạng bitcoin).
- Tồ nhận được R.
- Tồ tính ra ECDH: Ra*
- Tồ tính tiếp P’ = Hs(Ra)G + B.
- Tồ kiểm tra P’ vs P nếu bằng nhau thì là giao dịch của Tồ, nếu không Tồ bỏ qua giao dịch này.
Vài điểm rút ra:
- P = fG + B= fG + bG= (f+b)G* → f+b ta có thể sử dụng như là một private key cho one-time-address mà chỉ có Tồ (có private spend key) mới biết được. Đây là điểm cốt lõi trong giao dịch TomoP
- f = Hs (r*A) → chỉ cần có private view key là Tồ có thể đọc được balance, chứng minh được giao dịch này thuộc sở hữu của mình.
Qua bài này chúng ta thấy được cách người dùng chứng thực được một thông tin giao dịch có phải của mình không qua kỹ thuật ECDH và stealth address.
Bài sau chúng ta sẽ đi sâu vào tìm hiểu cấu trúc giao dịch trên TomoP
Cheers.