无状态 OpenPGP
Stateless OpenPGP (SOP) 是一套用于命令行界面 (CLI) 工具执行 OpenPGP 操作的标准。它定义在一份专门的 IETF 草案中,其中概述了其特性和语法。
SOP 是一种精简的消息签名/验证以及加密/解密操作方法。所有操作必须明确指定证书和/或密钥。
通常私钥操作使用软件密钥。然而,某些 SOP 实现也可以使用硬件安全设备上的私钥材料。
目前存在许多 SOP 实现,并在一个互操作性测试套件中进行了交叉测试。
尽管不同的实现提供的可执行文件名称不同,但它们都具有相同的 CLI,其核心功能可以互换使用。
安装
有几种可供安装的实现:
特性
虽然 SOP 提供了统一的接口,但各实现可以自由地支持 OpenPGP 所定义的加密机制的不同子集。此外,可能支持不同版本的格式以及硬件备份密钥。
| 软件包 (Package) | RFC 4880 (+ RFC 6637) | draft-koch-librepgp | RFC 9580 | 硬件备份密钥 |
|---|---|---|---|---|
| gosop | 是 | 否 | 是 | 否 |
| rsop | 是 | 否 | 是 | 否 |
| rsop-oct | 是 | 否 | 否 | 是 |
| sequoia-sop | 是 | 否 | 是 | 否 |
硬件设备支持
在使用硬件安全设备时,通常指定私钥材料的 SOP 参数将仅指定公钥材料。
该公钥材料作为一个明确的引用,用于定位并使用提供相应私钥材料的硬件设备。
技巧与提示
以下示例假设 SOP 可执行文件的名称(例如 gosop, rsop, rsop-oct 或 sqop)存储在环境变量 $SOP 中。
rsop-oct 机器的 OpenPGP 卡设备中(例如使用 OpenPGP-card-tools)。创建私钥
要使用 用户 ID <archie@example.org> 创建一个 OpenPGP 可传输秘密密钥(即私钥),请使用:
$ $SOP generate-key "<archie@example.org>" > archie.tsk
提取证书
要从创建的可传输秘密密钥中提取证书(即公钥),请使用:
$ $SOP extract-cert > archie.cert < archie.tsk
创建分离签名
要为消息创建分离签名,请使用:
$ echo "Hello world" | $SOP sign archie.tsk > msg.sig
rsop-oct 需要被提供证书而不是私钥。$ echo "Hello world" | rsop-oct sign archie.cert > msg.sig
验证分离签名
要验证分离签名,请提供原始消息、签名以及 OpenPGP 证书。
$ echo "Hello world" | $SOP verify msg.sig archie.cert
2024-02-27T17:36:28Z 12b7169b5fc99d1a2d546b8755d1f4d8a355f3cb 12b7169b5fc99d1a2d546b8755d1f4d8a355f3cb mode:binary
加密消息
可以通过提供消息和接收者的 OpenPGP 证书来加密消息。
$ echo "Hello world" | $SOP encrypt archie.cert > encrypted.msg
解密消息
加密消息的接收者可以通过提供加密消息及其可传输秘密密钥来对其进行解密。
$ $SOP decrypt archie.tsk < encrypted.msg
Hello world
rsop-oct 需要被提供证书而不是私钥。$ rsop-oct decrypt archie.cert < encrypted.msg
Hello world
创建明文签名消息
可以通过提供消息和签名者的可传输秘密密钥来创建明文签名消息。
$ echo "Hello world" | $SOP inline-sign --as clearsigned archie.tsk
-----BEGIN PGP SIGNED MESSAGE----- Hello world -----BEGIN PGP SIGNATURE----- wnUEARYKAB0WIQQStxabX8mdGi1Ua4dV0fTYo1XzywUCZd4eOgAKCRBV0fTYo1Xz yyqJAQDUD/lbhqOHL/O0cjtytXQXnMOx5twW3FT3RJPlu9JZUAEA2OAMhzLmX6Bb mXz8Tu0eApqbxu64ksieL8YNN20IwQs= =77wU -----END PGP SIGNATURE-----