LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > 【Substrate开发教程】05 - Substrate密码学 & Subkey的安装和使用

【Substrate开发教程】05 - Substrate密码学 & Subkey的安装和使用

2020-10-14 松果 来源:区块链网络


SS58格式

SS58(External Address Format)是Substrate的区块链使用的地址格式,基于比特币的Base58Check格式开发,该格式包含一个地址类型的前缀,用于识别出不同的Substrate链。

SS58的基本格式如下

base58encode(concat(<address-type>,<address>,<checksum>))

SS58格式将地址类型(address-type)、原始地址(address)、校验码(checksum)串联的字节序列作为参数传递给base58encode函数,base58encode函数与Bitcoin和IPFS中的定义完全相同,SS58的前缀是地址类型,计算校验码使用blake2-256哈希函数。

地址类型(address-type)

每条Substrate区块链可设置为不同的地址类型,通过地址前缀就能识别出是哪条Substrate链,例如:

Polkadot地址总是以数字1开头;Kusama地址总是以大写字母开头,如C、D、F、G、H、J...通用Substrate地址以5开头;

以上是编码后的地址,编码前的地址类型,Polkadot是0,Kusama是2,更多网络的地址类型可参考官方文档。

生成SS58地址的过程

1、获取地址类型;

2、根据地址类型和原始地址计算校验码,计算方法是对地址类型和原始地址串联的字节序列做两次blake2-256哈希运算,得到1~8个字节的校验码;

3、对地址类型、原始地址、校验码串联的字节序列做Base58编码,得到SS58地址。

Substrate使用的哈希算法

Substrate可使用的哈希算法有:sha2、keccak、blake2、twox。

blake2有两大主要版本,blake2b和blake2s:

blake2b:是blake2的64位版本,可以生成最高512位的任意长度哈希;blake2s:是blake2的32位版本,可以生成最高256位的任意长度哈希;

Polkadot使用的哈希算法是blake2b。

Substrate使用的椭圆曲线密码算法

椭圆曲线密码学(Elliptic Curve Cryptography, ECC)包含三个方面的内容:

基于椭圆曲线的密钥对基于椭圆曲线的数字签名(ECDSA,Elliptic Curve Digital Signature Algorithm)基于椭圆曲线的密钥交换

Substrate可使用的椭圆曲线密码算法有:ed25519、sr25519、secp256k1。

Polkadot使用sr25519作为其密钥对派生算法和签名算法。

sr25519椭圆曲线密码算法的诞生过程

关于椭圆曲线,在之前写的《EOS密码学:公钥生成原理-椭圆曲线加密算法》这篇文章中有介绍,比特币/ETH/EOS都使用了secp256k1标准的椭圆曲线密码算法,使用ECDSA作为数字签名算法。

1、椭圆曲线的通用方程是这样的:

y^2=x^3+ax+by2=x3+ax+b

根据a、b系数的不同可以得到不同的方程。

2、secp256k1标准的椭圆曲线方程为:

y^2 = x^3 + 7y2=x3+7

3、然后又出现了名为curve25519的蒙哥马利曲线,方程是这样的:

y^2 = x^3 + 486662x^2 + xy2=x3+486662x2+x

最开始curve25519被命名为DH函数(Diffie-Hellman密钥交换),后来为了区分DH函数和DH函数所使用的椭圆曲线,将DH函数命名为X25519,将其所用的椭圆曲线命名为curve25519。

4、又出现了另一种椭圆方程曲线,名为Edwards曲线(爱德华兹曲线)

x^2 + y^2 = 1 + dx^2y^2x2+y2=1+dx2y2

5、基于Edwards曲线,出现了Twisted Edwards曲线(edwards25519),Twisted Edwards曲线是Edwards曲线的一般化形式,方程为:

ax^2 + y^2 = 1 + dx^2y^2ax2+y2=1+dx2y2

6、比特币/ETH/EOS使用的椭圆曲线签名算法是ECDSA,和ECDSA类似,出现了EdDSA(Edwards-Curve Digital Signature Algorithm,爱德华兹曲线数字签名算法),EdDSA采用Twisted Edwards曲线作为椭圆曲线,采用了Schnorr算法作为签名的生成和验证。

7、ed25519算法是一种EdDSA的实现。

8、sr25519算法是ed25519的一个衍生版本,也称为Schnorrkel/Ristretto x25519,解决了使用ed25519实现复杂协议的安全问题。

目前被硬件钱包广泛支持的椭圆曲线密码算法是secp256k1,Substrate也予以支持。Substrate默认使用sr25519,可使用的椭圆曲线密码算法有三种:ed25519、sr25519、secp256k1。

使用Polkadot{.js}浏览器插件生成SS58地址

Polkadot{.js}浏览器插件可以在Chrome和FireFox浏览器上使用。

安装好插件后,点击加号创建一个新账户


复制保存生成的助记词


导入已存在的助记词,创建管理插件钱包的账户名和密码


Polkadot{.js}插件就生成好了一系列SS58地址


可以切换网络,查看不同Substrate链的SS58地址。

“Allow use on any chain”是通用的Substrate链地址,以数字5开头。

另外支持Polkadot、Kusama、Darwinia Crab、Edgeware、Kulupu、Subsocial网络的SS58地址。

Subkey

Subkey是与Substrate一起开发的密钥生成工具,主要功能是生成密钥对(当前支持sr25519、ed25519、secp256k1加密算法)、SS58地址编码以及从助记词和原始seed还原密钥,还可以为消息创建和验证签名。

安装Subkey

在已通过getsubstrate.io安装了Substrate依赖的情况下,使用如下命令安装Subkey

cargo install --force subkey --git https://github.com/paritytech/substrate --version 2.0.0

但要注意,由于rust nightly-2020-10-06版本存在bug,需要使用早些版本的cargo来安装

$ cargo +nightly-2020-08-23 install --force subkey --git https://github.com/paritytech/substrate --version 2.0.0

等bug修复后,可以用第一条命令直接安装。

rust nightly-2020-08-23版本的安装方法可以参考之前的文章:创建第一条Substrate区块链。

安装好后,终端输入subkey即可查看功能


使用Subkey生成SS58地址

使用subkey生成通用Substrate SS58地址的命令是 subkey gentare:


生成波卡网络的地址,只需要添加--network选项:


subkey默认使用sr25519加密算法,如果需要使用更早的ed25519加密算法,需要添加--scheme选项:


subkey支持生成不同数量单词的助记词,通过--words选项可以修改生成的单词数量,默认是12个单词,还支持15、18、21、24个单词:


SS58地址创建成功后,终端会打印如下信息:

Secret phrase: 助记词,是一系列英语单词,相当于私钥,最初在比特币的BIP39中被引入;Secret Seed:私钥,又称为“原始种子”,是恢复密钥所需要的最小信息,其他信息均从此种子计算得出;Public Key:公钥,又称为“Account ID”,十六进制表示的密钥对的公共部分;SS58 Address:地址,公钥通过SS58加密得出。

Subkey还有很多功能,在下一篇文章中详细介绍。

—-

编译者/作者:松果

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...