惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CERT Recently Published Vulnerability Notes
F
Fortinet All Blogs
有赞技术团队
有赞技术团队
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
量子位
博客园 - 聂微东
S
SegmentFault 最新的问题
月光博客
月光博客
爱范儿
爱范儿
罗磊的独立博客
博客园_首页
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
G
GRAHAM CLULEY
大猫的无限游戏
大猫的无限游戏
K
Kaspersky official blog
小众软件
小众软件
Simon Willison's Weblog
Simon Willison's Weblog
T
Threatpost
美团技术团队
T
The Blog of Author Tim Ferriss
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
C
Cyber Attacks, Cyber Crime and Cyber Security
酷 壳 – CoolShell
酷 壳 – CoolShell
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cisco Blogs
P
Proofpoint News Feed
PCI Perspectives
PCI Perspectives
Know Your Adversary
Know Your Adversary
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
T
Tor Project blog
S
Security Affairs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Vercel News
Vercel News
博客园 - Franky
IT之家
IT之家
Security Archives - TechRepublic
Security Archives - TechRepublic
AI
AI
O
OpenAI News
N
News and Events Feed by Topic
Y
Y Combinator Blog
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hugging Face - Blog
Hugging Face - Blog

GoodBoyboy 's Blog|惬意小屋-点滴记忆

回家吵的第一场架 新设计了一个Astro主题 Cap,一个基于PoW的自托管验证码系统 公益服务迁移通知 一种基于argon2id算法与shamir算法的内存PoW(工作量证明)解密游戏 记忆里的屋子(一) Ubuntu 26.04 Btrfs+LUKS2安装 主域名服务不稳定通知 腾讯元宝客户端实习二面凉经 腾讯元宝客户端实习一面面经 对越来越多AI博文的看法 GoodBoyboy Blog、Talk联动成功 只有失去了才会懂得珍惜,但幸好我还没有失去 滴滴Android客户端一面凉经 GoodBoyboy 's Talk上线! Easy Drop——一个基于Gin开发的高性能、轻量级说说平台 Perfect Pic —— 一个基于 Gin 开发的高性能、轻量级图床 尘封了八年的祝福 欢迎OPPO Pad 4 Pro加入设备大家庭 官方Android11 Box系统的OrangePi 3B新增红外模块教程 家里也换成光纤了qwq 姜还是老的辣 布洛芬效果真不错 再见2025,你好2026 Canokey导入S/MIME邮箱证书并使用Thunderbird发送邮件 1.90$申请 WISeID S/MIME 邮箱证书 新购Intel AX210网卡 疯狂动物城2太好看了(无具体剧透) 进程调度——时间片轮转 效果是真的好,劲也是真的大 不买立省100% 十月小记 新增外设漫步者G1500bar 欢迎招行万事达加入卡包大家庭 博客十周年啦🎉 ESP32 S3开发小结 ESP32 S3外设小记 Arduino+VSCode开发ESP32-S3 EPS32-S3刷入MicroPython EPS32 S3刷入Picokeys Debian13安装Nvidia驱动 现在小孩都这么早熟么。。。 《动物迷城》二周目通关! Bing索引终于恢复了 家里蹲大学开始招生! 家里蹲大学即将建校,欢迎各位莘莘学子来本校深造(doge 骑车去兜风~ OAuth2授权码、客户端凭证、PKCE、设备码授权流程详解 基于OIDC实现Authentik与阿里云RAM角色的联合身份认证 GitHub release以及Git Commit常用模板 实验室生活 阿里云角色SSO对接authentik进行单点登录 白嫖一年Gemini Pro 突然发现自己可能乳糖不耐受? Android第三方Passkey管理器探索 多线程我太爱你了,你个“大可爱” [公告]现评论区已支持使用emoji表情符号😊 Debian GRUB踩坑记——out of memory 为Debian KDE更换显示字体为思源黑体 Debian补全办公常用字体 Debian12 KDE Edge输入法问题 Debian KDE Plasma 5调整外接显示器亮度 Debian开玩Minecraft Debian KDE使用指纹传感器验证身份
OpenPGP邮件加密——关于测试邮件握手的思考
GoodBoyboy · 2025-11-26 · via GoodBoyboy 's Blog|惬意小屋-点滴记忆

前言

和网友互换了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的三次握手(