无状态 OpenPGP

出自 ArchWiki

无状态 OpenPGP (SOP) 是一种命令行界面 (CLI) 工具的标准,用于执行 OpenPGP 操作。它在一个 专门的 IETF 草案 中定义,其中概述了其特性和语法。

SOP 是一种对消息执行签名/验证和加密/解密操作的精简方法。所有操作的证书和/或密钥都必须显式指定。

通常私钥操作使用软件密钥。但是,硬件安全设备上的私钥材料也可以与某些 SOP 实现一起使用。

许多 SOP 实现都存在,并在互操作性测试套件中进行了交叉测试。

尽管实现提供的可执行文件名称不同,但它们都具有相同的 CLI,并且核心功能可以互换使用。

安装

有几种实现可用于安装

特性

虽然 SOP 提供了统一的界面,但各个实现可以自由地支持 OpenPGP 规范的不同子集的加密机制。可以支持不同版本的格式以及硬件支持的密钥。

无状态 OpenPGP 实现
软件包 RFC 4880 (+ RFC 6637) draft-koch-librepgp RFC 9580 硬件支持的密钥
gosop
rsop
rsop-oct
sequoia-sop

硬件设备支持

当使用硬件安全设备时,通常指定私钥材料的 SOP 参数改为仅指定公钥材料。

此公钥材料用作显式引用,用于定位和使用提供相应私钥材料的硬件设备。

技巧与诀窍

以下示例假设 SOP 可执行文件(例如 gosoprsoprsop-octsqop)的名称存储在环境变量 $SOP 中。

提示: 当使用 rsop-oct 时,可以使用位于 OpenPGP 卡 上的私钥材料。相关的私钥签名或解密密钥预计已添加到 OpenPGP 卡 设备(例如,使用 OpenPGP-card-tools),该设备已连接到使用 rsop-oct 的计算机。

创建私钥

要使用 用户 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
提示: 要使用 OpenPGP 卡 创建相同的签名,需要为 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
提示: 要使用 OpenPGP 卡 解密此消息,需要为 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-----
提示: OpenPGP 卡rsop-oct 的使用方式与#创建分离签名中概述的示例类似。

参见