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还有很多功能,在下一篇文章中详细介绍。 —- 编译者/作者:松果 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
【Substrate开发教程】05 - Substrate密码学 & Subkey的安装和使用
2020-10-14 松果 来源:区块链网络
LOADING...
相关阅读:
- 数据派:多币种暴跌90% DeFi走到终点还是新起点?2020-10-14
- 与DC漫画招牌角色“蝙蝠侠”结缘,NFT再向前迈进一步2020-10-14
- 行情分析丨惊变的行情:所谓静水流深不过是暗流涌动的另一种称谓2020-10-14
- Akash 为 DeFi 而设的 DeCloud2020-10-14
- 【彭博社报道】明年年底 Tether USDT 市值可能超过以太坊(ETH),位列第2020-10-14