1 个稳定版本

7.1.8 2023年2月21日

#21#secret-management

MIT/Apache

175KB
3K SLoC

目录 DocToc 生成

Tpfs Krypt

TpfsKrypt 提供了一个与实现无关的接口,用于管理(例如生成、列出或导入密钥对)和使用(例如签名和加密)加密秘密。请注意,网络参与者将使用不同的技术来管理他们将与 XAND 和 TpfsKrypt 一起使用的加密秘密,TpfsKrypt 将以一致的方式使这些各种解决方案能够接口。

可能存在或可能存在的 KeyManagement 的实现包括

  • 本地文件系统
  • 本地 pkcs11 兼容设备(例如硬件安全模块)
  • 云提供的安全密钥管理
  • 像 Vault 这样的键值安全存储
  • KMIP
  • 一个 Http 请求协议(允许完全定制的解决方案)
  • 一个 GRPC 协议(允许完全定制的解决方案)

初步设计提案

在此存储库中包含的是 TpfsKrypt 可能看起来像的初步设计提案。请参阅设计提案文档

Rust 文档

如果您在 GitLab 页面 URL 上发现这些文档更容易使用,请访问: https://transparentincdevelopment.gitlab.io/product/libs/tpfs_krypt/tpfs_krypt/index.html

使用此包

以下是使用 KeyManager 管理密钥和签名消息的示例。更多详情请参阅 Rust 文档。

KeyManager 接口

这是 lib.rs 中的 trait。这是您从这个包中主要需要与之交互的内容。请参阅rust 文档

以下是一个使用库的基本示例

use std::{path::PathBuf, fs};
use tpfs_krypt::{
    config::{KeyManagerConfig, KryptConfig},
    errors::KeyManagementError,
    from_config, FileKeyManagerConfig, KeyType, secrecy::Secret,
    sp_core::{crypto::{DEV_PHRASE, Pair, Ss58Codec}, sr25519}
};

let path = PathBuf::from("/tmp/krypt/keypairs/");
if !path.exists() {
    fs::create_dir_all(&path).unwrap();
}

let config = KryptConfig {
    key_manager_config: KeyManagerConfig::FileKeyManager(FileKeyManagerConfig {
        keypair_directory_path: path.into_os_string().into_string().unwrap(),
    }),
};

let mut key_manager = from_config(config)?;
let secret_phrase = Secret::new(format!("{}//Xand", DEV_PHRASE));
let address = key_manager.import_keypair(secret_phrase, KeyType::SubstrateSr25519)?;
let signature = key_manager.sign(address.as_ref(), b"My important message that can be verified was done by me via my public address.")?;
let signature_bytes: &[u8] = signature.as_ref().as_ref();

// You can generate the address yourself with the code below.
let pair = sr25519::Pair::from_string("//Xand", None)?;
assert_eq!(pair.public().to_ss58check(), address.id.value);

指定哪个 KeyManager

初始化您正在处理的 KeyManager 类型。这可以通过以下两种方式之一完成

  • 名为 krypt.toml 的配置文件位于指定的路径,以及可选的前缀为 KRYPT 的环境变量
  • 直接使用配置结构。

在这里您可以找到一个使用文件密钥管理器的示例,但其他示例可以在示例目录中找到。

[key_manager_config.FileKeyManager]
keypair_directory_path = "/etc/keypairs"

假设它保存为 /etc/xand-api/krypt.toml 那么创建一个KeyManager将是

use tpfs_krypt::{from_config_path, KeyType};

let key_manager = from_config_path("/etc/xand-api/");
let has_xand_key = key_manager.has_address("5Cqm7KKdm8MB7jR66mxKKcUAzKGFbZnYJqMvQQBpgC5P9C2W")?;

示例配置文件可以在 示例 文件夹中找到。

贡献

查看贡献文档 了解如何在crate中工作。

依赖项

~21–36MB
~696K SLoC