作者azuel (Observer)
看板DigiCurrency
标题[闲聊] 旧手机PSBT钱包搭配日常手机并用,BTC良好方案
时间Wed May 24 14:19:01 2023
注1:这个方法是BTC only,其他币如果有类似的方法,就麻烦其他熟悉的人分享了
注2:虽然严格来说iOS可以透过安装Python环境来安装所需的功能,但麻烦度还是太
高了,建议还是以android为主。
早前在
#1aPU6Qz- 这篇约略提过了关於旧手机、VMware等方法。这篇将更进一步讨论
使用手机可以达成安全的储存方式。
这种方法既方便、又可以在不破坏冷储存的安全性之下正常交易。
或许早前有过PSBT相关的讨论,但因为标题搜寻没有,所以我也就用有标题的方式再提
一下。
=============================================================
PSBTs (Partially signed bitcoin transactions)
是一种把交易的签署给分离开来的交易方式。
听起来很绕名词,让我用最实用的方式解释:
以下所称交易都指"自己要传输BTC给其他人"。
有两个装置,一个连接网路的常用手机A,里面的钱包只有公钥,是"观察者钱包"。
这个钱包可以看到自己所有的余额,可以建立交易,但因为没有私钥,所以不能签署也
不能送出交易。
另一个完全断网的手机B,里面的钱包有公钥私钥,是完整的钱包。
这个装置不联网,看不到余额,不能建立交易,但它可以在完全断网的情况下,对手机A
建立的交易签署,签署好之後由A送出,完成交易。
这种方式让连接网路的手机A正常使用钱包,如果发生任何安全性的事件,也只会被盗走
公钥,钱包就不会被盗走。
================================================================
但手机B断网,要怎麽把交易签署好之後回传给手机A呢?
很简单,现在的手机都有相机,透过QR code互相传递就好了。
1. 手机A发起一个PSBT交易之後,产生一个QR code
2. 手机B扫描QR code之後,完成签署,产生一个QR code
3. A扫描B新产生的QR code之後,取得签署,完成交易
只要钱包软体支援这个功能,一支旧手机就可以变身成coldcard。
(不过当然各有利弊,操作会比coldcard便利,但硬体防护可能还是不及coldcard)
(实体被盗走的话能被破解,但老实说现在硬体钱包可能也都差不多情况就是... )
以下用Electrum来举例建立这种环境的方式:
1. 旧手机还原成乾净状态,移除所有不必要的app,安装Electrum,然後断网。
2. 在断网的情况下,用Seed还原钱包。或是更加彻底的话,在断网的情况下建立新
钱包 (还是要记得把Seed抄下来!)。
3. 点选钱包明细,可以看到Master Public Key,这就是你的公钥,点选旁边的分享
会产生一个公钥QR code,稍後要用到。
4. 日常手机安装Electrum,建立钱包的时候选择"从Master Key",扫描公钥QR code。
就这样而已,这样就完成了常用手机上的观察者钱包,以及断网手机安全存放私钥。
至於操作,现在Electrum的介面几乎都简化集约成点下send之後扫描QR code。
所以目前的操作流程应该是:
1. 手机A点Send,扫描要传送出去、接收方的Bitcoin地址QR code,建立交易。
2. 输入转帐额度、费率设定等,然後点选建立成PSBT交易,产生QR code。
3. 手机B点Send,扫描手机A的QR code,完成签署,产生QR code。
4. 手机A点Send,扫描手机B的QR code,取得签署,完成并送出交易。
存放私钥的手机B,基本可以不用再连接网路了,就算Electrum版本更新,B很可能也
不需要更新。
如果真的必须要更新的话,B的钱包先删除掉,连接网路,更新Electrum,断网。然後
在断网的情况下再用Seed复旧钱包。
如果这样使用的话,旧手机的要求更低,甚至只要官方需求的最低版本android 5.0以
上即可。如果旧手机坏了,也随时能取得另外的旧手机,恢复离线私钥的状态。
注:
Electrum本身不是BIP 39钱包,所以产生的Seed不能用其他BIP 39钱包复原。
但BIP 39 seed可以再Electrum复原,选择用seed复原钱包的时候,记得要在option
里面打开BIP39选项。
但不需要担心Electrum的官方倒掉之类的,只要你有安装Electrum的软体,就算离线
也可以复原钱包,实际运作是完全不依赖官方。
钱包也会自己找Node,并不必须要Electrum的node,甚至你可以连接自己架设的node。
在各个环节都尽量达成trustless,我个人觉得满好的,虽然GUI有时候有点难用。
後续补充:
Electrum不是曾经被hack过吗?我先讲一下Electrum被hack的事件。
2019年的时候,桌面版的Electrum的通知功能被劫持,骇客送出了"软体更新"的通知,该
通知点进去安装的却是骇客的版本,导致有更新的人被盗取私钥。
这是一次钓鱼攻击,但Electrum本身的防护是没有被攻破过的,从2011年至今都没有。
从钓鱼攻击之後,Electrum方面是修正了这个漏洞,但Electrum也鼓励下载桌面版、
Python版的人都要用GPG加上开发者ThomasV的公钥去验证下载的版本正确。
严格来说,安卓版也应该要下载apk与签名回来验证,然後用APK安装。这一篇选择用
play store安装的方式来解说,是相对有取舍的方式。等於是信赖Google以及ThomasV的
Google帐号不会被盗取,并不是非常完美。
但虽说Google play不算完美,却也算是方便性与一定程度的安全性的均衡点,对大多数
的人来说,这种方式建立环境的痛苦度要低很多,也比不验证就下载要安全。
当然,如果看到这边的人愿意去尝试验证、建立这个习惯,确保软体安全性的话,我很
鼓励可以去挖一下相关的内容。如果将来这方面需求多了的话,我也能再写GPG验证相关
的简介。
所以Electrum本身的安全性还是满好的。
不过这当然是我个人的喜好,如果有其他软体钱包也能达到PSBT、也很开源安全的话,
也希望能看有使用经验的人推荐,没有一定要Electrum。
剩下的危险就是旧手机被抢走、实体破解取走私钥。
但那也得要别人知道你这只旧手机放了私钥才行。
所以,如果手中有ledger觉得不再愿意使用的话,也不用丢掉,还有用途。
骇客可以钓鱼攻击,我们也可以啊,旧的ledger当作饵,这样瞄准加密货币的实体窃盗
更有可能盗取这些ledger回去试图破解,而不是那只破烂的旧手机。
把ledger微妙地放在看起来像是很谨慎地藏起来、但又容易被找到的位置,旧手机就和
其他旧品与工具储藏堆在一块就好了... 之类的,这种藏匿与诱饵方式很多变化。
以上是一些个人分享,希望能以最简化的方式呈现相当高强度的安全方式。
如果有什麽问题都可以再讨论,如果内容有错也请多指正,谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 136.23.35.37 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DigiCurrency/M.1684909143.A.63F.html
※ 编辑: azuel (136.23.35.37 台湾), 05/24/2023 14:44:33
1F:推 adamcha: 推 只不过这麽复杂的程序对一般人而言还是太难 05/24 14:44
可能就是对於比较熟悉情况的人会比较有帮助了
※ 编辑: azuel (136.23.35.37 台湾), 05/24/2023 14:53:05
2F:推 mongala: 类似 airgap wallet/airgap vault app 的功能吗 05/24 14:52
看起来相似,这可能会成为之後安全性的新主流
此後的硬体钱包应该会越来越多导入这种完全离线签署交易的方式
※ 编辑: azuel (136.23.35.37 台湾), 05/24/2023 14:57:17
3F:推 alumy: 推一个 谢谢分享 05/24 15:00
4F:推 DarkerDuck: Bither APP也支援air gap钱包 05/24 15:08
5F:推 SamuelLuo: 我正要推黑鸭大所说的,比太就支援这个功能,以前没买 05/24 16:29
6F:→ SamuelLuo: 冷钱包时我也用过 05/24 16:29
7F:推 usttsu: 看来只好再买一只iPhone 15 05/24 16:51
8F:推 mini5: 是az大耶!好久没现身了^^ 05/24 18:53
hi~
9F:推 ProtectChu56: 最近刚好看到号称有SE+开源的Keystone有一种假想攻 05/24 19:55
10F:→ ProtectChu56: 击向量是,签署者夹带Seed讯息出去 05/24 19:56
11F:→ ProtectChu56: 同样的问题软体钱包也会有 05/24 19:57
虽然我不太确定手段,不过我想把所有的接点都消除就好了?
这就要把用来签署的那个离线私钥装置给尽量隔离保护好了
不给别人拿走,不拿出去公共场合,使用的时候确保环境安全只有自己一个人
私钥不论网路或是物理都完全隔离掉,签署的时候也完全离线
别的protocol我不太清楚,Bitcoin是用BIP 174规范
上述接点完全割断的话,就只剩下签署好的交易出去、以及会曝露的只有公钥了
※ 编辑: azuel (136.23.35.37 台湾), 05/24/2023 20:47:10
12F:推 tropotato: 推个 05/24 21:16
13F:推 ProtectChu56: 意思是(恶意)签署者透过某种计划好的pattern在讯息 05/24 22:12
14F:→ ProtectChu56: 一点一滴夹带seed的entropy出去避人耳目 05/24 22:13
15F:→ ProtectChu56: 而(恶意)签属方就靠监听去锁定有价值的地址 05/24 22:13
16F:→ ProtectChu56: 等到足以构成seed的资讯都流出来 05/24 22:14
17F:→ ProtectChu56: 这种钱包攻击向量 在离线签章还是"理论上"存在 05/24 22:15
喔理解,那基本就是依靠对open source的监督了
这种处理在钱包软体还是会留下足迹,有没有加料应该还是颇明显
大方向还是新版本不马上装,一阵子没人叫了之後再opt in
如果真有疑虑的话,就自己从source code去compile了
或是compile出来跟下载的版本比对看看
不过entropy attack难度也太高... 是也有说一个地址过度重复使用也会有这个弱点
实际重现应该相当不容易
感谢分享资讯!
※ 编辑: azuel (136.23.35.37 台湾), 05/24/2023 22:28:24
18F:推 ProtectChu56: 是很偏执没错。大家都想找个能放心睡大觉的钱包 05/24 22:35
19F:→ ProtectChu56: Ledger激发了大家对钱包供应商如果作恶的敏感神经 05/24 22:37
能尽量求好那当然是最好了
有很多的attacking vector以前大家都没有觉得很严重,直到事情爆发
※ 编辑: azuel (136.23.35.37 台湾), 05/24/2023 22:45:18
20F:推 gajo1564: 推 用别人的终究做不到去信任 自己做最安全但有难度 05/25 01:23
21F:→ gajo1564: 不过再搭配多签或mpc方案或许就很接近目标了 05/25 01:25
自己做也未免太辛苦,写出来的东西可能反而有漏洞
去找一个自己觉得不错的open source然後去review code大概要比自己做来得快
不过那个对我这几篇来说,光谱拉太远了
我主要是希望在容易推广达成的方式里面,去达到合理范围的最大安全度
主要是让看的人容易部署,或是因此有获得一些想法、想到别的适合自己的方式
※ 编辑: azuel (136.23.35.37 台湾), 05/25/2023 02:28:44
22F:→ Wilson310: 刻在不锈钢板最安全 05/25 08:00
如果离线生成Seed、刻在钢板上的话,好处是自己不容易损毁钢板
但如果只是这样的话,交易的时候还是得在一个连接网路的装置还原私钥
如果这个连接网路的装置是已经被放了间谍软体的话,可能这一瞬间就会丢失私钥
那麽整个钱包就去了
当然如同早前一篇的方法一样,使用装置能确保乾净安全的话,这也是ok的方法
这篇内文的方法重要的地方在於,交易的时候私钥也是完全离线
把连接网路发布交易的那一瞬间的弱点也消除
23F:推 Ayukawayen: 选择明文攻击? 05/25 12:02
24F:推 Ayukawayen: 连网手机如果遭骇,攻击者可能将QRcode置换成攻击者想 05/25 12:06
25F:→ Ayukawayen: 要的内容,举例来说像把钱包余额转到攻击者钱包,因为 05/25 12:07
26F:→ Ayukawayen: 是QRcode肉眼应该也看不出来,然後断网手机签署後,遭 05/25 12:08
27F:→ Ayukawayen: 骇的连网手机取回签署後交易并广播。 05/25 12:08
虽然QR code人类看不懂
但断网手机要签署的时候,看得到要签署的交易内容
经过签署之後,会根据私钥和交易内容生成一个数位签章
在这之後对内容进行任何修改,都会使签章无效,交易也会被视为无效
不过当然还是要对软体方面有一定程度的警戒心
安定且受长期检视的软体就尽量不要在新版本出来的时候马上更新
任何新版本都等待社群检验open source一阵子之後再去使用
除非是跟安全性相关的更新
至少长期存放用的金库钱包在确认安全之前,就尽量不要发起交易这样
嗯... 稍後可能写一下关於钱包安全度分级的事情好了
edited : 突然觉得这个要另外写一篇太懒了,只好鸽一下写个简短版
大方针如下:
1. 确保你用的软体不会在你没使用的时候也rug你,确保的方式大致是 :
a. 主流币,我个人的观点是只有主要PoW币和ETH可考虑长期存放,不然整个
protocol都rug掉的话,软体怎样都无济於事。
b. 开源、使用人够多 (自己不会review的话,至少选reviewer会比较多的)。
c. 安全历史够长久,或是发生的安全性事件能理解原因、且已经排除。
2. 分流:
a. 通常分两层,一个金库很少动用,一个常用钱包。常用钱包不够的时候,
再从金库提取到常用钱包。
b. 金库钱包也可以分成复数,只有其中一个提领用完了才会使用下一个。
3. 没有一定要只用一种方法,因为每一种方法都是在"方便性"跟"安全性"之间取
舍,所以可以用安全性较高的方式存放金库钱包、用方便性较高的方式作为日
常钱包。
总结就是,没有任何一种方法是不存在任何理论风险,只要减少使用频率就可以
降低大部分的风险事件,要长期保护的部位就减少使用频率就行了。
当然如果是交易小币价差、常常用dapp的话,可能根本就不需要使用金库分级。
这主要是给愿意以年为单位存放长期储蓄的人来考虑。
※ 编辑: azuel (136.23.34.69 台湾), 05/25/2023 13:00:42
28F:推 ECZEMA: 专业推 原来 electrum 就能作到 05/25 22:07
※ 编辑: azuel (136.23.34.72 台湾), 05/28/2023 16:32:28