1 个不稳定版本

0.1.0 2023年11月10日

#1153密码学

自定义许可证

135KB
517

Rust CLI密码生成器

概述

本项目是一个用Rust编写的安全CLI密码生成器。
它通过包括随机易记词PIN号码在内的三种不同策略生成安全密码,同时提供香农熵和直观的密码强度。
许多其他配置可以通过传递来使其更难以破解。下面提供更多信息。

构建和运行说明

构建

  • 首先,请确保您已使用rustup安装了Rust工具链。
  • 您可以通过运行以下命令构建二进制文件:cargo build --release 来构建项目。
  • 您可以通过运行输出二进制文件 ./target/release/spg 来运行项目。
  • 可选:如果您在基于UNIX的环境下,可以将 ./target/release/spg 复制并粘贴到您的 /usr/local/bin/ 中。然后只需运行 spg

使用说明

Usage: spg [OPTIONS]

Options:
  -l, --length <LENGTH>
          Password length to be generated [default: 8]
  -g, --gen-type <GEN_TYPE>
          Password generation mechanism to be used [default: random] [possible values: random, pin, memorable]
  -n, --use-numbers
          Whether to use numbers in password
  -s, --use-symbols
          Whether to use special symbols in password
  -c, --use-capitals
          Whether to use capitalized letters in password
  -k, --capitalize-memorable-words
          Whether to capitalize generated words by chance
  -t, --capitalize-memorable-first-letter
          Whether to capitalize the first letter of generated words by chance
  -w, --words-count <WORDS_COUNT>
          The number of words included in memorable password [default: 5]
      --insecure-mode
          Run in insecure mode. The output can be redirected or piped to files or non terminal environments
  -h, --help
          Print help
  -V, --version
          Print version

以下是一个示例输出,适用于 spg -n -s -c -l 19 提示符


Shannon entropy: 118.35
Strength: 100.00
z67r81kNk*v~&ud5gjT
Hit Enter to exit

或者我们可以通过运行 spg -g memorable -w 4 提示符来有一个包含4个单词的易记密码

Shannon entropy: 51.70
Strength: 66.67
unwired-hungrily-spirited-encrypt
Hit Enter to exit

安全视角

数据保护

  • 已使用Secrecy crate的 Zeroise 功能来清除内存。此crate保证内存将被释放。
  • 已确保Secret类型不会意外地记录在任何地方,因为它们受到Secret类型的保护。
  • 禁止在 non-tty 环境下运行此程序,以防止意外记录或让恶意软件嗅探生成的密码。
  • 输出将在超时或接收到OS的任何SIG后丢弃并覆盖。

密码生成

  • 在随机策略中使用了从均匀分布中任意采样的方法,以减轻时间攻击。
  • 在二进制文件中嵌入EFF diceware单词列表以保持完整性。

开发视角

项目结构

本项目包含三个部分,包括 mainclipassword_generator。在 password_generator 中使用了策略模式,用于生成 RandomMemorablePin 密码。存在一个 assets 目录,其中包含用于diceware生成的EFF单词列表。

测试

  • 通过运行 cargo test 来运行测试用例。

漏洞及缓解措施

此代码不使用 mlock 和/或 mprotect 来防止操作系统在多种场景下将数据写入磁盘。

待办事项

  • 编写更多测试,增加覆盖率。
  • 未来应实现更多测试,包括安全测试。
  • 使用Bolero和模糊引擎来生成密码生成器的任意配置。
  • 实现 mlock 和/或 mprotect 以保护内存。

许可证

MIT许可证。

贡献

欢迎通过分叉本项目并创建PR来增强此项目。
如果您觉得它有用,请给它留下一个星号。

依赖项

约6-15MB
约175K SLoC