19个不稳定版本 (4个重大变更)
0.6.8 | 2024年7月31日 |
---|---|
0.6.2 | 2024年5月23日 |
0.5.0 | 2024年3月5日 |
0.2.2 | 2023年12月5日 |
0.2.1 | 2023年10月13日 |
在 加密学 中排名第159
每月下载量 150
在 2 crates 中使用
215KB
3.5K SLoC
nuts-container: 一个安全的存储库。
简介
nuts 库实现了一个安全的存储库,数据存储在容器中。容器被划分为加密块。因此,nuts 容器看起来像一个块设备。所有打开它所需的东西(例如密钥)都存储在容器中。该库具有丰富的API,因此可以轻松集成到您的应用程序中。
容器不管理加密数据本身。它被传输到后端,后端仅负责块的持久存储。这样,数据可以轻松存储在不同的媒体上或以不同的格式。密钥保留在容器中,无需存储在后端。
功能
支持以下加密算法:
- AES128-GCM
- AES128-CTR
- 无(实际上禁用了加密)
用于加密块的密钥(以及进一步的信息)与基于用户提供的密码生成的PBKDF2派生的包装密钥加密。
您有一个自包含的容器,这意味着所有打开容器所需的信息都存储在第一个块中。一些基本信息(如使用的加密算法和包装密钥算法)以未加密的形式存储,但大多数信息也加密在标题中。
示例
// Create a new container
use nuts_container::container::*;
use nuts_container::memory::MemoryBackend;
// Create a container with a memory backend.
// This backend stores the encrypted blocks in memory.
let backend = MemoryBackend::new();
// Let's create an encrypted container (with aes128-ctr).
// Because you are encrypting the container, you need to assign a
// password callback.
let kdf = Kdf::pbkdf2(Digest::Sha1, 65536, b"123");
let options = CreateOptionsBuilder::new(Cipher::Aes128Ctr)
.with_password_callback(|| Ok(b"abc".to_vec()))
.with_kdf(kdf.clone())
.build::<MemoryBackend>()
.unwrap();
// Create the container and fetch information.
// Here you can directly pass the backend instance to the create() method
// because MemoryBackend implements the Backend::CreateOptions trait.
let container = Container::<MemoryBackend>::create(backend, options).unwrap();
let info = container.info().unwrap();
assert_eq!(info.cipher, Cipher::Aes128Ctr);
assert_eq!(info.kdf, kdf);
// Open an existing container
use nuts_container::container::*;
use nuts_container::memory::MemoryBackend;
let (backend, kdf) = {
// In this example you create a container in a separate block.
// So, the created container is closed again when leaving the scope
// but the memory-backend still has stored its data.
let backend = MemoryBackend::new();
let kdf = Kdf::pbkdf2(Digest::Sha1, 65536, b"123");
let options = CreateOptionsBuilder::new(Cipher::Aes128Ctr)
.with_password_callback(|| Ok(b"abc".to_vec()))
.with_kdf(kdf.clone())
.build::<MemoryBackend>()
.unwrap();
// Create the container.
let container = Container::<MemoryBackend>::create(backend, options).unwrap();
let backend = container.into_backend();
(backend, kdf)
};
// Open the container and fetch information.
// Here you can directly pass the backend instance to the open() method
// because MemoryBackend implements the Backend::OpenOptions trait.
let options = OpenOptionsBuilder::new()
.with_password_callback(|| Ok(b"abc".to_vec()))
.build::<MemoryBackend>()
.unwrap();
let container = Container::<MemoryBackend>::open(backend, options).unwrap();
let info = container.info().unwrap();
assert_eq!(info.cipher, Cipher::Aes128Ctr);
assert_eq!(info.kdf, kdf);
相关项目
- nuts-directory 一个后端示例实现,其中所有数据都存储在目录层次结构中。
- nuts-archive 基于 nuts-container 的应用程序,其中文件存储在类似于
tar
的存档中。 - nuts-tool 一个命令行应用程序,用于维护 nuts-container 及其应用程序。
许可协议
您可以在此处查看完整的许可协议 这里。
本项目受 MIT 许可协议的约束。
依赖关系
~1.8–6MB
~135K SLoC