<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>硬件钱包 on Time Friend</title><link>https://time-friend.com/zh/tags/%E7%A1%AC%E4%BB%B6%E9%92%B1%E5%8C%85/</link><description>Recent content in 硬件钱包 on Time Friend</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sat, 01 Aug 2026 10:00:00 +0000</lastBuildDate><atom:link href="https://time-friend.com/zh/tags/%E7%A1%AC%E4%BB%B6%E9%92%B1%E5%8C%85/index.xml" rel="self" type="application/rss+xml"/><item><title>BIP-39 Passphrase: 给助记词再加一道保险</title><link>https://time-friend.com/zh/archive/bip39-passphrase-coldcard-entropy-failure/</link><pubDate>Sat, 01 Aug 2026 10:00:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/bip39-passphrase-coldcard-entropy-failure/</guid><description>&lt;p&gt;过去一年, 安全事件一波接一波, COLDCARD 只是最新的一起。&lt;/p&gt;
&lt;p&gt;7 月底, 一款硬件钱包的固件版本里, 生成助记词时随机数出了问题: 本该用硬件真随机源, 却在特定情况下悄悄回退到很弱的软件随机数。助记词只剩几十 bit 的熵, 攻击者直接推导出私钥, 41 分钟内卷走数千万美元。&lt;/p&gt;
&lt;p&gt;看了这么多复盘, 我这一年最大的改变是: &lt;strong&gt;不再无条件信任任何环节&lt;/strong&gt;。固件可能悄悄回退、随机源可能变弱、供应链可能被投毒、AI 又把攻击门槛拉低了一大截——钱包安全链条上每一环都可能出问题。所以防线不能只有一道, 助记词也绝不能是唯一那道锁。&lt;/p&gt;
&lt;h2 id="随机数是硬指标"&gt;随机数是硬指标&lt;/h2&gt;
&lt;p&gt;这次攻击的根源, 不是助记词被偷拍, 而是它&lt;strong&gt;可以被重新计算出来&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;一套 12 词助记词背后是 128 位随机数。128 bit 意味着 2 的 128 次方种可能, 正常情况下穷举到宇宙尽头也试不完。可一旦随机源只剩 40~72 bit 的熵, 攻击者只要知道某台设备那个时间窗口用的是弱随机源, 就能顺着同样的算法, 把生成助记词的过程重演出来。&lt;/p&gt;
&lt;p&gt;这个区别很重要: 不是&amp;quot;泄露&amp;quot;, 是&amp;quot;可推导&amp;quot;。任何&amp;quot;别告诉别人助记词&amp;quot;的提醒, 在这种情况下都失效了。&lt;/p&gt;
&lt;h2 id="passphrase-一定要加"&gt;Passphrase 一定要加&lt;/h2&gt;
&lt;p&gt;那有没有一种东西, 即使助记词被完整推导出来, 依然能拦住攻击者?&lt;/p&gt;
&lt;p&gt;有, 就是 &lt;strong&gt;BIP-39 Passphrase&lt;/strong&gt;(助记词口令, 俗称&amp;quot;第 13 词&amp;quot;, 24 词助记词则是第 25 词)。它是一串自己定义的字符串, 和助记词一起参与密钥推导:&lt;/p&gt;


&lt;div class="mermaid-wrap"&gt;
&lt;pre class="mermaid" role="img" aria-label="Mermaid diagram"&gt;flowchart TB
 A[助记词 12/24 词] --&amp;gt; C{PBKDF2 2048 轮&amp;lt;br/&amp;gt;HMAC-SHA512}
 B[Passphrase 口令] --&amp;gt; C
 C --&amp;gt; D[512-bit Seed]
 D --&amp;gt; E[私钥 / 地址]&lt;/pre&gt;
&lt;/div&gt;


&lt;script type="module"&gt;
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
mermaid.initialize({
 startOnLoad: false,
 theme: 'base',
 themeVariables: {
 background: '#1d1f21',
 primaryColor: '#282c34',
 primaryBorderColor: '#3e4147',
 primaryTextColor: '#c9cacc',
 lineColor: '#5a5f66',
 edgeLabelBackground: '#1d1f21'
 }
});
mermaid.run({ querySelector: 'pre.mermaid' });
&lt;/script&gt;


&lt;p&gt;关键在于: 助记词和 Passphrase 是&lt;strong&gt;两份互相独立的信息&lt;/strong&gt;。这次攻击里, 攻击者手里有的是&amp;quot;重新计算出来的助记词&amp;quot;, 而不是口令。不知道 Passphrase, 推导不出私钥。&lt;/p&gt;</description></item><item><title>Cardano SecondFi 签名事件: 一条链上交易, Ed25519 私钥为何泄露</title><link>https://time-friend.com/zh/archive/secondfi-ed25519-nonce-signature-leak/</link><pubDate>Sat, 27 Jun 2026 17:29:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/secondfi-ed25519-nonce-signature-leak/</guid><description>&lt;p&gt;6 月底, Cardano 生态的 SecondFi 钱包(前身是知名的 Yoroi)出事, 圈内一片哗然。没有智能合约被黑, 没有私钥从设备上被偷走, 甚至没有钓鱼——攻击者只是&amp;quot;读&amp;quot;了区块链。短短三天, 374 个钱包约 1600 万 ADA(当时约 240 万美元)被洗劫一空, 官方又紧急把约 1.29 亿 ADA 转移到第三方托管抢救。&lt;/p&gt;
&lt;p&gt;更反常的是官方的警告: &lt;strong&gt;&amp;ldquo;请不要把助记词恢复到其他 Cardano 钱包&amp;rdquo;&lt;/strong&gt;。通常只有助记词泄露才需要换钱包, 这次为什么反过来?&lt;/p&gt;
&lt;p&gt;因为这次的&amp;quot;伤&amp;quot;, 伤在签名上。&lt;/p&gt;
&lt;h2 id="签名也会受伤"&gt;签名也会&amp;quot;受伤&amp;quot;&lt;/h2&gt;
&lt;p&gt;Cardano 用的是 Ed25519 签名。要理解它为什么出事, 先看签名是怎么算出来的:&lt;/p&gt;


&lt;div class="mermaid-wrap"&gt;
&lt;pre class="mermaid" role="img" aria-label="Mermaid diagram"&gt;flowchart TB
 A[交易哈希 M] --&amp;gt; C
 B[密钥材料 kR&amp;lt;br/&amp;gt;保密] --&amp;gt; C
 C[&amp;#34;nonce r = SHA-512(kR || M)&amp;lt;br/&amp;gt;保密且不可预测&amp;#34;] --&amp;gt; D[签名运算]
 E[私钥] --&amp;gt; D
 D --&amp;gt; F[签名 → 永久上链]&lt;/pre&gt;
&lt;/div&gt;


&lt;script type="module"&gt;
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
mermaid.initialize({
 startOnLoad: false,
 theme: 'base',
 themeVariables: {
 background: '#1d1f21',
 primaryColor: '#282c34',
 primaryBorderColor: '#3e4147',
 primaryTextColor: '#c9cacc',
 lineColor: '#5a5f66',
 edgeLabelBackground: '#1d1f21'
 }
});
mermaid.run({ querySelector: 'pre.mermaid' });
&lt;/script&gt;


&lt;p&gt;签名靠一个&amp;quot;一次性秘密&amp;quot;保护, 在 Ed25519 里叫 &lt;strong&gt;nonce r&lt;/strong&gt;: 它必须既保密、又不可预测。正确实现里, r 由密钥材料加交易哈希一起推导出来, 别人算不出 r, 也就没法从公开签名反推私钥。&lt;/p&gt;</description></item></channel></rss>