1 个不稳定版本
0.0.1 | 2022 年 3 月 9 日 |
---|
#32 in #generate-keys
25KB
148 行
子密钥
子密钥是 Substrate 包含的命令行工具。它允许为基于 Substrate 的链(如 Polkadot、Kusama 以及越来越多的并行链和基于 Substrate 的项目)生成和恢复密钥。
subkey
提供了一些子命令来生成密钥、检查密钥、签名消息、验证消息等...
您可以使用 subkey --help
查看完整的命令列表。大多数命令都有额外的帮助信息,例如 subkey generate --help
用于 generate
命令。
安全第一
subkey
不需要互联网连接即可工作。实际上,为了最佳安全,您应该使用 subkey
在未连接到互联网的机器上。
subkey
处理 种子 和 私钥。请确保在安全的环境中使用 subkey
(例如,没有人在旁边看着)以及在安全的计算机上(例如,没有人能够检查您的命令历史)。
如果您将 subkey
的输出保存到文件中,请确保应用适当的权限,并在尽可能早的时候删除该文件。
用法
以下指南解释了 subkey
命令的一些用法。有关完整列表和最新文档,请确保检查集成帮助,例如使用 subkey --help
。
使用 Cargo 安装
您需要安装 Substrate 的构建依赖项才能安装 Subkey。使用以下两个命令分别安装依赖项和 Subkey:
命令
# Use the `--fast` flag to get the dependencies without needing to install the Substrate and Subkey binary
curl https://getsubstrate.io -sSf | bash -s -- --fast
# Install only `subkey`, at a specific version of the subkey crate
cargo install --force subkey --git https://github.com/paritytech/substrate --version <SET VERSION> --locked
在容器中运行
# Use `--pull=always` with the `latest` tag, or specify a version in a tag
docker run -it --pull=always docker.io/parity/subkey:latest <command to subkey>
生成随机账户
生成新密钥的操作就像运行
subkey generate
输出看起来类似于
Secret phrase `hotel forest jar hover kite book view eight stuff angle legend defense` is account:
Secret seed: 0xa05c75731970cc7868a2fb7cb577353cd5b31f62dccced92c441acd8fee0c92d
Public key (hex): 0xfec70cfbf1977c6965b5af10a4534a6a35d548eb14580594d0bc543286892515
Account ID: 0xfec70cfbf1977c6965b5af10a4534a6a35d548eb14580594d0bc543286892515
SS58 Address: 5Hpm9fq3W3dQgwWpAwDS2ZHKAdnk86QRCu7iX4GnmDxycrte
☠️ 不要重复使用此页面的任何种子和密钥 ☠️。
您可以在 SECURITY.md 和 Polkadot Wiki 中了解更多关于安全和风险的信息。
上面的输出显示了秘密短语(也称为记忆短语)和秘密种子(也称为私钥)。这两个秘密信息你必须妥善保管,并保密。以下所有其他信息都可以从这些秘密中推导出来。
上面的输出还显示了公钥和账户ID。这些信息与你要使用密钥的网络无关。
新账户的SS58地址(或公钥地址)是给定网络(例如Kusama或Polkadot)中账户公钥的表示。
您可以在Substrate文档中了解更多关于SS58格式的信息,并查看SS58注册表中的保留前缀列表。
例如,考虑之前的种子0xa05c75731970cc7868a2fb7cb577353cd5b31f62dccced92c441acd8fee0c92d
,SS58地址如下
- Polkadot:
16m4J167Mptt8UXL8aGSAi7U2FnPpPxZHPrCgMG9KJzVoFqM
- Kusama:
JLNozAv8QeLSbLFwe2UvWeKKE4yvmDbfGxTuiYkF2BUMx4M
JSON输出
subkey
也可以生成JSON格式的输出。这对于自动化非常有用。
命令
subkey generate --output-type json
输出
{
"accountId": "0xfec70cfbf1977c6965b5af10a4534a6a35d548eb14580594d0bc543286892515",
"publicKey": "0xfec70cfbf1977c6965b5af10a4534a6a35d548eb14580594d0bc543286892515",
"secretPhrase": "hotel forest jar hover kite book view eight stuff angle legend defense",
"secretSeed": "0xa05c75731970cc7868a2fb7cb577353cd5b31f62dccced92c441acd8fee0c92d",
"ss58Address": "5Hpm9fq3W3dQgwWpAwDS2ZHKAdnk86QRCu7iX4GnmDxycrte"
}
例如,如果你想获取secretSeed
,你可以使用
命令
subkey generate --output-type json | jq -r .secretSeed
输出
0xa05c75731970cc7868a2fb7cb577353cd5b31f62dccced92c441acd8fee0c92d
额外用户定义的密码
subkey
支持额外的用户定义秘密,该秘密将被附加到种子上。让我们看看以下示例
subkey generate --password extra_secret
输出
Secret phrase `soup lyrics media market way crouch elevator put moon useful question wide` is account:
Secret seed: 0xe7cfd179d6537a676cb94bac3b5c5c9cb1550e846ac4541040d077dfbac2e7fd
Public key (hex): 0xf6a233c3e1de1a2ae0486100b460b3ce3d7231ddfe9dadabbd35ab968c70905d
Account ID: 0xf6a233c3e1de1a2ae0486100b460b3ce3d7231ddfe9dadabbd35ab968c70905d
SS58 Address: 5He5pZpc7AJ8evPuab37vJF6KkFDqq9uDq2WXh877Qw6iaVC
使用inspect
命令(更多详细信息请见下文),我们发现仅知道秘密种子已不足以恢复账户
subkey inspect "soup lyrics media market way crouch elevator put moon useful question wide"
它恢复了账户5Fe4sqj2K4fRuzEGvToi4KATqZfiDU7TqynjXG6PZE2dxwyh
而不是我们预期的5He5pZpc7AJ8evPuab37vJF6KkFDqq9uDq2WXh877Qw6iaVC
。现在需要额外的用户定义密码(在我们的示例中为extra_secret
)才能完全恢复账户。让我们检查之前的助记符,这次传递所需的密码,如下所示
subkey inspect --password extra_secret "soup lyrics media market way crouch elevator put moon useful question wide"
这次,我们正确地恢复了5He5pZpc7AJ8evPuab37vJF6KkFDqq9uDq2WXh877Qw6iaVC
。
检查密钥
如果你有一些关于密钥的数据,subkey inspect
将帮助你发现更多关于它的信息。
如果你想要验证某些秘密,例如,你可以使用
subkey inspect < mnemonic | seed >
如果你只有公共数据,你可以看到部分信息
subkey inspect --public < pubkey | address >
注意:虽然你可以从助记符中恢复秘密种子,但反过来则不行。
注意:出于明显的原因,无法从传递公共数据(如pubkey
或address
)作为输入来恢复秘密。
命令
subkey inspect 0xa05c75731970cc7868a2fb7cb577353cd5b31f62dccced92c441acd8fee0c92d
输出
Secret Key URI `0xa05c75731970cc7868a2fb7cb577353cd5b31f62dccced92c441acd8fee0c92d` is account:
Secret seed: 0xa05c75731970cc7868a2fb7cb577353cd5b31f62dccced92c441acd8fee0c92d
Public key (hex): 0xfec70cfbf1977c6965b5af10a4534a6a35d548eb14580594d0bc543286892515
Account ID: 0xfec70cfbf1977c6965b5af10a4534a6a35d548eb14580594d0bc543286892515
SS58 Address: 5Hpm9fq3W3dQgwWpAwDS2ZHKAdnk86QRCu7iX4GnmDxycrte
签名
subkey
允许使用秘密密钥对随机消息进行签名。然后,任何人都可以使用你的公钥验证签名。
echo -n <msg> | subkey sign --suri <seed|mnemonic>
示例
MESSAGE=hello
SURI=0xa05c75731970cc7868a2fb7cb577353cd5b31f62dccced92c441acd8fee0c92d
echo -n $MESSAGE | subkey sign --suri $SURI
输出
9201af3788ad4f986b800853c79da47155f2e08fde2070d866be4c27ab060466fea0623dc2b51f4392f4c61f25381a62848dd66c5d8217fae3858e469ebd668c
注意:sign
命令的每次运行都会产生不同的输出。虽然每个签名都不同,但它们都是有效的。
验证签名
给定一个消息、一个签名和一个地址,subkey
可以验证消息是否由给定地址的秘密密钥持有者(或持有者之一)进行数字签名。
echo -n <msg> | subkey verify <sig> <address>
示例
MESSAGE=hello
URI=0xfec70cfbf1977c6965b5af10a4534a6a35d548eb14580594d0bc543286892515
SIGNATURE=9201af3788ad4f986b800853c79da47155f2e08fde2070d866be4c27ab060466fea0623dc2b51f4392f4c61f25381a62848dd66c5d8217fae3858e469ebd668c
echo -n $MESSAGE | subkey verify $SIGNATURE $URI
输出
Signature verifies correctly.
失败的样子
Error: SignatureInvalid
使用虚荣生成器
您可以使用包含的虚荣生成器来找到一个种子,该种子提供的地址包含所需的模式。请注意,根据您的硬件,这可能需要一段时间。
命令
subkey vanity --network polkadot --pattern bob
输出
Generating key containing pattern 'bob'
best: 190 == top: 189
Secret Key URI `0x8c9a73097f235b84021a446bc2826a00c690ea0be3e0d81a84931cb4146d6691` is account:
Secret seed: 0x8c9a73097f235b84021a446bc2826a00c690ea0be3e0d81a84931cb4146d6691
Public key (hex): 0x1a8b32e95c1f571118ea0b84801264c3c70f823e320d099e5de31b9b1f18f843
Account ID: 0x1a8b32e95c1f571118ea0b84801264c3c70f823e320d099e5de31b9b1f18f843
SS58 Address: 1bobYxBPjZWRPbVo35aSwci1u5Zmq8P6J2jpa4kkudBZMqE
Bob
现在得到了一个以他的名字开头的漂亮地址:1bobYxBPjZWRPbVo35aSwci1u5Zmq8P6J2jpa4kkudBZMqE。
注意:虽然名字短(3个字符)的 Bob
很快就得到了结果,但对于名字长得多的 Alice
来说,这需要更长的时间,因此生成包含链 alice
的随机地址的机会将小得多。
许可证
许可证:GPL-3.0-or-later WITH Classpath-exception-2.0
依赖关系
~11MB
~208K SLoC