< 返回版块

洋芋 发表于 2019-11-06 19:26

Tags: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字节),更高效的聚合(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,elliptic-curve signatures,
  • Sr25519Schnorr-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,密钥推导函数

原文链接:https://zhuanlan.zhihu.com/p/84322255

评论区

写评论
Mike Tang 2019-11-07 11:23

整理得太好了吧。

1 共 1 条评论, 1 页