#substrate #key #polkadot #generate-keys #command-line #numbers #parachain

bin+lib subkey

为基于 Substrate 的链如 Polkadot、Kusama 以及越来越多的分片和 Substrate 基于项目生成和恢复密钥。 (polkadot v1.15.0)

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 2021 年 8 月 4 日

5 in #parachain

Download history 132/week @ 2024-04-29 3/week @ 2024-05-06 4/week @ 2024-05-13 166/week @ 2024-05-20 29/week @ 2024-05-27 28/week @ 2024-06-03 9/week @ 2024-06-10 4/week @ 2024-06-17 162/week @ 2024-06-24 150/week @ 2024-07-01 96/week @ 2024-07-08 141/week @ 2024-07-15 26/week @ 2024-07-22 10/week @ 2024-07-29 14/week @ 2024-08-12

53 下载量/月
用于 polkadot-sdk

GPL-3.0-or-later…

290KB
4.5K SLoC

子密钥

子密钥是 Substrate 包含的命令行工具。它允许为如 Polkadot、Kusama 以及越来越多的分片和 Substrate 基于项目生成和恢复密钥。

subkey 提供了一些子命令来生成密钥、检查密钥、签名消息、验证消息等...

您可以使用 subkey --help 来查看所有命令的完整列表。大多数命令都有额外的帮助,例如使用 subkey generate --helpgenerate 命令。

安全第一

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.mdPolkadot 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 >

注意:虽然您可以从助记词中恢复秘密种子,但反过来是不可能的。

注意:出于明显的原因,通过传递如pubkeyaddress之类的公开数据作为输入,无法恢复秘密

命令

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