关键词:
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 \\mathbbF_q Fq,其中 q q q为prime。
- 曲线 E E E over F q \\mathbbF_q Fq,该曲线的order为 n = # E ( F q ) = 2 c l n=\\#E(\\mathbbF_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(\\mathbbF_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 \\mathbbF_q Fq elements 和 E ( F q ) E(\\mathbbF_q) E(Fq) curve points都可以 b b b bits string来表示。
EdDSA签名机制的安全性取决于以上参数的选择:
- Pollard’s rho algorithm for logarithms 解决discrete logarithm近似需要约 l π / 4 \\sqrtl\\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(\\mathbbF_q)=2^cl #E(Fq)=2cl cannot differ from q + 1 q+1 q+1 by more than 2 q 2\\sqrtq 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 中未提到的一些边缘情况:
具体的代码实现参见:
在该代码实现中,VerificationKey对应为验签的公钥,SigningKey对应为签名的私钥。
在该代码库中,除实现了单个验签之外,还实现了batch验签。
参考资料
[1] Solana Issue BIP32
[2] Solana Vanity Address using GPUs
[3] Cryptography behind top 20 cryptocurrencies
PHPMyAdmin 和 ed25519
】PHPMyAdmin和ed25519【英文标题】:PHPMyAdminanded25519【发布时间】:2021-12-2004:01:59【问题描述】:我已经使用PHPMyAdmin为数据库设置了一个网络服务器,但我的一个节点使用ed25519插件来验证用户身份。PhPMA默认不允许我使用这个插件... 查看详情
java实现区块链中的区块,block的实现
1、区块是区块链的基础单元区块链由若干个区块组成,区块是区块链的基础单元2、区块链中区块的基本属性区块6个属性的说明-Index区块的索引值,区块链中的唯一键区块6个属性的说明-Timestamp区块的时间戳,用于区分区块的产... 查看详情
(笔记)区块链技术笔记——区块链中的密码学1
(笔记)区块链技术笔记——区块链中的密码学1文章目录(笔记)区块链技术笔记——区块链中的密码学1一、随机数据序列二、对称(单钥)密码希尔密码(HillCipher)加密过程解密过程三、非对... 查看详情
(笔记)区块链技术笔记——区块链中的密码学2
(笔记)区块链技术笔记——区块链中的密码学2(RSA加密算法笔记)文章目录(笔记)区块链技术笔记——区块链中的密码学2(RSA加密算法笔记)三、非对称密码1、RSA加密算法创立原理例题描述... 查看详情
anfs|ed25519密钥体系技术一小步行业发展一大步
关于加密算法我们常见的secp256k1加密算法,在区块链领域被广泛应用,包括比特币、以太坊等,在内的银行、金融机构也在使用。⽐特币基于椭圆曲线加密的椭圆曲线数字签名算法(ECDSA),特定的椭圆曲... 查看详情
信息摘要算法之七:sha在区块链中的应用
最近几年比特币的火爆带动了人们对区块链技术的研究。当然我们在这里并不讨论区块链技术本身,而是讨论一下区块链中的SHA算法的应用。对于SHA系列算法我们已经在前面作了说明,在这里也不再重复。1、区块链中的SHA区块... 查看详情
区块链中的节点是什么?
随着区块链科技的进步,各种形态不同的链展现在大家面前,有些区块链中节点有很多(如以太坊),而有些区块链中的节点又很少(如EOS),今天我们拿第一代区块链比特币来讲。比特币被设计为一种去中心化的点对点(P2P)网络如中... 查看详情
区块链中的节点是什么
随着区块链科技的进步,各种形态不同的链展现在大家面前,有些区块链中节点有很多(如以太坊),而有些区块链中的节点又很少(如EOS),今天我们拿第一代区块链比特币来讲。比特币被设计为一种去中心化的点对点(P2P)网络如中... 查看详情
如何使用python将ed25519算法实现到jwt中?
】如何使用python将ed25519算法实现到jwt中?【英文标题】:Howtoimplemented25519algorithmintojwtusingpython?【发布时间】:2019-08-1621:07:57【问题描述】:我正在尝试编写API客户端,API身份验证需要根据JWT规范使用ed25519对有效负载进行签名。... 查看详情
区块链中的密码学
区块链概念 区块:可以看做是一页一页的账单,上面记录若干条数据区块链:可以看做是账本,里面按照时间顺序将若干个账单每个区块中包含两个最重要的值,自己的hash值,和上一个区块的hash值 详解: &... 查看详情
如何获取存储在区块链中的数据,然后显示在网页上?
】如何获取存储在区块链中的数据,然后显示在网页上?【英文标题】:HowcanIgetthedatastoredinblockchainandthendisplayonwebpage?【发布时间】:2020-03-2807:36:34【问题描述】:我正在使用metamask、ganache、truffle和web3js开发一个系统,该系统可... 查看详情
text在万神殿区块链中的isethcall(代码片段)
在 ssh 文件夹中找不到 id_ed25519 私钥和公钥文件
...。我需要使用OpenSSH和Tools->deployment->configuration中的私钥将我的windows10 查看详情
区块链中的epoch
Epoch用于定义区块链上特定事件发生的时间纪元(eraoftime),如:激励支付的时间新的验证者组负责验证交易的时间不同的区块链协议,epoch的定义不同。常用于表示在链上完成特定区块数的时间。如在以太坊... 查看详情
错误 3080006:EOSIO 区块链中的交易时间过长
】错误3080006:EOSIO区块链中的交易时间过长【英文标题】:Error3080006:TransactiontooktoolonginEOSIOblockchain【发布时间】:2020-03-0720:23:40【问题描述】:EOS使用以下方法。nodeos(node+eos=nodeos)-核心EOSIO节点守护进程,可以配置插件以运行节... 查看详情
如何使用 Bouncy Castle 创建与 OpenSSH 兼容的 ED25519 密钥?
】如何使用BouncyCastle创建与OpenSSH兼容的ED25519密钥?【英文标题】:HowtocreateanOpenSSHcompatibleED25519keywithBouncyCastle?【发布时间】:2021-07-2006:09:34【问题描述】:如何创建可用于SSH的OpenSSHED25519私钥?目标是为您的OpenSSH客户端提供与.... 查看详情
1.3.1区块链中的加密算法——hash算法(更新)(代码片段)
为了为保证存储于区块链中的信息的安全与完整,区块链中使用了包含密码哈希函数和椭圆曲线公钥密码技术在内的大量的现代密码学技术,同时,这些密码学技术也被用于设计基于工作量证明的共识算法并识别用户。 ... 查看详情
openssl 生成的 ed25519 密钥的精确字节格式
】openssl生成的ed25519密钥的精确字节格式【英文标题】:Exactbyteformatofed25519keygeneratedbyopenssl【发布时间】:2020-11-2403:31:39【问题描述】:有没有人知道,或者可能会指出,提示我找到记录此内容的资源?我想要的是这样的信息:P... 查看详情