BIP39二进制查找表,安全偏执狂专用

BurntCoins 副船长 发布在 技术文档
 97517  21

首先,这其实是个没X用的东西,因为从助记词推算收款地址必须靠计算机,不能手算。签名交易的时候也是。依赖电子设备,就必须信任电子设备没有后门。

BIP39单词表经过特别设计,仅需前4个字母就可以确定一个单词,所以这张表里只填入了前4个字母。

BIP39单词表一共2048个单词。2048=2^11,也就是说,每个单词的序号(因为一般情况下序号从1开始,所以需要减去1才能变成从0开始)可以用11bit表示。在这张表中,前5bit确定行号,后6bit确定列号。

换句话说,每抛11次硬币,就可以确定一个单词:前5次确定行号,后6次确定列号。

抛128次硬币,就可以生成一组由12单词构成的助记词。
抛256次硬币,就可以生成一组由24单词构成的助记词。

红、橙、黄、绿、蓝、紫,这六色分隔线分别对应行号或列号的第1、2、3、4、5、6位。
(从高位到低位)第1位是0,表示单词位于红线的左侧或上侧;第1位是1,则表示单词位于红线的右侧或下侧;
第2位是0,表示单词位于橙线的左侧或上侧;第2位是1,则表示单词位于橙线的右侧或下侧;
……以此类推

不过,抛硬币后,光靠这张表,不依赖计算机,不能完全确定助记词中的最后一个单词,只能知道一个范围。

比如12单词可以表示132bit,比128bit多出4bit的校验码,校验码是从前128bit推算(哈希后取前4bit)出来的,这个还是要靠计算机去算。
也就是说,对于12单词助记词来说,最后一个单词只能找到一个范围,能确定它在某一行,然后这一行被红线和橙线分为4段,每一段有16个单词,只能确定它在哪一段里,不能确定是16单词中的哪一个。

同理,24单词有8bit的校验码,所以连行号都不能完全确定。这个表格一共32行,被红线、橙线、黄线分为8段,每一段有4行,只能确定在哪一段里,不能确定是4行×64单词=256个单词中的哪一个单词。

  • 正序
  • 最新
只看帖主 楼层直达
  • 停车加信仰 海盗王 2020-03-08 20:54:33 只看该作者 沙发
    不能明白怎么利用计算机算出最后一位单词
  • 停车加信仰 海盗王 2020-03-08 20:57:17 只看该作者 板凳
    https://m.chainnode.com/post/413192?from=singlemessage大佬顺便看看我这个问题
  • BurntCoins 副船长 2020-03-08 22:15:45 只看该作者 地板
    停车加信仰 发表于2020-03-08 20:54:33 不能明白怎么利用计算机算出最后一位单词
    不靠计算机也可以知道最后一个单词会落在什么范围里。

    BIP39的校验码是把128/256bit(抛硬币的结果)SHA256哈希一遍,取前面4bit或8bit。

    其实笔算不是完全不可能算出校验码,然后就可以确定最后一个单词,就是超级累人、超级慢,而且这样还不够啊,还有2048轮PBKDF2、HD子私钥推导、椭圆曲线计算推导公钥……
    楼层直达
  • 停车加信仰 海盗王 2020-03-08 22:19:53 只看该作者 5楼
    BurntCoins 发表于2020-03-08 22:15:45 不靠计算机也可以知道最后一个单词会落在什么范围里。

    BIP39的校验码是把128/256bit(抛硬币的结果)SHA256哈希一遍,取前面4bit或8bit。

    其实笔算不是完全不可能算出校验码,然后就可以确定最后一个单词,就是超级累人、超级慢,而且这样还不够啊,还有2048轮PBKDF2、HD子私钥推导、椭圆曲线计算推导公钥……
    说的我想放弃了。有时间试一下
    楼层直达
  • BurntCoins 副船长 2020-03-08 22:25:20 只看该作者 6楼
    停车加信仰 发表于2020-03-08 22:19:53 说的我想放弃了。有时间试一下
    很简单:打开Ian Coleman的BIP39工具,勾选展开Show entropy details界面,输入0和1构成的raw entropy(比如128次抛硬币结果)。输完了,助记词就出来了。
    楼层直达
  • BurntCoins 副船长 2020-03-08 22:26:10 只看该作者 7楼
    停车加信仰 发表于2020-03-08 22:19:53 说的我想放弃了。有时间试一下
    Ian Coleman的BIP39工具当然是靠计算机。
    不靠计算机的话,稍微想想就感觉要累死人……
    楼层直达
  • 楼主糊涂人 水手 2020-03-09 00:44:41 只看该作者 8楼
    楼主很棒 学习了
  • 大饼&辣条 队长 2020-04-14 22:51:59 来自App 只看该作者 9楼
    b大前辈 我想请教一个问题 一直困扰我很久了!我目前使用的钱包是 比特核心钱包!我于2019年11月存入一个比特币!目前区块已经同步到2019年11月 如果我现在需要进行一个离线签名交易 是不是不用同步到最目前新的区块了吗?
  • 大饼&辣条 队长 2020-04-14 22:56:10 来自App 只看该作者 10楼
    b大大 还要麻烦咨询你 就是我本地硬盘因为当时生成用的核心 bitcoin-core 0.17.1版本!生成3开头钱包地址 !这台旧电脑不打算在联网了 比如我过5年或者10年后想离线签名交易 我还能直接使用这个老旧版本的钱包吗?
  • BurntCoins 副船长 2020-04-17 03:41:25 只看该作者 11楼
    大饼&辣条 发表于2020-04-14 22:56:10 b大大 还要麻烦咨询你 就是我本地硬盘因为当时生成用的核心 bitcoin-core 0.17.1版本!生成3开头钱包地址 !这台旧电脑不打算在联网了 比如我过5年或者10年后想离线签名交易 我还能直接使用这个老旧版本的钱包吗?
    一直以来Bitcoin Core都是支持旧版本wallet.dat的,我从Bitcoin Core的发行注记上看到这个,以后应该也是这样。不过保险起见还是导出私钥抄一份、再导入验证一遍,同时要提醒自己不要找零丢币,尤其是“自动找零到新地址上,新地址私钥没备份”这种找零丢币。
    楼层直达
  • BurntCoins 副船长 2020-04-17 03:47:30 只看该作者 12楼
    大饼&辣条 发表于2020-04-14 22:51:59 b大前辈 我想请教一个问题 一直困扰我很久了!我目前使用的钱包是 比特核心钱包!我于2019年11月存入一个比特币!目前区块已经同步到2019年11月 如果我现在需要进行一个离线签名交易 是不是不用同步到最目前新的区块了吗?
    这个问题我重复说过很多遍了,目前的Bitcoin Core图形界面没有冷钱包功能,未来的版本应该会有。

    目前还是推荐直接用Electrum、比太等完善支持冷热分离的钱包。

    硬要搞的话,折腾命令行可以实现,无非就是listunspent、createrawtransaction、signrawtransaction等等那几个命令,可以自己用测试网模式练练手,会者不难难者不会。反正我不推荐这么搞,容易犯错,犯错后还无法挽回。
    要么就是坛友 素履以往 的那个折腾的办法,“一次性”使用同步好的区块链账本,我觉得那样太低效太麻烦了。
    楼层直达
  • BurntCoins 副船长 2020-04-17 03:54:12 只看该作者 13楼
    大饼&辣条 发表于2020-04-14 22:51:59 b大前辈 我想请教一个问题 一直困扰我很久了!我目前使用的钱包是 比特核心钱包!我于2019年11月存入一个比特币!目前区块已经同步到2019年11月 如果我现在需要进行一个离线签名交易 是不是不用同步到最目前新的区块了吗?
    冷热分离,正常情况下是这样分工的:

    离线电脑/手机:负责生成私钥、审核交易内容(收款地址、金额等)、签名交易。从头到尾私钥都不会触网。
    在线电脑/手机:负责从网络上同步历史交易记录信息、计算最终可用余额、生成未签名交易、播报已签名交易。

    两台设备之间不直接联网,用二维码、U盘、蓝牙等途径传递交易数据,在线设备生成未签名交易,发给离线设备,离线设备上审核、签名交易后,把已签名交易发回给在线设备,然后在线设备把交易广播出去。
    楼层直达
  • BurntCoins 副船长 2020-04-17 03:56:41 只看该作者 14楼
    大饼&辣条 发表于2020-04-14 22:51:59 b大前辈 我想请教一个问题 一直困扰我很久了!我目前使用的钱包是 比特核心钱包!我于2019年11月存入一个比特币!目前区块已经同步到2019年11月 如果我现在需要进行一个离线签名交易 是不是不用同步到最目前新的区块了吗?
    全节点同步区块,就是下载并验证比特币全网的交易记录,或者说账本。

    如果是我刚刚说的那种完善的冷热分离模式,那全节点从头到尾都是在联网设备上运行的,应该尽量联网保持同步,随时保持最新状态,这样才方便使用嘛。
    楼层直达
  • BurntCoins 副船长 2020-04-17 03:59:09 只看该作者 15楼
    大饼&辣条 发表于2020-04-14 22:51:59 b大前辈 我想请教一个问题 一直困扰我很久了!我目前使用的钱包是 比特核心钱包!我于2019年11月存入一个比特币!目前区块已经同步到2019年11月 如果我现在需要进行一个离线签名交易 是不是不用同步到最目前新的区块了吗?
    如果硬要问“是不是不用同步到最目前新的区块”,确实是这样,只要你有2019年11月那笔收款的交易,就已经可以据此生成花出去的未签名交易,把这个交易签名后,发出去,这个过程全程都不需要同步到最新区块就可以完成。

    但是,你不同步到最新区块,就不能在自己的全节点上看到这笔花出去的交易被确认。
    楼层直达
  • 大饼&辣条 队长 2020-04-17 22:33:55 来自App 只看该作者 16楼
    BurntCoins 发表于2020-04-17 03:59:09 如果硬要问“是不是不用同步到最目前新的区块”,确实是这样,只要你有2019年11月那笔收款的交易,就已经可以据此生成花出去的未签名交易,把这个交易签名后,发出去,这个过程全程都不需要同步到最新区块就可以完成。

    但是,你不同步到最新区块,就不能在自己的全节点上看到这笔花出去的交易被确认。
    感谢b大大解答疑问!我是这样打算的 如果非要花这个冷钱包比特币 我必须一次性全部转出去 一个地址的转出交易只使用一次即可 主要是防止找零问题出现!
    楼层直达
  • 1
  • 2
登录 账号发表你的看法,还没有账号?立即免费 注册