crgimenes/inro
GitHub: crgimenes/inro
一款无需 gpg 的自包含 PGP 桌面应用,内置 OpenPGP 引擎,提供消息加密、签名、验证和解密功能。
Stars: 4 | Forks: 0
# inro
独立的桌面端 PGP 工具:加密、签名、验证和解密
消息,并保存你联系人的密钥。内置 OpenPGP 引擎。
无需安装任何其他内容;永远不需要 gpg。

*inro*(印籠)是过去挂在腰带(obi)上的一种小盒子,用来携带
个人印章及其印泥。而这个软件则用来装载你的数字印章。
使用 Go 编写,不依赖 cgo。窗口使用 [glaze](https://github.com/crgimenes/glaze)(通过 purego 实现的平台级 webview),UI 采用内嵌 HTML,加密部分使用
[ProtonMail/go-crypto](https://github.com/ProtonMail/go-crypto),配置管理
使用 [Filo](https://github.com/crgimenes/filo)。仅有一个可执行文件,旁边
没有任何附属文件。
## 安装说明
在 macOS 上,使用 [Homebrew](https://brew.sh):
```
brew install --cask crgimenes/tap/inro
```
或者从 [发布页面](https://github.com/crgimenes/inro/releases) 下载二进制文件:
macOS 应用已签名并经过公证,Windows 和 Linux 提供普通的
可执行文件。从源码构建只需要 Go;在任何平台上
都不需要 C 工具链:
```
go install github.com/crgimenes/inro@latest
```
inro 自带加密引擎和 UI;它从系统借用的唯一东西是
操作系统已经附带的 webview。macOS 自带该组件,Windows 使用 Edge
WebView2 运行时(存在于任何现代版本的 Windows 上),而 Linux 需要带有
WebKitGTK 的 GTK(`libwebkit2gtk-4.1`,或者 GTK 4 使用的 `libwebkitgtk-6.0`;只需安装一个包即可)。
## 运行说明
首次运行时,inro 会打开 **Keys** 页面。你可以直接在那里
生成你自己的密钥对:EdDSA/Curve25519,可选的有效期,以及在
二次确认窗口中设置的密码(并提供真实的强度评估)。你也可以导入
已有的密钥:粘贴 ASCII 字符串格式的密钥或打开 `.asc` 文件。
之前在用 gpg?在那里导出,然后在这里导入这些文件;inro 永远不会直接与
gpg 通信:
```
gpg --armor --export-secret-keys you@example.com > my-key.asc # your keys
gpg --armor --export > contacts.asc # public keys of everyone else
```
每个密钥都有自己的专属页面,包含昵称、备注、导出和删除功能。此外还有
**认证** 功能:用你的密钥为你朋友的密钥签名,以证明
你已经核实过该密钥确实属于他们。认证信息会随着导出的
密钥一起传输,并且 inro 会显示在你持有的密钥中,有谁为
当前密钥作担保。
接下来所有的操作都在 **Message** 页面上进行:一个文本框,就像一个
只有一个输入框的翻译软件。不需要选择模式,通常也无需点击任何内容,
因为粘贴到文本框中的内容已经决定了它将受到怎样的处理:
- **已签名的消息**在粘贴的瞬间就会自动验证,并且易读的
明文会直接替换原内容显示出来。零点击操作。
- **已加密的消息**自带接收方信息,因此 inro 会自动找出
你手中的哪把密钥可以将其打开。如果该密钥不需要密码,或者你
最近刚输入过,消息就会被当场解密。否则,inro 唯一会向你提出的
问题将出现在其专属的窗口中(采用 pinentry 样式):如果
密码输入错误会在那里直接提示,并且该窗口会保留以供
再次尝试。受共享密码(而非密钥)保护的消息同样适用。
- **发送纯文本**:选择接收人进行 *Encrypt*,开启 *Sign as*
进行签名,或者两者兼顾。加密生成的 ASCII 格式内容会替换掉你的文本,
且文本呈全选状态以备复制,如果你还需要原文,旁边有链接可以恢复它。
Open 可从文件中加载消息;Save 可将当前文本框中的内容保存为文件。相同的
操作也存在于应用程序的菜单栏中,并且按下 Cmd/Ctrl+Enter 可在任何位置
立即执行主要操作。
在解密或验证过程中发现的任何签名都会显示在
结果的上方。只有当签名者的密钥存在于你的
密钥环中时,签名才会被报告为有效。“有效”意味着消息未被
篡改,并且确实是由该密钥签名的。至于该密钥是否真的属于它所声称的
主人,这仍需由你自己来判断。
你的密码永远不会被持久化存储。在你输入密码后,已解锁的密钥会在
内存中保留 `KeyCacheSeconds` 设定的时间(默认 5 分钟,设为 0 则禁用缓存),因此在连续的高强度操作中只会提示输入一次;过期后,
再次进行操作时会重新要求输入密码。
## 文件
```
~/.config/inro/
init.filo ; configuration (optional)
keyring.filo ; nicknames and notes
keys/
.asc
```
密钥以 PGP 自带的 ASCII 格式存储,每个密钥一个文件,因此
`gpg --import ~/.config/inro/keys/*.asc` 是有效的,没有任何内容被
死锁在这个应用程序里。`keyring.filo` 仅保存密钥材料本身无法携带的信息:
你为密钥附加的昵称和备注。这两个存储位置在密钥指纹或
用户 ID 上永远不会产生分歧。
遵循 `$XDG_CONFIG_HOME` 环境变量。工作目录中的 `inro_init.filo` 文件
优先级高于 `~/.config/inro/init.filo`。
## 配置项
所有设置都是可选的;以下为默认值。
```
(set Width 1024)
(set Height 720)
(set Debug #f) ; open the webview developer tools
(set DataDir "~/.config/inro") ; where keys and metadata live
(set DefaultKey "") ; fingerprint pre-selected in the UI
(set KeyCacheSeconds 300) ; how long a typed passphrase keeps the key unlocked
```
## 项目状态
处于早期阶段但功能完备:密钥生成(含有效期设置)、导入(粘贴、文件)、
导出、删除、认证、加密、解密(包含受密码保护的消息)、
签名、验证、自动密钥选择,以及已解锁密钥缓存功能均可正常
使用。暂未支持的功能:密钥撤销、延长现有密钥的有效期。
标签:EVTX分析, Go语言, PGP, 加密工具, 多模态安全, 密码学, 手动系统调用, 日志审计, 桌面应用, 程序破解