比特币安全钱包的想法

从财富不可侵犯角度讲,比特币是人类史上最安全的货币。但令人郁闷的是,安全地存储比特币却遇到诸多麻烦。私钥机制使得其神圣不可侵犯,也使其资金安全遇到麻烦。

个人存储管理比特币非常不现实,安全性差,丢币概率高。在线钱包显得更加安全可靠一些,主要分两类:

  • 链下(Off-Chain),链下钱包服务即银行模式,若服务商出现任何问题,储户资金即出问题
  • 链上(On-Chain),链上钱包“理论上”安全,因其不掌握用户私钥(仅保存私钥的密文),但也不绝对,例如服务器被入侵后,钱包关键代码被恶意修改,导致能够恢复出用户私钥,无论多少币,均瞬间被转移

没有绝对安全的方案,只有相对安全实现,就是把出问题的概率降低得非常非常低。程序发生严重Bug、服务器被入侵这些都不能认为是极低概率事件,只是小概率而已,时间足够长的话几乎都会发生,回溯比特币这几年历史,发生过很多小概率、黑天鹅事件。

这里提出一种钱包的实现方案,尝试去解决一些安全隐患问题。方案分为服务端,客户端两个部分。

服务端

  • 数据服务。只读模式,包括不限于:
    • balance by address
    • unspent outputs
    • tx/block query
  • 广播服务。输入是公开的数据,协助将交易(Raw Tx)广播至比特币网络

客户端

  • 硬件部分
    • 支持如ECDSA, SHA256、Ripemd160等
    • 支持硬件隔离技术,存储敏感数据,如私钥数据
  • APP部分
    • 与硬件部分进行通信
    • 提供功能界面,实现钱包操作交互

客户端硬件部分像拉卡拉类似的一个东西,可以通过耳机等音频设备与手机APP通信。

  • 收款:当用户使用钱包时,插入硬件部分,启动APP,从硬件读取比特币地址列表,并去服务端查询地址数据,更新余额
  • 发款:APP根据比特币地址从服务端获取相关未花费交易,用户设置转出地址和金额,APP根据未花费交易构建待签名的空交易,将空交易传输至硬件并通知其签名。硬件从隔离区读取数据并由加密芯片完成签名后,将完整交易放入普通数据区,APP从普通数据区读取签名后的交易并提交至服务端广播
  • 数据备份:硬件支持AES双向加密算法,用户在APP输入备份密码,传至硬件,硬件从隔离区读取数据并由加密芯片完成AES加密,将加密后的数据放入普通数据区,由APP传输至手机、云盘等完成备份
  • 硬件遗失:为了防止遗失导致硬件破解丢币,敏感数据在隔离区中平时即以加密形式存在,每次使用时,输入进入密码,才能使用

安全点:

  • 服务端必须是只读模式的。只读的设计,保障客户端不会提交敏感数据,即使服务端被黑,也无法截获用户私钥
  • 客户端必须实现硬件隔离,保护私钥等敏感数据,使得操作系统无法读取敏感信息,木马、恶意软件就没有办法盗取

这只是一个初步的想法,可能存在重大缺陷,也许有团队已经在实现了,贴出来希望大家一起讨论。