OpenPGP邮件加密——关于测试邮件握手的思考
前言
和网友互换了OpenPGP公钥,然后测试了下加密邮件,然后有了下面的思考:
如何“规范”的进行加密邮件测试?
结论
这里先给出我的结论:进行三轮握手。
Tips:以上结论用于子密钥分担不同职责的情况。
原因
OpenPGP密钥有四个职能:认证、加密、验证、签名。
一般来说,主密钥担任认证职责,三个子密钥分别担任加密、验证、签名职责。
目前市面上的OpenPGP 物理安全密钥会有三个插槽,分别对应存储三个子密钥,主密钥则离线冷存储。
当两个人互换OpenPGP公钥后,准备发送测试邮件测试邮件加密功能:
这里使用A和B区分用户
第一次握手:A向B(也可以是B向A)发测试邮件(发起握手请求)
A的邮件客户端会使用B的OpenPGP公钥中的“加密”子密钥的公钥,对邮件内容进行加密,并使用自己的OpenPGP公钥中的“签名”子密钥对邮件进行签名。
B在收到邮件后,邮件客户端会使用自己的OpenPGP公钥中的“加密”子密钥的私钥对邮件内容进行解密,并且使用A的OpenPGP公钥中的“签名”子密钥的公钥对签名进行检查,如果检查通过,那么代表:
A什么都还不知道(B还未作出回应)
B知道了自己的OpenPGP公钥中的“加密”子密钥功能正常(邮件客户端正常解密邮件),A的OpenPGP公钥中的“签名”子密钥功能正常(邮件客户端正确显示邮件签名)
第二次握手:B向A发送测试邮件
这次和第一次流程是反过来的
B的邮件客户端会使用A的OpenPGP公钥中的“加密”子密钥的公钥,对邮件内容进行加密,并使用自己的OpenPGP公钥中的“签名”子密钥对邮件进行签名。
A在收到邮件后,邮件客户端会使用自己的OpenPGP公钥中的“加密”子密钥的私钥对邮件内容进行解密,并且使用B的OpenPGP公钥中的“签名”子密钥的公钥对签名进行检查,如果检查通过,那么代表:
A知道了自己的OpenPGP公钥中的“加密”子密钥功能正常(邮件客户端正常解密邮件),B的OpenPGP公钥中的“签名”子密钥功能正常(邮件客户端正确显示邮件签名),自己的OpenPGP公钥中的“签名”子密钥功能正常(否则B也不会回复测试成功),B的OpenPGP公钥中的“加密”子密钥功能正常(否则B也不会回复测试成功)。
B还是仅知道自己的OpenPGP公钥中的“加密”子密钥功能正常,A的OpenPGP公钥中的“签名”子密钥功能正常
第三次握手:A向B发送完成测试邮件
同样是B在收到邮件后,邮件客户端会使用自己的OpenPGP公钥中的“加密”子密钥的私钥对邮件内容进行解密,并且使用A的OpenPGP公钥中的“签名”子密钥的公钥对签名进行检查,如果检查通过,那么代表:
A已知全部
B知道了自己的OpenPGP公钥中的“加密”子密钥功能正常(第一轮握手已知),A的OpenPGP公钥中的“签名”子密钥功能正常(第一轮握手已知),自己的OpenPGP公钥中的“签名”子密钥功能正常(不然A也不会回复测试成功),A的OpenPGP公钥中的“加密”子密钥功能正常(不然A也不会回复测试成功)。
整理成表格如下:
| 轮数 | A | B |
|---|---|---|
| 第一轮握手A->B | A什么都还不知道 | B的“加密”子密钥功能正常、A的“签名”子密钥功能正常 |
| 第二轮握手B->A | A的“加密”子密钥功能正常、B的“签名”子密钥功能正常、A的“签名”子密钥功能正常、B的“加密”子密钥功能正常 | B的“加密”子密钥功能正常、A的“签名”子密钥功能正常 |
| 第三轮握手A->B | A的“加密”子密钥功能正常、B的“签名”子密钥功能正常、A的“签名”子密钥功能正常、B的“加密”子密钥功能正常 | B的“加密”子密钥功能正常、A的“签名”子密钥功能正常、B的“签名”子密钥功能正常、A的“加密”子密钥功能正常 |
整理成mermaid如下:
sequenceDiagram
autonumber
participant A
participant B
Note over A,B: 握手过程开始
%% 第一轮
rect rgb(240, 248, 255)
Note left of A: 状态: A什么都还不知道
A->>B: 第一轮握手 (A -> B)
Note right of B: 状态: <br/>1. A的“签名”子密钥功能正常<br/>2. B的“加密”子密钥功能正常
end
%% 第二轮
rect rgb(255, 250, 240)
B->>A: 第二轮握手 (B -> A)<br/>(隐含B的1、2点状态)
Note left of A: 状态: <br/>1. A的“加密”子密钥功能正常<br/>2. B的“签名”子密钥功能正常<br/>3. A的“签名”子密钥功能正常<br/>4. B的“加密”子密钥功能正常
Note right of B: (B维持上一轮状态)
end
%% 第三轮
rect rgb(240, 255, 240)
A->>B: 第三轮握手 (A -> B)
Note left of A: (A维持全正常状态)
Note right of B: 状态: <br/>1. A的“加密”子密钥功能正常<br/>2. B的“签名”子密钥功能正常<br/>3. A的“签名”子密钥功能正常<br/>4. B的“加密”子密钥功能正常
end
至此,A与B都已知自己和对方的邮件签名和加密功能正常。
后记
怎么感觉像是TCP的三次握手(
Use this card to join MyBlog and participate in a pleasant discussion together .
Welcome to GoodBoyboy 's Blog,wish you a nice day .

