在古代,信件在寄出前,寄信人会在封口处滴上一滴滚烫的蜡,盖上家族的戒指印章。这叫「火漆印 ( 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 ) 」 方案。

核心逻辑

  1. 生成端 ( 本地 )
    每次发布前,自动化脚本会调用我本地的 GPG 私钥,对每一篇 Markdown 文章进行哈希计算,生成一个对应的 .asc 签名文件。

    • 源文件posts/hello-world/index.md
    • 签名文件signatures/posts/hello-world/index.md.asc
  2. 发布端 ( Cloudflare )
    签名文件作为静态资源,随文章一起分发到全球边缘节点。

  3. 展示端 ( 前端 UI )
    在文章的元信息栏 ( Meta ) 中,增加一个 PGP SIGNED 的徽章。

为什么不显示 “Verified”?

你可能会注意到,我用的词是 Signed ( 已签名 ) 而不是 Verified ( 已验证 )

这是一种技术诚实

  • Verified 意味着服务器已经在后台帮你验过了,你必须无条件信任服务器。
  • Signed 意味着:「我提供了数学证明 ( 签名文件 ) ,信不信由你。如果你懂技术,你可以下载回去,用我的公钥亲自验证。」

这就是 Web3 的精神:Don’t trust, verify. ( 不轻信,去验证。 )

3. 视觉呈现

为了配合博客整体的 Profile Mode 极简风格,我将签名入口设计成了一个低调的胶囊徽章。

它平时安静地待在日期旁边,只有当你把鼠标放上去时,它才会亮起博客的主色调——极客蓝 ( #3b82f6 ),提示你可以下载签名文件。

它不喧宾夺主,但一直都在。就像那个火漆印,平时只是装饰,关键时刻却是信誉的底牌。

4. 结语

在这个由 0 和 1 构成的虚拟世界里,私钥 ( Private Key ) 是我们在赛博空间里唯一的、绝对的权力杖。

给博客文章签名,或许在当下看来是一种「多余」的极客浪漫。但在更长的时间维度上,这是对自己思想结晶的一种庄重承诺:

这些文字,源于我手,以此为证。


( 本文已通过 GPG 签名,你可以点击标题下方的徽章下载验证。 )