#encryption #encryption-key #envelope #aws-kms #aes-gcm #provider #ciphertext

已删除 封装器

一个非常简单的使用 aes-gcm 的封装器加密库

0.2.0 2022年5月26日

#6 in #ciphertext

GPL-3.0 许可证

31KB
713

封装器

使用 aes-gcm 和一个 KeyProvider 特性实现的 Rust 中的一个非常简单的封装器加密库。可以为 AWS KMS、Azure KeyVault、Hashicorp Vault 等实现 KeyProviders,但这个库只提供了一个可以与本地密钥一起使用的 SimpleKeyProvider

注意:此库非常初级,不适合生产使用


lib.rs:

封装器是一个非常简单、可以安全加密数据的封装器加密库,可以使用 AWS KMS 等外部密钥提供者。它使用数据密钥的概念来加密消息,但这些数据密钥本身由密钥加密密钥(或 KEK,有时也称为客户主密钥)加密,生成的密文与加密数据一起存储(称为“包装”的数据密钥)。

使用方法

注意:这是 Alpha 软件不应在生产中使用

使用本地密钥提供者加密消息

SimpleKeyProvider 允许使用本地密钥进行封装加密。

use enveloper::{EnvelopeCipher, SimpleKeyProvider};

#
use hex_literal::hex;
let kek: [u8; 16] = hex!("00010203 04050607 08090a0b 0c0d0e0f");
let key_provider = SimpleKeyProvider::init(kek);

let cipher: EnvelopeCipher<SimpleKeyProvider> = EnvelopeCipher::init(key_provider);
let er = cipher.encrypt(b"hey there monkey boy").await.unwrap();
#

编码密文

#
#
#
#
let bytes = er.to_vec().unwrap();
hex::encode(&bytes);

解密密文

use enveloper::{EnvelopeCipher, SimpleKeyProvider, EncryptedRecord};

#
#
#
#
let dec = EncryptedRecord::from_vec(bytes).unwrap();
let pt = cipher.decrypt(&dec).await.unwrap();

assert!(std::str::from_utf8(&pt).unwrap() == "hey there monkey boy");
#

依赖项

~28MB
~545K SLoC