V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cathedrel
V2EX  ›  Bitcoin

请推荐桌面电脑( Linux 最优)和安卓手机上的离线钱包工具 offline wallet / cold wallet

  •  
  •   cathedrel · 2021-07-01 10:15:17 +08:00 · 1079 次点击
    这是一个创建于 1027 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就是一台不联网的电脑或者手机用来做冷钱包,理论上就是一个能根据 seed/私钥来给交易做签名的小工具吧?记得老早以前还有一张网页的管理工具,联网打开后断网,然后就可以在页面上跟据 seed/私钥来做验证什么的了,想要的就是这样的工具。目前能满足以下要求的工具有吗?

    1,完全离线的图形界面小工具,桌面端和手机端

    2,兼容目前大部分主流币( BTC 、ETH 、DOGE 、LTC 、Tron 、XRP 、XMR 、ZEC 等等)

    3,兼容 bip39/44/48 这些新玩意的(就是最近两年的新技术都能照顾到的)
    第 1 条附言  ·  2021-07-05 00:00:35 +08:00
    目前知道的,手机端可用的冷钱包有 TokenPocket 、Airgap 、imToken 这三个 app,桌面端的除了 BTC 单一币种的其他还未发现可用的
    30 条回复    2023-05-18 09:01:48 +08:00
    uqin
        1
    uqin  
       2021-07-01 22:25:11 +08:00   ❤️ 1
    cathedrel
        2
    cathedrel  
    OP
       2021-07-01 23:48:57 +08:00
    @uqin 这个看起来不错,但是只有手机 app,桌面电脑的工具有吗?
    wangkun025
        3
    wangkun025  
       2021-07-02 08:05:25 +08:00
    单纯比特币的话,electrum 应该是很好的选择。可以在 bitcoin.org 上找找看。
    acess
        4
    acess  
       2021-07-02 19:07:34 +08:00
    @wangkun025 electrum 是 BTC 单币种的
    acess
        5
    acess  
       2021-07-02 19:08:16 +08:00
    有些其他的币种也把 electrum 的代码给 fork 过去了……但和 electrum 官方没啥关系。
    acess
        6
    acess  
       2021-07-02 19:19:43 +08:00   ❤️ 1
    BIP39/44……对比特币来说出现确实不早,但也早就不是啥新鲜玩意了吧,不是“近两年”才出现的啊。

    BIP39 规定的是 HD 种子助记词(严格来说是助记词单向哈希成种子,并不能混为一谈,不过这里不要在意那么多细节)的标准,现在也是“事实上的标准”,但是很多开发者,尤其是 Electrum,那么多年以来都一直抵制 BIP39 。
    acess
        7
    acess  
       2021-07-02 19:20:09 +08:00   ❤️ 1
    抵制 BIP39 最大的理由,其实也是它最大的功能特点:一个种子就可以支持所有的币种,包括像 BTC 的 N 种不同地址格式,未来出现更多新币种 /新地址格式也不怕,所以 BIP39 助记词是“一劳永逸”的,一个备份可以一直用下去。

    这确实很方便,但另一方面,这样不限制种子的用途,就会带来混乱。

    具体来说,从 HD 种子派生出收款和找零地址,需要指定一个“派生路径”——找错了派生路径,就会生成之前没用过的陌生地址,于是就会出现“欸,这个助记词上面有币啊,怎么导入到钱包里余额是 0 呢”的问题。

    更蛋疼的是,貌似 BIP44 这个规定标准派生路径的规范,出现时间又比 BIP39 迟了不少。
    有些钱包,比如 bread,在 BIP44 出来之前就开始用 BIP39 了,所以 bread 的 HD 派生路径到目前为止仍然是和 BIP44 不兼容的,简单说,就是 bread 导入到其他 BIP39/44 的钱包里,BTC 这个币种一般会出现余额为零、交易记录为空、地址全是没见过的陌生地址这个问题,反之亦然。
    acess
        8
    acess  
       2021-07-02 19:28:01 +08:00   ❤️ 1
    个人看法,Electrum 为了抵制 BIP39,自己把 BIP39 又魔改出来一种长得很像、技术上也存在混淆的助记词格式(英文单词表是一模一样的同一份,而且还有千分之一到百分之一量级的概率会生成出“二义性”的助记词,按照 BIP39 和 Electrum 的 checksum 检验规则都是有效的),美其名曰是“解决 BIP39 设计上缺失标准 HD 派生路径的问题”( Electrum 规定了一套版本号系统,这个版本号是通过类似虚荣地址挖矿的方式嵌入到助记词里的,然后版本号就和他们规定的标准 HD 派生路径绑定了),实际上这不仅没有解决问题,反而让整个生态更混沌,让问题更恶化。

    另外……我也忍不住想放个暴论:其实我(而且貌似不只是我一个人?)经常感觉,可能 HD 钱包本身就是过度设计的产物,只是听起来很好很强大很厉害,但实际上带来的隐私性好处还是很有限的(而且大多数用户应该都会把 xpub 直接交给钱包服务器,这样一来地址一用一换的隐私优势至少在钱包服务器面前是荡然无存的),反倒是大大增加了钱包的复杂度。
    acess
        9
    acess  
       2021-07-02 19:29:53 +08:00   ❤️ 1
    可能很多年前币圈里 BTC 对其他山寨币的态度还不是很坏,于是 BIP39 结合 BIP44 能一个助记词搞定多个币种,这个功能还是蛮有市场的。
    现在呢……BTC 圈子自己都经常自称 toxic maximalist,对山寨币是很排斥的,于是支持多币种反倒还可能成为一种原罪(笑)。
    wangkun025
        10
    wangkun025  
       2021-07-02 19:31:03 +08:00
    为楼上点赞。
    感谢普及。
    acess
        11
    acess  
       2021-07-02 19:32:24 +08:00   ❤️ 1
    BIP48 我搜了一下,好像并不是真正官方分配的 BIP 提案号码?只是 Trezor 等钱包用来指代一种多重签名的 HD 路径之类的协议吧。(话说助记词格式大战还不涉及多重签名呢,多重签名貌似也是没有统一的标准)
    acess
        12
    acess  
       2021-07-02 20:00:31 +08:00   ❤️ 1
    本来打了挺多字,感觉很容易就太长不看,所以就删了。

    简单说,用 HD 钱包,其实还要注意一个私钥泄露后威胁更大的问题:单个私钥泄露+xpub 主公钥泄露=所有私钥泄露。

    像 Bitcoin Core 那样,生成地址的时候用 hardened derivation,就规避了这个问题。

    但是!规避了这个问题,我觉得其实得不偿失,为啥呢,因为这样就几乎做不了冷热分离了。
    冷热分离,“热”端只知道 xpub,不知道私钥,无法推导任何私钥,但可以推导出地址(包括收款和找零)。


    BIP44 呢,其实就是结合使用了 hardened derivation 和 normal derivation,在不同币种 /地址类型(用途)/子账户层级上利用 hardened 来隔离(于是理论上 A 币种私钥泄露完全不会影响 B 币种这样),然后到了生成地址这个层级时就改用 normal,这样就还可以有 xpub 。
    acess
        13
    acess  
       2021-07-02 20:52:49 +08:00   ❤️ 1
    说着说着我又想起来 HD 钱包的一个蛋疼问题:gap limit 。

    简单说,HD 钱包并没有那么神奇,它还是必须老老实实一个一个把地址推算出来,然后才能用这些地址去匹配 /查询交易是否与自己有关,然后才能知道余额。

    BIP44 规定的 gap limit 是 20,说让钱包软件不要往后生成多于 20 个地址(比如之前用过的地址有 100 个,那么就只生成到第 120 个,不再继续往后生成第 121 个)。但是很显然这并没有解决根本上的问题……

    比如,如果你之前用过的地址有 100 个,然后你又一直点“生成新地址”、一直点一直点,然后生成了 40 个地址,这样你就有一共 140 个地址,其中前 100 个是用过的,第 101-140 个是还没用过的。

    然后你用这第 141 个地址去收款了。

    再然后,你导入 HD 种子给另一个钱包时,这个钱包 gap limit 是 20,只往后生成 20 个地址,于是这样就只能扫描到第 1-120 个地址,第 141 个地址上虽然有币,但是因为 gap limit 没覆盖到,所以不在扫描范围内。这样看上去就像是“丢币”了一样(实际上没丢)。

    对于钱包来说,很容易想到一个缓解策略,就是提供给用户的地址限制在 20 个以内,但实际上后台扫描的地址远不止 20 个,比如 1000 个这样。但归根到底这只是缓解策略。
    另外……貌似在类似商户收款这种场景下,地址某种程度上可能被拿来当订单号用(这本来就算是一个槽点吧……),每个顾客的每一笔订单,都要用不同的地址,要求唯一(而且很显然,顾客很可能索要了地址,但最后没支付,然后地址要不要“回收”呢,额,这又纠结了)……那么 20 个地址的 gap limit 更是远远不够用……
    acess
        14
    acess  
       2021-07-02 20:53:59 +08:00   ❤️ 1
    (修正一下,“然后你用这第 141 个地址去收款了”应该是“然后你用这第 140 个地址去收款了”,应该是 140 而不是 141,下同)
    cathedrel
        15
    cathedrel  
    OP
       2021-07-03 02:26:30 +08:00
    @acess 大佬!大佬!我要把你这些话消化一下再提问题
    cathedrel
        16
    cathedrel  
    OP
       2021-07-03 04:54:57 +08:00
    @acess
    @uqin

    试用下来,ownbit 这个钱包并不是一个好选择,它甚至不是个免费使用的钱包!最高一年 499 刀的使用费。。。活久见

    然后,我这两天搜来搜去,手机上就只发现 TokenPocket 用作冷钱包和观察钱包的时候比较好用,我还没有正式投入使用,感觉 TokenPocket 也没有限制是否冷热钱包都要用它,似乎是开放的,而那个 ownbit 给的二维码好像是它独有的编码方式,也就是还限制了冷热钱包都要用它一家的。。。再次活见鬼

    另外还有个国外的 app 看起来可以:Airgap ( airgap.it ),分 airgap vault 和 airgap wallet,vault 做冷钱包 wallet 做热钱包,我也还没正式试用,vault 要求安装在没有 root 的手机上,我现在手头没有不 root 的手机,简单的 magisk 里面 hide root 还骗不过它

    不过这个 airgap 也有个奇怪的地方,它们主页上说有 win lin mac 的 wallet 客户端,可是下载链接里面只有源码....他们是以为谁都会编译吗???


    其他的各种钱包,都不支持离线使用....

    至于电脑版,就更少了,除了 BTC 官网里面有推荐的几个钱包之外,其他的币种真的可谓是山寨感浓浓,包括如今排名第二的 ETH,它的官网里推荐的钱包就没有一个有离线签名的功能!

    还试过去 github 找找有没有开源的桌面版冷钱包,很少的几个也都很老了,而且其中又有好几个还不是图形界面的,(我搜了 cold wallet 、offline wallet 、cold storage )........


    @acess 大佬你有私藏的桌面版离线钱包或签名工具吗?有的话分享一下呗
    acess
        17
    acess  
       2021-07-03 10:08:20 +08:00   ❤️ 1
    “感觉 TokenPocket 也没有限制是否冷热钱包都要用它,似乎是开放的”

    额,这涉及到另一个“早就该有却迟迟没出现的东西”,BIP174 PSBT 。(貌似现在又提出了 BIP370 PSBTv2 ?)
    PSBT 的制订,就是为了统一未签名交易的格式,如果不统一,钱包就不能“混搭”使用。

    另外提到离线签名,我还想到一个蛋疼的老问题,不知道解决了没:单张二维码承载的数据量很显然很有限,只有不到 4KB,所以如果是交易数据比较大(尤其是发现矿工费超付漏洞后,隔离见证交易输入和非隔离见证输入一样需要把前一笔交易也容纳进来),很容易就超出这个限制了。容易想到的办法是拆分,但是 PSBT 本身并没有规定这方面的细节(于是又是一团互不兼容的混沌),我记得 electrum 之前甚至是直接拒绝生成二维码,要求用户直接传文件,不知道现在改进了没。
    acess
        18
    acess  
       2021-07-03 10:11:35 +08:00   ❤️ 1
    照理说钱包不应该是能随便挑的,应该是挑最有声望最公开透明最可信的,因为如果钱包自己都不可信,没错,冷热分离并不是万能的,冷热分离也防不了钱包后门。ECDSA 数字签名就存在一个 k 值侧信道泄露问题(这类不知不觉地泄露问题在密码学里貌似叫做 kleptography )。
    (有一说一,ECDSA 也有 anti-kleptography 的方案,但是那个方案我感觉有点蛋疼,需要另一台设备验证,很显然另一台设备需要是干净可信的)
    acess
        19
    acess  
       2021-07-03 10:14:24 +08:00   ❤️ 1
    要说桌面版签名工具,其实 Bitcoin Core 最近的新版就支持图形界面 PSBT 签名……不过这只是 BTC 一个币种,而且我记得因为助记词的问题开发者仍然意见分歧严重,所以还是需要折腾导入 xprv HD 主私钥,不知道现在改了没(嘛,其实按照 BIP44 的隔离,本来就应该是这么用的,不应该把作为“根节点”的助记词导出乱导入)。
    cathedrel
        20
    cathedrel  
    OP
       2021-07-03 10:38:58 +08:00
    @acess 大佬,如果冷热分离都还不可信的话,你是用的什么钱包呢?
    acess
        21
    acess  
       2021-07-03 20:31:49 +08:00
    @cathedrel 我只是说冷热分离也不是刀枪不入的万灵药……相比直接用热钱包安全性还是好了不少的。
    cathedrel
        22
    cathedrel  
    OP
       2021-07-04 23:58:29 +08:00
    @acess “这个助记词上面有币啊,怎么导入到钱包里余额是 0 呢”这个问题我遇到过了,比特派钱包的助记词导入到 coinami 里面就有这个问题,看不到 eth 和所有派生币的余额,而且出现的地址也是原钱包里没有的地址。

    可以在导入的时候通过设置“路径”之类的参数让 coinami 正确导入比特派的钱包吗?? BIP39/44 的“路径”那些东西,哪里有基本的知识点(中文的)?我要补习一下
    acess
        23
    acess  
       2021-07-05 01:41:36 +08:00
    @cathedrel 我之前说的还没怎么涉及多币种的问题,单 BTC 一个币种,就因为 BIP44 出现太迟,以及开发者理念不合整出现在这种蛋疼的混乱局面……

    其实即便是遵守 BIP39/44/49/84 的钱包,也有可能是……额……是这样的,引入隔离见证后,BTC 常用的地址类型有 3 种,1 开头的 P2PKH,以及 3 开头的 P2SH-P2WPKH,还有 bc1 开头的 P2WPKH 。然后,即便钱包支持这三种地址(有些钱包还没全部支持呢,尤其是 P2WPKH ),有些用户可能仍然忘了点一下切换,然后就以为“丢币”了。


    ETH 我不太熟悉,不过其他币种一般是搞 Trezor 的那个公司 SatoshiLabs 维护的 SLIP44 这个文档有登记,每个币种对应编号是啥。
    Centt
        24
    Centt  
       2022-07-03 23:53:08 +08:00
    @acess 你好,想请教下,我目前在用 TokenPocket ,冷热分离,在冷钱包和热钱包扫码通信的过程中,有没有可能泄露私钥?
    acess
        25
    acess  
       2022-07-04 08:17:57 +08:00 via Android
    @muddou 没用过这个钱包,不熟悉
    eudemonwind
        26
    eudemonwind  
       348 天前
    @acess 大佬, 假设钱包是不可信的, 那么只导出地址和私钥, 来一次性使用是不是稍微好点. 比如离线生成地址和私钥, 私钥保管好, 地址只用来存币, 需要转出的时候找个 还算信得过的钱包 导入私钥和地址 在线转出 然后这个地址和私钥再也不使用了.
    acess
        27
    acess  
       348 天前
    @eudemonwind 钱包作恶是很难防范的……比如,给你看的地址你怎么确定是你自己的而不是要盗币的。
    cathedrel
        28
    cathedrel  
    OP
       347 天前
    @acess 老哥你现在用的钱包 app 是哪个?
    acess
        29
    acess  
       347 天前
    @cathedrel 之前用的 electrum personal server 和 trezor ,不过最近挺久没打开了
    eudemonwind
        30
    eudemonwind  
       342 天前
    @acess 想搭一个 bitcoin core 的离线签名+全节点的观察钱包, 网上爬了些文, 感觉操作真复杂... 有没有啥简单的办法呀? 感觉钱包什么的真不能乱用, 碰到不讲武德的就寄了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5856 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:05 · PVG 10:05 · LAX 19:05 · JFK 22:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.