> ## Documentation Index
> Fetch the complete documentation index at: https://injectivelabs-docs-tokenization-section.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 设置 keyring

<Callout icon="info" color="#07C1FF" iconType="regular">
  本文档介绍如何为 Injective 节点配置和使用 keyring 及其各种 backend。在设置 keyring 之前，应先安装 `injectived`。更多信息请参阅[安装 `injectived` 页面](../developers/injectived/install/)。
</Callout>

keyring 保存用于与节点交互的私钥/公钥对。例如，在运行 Injective 节点之前需要设置 validator 密钥，以便正确签署区块。私钥可以存储在不同的位置，称为 "backend"，例如文件或操作系统自带的密钥存储。

### keyring 可用的 backend

#### `os` backend

`os` backend 依赖操作系统特定的默认设置来安全处理密钥存储。通常，操作系统的凭证子系统根据用户的密码策略处理密码提示、私钥存储和用户会话。以下是最流行的操作系统及其各自的密码管理器列表：

* macOS（自 Mac OS 8.6 起）：[Keychain](https://support.apple.com/en-gb/guide/keychain-access/welcome/mac)
* Windows：[Credentials Management API](https://docs.microsoft.com/en-us/windows/win32/secauthn/credentials-management)
* GNU/Linux：
  * [libsecret](https://gitlab.gnome.org/GNOME/libsecret)
  * [kwallet](https://api.kde.org/frameworks/kwallet/html/index.html)

使用 GNOME 作为默认桌面环境的 GNU/Linux 发行版通常预装 [Seahorse](https://wiki.gnome.org/Apps/Seahorse)。基于 KDE 的发行版用户通常使用 [KDE Wallet Manager](https://userbase.kde.org/KDE_Wallet_Manager)。前者实际上是 `libsecret` 的便捷前端，后者是 `kwallet` 客户端。

`os` 是默认选项，因为操作系统的默认凭证管理器旨在满足用户最常见的需求，并在不影响安全性的情况下提供舒适的体验。

对于无头环境，推荐使用 `file` 和 `pass` backend。

#### `file` backend

`file` backend 将 keyring 加密存储在应用程序的配置目录中。每次访问此 keyring 时都会请求密码，这可能在单个命令中多次发生，导致重复的密码提示。如果使用 bash 脚本执行使用 `file` 选项的命令，你可能需要使用以下格式处理多次提示：

```bash theme={null}
# 假设 KEYPASSWD 已在环境中设置
yes $KEYPASSWD | injectived keys add me
yes $KEYPASSWD | injectived keys show me
# 使用 keyring-backend 标志启动 injectived
injectived --keyring-backend=file start
```

<Callout icon="info" color="#07C1FF" iconType="regular">
  首次向空 keyring 添加密钥时，系统会提示你输入两次密码。
</Callout>

#### `pass` backend

`pass` backend 使用 [pass](https://www.passwordstore.org/) 工具来管理密钥敏感数据和元数据的磁盘加密。密钥存储在应用程序特定目录中的 `gpg` 加密文件中。`pass` 适用于大多数流行的 UNIX 操作系统以及 GNU/Linux 发行版。有关如何下载和安装的信息，请参阅其手册页。

<Callout icon="info" color="#07C1FF" iconType="regular">
  `pass` 使用 [GnuPG](https://gnupg.org/) 进行加密。`gpg` 在执行时会自动调用 `gpg-agent` 守护进程，该进程处理 GnuPG 凭证的缓存。有关如何配置缓存参数（如凭证 TTL 和密码过期）的更多信息，请参阅 `gpg-agent` 手册页。
</Callout>

在首次使用之前必须设置密码存储：

```sh theme={null}
pass init <GPG_KEY_ID>
```

将 `<GPG_KEY_ID>` 替换为你的 GPG 密钥 ID。你可以使用个人 GPG 密钥或专门用于加密密码存储的其他密钥。

#### `kwallet` backend

`kwallet` backend 使用 `KDE Wallet Manager`，它默认安装在以 KDE 为默认桌面环境的 GNU/Linux 发行版上。更多信息请参阅 [KWallet Handbook](https://docs.kde.org/stable/en/kdeutils/kwallet/index.html)。

#### `test` backend

`test` backend 是 `file` backend 的无密码变体。密钥以未加密的形式存储在磁盘上。

**仅供测试目的使用。不建议在生产环境中使用 `test` backend**。

#### `memory` backend

`memory` backend 将密钥存储在内存中。程序退出后密钥会立即删除。

**仅供测试目的使用。不建议在生产环境中使用 `memory` backend**。

### 向 keyring 添加密钥

你可以使用 `injectived keys` 获取 keys 命令的帮助，使用 `injectived keys [command] --help` 获取特定子命令的更多信息。

<Callout icon="info" color="#07C1FF" iconType="regular">
  你还可以使用 `injectived completion` 命令启用自动补全。例如，在 bash 会话开始时运行 `. <(injectived completion)`，所有 `injectived` 子命令都将自动补全。
</Callout>

要在 keyring 中创建新密钥，请使用 `<key_name>` 参数运行 `add` 子命令。在本教程中，我们将仅使用 `test` backend，并将新密钥命名为 `my_validator`。此密钥将在下一节中使用。

```bash theme={null}
$ injectived keys add my_validator --keyring-backend test

# 将生成的地址放入变量中以供后续使用。
MY_VALIDATOR_ADDRESS=$(injectived keys show my_validator -a --keyring-backend test)
```

此命令生成一个新的 24 词助记词，将其持久化到相关 backend，并输出有关密钥对的信息。如果此密钥对将用于持有有价值的 token，请务必将助记词记录在安全的地方！

默认情况下，keyring 生成 `eth_secp256k1` 密钥对。keyring 还支持 `ed25519` 密钥，可以通过传递 `--algo ed25519` 标志来创建。keyring 当然可以同时持有两种类型的密钥。
