欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 加密钱包助记词丢失后的一天

加密钱包助记词丢失后的一天

2025/4/4 15:15:36 来源:https://blog.csdn.net/m0_64435826/article/details/146911996  浏览:    关键词:加密钱包助记词丢失后的一天

背景知识

了解数字货币的朋友肯定都知道助记词是什么,丢失意味着什么,为了让不了解的朋友也能愉快的读完本文,我简单介绍下;

数字货币是区块链技术的产物,其鼻祖就是比特币,随着 2009 年比特币诞生以来,通过在其基础上改进和创新,已经形成了越来越多的新的数字货币类型,目前已经超过 6000+ 种;数字货币的交易一般是用币安、Coinbase 等中心平台化交易所,或者去中心化交易所(DEX),长期保存一般是用加密钱包;

助记词是一种安全机制,用于生成和恢复加密钱包,可以说是保险箱 + 钥匙、是银行卡 + 密码。

事故起因

事情就是这么个事情,助记词丢了,又没完全丢,如果找不回来的话,损失万元以上,当然了和当初抄币被割的钱来说,不算什么了,不过仍然不爽啊。

那是 21 年时候,偶然接触区块链,数字货币这些概念,基于了解学习的心态,购入了几种数字货币,后来就放入了加密钱包中,并且生成了助记词,写到了一张纸上,保存了下来。
在这里插入图片描述

在这里插入图片描述

时间过去了这么久,中间也经历了换手机等操作,最近闲来无事就从应用市场下载了一个加密钱包,准备还原下钱包,看看当时购买的数字货币现在还有没有价值,于是找到小纸条(还好没弄丢),尝试导入,没想到提示 ”非法助记词,请检查“ ,我瞬间懵逼了,难道手抄抄错单词了,反复检查后,终于定位到了原因;

本来 12 位的单词,我竟然只抄下来了 11 位,缺少了一个单词,是没法还原钱包的,想想可能的大几万资产,我真是欲哭无泪,躺在床上翻来覆去睡不着,实在不甘心呀,于是抱着最后的希望打开谷歌,看看有没人遇到类似的情况的,经过一番查找,终于找到了线索,预计缺少一个助记词的情况下,暴力破解,可能的助记词组合大概有 2048 * 12 = 24576 种,那就是说理论上只要一个个尝试,还是可以找回的,算是有了点希望,想到这个总算平静了下来。

找回助记词

第二天早早的起床收拾好,开始研究了起来,首先从助记词的生成原理开始了解,助记词一般由 BIP39 协议生成,这是一个在加密领域广泛应用的标准,它的主要目的是将种子随机数(seed)转换成易于记忆和记录的单词序列,从而帮助用户安全地备份和恢复他们的钱包。

BIP39 协议中共收录了 2048 个单词,所以我缺失的那个单词肯定在其中,另外因为我不知道该单词在我的助记词中的顺序,所以说是 2048 * 12 = 24576 种可能的组合,有没有可能再缩小下范围呢?

助记词生成规则:

  1. 创建一个128到256位的随机序列(熵)。

  2. 提出SHA256哈希前几位(熵长/ 32),就可以创造一个随机序列的校验和

  3. 将校验和添加到随机序列的末尾。

  4. 将序列划分为包含11位的不同部分。

  5. 将每个包含11位部分的值与一个已经预先定义2048个单词的字典做对应。

  6. 生成的有顺序的单词组就是助记码。

在这里插入图片描述

通过助记词的创建规则,可以看到一个检验和的概念,它是一个计算机术语,在BIP39助记词的背景下它的主用是保证助记词序列的一致性和有效性,如果随机挑选12个单词,这些单词极可能不符合原始随机数和校验和的正确组合,因此不满足BIP39的校验规则

也就是说如果完全随机生成的话, 2048 * 12 = 24576 种理论组合中,应该有很大一部分是无效的组合,这样就能大大缩小范围了,果然官方提供了 validateMnemonic 函数校验助记词有效性, 让我们先写一段代码来测试下:

const bip39 = require('bip39') // BIP-39库
const knownWords = ['success', 'hamster', 'scan', 'pool', 'sausage', 'nasty', 'dose', 'melody', 'later', 'display', 'file',
] // 假设已知的11个词如下const wordlist = bip39.wordlists.english // 使用英文词汇表
const result = []// missingWordIndex 为丢失的助记词位置索引
function findWord(missingWordIndex) {for (let word of wordlist) {// 构建带有猜测词的完整助记词let tryMnemonic = [...knownWords]tryMnemonic.splice(missingWordIndex, 0, word)// 检查这个组合是否有效if (bip39.validateMnemonic(tryMnemonic.join(' '))) {result.push(tryMnemonic.join(' '))}}
}for (let i = 0; i < 11; i++) {findWord(i)
}console.log(`找到有效助记词: ${result.length}`)
console.log(result)

在这里插入图片描述

执行后发现,共有 1401 个有效的组合,从 24576个缩小范围到 1401个,成果喜人呀,我甚至开心的拿着手机手动一个个尝试导入看看,花了一个小时导入了 100个,热情渐渐湮灭,手也酸了,眼也花了,还是没碰到正确的那一个,导入的钱包资产都是 0;

还有没有进一步缩小范围,最好能直接精准定位到钱包地址的方法呢?等等,钱包地址!!我之前的邮件里好像有加密钱包地址的信息,是一串 hash 字符串 0x67DxxxxxxxxxxxxxxxxxxxxxxxxD84F,如果能通过助记词批量计算出对应的钱包地址,不就可以精确匹配了,研究一番后,发现果然可行的,基本流程是:

  1. 从助记词生成种子,种子是一段二进制字符,是生成私钥和公钥的基础
  2. 从种子生成 hdk 密钥,它包含私钥和公钥信息
  3. 根据特定规则从密钥生成钱包地址,针对不同的加密货币和区块链网络,这个过程可能有所不同,因为不同的网络可能使用不同的算法和标准来生成地址。例如,比特币和以太坊就有不同的地址生成方法。

在这里插入图片描述

最终代码如下:

const bip39 = require('bip39') // BIP-39 库
const { hdkey } = require('ethereumjs-wallet')const knownWords = ['success', 'hamster', 'scan', 'pool', 'sausage', 'nasty', 'dose', 'melody', 'later', 'display', 'file',
] // 假设已知的11个词如下const wordlist = bip39.wordlists.english // 使用英文词汇表
const targetAddress = '0x67DxxxxxxxxxxxxxxxxxxxxxxxxD84F' // 目标地址async function getBSCAddressFromMnemonic(mnemonic) {const seed = await bip39.mnemonicToSeed(mnemonic)const hdk = hdkey.fromMasterSeed(seed)const addrNode = hdk.derivePath("m/44'/60'/0'/0/0")const wallet = addrNode.getWallet()return `0x${wallet.getAddress().toString('hex')}`
}// 参数为丢失的助记词位置索引
async function findWord(missingWordIndex) {for (let word of wordlist) {// 构建带有猜测词的完整助记词let tryMnemonic = [...knownWords]tryMnemonic.splice(missingWordIndex, 0, word)let mnemonic = tryMnemonic.join(' ')// 检查这个组合是否有效if (bip39.validateMnemonic(mnemonic)) {let address = await getBSCAddressFromMnemonic(mnemonic)if (address === targetAddress) {console.log(`位置 ${missingWordIndex} 找到匹配的助记词:`, mnemonic)return}}}console.log(`位置 ${missingWordIndex} 未找到匹配的助记词。`)
}for (let i = 0; i < 12; i++) {findWord(i).catch(console.error)
}

在这里插入图片描述

终于,丢失的助记词,找回来了!

在这里插入图片描述

总结

如果你的资产在银行里,忘记密码还可以通过平台来找回,这是银行这种中心化机构的优势, 可是对于去中心化的加密货币来说,丢失助记词,就意味着丢失了对账户的控制权,并且没有人能帮你找回,所以一定要慎重对待;

助记词不要联网,最好手抄并验证下,我就是当初抄写完后,没有验证,导致丢失了一个单词都不知道,所幸的是仅仅丢失了一位, 其余的 11 个单词都在并且顺序正确,所以才可以通过穷举法来找回来,如果丢失的更多,估计神仙也没办法了。


交流 v: t1452030 (备注来源)

首发链接:https://juejin.cn/post/7311882547687784500

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词