Polkadot中的密码学
本文是一篇笔记,整理了Polkadot中使用到的密码学,主要包括:
-
密钥签名
-
加密曲线
-
地址格式
密钥
在Polkadot中,有四个加密层:
-
Account keys,帐户密钥,用于控制资金的密钥,与Polkadot上一个实际的DOT帐户绑定。可以是:
-
controller密钥,是半在线(semi-online)密钥,用于手动提交外部交易,验证人或提名人,使用它来开始或停止验证或提名,仅持有一些DOT支付费用
-
stash密钥,大多数情况下是一个冷钱包的密钥,保持脱机状态,持有大量资金。
-
Session keys,会话密钥,是必须保持在线的“热”(hot)密钥,用于执行网络操作。当前使用的四种会话密钥:
-
GRANDPA: ed25519
-
BABE: sr25519
-
Online: sr25519
-
Parachain: sr25519
-
Nominator keys,提名者密钥,在已抵押/绑定的帐户密钥(stash account keys)与节点在区块生成或验证中使用的会话密钥之间,提供一个信任链,它不能转账DOT。
-
Transport layer static keys,传输层静态密钥,libp2p用来验证节点间连接的,使用会话密钥。
签名
会话密钥:
-
使用Schnorr签名的ed25519实现
-
Schnorrkel/Ristretto sr25519变体实现
会话密钥:
-
Ristretto Schnorr公钥(公钥-32字节,签名-64字节,VRF-96字节),提名者密钥,VRF区块生成
-
BLS12-381小曲线(公钥-48字节,签名-96字节),更高效的聚合(aggre gate d)签名,将用于GRANDPA中
-
BLS12-381大曲线(公钥-96字节,签名-48字节)
-
传输层身份验证密钥
Polkadot的帐户主要使用带有Schnorr签名的公钥,Polkadot认为它满足:
-
在比特币Schnorr愿望清单提到的支持多重签名
-
较快的签名,批量验证比ECDSA更简单,以及更自然的阈值
-
支付通道用到的技巧
-
改善区块验证
-
和极其安全的Ed25519或secp256k1曲线一起工作得很好
加密曲线
区块链中的账户通常有两种曲线选择:secp256k1或Ed25519。
Polkadot对secp256k1密钥有最小化支持,其一些帐户需要用到secp256k1密钥。
Polkadot选择Ed25519(Edwards曲线),有两个理论上的原因:
-
secp256k1有较小的CM(complex multiplication,虚数乘法)域判定
-
secp256k1具有相当严格的参数选择,但不是绝对最好的
地址格式
在Polkadot采用SS58地址格式。SS58是一个简单的地址格式,设计用于基于Substrate开发的链。对于链使用其他地址格式没有问题,但这是可靠的默认设置。它很大程度上基于 比特币 的Base-58检查格式,并做了一些改动。
基本思想是一个base-58编码的值,它可以标识Substrate链上的一个特定帐户。不同的链有不同的识别账户的方法。因此,SS58被设计为可扩展的。
其基本的格式为:
base58encode ( concat ( <address-type>, <address>, <checksum> ) )
可在Substrate GitHub Wiki上找到SS58地址格式的实时规范。
椭圆曲线库
-
Ed25519
-
ed25519-dalek
-
Github:https://github.com/dalek-cryptography/ed25519-dalek
-
Sr25519
-
schnorrkel
-
Github:https://github.com/w3f/schnorrkel
-
BIP39
-
substrate-bip39
-
Github:https://github.com/paritytech/substrate-bip39
加密哈希函数库
-
blake2
-
blake2-rfc
-
Github:https://github.com/cesarb/blake2-rfc
-
SHA-3
-
tiny-keccak
-
Github:https://github.com/debris/tiny-keccak
术语
-
Ed25519,elliptic-curve signatures,
-
Sr25519,Schnorr-like signature,
-
HSM,Hardware Security Module,硬件安全模块
-
HDKD,Hierarchical Deterministic Key Derivation,分层确定性密钥推导
-
NIZK,Non-Interactive Zero-Knowledge,非交互零知识
-
zk-SNARK,Zero-Knowledge Succinct Non-interactive Argument of Knowledge,简洁非交互知识论证
-
VRF,Verifialbe Random Function,可验证的随机函数
-
PBKDF2,Password-Based Key Derivation Function 2,基于密码的密钥推导函数
-
Argon2,密钥推导函数
Ai sẽ là người được lợi trong đợt Bull Run của Bitcoin?
Theo báo cáo của sàn giao dịch OKEx trong thời kỳ Bull Run hiện tại của Bitcoin, những ch...
MCDEX khởi chạy trên mạng thử nghiệm Arbitrum Rollup L2
MCDEX vui mừng thông báo về việc ra mắt testnet của mình trên Arbitrum Rollup, một giải pháp khả năn...
[Tổng kết AMA] Cùng BigcoinVietnam tìm hiểu về Lien.Finance
Vào 11:00 AM - 12:00 PM, thứ tư, ngày 02/12/2020 Lien.Finance và BigcoinVietnam đã tổ chức một ...