在古代,信件在寄出前,寄信人会在封口处滴上一滴滚烫的蜡,盖上家族的戒指印章。这叫「火漆印 ( Wax Seal ) 」。
它有两个作用:证明身份 ( 只有我有这个戒指 ) 和 防篡改 ( 蜡封完好,说明信未被拆过 ) 。
在 2025 年的今天,互联网已经变成了信息的洪流。文章可以被随意复制、粘贴、甚至被 AI 洗稿篡改。作为一名维护了 17 年博客的博主,我开始思考一个问题:
如何给我的数字资产,盖上那个独一无二的「火漆印」?
于是,我在博客 ( ChowRay.org ) 中引入了 GPG ( GNU Privacy Guard ) 签名机制。
1. HTTPS 与 GitHub Verified 还不够吗?
有人会问,网站已经有 HTTPS 锁了,GitHub 提交也有 Verified 绿标了,为什么还要多此一举?
- HTTPS 保护的是 「传输管道」。它证明了数据在从 Cloudflare 传到你屏幕的过程中没被篡改,但它不能证明「数据在源头就是真诚的」。
- GitHub Verified 保护的是 「代码仓库」。它证明了这堆代码是我提交的,但对于读者来说,验证门槛太高。
我需要的,是针对 「内容本身 ( Content ) 」 的确权。
2. 架构思路:分离式签名
我不希望在网页里引入臃肿的 JavaScript 加密库来搞「在线验证」,那是拖慢网速的「安全剧场」。我采用了更符合极客精神的 「分离式签名 ( Detached Signature ) 」 方案。
核心逻辑
生成端 ( 本地 ):
每次发布前,自动化脚本会调用我本地的 GPG 私钥,对每一篇 Markdown 文章进行哈希计算,生成一个对应的.asc签名文件。- 源文件:
posts/hello-world/index.md - 签名文件:
signatures/posts/hello-world/index.md.asc
- 源文件:
发布端 ( Cloudflare ):
签名文件作为静态资源,随文章一起分发到全球边缘节点。展示端 ( 前端 UI ):
在文章的元信息栏 ( Meta ) 中,增加一个 PGP SIGNED 的徽章。
为什么不显示 “Verified”?
你可能会注意到,我用的词是 Signed ( 已签名 ) 而不是 Verified ( 已验证 )。
这是一种技术诚实。
- Verified 意味着服务器已经在后台帮你验过了,你必须无条件信任服务器。
- Signed 意味着:「我提供了数学证明 ( 签名文件 ) ,信不信由你。如果你懂技术,你可以下载回去,用我的公钥亲自验证。」
这就是 Web3 的精神:Don’t trust, verify. ( 不轻信,去验证。 )
3. 视觉呈现
为了配合博客整体的 Profile Mode 极简风格,我将签名入口设计成了一个低调的胶囊徽章。
它平时安静地待在日期旁边,只有当你把鼠标放上去时,它才会亮起博客的主色调——极客蓝 ( #3b82f6 ),提示你可以下载签名文件。
它不喧宾夺主,但一直都在。就像那个火漆印,平时只是装饰,关键时刻却是信誉的底牌。
4. 结语
在这个由 0 和 1 构成的虚拟世界里,私钥 ( Private Key ) 是我们在赛博空间里唯一的、绝对的权力杖。
给博客文章签名,或许在当下看来是一种「多余」的极客浪漫。但在更长的时间维度上,这是对自己思想结晶的一种庄重承诺:
这些文字,源于我手,以此为证。
( 本文已通过 GPG 签名,你可以点击标题下方的徽章下载验证。 )