18 个版本 (稳定版)
新 1.3.3 | 2024 年 8 月 14 日 |
---|---|
1.3.2 | 2024 年 7 月 1 日 |
1.3.1 | 2024 年 6 月 7 日 |
1.2.1 | 2024 年 1 月 27 日 |
0.1.0 | 2023 年 2 月 7 日 |
#49 在 密码学
每月 214 次下载
265KB
712 行
论文时代
使用 Age 格式(age-encryption.org/v1)简单安全地备份(较小的)秘密。
功能
- 接受来自文件或 stdin 的输入
- 使用密码短语加密该输入
- 输出带有加密密文二维码的 PDF 文件
- 支持 A4 和信纸两种纸张大小
- 二维码的错误纠正级别已优化(数据少→错误纠正多)
- 密码短语不会在 PDF 上显示,因此可以在不受信任的打印机上打印(例如在工作场所或图书馆)
- 您不需要 PaperAge 从备份中恢复:使用任何二维码扫描仪和 任何 Age 实现。
限制
- 最大输入大小约为 1.9 KiB,因为二维码无法编码任意大小的有效负载
- 目前仅支持基于密码的加密
威胁模型和用例
- 主要用例是安全地保存秘密,如 TFA 恢复代码
- 手动添加密码短语允许使用公共打印机,例如在图书馆、办公室、复印店等
- 为了额外的保护,记住密码短语或将它保存在打印件分开的地方
- 需要扫描和解密可以保护免受简单对手的攻击,即使密码短语就在那里(普通窃贼不会关心你的 Mastodon 账户)
- 如果您需要从国家或其他高级威胁中保护,请寻找其他方法
示例
这是输出 PDF 的样子(或另请参阅信纸版本)。二维码可以用 iPhone(或任何现代智能手机)轻松读取。
如果您想自己尝试解码,密码是 snakeoil
。
安装
提供适用于 macOS(Apple Silicon 和 Intel)、Linux(ARM 和 x86-64)和 Windows(x86-64)的发布构建版本。
虽然 Windows 构建版本 应该 在 Windows 10 和 11 上都能工作,但只有 Windows 11 被官方支持。
Homebrew
将 PaperAge Tap 添加到 Homebrew 以安装最新版本
brew tap matiaskorhonen/paper-age
brew install paper-age
二进制
从发布页面下载最新版本,解压缩文件,并将paper-age
二进制文件安装到PATH
中(例如/usr/local/bin
)。
# Download the latest release (pick your OS)
# macOS (Intel or Apple Silicon):
curl -Lo paper-age.tar.gz https://github.com/matiaskorhonen/paper-age/releases/download/v1.3.3/paper-age-universal-apple-darwin.tar.gz
# Linux (x86-64):
curl -Lo paper-age.tar.gz https://github.com/matiaskorhonen/paper-age/releases/download/v1.3.3/paper-age-x86_64-unknown-linux-gnu.tar.gz
# Linux (ARM):
curl -Lo paper-age.tar.gz https://github.com/matiaskorhonen/paper-age/releases/download/v1.3.3/paper-age-aarch64-unknown-linux-gnu.tar.gz
# Verify the artifact attestation using the GitHub CLI tool (optional)
gh attestation verify paper-age.tar.gz --repo matiaskorhonen/paper-age
# Extract the files
tar -xf paper-age.tar.gz
# Install the binary in /usr/local/bin
sudo install paper-age /usr/local/bin/
# Or: sudo mv paper-age /usr/local/bin/
Cargo
如果您已安装Rust,可以使用Cargo安装PaperAge。
cargo install paper-age
工件证明
从v1.3.1版本开始,PaperAge发布版本具有工件证明。证明使用GitHub的工具生成。
用法
paper-age [OPTIONS] [INPUT]
参数
<INPUT>
— 读取文件的路径。默认为标准输入。最大 ~1.9KB。
选项
-
-t
,--title <TITLE>
— 页面标题(最多64个字符)默认值:
PaperAge
-
-n
,--notes-label <NOTES_LABEL>
— 二维码下方的备注标签(最多32个字符)默认值:
Passphrase:
-
--skip-notes-line
— 跳过备注占位符行(例如:Passphrase: ________) -
-o
,--output <OUTPUT>
— 输出文件名。使用-表示标准输出。默认值:
out.pdf
-
-s
,--page-size <PAGE_SIZE>
— 纸张大小 [默认:a4
] [可能值:a4
,letter
] -
-f
,--force
— 如果输出文件已存在,则覆盖它 -
-g
,--grid
— 绘制网格模式以调试布局问题 -
--fonts-license
— 打印嵌入字体的许可证 -
-v
,--verbose...
— 每次出现时更多输出 -
-q
,--quiet...
— 每次出现时更少输出 -
-h
,--help
— 打印帮助信息 -
-V
,--version
— 打印版本
备注/密码字段
二维码下方的备注字段可以使用--notes-label <TEXT>
和--skip-notes-line
参数进行自定义。标签长度没有强制限制,但最终文本可能会溢出页面边界。
示例
-
打印提示的占位符而不是密码
paper-age --notes-label="Hint:"
-
打印时间戳而不是备注字段
paper-age --notes-label="Created at: $(date -Iseconds)" --skip-notes-line
压缩
PaperAge对输入文件类型完全无关。如果您需要压缩更多数据,可以在将其传递给PaperAge之前对输入文件进行压缩,例如
gzip --best --stdout in.txt | paper-age --output=compressed.pdf --title="in.txt.gz"
压缩比率因输入数据而异,因此是否值得这样做取决于您。
扫描二维码
在iOS上,最好使用控制中心的代码扫描仪而不是相机应用。代码扫描仪允许您将二维码内容复制到剪贴板,而不仅仅是搜索它。
在Android上,内置的相机应用应允许您将二维码内容复制到剪贴板。Google Lens应用似乎也能正常工作。
开发
在本地上运行git的最新版本,假设您已经安装了Rust
- 拉取此仓库
- 运行测试:
cargo test
- 获取帮助:
cargo run -- -h
- 从标准输入加密:
echo "Hello World" | cargo run -- --title="secrets from stdin" --out="stdin.pdf"
- 以最大详细程度运行:
echo "Hello World" | cargo run -- -vvvv
发布
在git中标记新版本时,在GitHub上编译并发布发布版本。
使用cargo release标记并发布新版本,例如
cargo release 1.2.3
⚠️ 向命令中添加--execute
以实际执行发布。
许可证 & 致谢
PaperAge在MIT许可证下发布。有关详细信息,请参阅LICENSE.txt。
包含SIL Open Font许可证的IBM Plex Mono字体。请参阅IBMPlexMono-LICENSE.txt。
使用来自github.com/str4d/rage的Rust实现Age和printpdf库。
感谢Ariel Salminen为PaperAge图标。
依赖关系
~53MB
~648K SLoC