12个版本
0.1.1 | 2022年7月20日 |
---|---|
0.1.0 | 2021年1月4日 |
0.0.10 | 2020年3月16日 |
0.0.9 | 2019年12月5日 |
0.0.1 | 2018年8月1日 |
#552 在 加密学
1,736 每月下载量
在 14 个crate中(6个直接)使用
59KB
591 行
注意:此crate仍在开发中,API可能直到稳定化之前都会发生变化
Rust库:正确的马电池固定件
这是一个基于单词表的安全、易用、可配置和可扩展的密码生成库,通常称为diceware。
名称 chbs
是众所周知的“正确的马电池固定件”密码的缩写,该密码起源于上面显示的XKCD漫画。
此库使用加密安全的随机化,可用于生成秘密密码*。
特性
- 简单安全密码生成
- 可配置的生成方案以满足您的需求
- 使用内置或自定义单词表
- 计算密码熵
- 易于使用的抽象API
- 非常易于扩展,可以按照您喜欢的任何方式设置
要求
- Rust 1.42或更高版本(带有
std
)
待办事项
在稳定化之前需要考虑以下事项
- 使用安全的字符串?
- 额外的样式和配置选项
- 添加数字
- 添加特殊字符
- 不同的分隔符
- 生成的单词(基于字符序列)
- 用相似外观的序列替换字符(
a
到4
,o
到()
)
概念
由于此crate中的密码生成系统被彻底抽象化,因此了解此crate中使用的概念非常重要。
以下是密码生成所需的条件
Scheme
定义密码的生成方式。密码仅通过方案生成。Scheme
包含表示密码如何构建和样式的组件。存在四种类型的组件,定义密码生成步骤。对于某些类型必须定义,对于其他类型任何数量都行WordSetProvider
(必需1
):提供用于密码中的单词列表。WordStyler
(>=0
必需): 样式密码短语,例如,首字母大写。PhraseBuilder
(1
必需): 从一组密码短语词中构建一个短语。PhraseStyler
(>=0
必需): 样式整个密码短语。
需要理解的内容
- 密码短语生成方案通常通过使用配置结构来创建。这种结构将提供各种可配置字段,并基于它构建相应的方案以生成密码短语。
生成密码短语的一般步骤
- 构建并配置配置结构,例如
BasicConfig
。 - 配置结构创建相应的密码短语生成方案。
- 使用该方案生成所需数量的密码短语。
- 相反,可以使用
passphrase()
辅助方法生成不带配置的密码短语,以方便使用。
看看,这并不困难,但允许极大的可扩展性。你可能不会使用这个包提供的大多数功能。
查看 BasicConfig
了解如何配置您的第一个密码短语生成器。
其他需要了解的内容
- 此包提供了一组用于特定任务的组件,可以构建自定义组件。
- 此包提供了一个
WordList
结构,用于存储静态词表,可以使用内置的词表或从指定的文件加载词表。 - 可以根据
WordList
构造一个WordSampler
,以允许以均匀的方式随机采样单词。这样的采样器通常用作配置结构中的单词提供者。
示例
以下是如何使用此包的一些基本示例。
首先在您的 Cargo.toml
中将 chbs
添加为依赖项
[dependencies]
chbs = "0.0.8"
使用辅助函数应用库默认值生成不带配置的密码短语(passphrase.rs)
extern crate chbs;
use chbs::passphrase;
println!("Passphrase: {:?}", passphrase());
使用 cargo run --example passphrase
运行它。
推荐使用配置生成密码短语,以下是一个基本示例(passphrase_config.rs
)
extern crate chbs;
use chbs::{config::BasicConfig, prelude::*, probability::Probability};
// Build a custom configuration to:
let mut config = BasicConfig::default();
config.words = 8;
config.separator = "-".into();
config.capitalize_first = Probability::from(0.33);
config.capitalize_words = Probability::half();
let mut scheme = config.to_scheme();
println!("Passphrase: {:?}", scheme.generate());
println!("Entropy: {:?}", scheme.entropy().bits());
使用 cargo run --example passphrase_config
运行它。
使用单词采样器根据词表生成无限数量的随机单词(sampler.rs)
extern crate chbs;
use chbs::word::WordList;
let words = WordList::default();
let sampler = words.sampler().into_iter();
for word in sampler.take(8) {
println!("Sampled word: {:?}", word);
}
使用 cargo run --example sampler
运行它。
查看 ./examples
目录中的所有示例。
附加说明
- 此包仍在开发中,因此应谨慎使用
- 此库生成的密码或密码短语的质量不提供任何保证
- 熵计算可能存在错误
许可证
本项目采用MIT许可证发布。请查看LICENSE文件获取更多信息。
依赖项
~2.5MB
~54K SLoC