密码学
本文对 Substrate 中所使用的密码学知识进行了概述。
哈希算法
Substrate 使用哈希函数将任意大小的数据映射到固定大小的值上。
Substrate 提供了两种开箱即用的哈希算法,也可以支持任何实现了 Hasher
trait 的哈希算法。
xxHash
xxHash 是一种快速的非加密型哈希函数,算法速度接近于RAM的极限。 由于 xxhash 不是加密安全的,所以有可能通过修改输入来合理地控制散列算法的输出。 这就使得用户有机会通过创建密钥碰撞、哈希碰撞和失衡存储树来攻击此哈希算法。
xxHash 适用于外界无法操纵哈希函数输入的情景。 例如,它可用于生成 runtime 存储值的主键,因为其输入由 Runtime 开发者控制。
Substrate 采用了 twox-hash
的Rust实现版本 。
Blake2
Blake2 是一个基于密码学的哈希函数。 它是公认的非常快,也被用于 Zcash 中。
Substrate 使用了blake2
的Rust实现版本。
公钥加密
Substrate 中使用公钥加密技术实现了一个健壮的认证系统。
Substrate 提供了多种不同的加密方案,因此它十分通用,可以兼容任何实现了 Pair
trait 的方案。
ECDSA
Substrate 提供了一个使用 secp256k1 曲线的ECDSA签名方案。 这与用于保护 Bitcoin 和 Ethereum 安全的加密算法相同。
Ed25519
Ed25519 是一个基于 Curve25519曲线 的EdDSA签名方案, 它在设计和实现的多个层面上做了精心的处理,在不影响安全性的前提下实现了非常高的速度。
SR25519
SR25519 是基于与 Ed25519 相同的基础曲线算法。 但是,它使用 Schnorr 签名替换了 EdDSA 的原有方案。
相比于 ECDSA/EdDSA 方案,Schnorr 签名具有一些显著的特性:
- 它更适用于分层确定性的密钥推导。
- 它通过使用 signature aggregation 实现本机多签。
- 它总体上更能防止滥用。
当使用 Schnorr 签名替代ECDSA 方案时,一个不好的地方是,虽然两者都要占用64个字节,但只有 ECDSA 签名才会传递其公钥。
下一步
进一步学习
- 了解 Substrate 的账户抽象.
- 更详细的描述,请看 研究 wiki。
例子
- 查看 Polkadot claims 模块,了解如何 在 Substrate runtime 验证 Ethereum 签名.