15 次重大版本更新
19.0.0 | 2024 年 7 月 19 日 |
---|---|
17.0.0 | 2024 年 7 月 13 日 |
16.0.0 | 2024 年 6 月 24 日 |
15.0.0 | 2024 年 5 月 24 日 |
2.0.1 |
|
5 in #parachain
53 下载量/月
用于 polkadot-sdk
290KB
4.5K SLoC
子密钥
子密钥是 Substrate 包含的命令行工具。它允许为如 Polkadot、Kusama 以及越来越多的分片和 Substrate 基于项目生成和恢复密钥。
subkey
提供了一些子命令来生成密钥、检查密钥、签名消息、验证消息等...
您可以使用 subkey --help
来查看所有命令的完整列表。大多数命令都有额外的帮助,例如使用 subkey generate --help
为 generate
命令。
安全第一
subkey
不需要互联网连接即可工作。实际上,为了最佳安全性,您应该在未连接到互联网的机器上使用 subkey
。
subkey
用于处理 种子 和 私钥。请确保在安全的环境(例如,没有人从你身后看着)和安全的电脑上(例如,没有人能够检查你的命令历史)使用 subkey
。
如果您将 subkey
的任何输出保存到文件中,请确保应用适当的权限,并尽快删除文件。
用法
以下指南解释了 subkey
的部分命令。要获取完整列表和最新文档,请使用 subkey --help
检查集成帮助。
使用 Cargo 安装
您需要安装 Substrate 构建依赖项以安装 Subkey。使用以下两个命令分别安装依赖项和 Subkey:
命令
# 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
# If you run into issues building, you likely are missing deps defined in https://docs.substrate.io/install/
在容器中运行
# 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 格式的信息,并查看 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
)才能完全恢复账户。让我们检查之前的助记短语,这次传递所需的 password
,如下所示
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。
注意:虽然Bob
有一个简短的名字(3个字符),得到的结果相当快,但对于Alice
来说,由于她的名字很长,所以会花费更长的时间,因此生成包含链alice
的随机地址的机会会小得多。
许可证
许可证:GPL-3.0-or-later WITH Classpath-exception-2.0
依赖项
~88–130MB
~2.5M SLoC