Polkadot中的密码学

2020-11-30 12:46:45 作者:金色财经

本文是一篇笔记,整理了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字节),更高效的聚合(aggregated)签名,将用于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,密钥推导函数

相关推荐

图文推荐