
先明确讨论的适用范围
冷钱包签名需要分别看待密钥隔离、交易内容和算法实现。离线是一种保护条件,并不意味着待签名内容天然可信。这里主要讨论Bitcoin Developer Guides所介绍的传统P2PKH交易,以及RFC 6979涉及的ECDSA确定性签名,不把这些细节直接推广到所有比特币交易类型或钱包产品。
签名是在授权具体交易
比特币普通交易的输入引用此前尚未花费的输出,新输出则规定金额与后续花费条件。在传统P2PKH场景中,签名与相应交易数据关联,验证者据此检查授权是否有效。

因此,“使用了自己的私钥”与“签的是自己想要的内容”并非同一回事。密码学验证能够检查签名,却不能替用户判断收款对象是否正确、金额是否符合本意。离线环境也不能消除这种区别。

关注输出内容,而非只看签名成功
理解待签名内容时,重点是哪些已有输出被引用、交易产生哪些新输出,以及各输出的金额和花费条件。不能只凭一个收款标签或成功提示判断授权内容。
同样,不宜笼统地认为任何签名都会固定交易的每个字段。签名保护哪些内容取决于相应规则。只有明确实际签名覆盖的范围,才能正确理解“签名后无法篡改”的适用边界。
ECDSA临时值不能随意处理
RFC 6979指出,ECDSA签名涉及临时值k,其生成质量关系到私钥安全。该文档定义了确定性的生成方式,生成的签名仍可由常规验证者处理。
“确定性”不等于给所有消息使用同一个固定值,也不是自行设计一个容易重复的规则。对冷钱包而言,重要的是采用正确的密码学实现,而不是看到设备离线,就推断其签名过程必然安全。
确定性签名不替代密钥安全
RFC 6979处理的是签名阶段生成临时值的问题,并不取消密钥生成对安全随机性的要求。它也不能证明某款设备没有实现缺陷,或替代对密钥保管方式的检查。
一个常见误解是:确定性签名既然降低了签名时对外部随机源的依赖,整个钱包就不再需要随机性。实际上,密钥生成与签名生成属于不同环节,不能混为一谈。
常见问题:验证通过是否就没有风险
不是。签名验证通过,说明相关密码学检查得到满足;它不说明收款对象可信,也不说明用户理解了授权内容。判断冷钱包签名是否可靠,应同时关注内容是否符合意愿、签名范围是否清楚,以及密钥与算法实现是否得到妥善保护。