#qr #backup #passphrase #pdf #secret #input #paper

app paper-age

简单安全的秘密纸张备份

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密码学

Download history 143/week @ 2024-04-29 12/week @ 2024-05-20 286/week @ 2024-06-03 24/week @ 2024-06-10 7/week @ 2024-06-17 212/week @ 2024-07-01 2/week @ 2024-07-08 214/week @ 2024-08-12

每月 214 次下载

MIT 许可证

265KB
712

论文时代

使用 Age 格式(age-encryption.org/v1)简单安全地备份(较小的)秘密。

Rust build codecov GitHub release (latest SemVer) Crates.io

功能

  • 接受来自文件或 stdin 的输入
  • 使用密码短语加密该输入
  • 输出带有加密密文二维码的 PDF 文件
  • 支持 A4 和信纸两种纸张大小
  • 二维码的错误纠正级别已优化(数据少→错误纠正多)
  • 密码短语不会在 PDF 上显示,因此可以在不受信任的打印机上打印(例如在工作场所或图书馆)
  • 您不需要 PaperAge 从备份中恢复:使用任何二维码扫描仪和 任何 Age 实现

限制

  • 最大输入大小约为 1.9 KiB,因为二维码无法编码任意大小的有效负载
  • 目前仅支持基于密码的加密

威胁模型和用例

  • 主要用例是安全地保存秘密,如 TFA 恢复代码
  • 手动添加密码短语允许使用公共打印机,例如在图书馆、办公室、复印店等
  • 为了额外的保护,记住密码短语或将它保存在打印件分开的地方
  • 需要扫描和解密可以保护免受简单对手的攻击,即使密码短语就在那里(普通窃贼不会关心你的 Mastodon 账户)
  • 如果您需要从国家或其他高级威胁中保护,请寻找其他方法

示例

这是输出 PDF 的样子(或另请参阅信纸版本)。二维码可以用 iPhone(或任何现代智能手机)轻松读取。

A4 sheet with a title of ‘PaperAge’, a QR code, and a PEM encoded section

如果您想自己尝试解码,密码是 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] [可能值:a4letter]

  • -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

  1. 拉取此仓库
  2. 运行测试:cargo test
  3. 获取帮助:cargo run -- -h
  4. 从标准输入加密:echo "Hello World" | cargo run -- --title="secrets from stdin" --out="stdin.pdf"
  5. 以最大详细程度运行: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