KKDEMIAN

硬件只防偷,不防用:从 SSH 密钥到私钥安全

一篇博客记录了作者删掉所有磁盘上的 SSH 私钥、改用 YubiKey、TPM 与 Apple Secure Enclave 的过程。顺着往下推:硬件只解决了不可导出,在场确认、身份验证、所见即所签是另外三道门槛;SSH 能容忍剩下的风险,因为一次滥用的上限是一次登录,钱包不能。冗余上,SSH 登记多把独立的钥匙,单签钱包只能复制同一把(助记词);而在量子计算面前,公钥已经公开的密钥不需要被偷,不可导出也就不再是护城河。

思考

TL;DR

把私钥放进硬件,解决的是「被偷走」,不是「被借用」。攻击者控制了你的机器,偷不走 YubiKey 里的钥匙;但只要钥匙插着、又不要求按一下,攻击者可以用它签任何东西。SSH 能忍这个剩余风险,因为一次滥用的上限是一次登录;钱包忍不了,因为一次签名就是终局。

  • 四道门槛,不是一道。 不可导出、在场确认、身份验证、所见即所签。硬件天然只给第一道,第二、三道要你自己选,第四道 SSH 用不上、钱包离不开。
  • 「设备绑定」不等于「设备驻留」。 YubiKey 的 ed25519-sk 私钥从不离开设备;TPM 方案的私钥其实就在磁盘上,只是被 TPM 加密,而且不检查系统状态。
  • 免触摸的硬件钥匙,就是交易所热钱包的形状。 私钥在硬件里没有泄露,但谁控制了发起签名的那个服务,谁就能签。币安十月那次的初步根因正是如此。
  • 冗余有两种做法。 SSH 登记多把互相独立的钥匙,丢一把删一行;单签钱包只有一把钥匙,备份只能复制它——助记词就是一份可导出的完整私钥。
  • 量子面前,不可导出不再是护城河。 公钥已经公开的密钥不需要被偷:GitHub 把每个用户的 SSH 公钥挂在 github.com/<用户名>.keys,以太坊账户第一次转出后公钥就能从签名里恢复。OpenSSH 默认的后量子方案只保护会话的密钥协商,不保护签名。
  • 未来的私钥安全是「一组可撤换的钥匙」,不是「一把更难偷的钥匙」。 可撤换要求授权层能改:authorized_keys 天生如此,单签地址天生不行,多签与智能账户把它补了回来。

本文从 infected.systems 一篇 2026-11-04 的博客出发:作者删掉了所有磁盘上的 SSH 私钥,改用 YubiKey、TPM 和 Apple Secure Enclave 三种硬件方案。操作细节以原文和各工具文档为准;四道门槛的框架、与钱包的对照、量子一节是我加的。三种方案我没有逐一实测。


一、硬件到底改变了什么

传统做法是磁盘上一个设了密码的私钥文件。OpenSSH 用 bcrypt 派生的密钥加密它,文件本身泄露问题不大;但 ssh-agent 解密之后,私钥以明文待在内存里,直到会话结束。拿到 root 的攻击者可以把它从内存里取走——之后就是离线、无限期、在任何地方都能用。

硬件方案改变的正是这一点。私钥在安全芯片里生成,芯片只对外提供「用它签名」的接口,不提供「把它读出来」的接口。拿到 root 的攻击者仍然能调用这个接口,但只能在攻击者控制这台机器、而且设备插在上面的那段时间里用。

所以硬件把风险从「永久失窃」压缩成了「在线期间被借用」。这是实打实的进步,但它也说明了硬件没有做什么:它不判断该不该签,也不知道签的是什么。

二、四道门槛,经常被混成一道

门槛 防的是什么 防不了什么 SSH 硬件钥匙的默认
不可导出 私钥被复制、离线使用 攻击者在线时直接调用 有
在场确认(按一下) 机器被控制后的静默使用 用户被骗着按下去 有,可用 no-touch-required 关掉
身份验证(PIN / 指纹) 设备落到别人手里后被使用 本人被诱导 没有,可用 verify-required 打开
所见即所签 签下的内容和以为的不一样 —— 用不上,也没有

前两道回答「有没有人在用」,第三道回答「是不是本人」,第四道回答「用来干什么」。SSH 的签名只是回应一次登录挑战,签的内容本身没有意义,所以第四道不存在。钱包不一样:签名本身就是转账、授权或代码委托,内容就是全部。

三、三种方案各给了几道

YubiKey(ed25519-sk) TPM(ssh-tpm-agent) Apple Secure Enclave(sc_auth)
私钥在哪 设备里,从不离开 磁盘上,被 TPM 加密包裹 Secure Enclave 里,标为不可导出
磁盘上的文件是什么 只是一个句柄 加密后的私钥 只是一个句柄
曲线 Ed25519(也可 P-256) ECDSA P-256 或 RSA 只有 P-256
额外软件 不需要,OpenSSH 原生 需要 ssh-tpm-agent 不需要,但要设 SSH_SK_PROVIDER
在场确认 默认要按;可关,但服务端也得显式允许 没有物理在场,PIN 可选 -t bio 要求 Touch ID
绑定系统状态 不适用 不检查 PCR,换固件、换系统照样解封 不适用
坑 要买硬件 机器得有 TPM 合盖模式下 Touch ID 不可用,生成和使用都会失败

生成命令都很短:

ssh-keygen -t ed25519-sk -O resident -O verify-required
ssh-tpm-keygen -N "<PIN>"
sc_auth create-ctk-identity -l "<标签>" -k p-256-ne -t bio

表里最容易被忽略的是 TPM 那一列:设备绑定和设备驻留是两回事。 磁盘上的 .tpm 文件离开那块 TPM 就是废的,但私钥材料确实在磁盘上;再加上它不看 PCR,同一台机器换个系统启动,只要没设 PIN 照样能用。有 TPM 就用,但把 PIN 设上。

四、免触摸的硬件钥匙,就是热钱包的形状

原文提到一个需要无人值守的场景:开机自动挂载远程目录,没有人在旁边按 YubiKey。办法是生成 no-touch-required 的钥匙,并在服务器 authorized_keys 对应那一行前面显式加上同名选项——不加的话 OpenSSH 默认拒绝。

这时四道门槛只剩第一道。私钥照样偷不走,但任何拿到这台主机控制权的人都能静默调用它。

交易所热钱包的签名服务就是这个形状。 私钥在 HSM 或 MPC 里,从不导出;但签名请求由某个服务发起,没有人逐笔按确认。攻击者不需要偷钥匙,只需要变成那个「被允许请求签名」的身份。

站内十月那篇整理过币安给出的初步根因:一名 DevOps 工程师的笔记本被攻陷,攻击者借此进入服务容器,提交了未授权的提现;公告称未发现私钥泄露。这并不矛盾——私钥本来就不需要泄露。

对个人的启示是:如果真有一把钥匙必须免触摸,就让它单独一把、单独限权。authorized_keys 的每一行都可以带限制:

no-touch-required,restrict,from="10.0.0.5" sk-ssh-ed25519@openssh.com AAAA... nas-mount

from= 锁定来源地址,restrict 关掉端口转发、代理转发和终端分配;需要的话再加 command= 把它锁死在单一命令上。这样即使它被静默调用,能做的事也很有限。热钱包对应的做法叫额度、白名单和延时,原理一样:承认这把钥匙会在没人看的时候被用,然后限制它能被用来干什么。

五、冗余:多把钥匙,还是一把钥匙的副本

硬件钥匙最实际的问题是丢。设备坏了、丢了、换机了,里面的私钥就没了,因为它本来就导不出来。

SSH 的解法很干净:authorized_keys 可以放任意多行。一把日常用的 YubiKey、一把锁在抽屉里的备用 YubiKey、一把 Mac 的 Secure Enclave——三把互相独立,都登记上。丢了一把,删掉对应那一行,其余照常。整个过程中没有任何一把私钥被复制过。

单签钱包没有这个结构。一个地址对应一把钥匙,想备份,只能把这把钥匙本身复制下来——这就是助记词。硬件钱包在日常使用中保证私钥不出设备,但旁边那张写着 24 个词的纸,是一份完整的、可导出的私钥。真正的安全边界是那张纸,不是那台设备。 从结构上说,硬件钱包加助记词更接近 TPM 方案(私钥材料存在于设备之外,靠别的东西保护),而不是 YubiKey 方案。

站内 Coldcard 种子风险那篇讨论的就是这条边界出问题时的后果:种子生成、熵源、单签失败点。

多签和智能账户把 SSH 的结构补了回来:多把独立的钥匙,按阈值授权,丢一把就换掉那一把。而 Secure Enclave 和大多数 passkey 用的正是 P-256 曲线——RIP-7212 让多条 L2 原生支持 P-256 签名验证,以太坊主网的对应提案是 EIP-7951。原文里那把放在 Mac 上的 SSH 钥匙,同一类钥匙可以直接成为智能账户的签名者之一。

同步型 passkey(iCloud 钥匙串、Google 密码管理器)走的是另一条路:私钥会加密同步到你的其他设备,换来丢一台不丢钥匙。这是拿不可导出去换可恢复,不是免费的——你信任的边界从一块芯片扩大到了整个同步体系。

六、第四道门槛:SSH 用不上,钱包离不开

SSH 钥匙被滥用,最坏是攻击者拿到一个会话。很糟,但有日志、可撤销、能止损。

钱包钥匙被滥用,一次签名就可能把资产转走,链上不可逆。所以钱包必须面对第四道门槛:你按下确认的时候,知不知道自己签的是什么。

2025 年 2 月的 Bybit 事件是这道门槛失守的样本:Safe 的前端被篡改,源头是 Safe 一名开发者的电脑被入侵;多签的签名者在硬件钱包上批准了一笔和界面显示完全不同的交易。硬件在场、按了确认、通过了身份验证——前三道全过,第四道没有。

这道门槛也不只在人这一层。站内币安事件那几篇讨论过 EIP-7702 的 Type-4 交易:to 是钱包自己、金额为 0、数据为空,只解析 calldata 的策略引擎会把它看成一笔无害的自转账。连机器做的「所见」都可能是错的。

两起事件还有一个共同点:起点都是一台工程师的电脑。开发机上的 SSH 私钥、云凭据、能调用签名服务的令牌,是同一条攻击路径上的几个环节。删掉磁盘上的私钥,不只是为了 SSH。

七、量子:不可导出防的是物理提取,不是数学

原文三种方案用的都是椭圆曲线:Ed25519 和 P-256。比特币和以太坊用的 secp256k1 也是。足够大的量子计算机运行 Shor 算法,可以从公钥直接算出私钥。

这时「不可导出」就失效了——攻击者不需要碰你的设备,只需要你的公钥。所以真正的问题变成:你的公钥已经公开到什么程度?

场景 公钥是否已暴露
GitHub 上登记的 SSH 钥匙 是,任何人可从 github.com/<用户名>.keys 读取
服务器上的 authorized_keys 拿到服务器即可读取
以太坊外部账户 第一笔转出之后,公钥可从签名中恢复
比特币 P2PKH / P2WPKH 地址 花费前只露哈希,花费时暴露;地址复用则长期暴露
比特币 Taproot(P2TR) 输出里直接就是(调整后的)公钥

OpenSSH 从 9.0 起默认用混合后量子算法做密钥协商,10.0 起换成基于 ML-KEM 的混合方案。这防的是「现在录下流量、将来解密」,保护的是会话内容。登录用的签名钥匙没有变,仍然是椭圆曲线。 主流 FIDO2 硬件也还不支持后量子签名。

量子什么时候到,本文不预测。站内四月那篇整理过谷歌量子 AI 的一份估算:不到 50 万个量子比特、几分钟内完成攻击;谷歌据此把自己的后量子迁移时间表提前到 2029 年。

不管时间表是什么,两边的处境差别很大:

  • SSH 的迁移几乎免费。 钥匙随时可以换,authorized_keys 只是个列表。等后量子签名进了硬件,生成新钥匙、登记、删掉旧的,一个下午的事。今天被抓取的 GitHub 公钥,只有在那把钥匙到时候还被信任时才有用。
  • 单签地址的迁移等于搬家。 换钥匙就是把资产转到新地址;公钥已经暴露的旧地址,量子到来前不搬就是靶子。而协议层面的后量子签名,比特币和以太坊主网据本文所知都还在提案和研究阶段。
  • 智能账户介于两者之间。 验证签名的逻辑本身是代码,换签名算法是升级授权层,不必搬资产。

八、所以未来的私钥安全长什么样

把上面几节合起来,方向是一致的:不是一把更难偷的钥匙,而是一组随时可以撤换的钥匙,加一个能改的授权层。

  • 不可导出,交给硬件;
  • 在场确认和身份验证默认打开,必须关掉的那一把单独限权;
  • 所见即所签,签名前在设备屏幕上看到解码后的内容,拒绝盲签;
  • 冗余靠多把独立的钥匙,不靠复制同一把;
  • 授权层可修改,这样换算法、换设备、换掉被攻破的那一把,都不必推倒重来。

SSH 的 authorized_keys 很多年前就是这个结构,只是很少有人把它当成安全设计的范本。多签、智能账户、passkey 签名者,是钱包在补同一课。

九、个人可以马上做的事

  • SSH:每台服务器至少登记两把硬件钥匙(一把日常、一把离线保管);生成时加 verify-required;必须免触摸的那把单独生成,用 from= 和 restrict 限权。
  • 有 TPM 的 Linux 机器:可以用,但要知道私钥加密存在磁盘上、不绑定系统状态,务必设 PIN。
  • 合盖使用的 Mac:Secure Enclave 的指纹方案会直接失败,外接带 Touch ID 的键盘,或插一把 YubiKey 5C Nano。
  • GitHub:你的公钥是公开的;后量子签名可用之前无所谓,可用之后尽快轮换。
  • 钱包:大额资产用多签或智能账户,签名者分布在不同硬件上;不要让助记词成为唯一的冗余;硬件屏幕上看不懂的签名一律不签。
  • 开发机:它是攻击路径的起点。磁盘上不留明文私钥,云凭据和签名服务的令牌同样对待。

十、这篇说不了什么

  • 没有实测。 三种方案的命令和行为以原文和各工具文档为准,不同系统版本可能有差异。
  • 硬件本身也会有漏洞。 2024 年公开的 EUCLEAK 侧信道影响固件 5.7 之前的 YubiKey 5 系列,利用需要物理接触和专门设备。本文不评估具体芯片的安全性。
  • 不预测量子时间表。 引用的估算来自站内整理,不是本文的判断。
  • 不是安全审计。 适合你的方案取决于你的威胁模型;原文作者自己也说,设了密码的磁盘钥匙对多数人已经够用。

结论。 那篇博客的标题是「我删掉了所有 SSH 密钥」,更准确的说法是:作者把每一把钥匙都换成了偷不走的。这是对的第一步。第二步是承认偷不走的钥匙仍然可以被借用——所以要在场确认、身份验证、限权。第三步是承认钥匙会丢、算法会过时——所以要多把、可撤换、授权层可改。SSH 用一个文本文件就做到了后两步;钱包花了很多年,才在多签和智能账户里把它补回来。

资料:I deleted all my SSH keys(infected.systems,2026-11-04);ssh-tpm-agent。站内链接见正文。本文为技术整理,不构成安全审计。

相关主题:⚛️ 量子计算
订阅更新

在 Telegram 或 X 关注每周研究、市场信号与上币动态。

更多文章: 思考查看全部
Jupiter(JUP):回购托住下沿,费率结构封住上沿

Jupiter 一口气发了 Baskets、Vaults、Portfolio V3 和 Pulse,但四款都是聚合与界面产品,只有 Vaults 有真实抽成。压制 JUP 的不是缺永续:永续占毛费用 46.2%,75% 分给 JLP,落到持币人每月只有 7.6 万美元;真正给回购输血的是聚合器。我回查了原稿的数:费用表合计不是分项之和,回购写的 256 万/月对不上它自己的持币人收入 165 万,按后者回购只占市值的 2.3% 而不是 3.5%;费用比去年三季度跌了 84.6%,协议收入只跌了 66.6%。

2026年11月11日
Sui:技术继续领先,经济持续收缩

对象模型、Mysticeti、Walrus、后量子路线图都交付了,但 TVL 从 26.4 亿跌到 4.4 亿、L1 年费只有 267 万美元、代币不捕获手续费。我把原稿里能算的数逐条回查,四处对不上:表内十个协议合计 5.304 亿,是所述链上 TVL 4.40 亿的 120.5%,所以「借贷占 TVL 四分之三」的分子分母不是同一个口径;借贷四家按表内数字是 3.27 亿而不是 3.35 亿;应用费用近 30 天的年化只有所给年值的 64.3%;而「资本周转率约 2 倍」算的是 30 天成交除以 TVL,不是年成交。

2026年11月6日
2026 年 11 月的加密叙事图谱:现金流在发行方,叙事在代币

五大叙事、十五个项目的一次全面评分。我把原稿里能算的 13 项逐条回查,全部自洽;但抓到三处对不上的地方:所谓「DeFi 以 0.5 分之差落选」实际差 2.1 分;ONDO 的「当前解锁 53.3%」与「FDV/市值 2.05x」不能同时成立;横向排名表只展示了 100 分里的 65 分,剩下 35 分没列出,排名无法从表里复算。另外最强那条结论——稳定币 30 日增 2.5–2.8%——用的是两家发行人的口径,而不是全市场。

2026年11月5日