把一句话藏进证书公钥:一张「抗议用」的 TLS 证书
来源:maurycyz.com — 2026-11-08
📋 概述
作者对 CA 体系的抱怨有两点:ACME 流程麻烦、证书几个月就过期,而且签发本身就发生在明文连接上。他的抗议方式不是放弃加密,而是做一张「抗议证书」——把玩笑文字直接编进 TLS 证书的公钥模数里,让人一 openssl s_client 就能看见。做法是:随机选两个大素数做 p、q 得到 n,然后直接改写 n 的高半部分字节以承载 base64 消息,再把 q 修正为 n/p 取整后的下一个素数。由于 p、q 大小相近,对 q 的微小改动只影响乘积的低半部分,藏在 n 高位的消息得以幸存;base64 只按三字节分组,最多试四次就能对齐。
🔑 核心要点
- 证书里唯一由自己控制的部分是公钥,于是作者拿 2048 或 4096 位的模数当留言板,能塞下约 150 到 320 个 base64 字符。
- 关键是 q 可以事后修正:把 n 除以 p 后向上找下一个素数,因为 p、q 量级相近,改动只影响乘积低位,高位消息不受影响。
- 用 certbot --manual 加自建 CSR 就能让 CA 签下这张怪键,续期就是重跑一遍 ACME。
- 作者坦承这会降低私钥熵,也可能让 p、q 过于接近或 d 过小,不适合任何要紧用途,但服务公开网站足够——现代 TLS 有前向保密,私钥泄漏也仍需中间人。
💡 金句
我不会拿这些密钥去做任何要紧的事,但用来服务一个公开网站是完全够用的。
👍 0
👎 0
← 返回 Lobsters 首页