1 个稳定版本
7.1.8 | 2023年2月21日 |
---|
#21 在 #secret-management
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