
dredge-cargo v0.11.1
加密的CLI保管库,用于笔记、配置、密钥和文件。搜索,不要整理。
这不是密码管理器。不是笔记应用。更不是深海海底异常标本分类来源登记册。但前两件事它做得比它们都好。开玩笑的(也不完全是)。
搜索,别整理。笔记、配置、密钥、秘密 — 从你的终端开始,只需五秒。
“别拿那些琐碎杂事来烦我。” —— 渔夫
go install github.com/DeprecatedLuar/dredge-cargo/cmd/dredge@latest
你从未见过的炫酷功能
- 加密存储 —— 克隆仓库,你只会看到一堆绝对的加密乱码。没有密码你根本不知道仓库里有什么。(我用了 AES-256-GCM + Argon2id)
- 即时搜索 —— 我自己写了个自定义模糊搜索算法,因为我懒得想,希望能毫秒级地在300多个条目中找到想要的那个。
- 存储任何东西 —— 笔记、脚本、dotfiles、图片、zip压缩包。只要是一个存在的文件,都可以存入 dredge。
- 实时文件链接 —— 很酷的功能:把任意条目符号链接到系统路径,这样你可以直接读取和编辑,或者通过 dredge 来操作。任何改动都会与仓库双向同步。
- Git 支持 —— 你拥有的私有仓库。只需
git clone,数据就到手了。 - 会话密码 —— 每个终端会话只需输入一次密码。之后就可以免密使用,直到你关闭终端。(请阅读安全部分以更好理解)
- 回收站 + 撤销 —— 删除的条目进入回收站。误删只需
dredge undo。
在 dredge 里存什么?
我不会评判你。那些只出现一次就让你头疼的 API 密钥、SSH 配置、AI 提示词、密码、可以直接执行的 shell 脚本、邮件模板?、dotfiles(虽然有点怪但能用)、zip 存档、电影清单、快捷访问的 URL 列表……
甚至《电锯人》第2章日文版的 合法 拷贝。(我可能恰好就存了那一份)
安装
Go
go install github.com/DeprecatedLuar/dredge-cargo/cmd/dredge@latest
确保 $GOPATH/bin(通常是 ~/go/bin)在你的 PATH 中。
通用
curl -sSL https://raw.githubusercontent.com/DeprecatedLuar/the-satellite/main/satellite.sh | bash -s -- install DeprecatedLuar/dredge-cargo:dredge
其他安装方法
手动安装
- 从 releases 下载适用于你系统的二进制文件
- 赋予执行权限:
chmod +x dredge-* - 移动到 PATH:
mv dredge-* ~/.local/bin/dredge
从源码构建
git clone https://github.com/DeprecatedLuar/dredge-cargo
cd dredge-cargo
go build -o dredge ./cmd/dredge
mv dredge ~/.local/bin/
快速开始
# 用已有的 git 远程初始化
dredge init yourusername/vault # GitHub 简写
# 或:dredge init [email protected]:you/vault.git
# 添加第一个条目
dredge add "OpenAI Key" -c "sk-..." -t keys api # 不加 -c 会打开编辑器
# 搜索它
dredge search openai
# 推送到 git
dredge push
用法
# 添加任何东西
dredge add My SSH Config -t ssh dotfiles --import ~/.ssh/config
dredge add "Master Architect Prompt" --import prompt.md -t ai prompts
dredge add "Watchlist" -c "Dune 2, Oppenheimer..." -t lists
dredge add "project-backup" --import project.tar.gz # 二进制文件也行 :D
# 搜索 —— 随便输点什么你记得的
dredge search prompt
dredge search aws key
dredge search ssh
# 查看、编辑、删除
dredge view <id>
dredge edit <id>
dredge rm <id>
dredge undo # 找回来
# 搜索结果带有编号 —— 直接输入编号即可查看
dredge search ssh # 显示:1. [xKP] SSH Config 2. [mNq] SSH Key
dredge 1 # 直接查看
# Git 同步
dredge push
dredge pull
dredge sync # pull + push
工作原理
“我无法想象深处藏着什么。” —— 灯塔看守人
好吧,简单总结一下:
我决定使用两种主要的加密技术:Argon2id 和 AES-256(具体是 GCM 模式)。
选择 Argon2id,因为它是 RFC 9106 的推荐方案,也是 2015 年 PHC 的获胜者。就这么简单。 选择 AES 的 GCM 模式,因为它能让所有加密数据由于指纹的存在而无法被篡改。这个理由也够了。
目前,所有内容都以加密文件形式存储在 ~/.local/share/dredge/ 中。该目录也是一个 git 仓库(至少目前是这样)。所以 dredge push 会提交并推送所有内容以作备份。每个条目都是一个独立的加密 blob,带有一个随机的 3 字符 ID。我决定不暴露任何文件名,这样即使有人能看到你的文件,也不知道它们是什么。
加密流程
你的密码
+ 16 字节随机盐 ← 盐存储在 .dredge-key 中
→ Argon2id(64 MB 内存 · 4 线程 · 1 次迭代)
→ 32 字节主密钥(盐 + 密码 = 真正的密钥)
主密钥 + 条目内容(TOML 格式:标题、标签、内容)
→ AES-256-GCM,每次操作使用新的随机 12 字节 nonce
→ [12B nonce][密文 + 16B 认证标签]
→ 写入磁盘为 items/xKP (随机 ID,无扩展名)
因此,你的整个保险库共享同一个派生密钥(这意味着如果你丢失了密钥,你就会丢失数据,请务必保管好密钥)。每个条目使用相同的密钥,但各自拥有独立的随机 nonce。即使对相同内容加密两次,也会产生完全不同的密文。
各文件位置
~/.local/share/dredge/ ← 保险库(git 仓库)
├── .git/
├── .gitignore ← 排除 .spawned/ 和 links.json
├── .dredge-key ← 盐 + 加密验证字符串
├── items/
│ ├── xKP ← 加密的条目
│ ├── mNq ← 加密的条目
│ └── ...
├── .spawned/ ← 链接条目的明文副本
└── links.json ← 符号链接清单
所有加密文件和 .dredge-key 都存储在 git 仓库中,所有明文文件(你决定系统可读的那些)永远不会被跟踪。所以你可以随意处理它们。
会话模式
在终端中输入第一个命令后,派生的 32 字节密钥会被缓存在 $XDG_RUNTIME_DIR/dredge/$PPID/.key(仅 root 可访问)。
同一终端中之后的所有 dredge 命令都会使用缓存的密钥。这意味着你不再需要输入密码。每个终端根据父 PID 拥有自己独立的目录。因此,终端关闭后,密钥就会从磁盘上蒸发。
更深的技术细节
密钥派生 —— Argon2id: RFC 9106 推荐参数(64 MB 内存、4 线程、1 次迭代)。.dredge-key 中的盐并非秘密,它只是确保即使拥有这个文件,暴力破解你的密码也代价极高。保密你的密码才是关键,你懂的。
密码 —— AES-256-GCM: 对每次加密进行指纹标记。同时提供机密性和完整性。篡改密文不会解密出垃圾,而是会解密失败并报错。
密码验证: .dredge-key 中包含用你的主密钥加密的字符串 dredge-vault-v1。每次新会话时,dredge 解密此字符串来验证密码是否正确。如果从中没有得到 dredge-vault-v1,则密码错误,它在大约 100 毫秒内就会失败,而不是在执行操作中途才发现密码错误。
缓存的内容: 会话文件存储的是派生出的 32 字节密钥(密码+盐),而不是密码本身(我没那么蠢)。因此,即使有人在活动会话期间读取了 .key,他们也无法从其中恢复你的密码。
安全性
“空手回来总比永远回不来好。” —— 渔夫
威胁模型(这部分我用 AI 写的,但没错)
有人克隆了你的私有 git 仓库:
他们得到的是加密的 blob 和 .dredge-key。盐不是秘密——它的作用是使预计算攻击变得不可行。没有你的密码,条目就是一堆不透明的二进制数据。Argon2id 让离线暴力破解变得代价高昂。请使用强密码。