前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Polkadot中的密码学

Polkadot中的密码学

作者头像
MikeLoveRust
发布2019-10-09 15:50:37
1.2K0
发布2019-10-09 15:50:37
举报
文章被收录于专栏:Rust语言学习交流

本文是一篇笔记,整理了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,密钥推导函数
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 签名
  • 加密曲线
  • 地址格式
  • 椭圆曲线库
  • 加密哈希函数库
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档