比特币全功能钱包:省事的代价是私钥留在联网设备上
全功能钱包之所以用起来最省事,是因为接收和花费比特币所需的全部环节都由同一个程序完成;而它把私钥放在联网设备上,也正是这种便利的代价。按比特币开发者文档(钱包章节)的口径,一个钱包系统包含三个必要但可分离的部分:公钥分发程序、签名程序,以及联网程序。全功能钱包把这三件事合在一处,优点与风险都由此而来。
问:全功能钱包到底“全”在哪里?
按开发者文档的描述,全功能钱包是最简单的钱包形态:它生成私钥、推导对应公钥、在需要时帮助分发这些公钥、监控发往这些公钥的输出、创建并签名花费这些输出的交易,并广播已签名的交易。换句话说,用户只需要一个程序,就能完成接收和花费聪(satoshi)的全部操作。文档同时说明,截至其撰写时,几乎所有流行的钱包都可以当作全功能钱包使用。这里的“省事”不是某一款产品的特性,而是这类钱包的结构决定的:无需像仅签名钱包那样,在联网钱包与签名程序之间转交未签名交易。
问:那私钥放在联网设备上,风险究竟指什么?
文档给出的主要缺点很直接:全功能钱包把私钥存储在连接互联网的设备上。这类设备被攻破是常见情况,而互联网连接使得从被攻破的设备向攻击者传输私钥变得容易。需要说明的是,只要私钥生成、存储和签名都在联网设备上完成,这一暴露面就存在,与具体是哪一款钱包无关。
问:加密钱包文件能不能抵消这个风险?
只能部分抵消。文档指出,许多钱包程序提供对包含私钥的钱包文件进行加密的选项。这种加密保护的是私钥“不被使用的时候”;但它无法防御旨在捕获加密密钥、或从内存中读取已解密私钥的攻击。也就是说,加密降低了静态存放时的暴露,却不能改变“私钥出现在联网设备上”这一前提。
问:如果更看重安全,结构上有什么替代?
文档描述的另一条路径是分离:私钥可以由在更安全环境中运行的独立钱包程序生成和存储,即仅签名钱包,它与一个负责与点对点网络交互的联网钱包配合工作。典型流程是:仅签名钱包首次运行时创建父私钥,并把对应的父公钥交给联网钱包;联网钱包用父公钥推导子公钥、可选地帮助分发、监控输出、创建未签名交易并转交签名。文档也提到,用户通常会有机会审阅未签名交易。这条路径以多一道程序协作换取私钥不落在联网程序里,与全功能钱包的省事形成取舍,而非全面优劣。
以上区分适用于把“便利”与“私钥存放位置”放在一起权衡的普通自持用户;具体某款钱包是否属于全功能形态、是否提供文件加密,需以其自身说明为准。本文只讨论结构性的便利与联网存储私钥的风险。