8个重大版本

0.9.1 2023年5月16日
0.8.0 2023年4月18日
0.6.0 2022年10月7日

#580密码学

Download history 83/week @ 2024-07-28

83 每月下载量

MIT 许可证

110KB
2K SLoC

此目录包含Enquo核心加密库的Rust代码。

Rust Enquo核心有两个用途

  1. a 基于Rust的查询加密库;

  2. 以及其他语言中Enquo客户端功能的核心代码。

因此,此库中可能存在一些不那么“Rust化”的内容。这可能是由于我不知道更好的方法,或者因为这对于跨语言兼容性很重要。

使用方法

Enquo核心专注于使用从根中派生的密钥对字段数据进行加密和解密。

创建根的过程是初始化一个密钥,然后将该密钥提供给根。

use enquo_core::{KeyProvider, key_provider::Static, Root};
use rand::{Rng, SeedableRng};
// The generated key *must* be from a cryptographically secure random number generator;
// thread_rng() is not guaranteed to be secure enough.
use rand_chacha::ChaCha20Rng;
use std::sync::Arc;
# use enquo_core::Error;
# fn main() -> Result<(), Error> {

let key_data = ChaCha20Rng::from_entropy().gen::<[u8; 32]>();

let root_key = Static::new(&key_data)?;
let root = Root::new(Arc::new(root_key));
# Ok(())
# }

一旦你有了,你可以创建一个字段,它表示一组数据值对应的派生密钥。所有要一起比较的数据都必须使用相同的字段加密,但无关的值应使用不同的字段加密。

# use enquo_core::{KeyProvider, key_provider::Static, Root, Error};
# use rand::{Rng, SeedableRng};
# use rand_chacha::ChaCha20Rng;
# use std::sync::Arc;
#
# fn main() -> Result<(), Error> {
# let key_data = ChaCha20Rng::from_entropy().gen::<[u8; 32]>();
#
# let root_key = Static::new(&key_data)?;
# let root = Root::new(Arc::new(root_key))?;
let field = root.field(b"some_relation", b"some_field_name")?;
# Ok(())
# }

要加密一个值,你需要创建一个适当类型的价值密文,提供字段以便使用正确的密钥加密该值。

# use enquo_core::{KeyProvider, key_provider::Static, Root, Error};
# use rand::{Rng, SeedableRng};
# use rand_chacha::ChaCha20Rng;
# use std::sync::Arc;
use enquo_core::datatype::Text;

# fn main() -> Result<(), Error> {
# let key_data = ChaCha20Rng::from_entropy().gen::<[u8; 32]>();
#
# let root_key = Static::new(&key_data)?;
# let root = Root::new(Arc::new(root_key))?;
# let field = root.field(b"some_relation", b"some_field_name")?;

let ciphertext = Text::new("this is some text", b"test", &field)?;
assert_eq!("this is some text", ciphertext.decrypt(b"test", &field)?);
# Ok(())
# }

所有加密数据类型都使用Serde提供序列化。

有关完整API的更多详细信息,请参阅精美的手册

依赖关系

~4.5–6MB
~146K SLoC