1. 引言
位元幣和以太坊采用Secp256k1,NEO使用secp256r1,波卡、Cardano、NEAR 和 Solana 等使用Ed25519,
Ed25519相關代碼實作有:
- https://github.com/dalek-cryptography/ed25519-dalek
- https://github.com/jpopesculian/ed25519-dalek-bip32
- https://github.com/jedisct1/rust-ed25519-compact
- https://github.com/w3f/hd-ed25519
- https://github.com/ZenGo-X/multi-party-eddsa
- https://github.com/ZcashFoundation/ed25519-zebra
- https://github.com/RustCrypto/signatures
詳細可參看:Cryptography behind top 20 cryptocurrencies(統計于2019年4月)
| Name | Type | Signing alg | Curve | Hash | Address encoding | Address hash |
|---|---|---|---|---|---|---|
| Bitcoin | UTXO | ECDSA | secp256k1 | SHA-256 | base58, bech32 | SHA-256, RIPEMD-160 |
| Ethereum | account | ECDSA | secp256k1 | Keccak-256 * | none (just hex) * | last 20B of Keccak-256 * |
| XRP | account | ECDSA * | secp256k1 * | first half of SHA-512 | base58 with different alphabet * | SHA-256, RIPEMD-160 |
| Litecoin | UTXO | ECDSA | secp256k1 | SHA-256 * | base58, bech32 | SHA-256, RIPEMD-160 |
| EOS | account | ECDSA | secp256k1 | SHA-256 | none * | none * |
| Bitcoin Cash | Same as Bitcoin * | |||||
| Stellar | account | EdDSA | ed25519 | SHA-256 and SHA-512 in EdDSA * | base32 | none |
| Binance Coin | Ethereum ERC-20 token * | |||||
| Tether | Bitcoin Omni layer / Ethereum ERC-20 token | |||||
| TRON | account | ECDSA | secp256k1 | SHA-256 | base58 | last 20 bytes of Keccak-256 * |
| Cardano | UTXO | EdDSA | ed25519 | none and SHA-512 in EdDSA * | base58 | none |
| Monero | UTXO * | it's complicated* | ed25519 | Keccak-256 * | base58 | Keccak-256 * |
| IOTA | UTXO | Winternitz one time signature scheme | - | Curl, Kerl * | none | Kerl |
| Dash | UTXO | ECDSA | secp256k1 | SHA-256 * | base58 | SHA-256, RIPEMD-160 |
| Maker | Ethereum ERC-20 token | |||||
| NEO | account | ECDSA | secp256r1 | SHA-256 | base58 | SHA-256, RIPEMD-160 |
| Ontology | account | ECDSA | nist256p1 | 3x SHA-256 | base58 | SHA-256, RIPEMD-160 |
| Ethereum Classic | Same as Ethereum | |||||
| NEM | account | EdDSA | ed25519 | none and Keccak-256 in EdDSA * | base32 | Keccak-256, RIPEMD-160 |
| Zcash | UTXO | ECDSA, zk-SNARKs * | secp256k1, Jubjub * | SHA-256 | base58, bech32 | SHA-256, RIPEMD-160 |
| Tezos | account | EdDSA, ECDSA * | ed25519, secp256k1, secp256r1 | BLAKE2 and SHA-512 in EdDSA * | base58 | BLAKE2 |
2. EdDSA簽名機制
可參看:
- 維基百科 EdDSA
- ECDSA VS Schnorr signature VS BLS signature
- Extended twisted Edwards curve坐標系及相互轉換
- Edwards-Curve Digital Signature Algorithm (EdDSA)
Edwards-curve Digital Signature Algorithm (EdDSA) 為Schnorr signature的變種,其基于的是twisted Edwards curves,
EdDSA可在不犧牲安全性的情況下,比現有的數字簽名機制更快,
EdDSA機制中涉及的引數有:
- finite field F q \mathbb{F}_q Fq?,其中 q q q為prime,
- 曲線 E E E over F q \mathbb{F}_q Fq?,該曲線的order為 n = # E ( F q ) = 2 c l n=\#E(\mathbb{F}_q)=2^cl n=#E(Fq?)=2cl,其中 l l l為large prime, 2 c 2^c 2c為cofactor,
- 具有order l l l 的base point G ∈ E ( F q ) G\in E(\mathbb{F}_q) G∈E(Fq?),
- hash函式 H H H,其輸出為 2 b 2b 2b bits,其中 2 b ? 1 > q 2^{b-1}>q 2b?1>q,使得 F q \mathbb{F}_q Fq? elements 和 E ( F q ) E(\mathbb{F}_q) E(Fq?) curve points都可以 b b b bits string來表示,
EdDSA簽名機制的安全性取決于以上引數的選擇:
- Pollard’s rho algorithm for logarithms 解決discrete logarithm近似需要約 l π / 4 \sqrt{l\pi/4} lπ/4 ?次curve addition運算,因此,要求 l l l足夠大,通常應大于 2 200 2^{200} 2200,對 l l l的限制會影響 q q q的選擇,根據Hasse’s theorem: # E ( F q ) = 2 c l \# E(\mathbb{F}_q)=2^cl #E(Fq?)=2cl cannot differ from q + 1 q+1 q+1 by more than 2 q 2\sqrt{q} 2q ?,
- 在分析EdDSA安全性時,hash函式 H H H通常model為random oracle,
公私鑰對
(
p
k
,
P
)
(pk,P)
(pk,P),其中公鑰
P
=
p
k
×
G
P=pk\times G
P=pk×G,橢圓曲線order為
n
=
2
c
?
l
n=2^c\cdot l
n=2c?l,
G
G
G為所選橢圓曲線order 為
l
l
l的base point,
EdDSA對訊息
m
m
m的簽名程序為:
- 1)選擇隨機值 k ∈ R [ 1 , l ? 1 ] k\in_R [1,l-1] k∈R?[1,l?1]
- 2)計算curve point R = k × G R=k\times G R=k×G
- 3)計算hash值 e = H ( R ∣ ∣ P ∣ ∣ m ) e=H(R||P||m) e=H(R∣∣P∣∣m)
- 4)計算 s = k + H ( R ∣ ∣ P ∣ ∣ m ) ? p k s= k+ H(R||P||m)\cdot pk s=k+H(R∣∣P∣∣m)?pk
EdDSA的簽名為 ( R , s ) (R,s) (R,s),其中 R R R為point, s s s為scalar,
EdDSA的驗簽程序為:
- 驗證 [ 2 c ? s ] × G = [ 2 c ? k ] × G + [ 2 c ? H ( R ∣ ∣ P ∣ ∣ m ) ? p k ] × G = 2 c × R + [ 2 c ? H ( R ∣ ∣ P ∣ ∣ m ) ] × P [2^c\cdot s]\times G=[2^c\cdot k]\times G+[2^c\cdot H(R||P||m)\cdot pk]\times G=2^c\times R+[2^c\cdot H(R||P||m)]\times P [2c?s]×G=[2c?k]×G+[2c?H(R∣∣P∣∣m)?pk]×G=2c×R+[2c?H(R∣∣P∣∣m)]×P
EdDSA具有與Schnorr簽名類似的線性特征,從而也支持batch validation和key aggregation,
3. Ed25519
Ed25519是EdDSA的實體化,采用的為Curve25519曲線,hash函式選擇的為SHA-512,使得
b
=
256
b=256
b=256,

4. ZCash中的Ed25519
由于ZCash要求所有節點對Ed25519達成共識,仍需額外處理 在RFC8032 中未提到的一些邊緣情況:

具體的代碼實作參見:
- https://github.com/ZcashFoundation/ed25519-zebra
在該代碼實作中,VerificationKey對應為驗簽的公鑰,SigningKey對應為簽名的私鑰,
在該代碼庫中,除實作了單個驗簽之外,還實作了batch驗簽,
參考資料
[1] Solana Issue BIP32
[2] Solana Vanity Address using GPUs
[3] Cryptography behind top 20 cryptocurrencies
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/356170.html
標籤:區塊鏈
上一篇:K線型別識別—單K線之陰線
