【加密社】如何根据.dat文件恢复密钥

加密社

看了这篇指南,你将了解助记词和密钥地址(qianbao)背后的基本原理。

以及,如何找回你的大饼密钥。

Not your key, not your coin

如果你不掌握自己加密货币钱包的私钥,那么你实际上并不能完全控制你的资产

在当今数字化的世界里,加密货币已成为许多人投资组合中不可或缺的一部分。

然而,随着这一新兴资产类别的普及,随之而来的是管理和保护这些资产的新挑战。

尤其是对于比特币这样的加密货币,安全性至关重要。一旦丢失了访问钱包所需的私钥或助记词,你的比特币可能就会永远消失。

本文旨在为你提供一系列实用的步骤和建议,帮助你在不小心丢失钱包访问信息的情况下,安全地找回你的比特币。

无论你是加密货币新手还是经验丰富的用户,都能从中受益。我们将探讨助记词的重要性、不同类型的比特币钱包以及最佳的安全实践,以确保你的数字资产得到最有效的保护。

  • 从助记词到地址,发生了什么

私钥就像是你的超级机密密码,它实际上是一串很长的数字,具体来说是由0和1组成的256位的随机数字串。

你可以把它想象成一串非常长且复杂的大门钥匙,只有这把钥匙能够打开你存放珍贵物品的保险箱(比特币钱包)。

因为这串数字非常复杂,所以很难被猜到或者破解。

当你需要证明这些珍贵物品属于你的时候,就需要用这把钥匙来做个标记(签名),证明这些物品确实是你的。

这就是为什么私钥如此重要,“Not your key, not your coin” 在加密市场广为流传的原因。

公钥则是由这串超级机密的私钥通过一种叫做椭圆曲线算法计算出来的。

这个过程就像是一种单行道,你可以很容易地从私钥计算出公钥,但是有了公钥,别人却无法推算回私钥。

公钥就像是你的保险箱上的一串号码,别人可以用这个号码确认这个保险箱确实是你的,但他们打不开它。

最后,从公钥出发,经过一系列的转换处理(也就是哈希函数和编码步骤),你会得到一个地址。

个地址类似于你的邮寄地址,其他人可以用它来给你发送比特币。地址是公开的,任何人都可以看到,但它不会泄露你的私钥或公钥。

哈希算法和非对称密码学为此提供了安全上的保障

  • wallet.dat

在早期的比特币钱包软件中,每当用户需要一个新的接收地址时,钱包就会生成一个新的私钥,并基于这个私钥创建一个新的地址。

这意味着用户使用的地址越多,对应的私钥数量也会越多。

这些私钥之间没有任何关联,这就导致每个私钥都需要单独备份,给用户带来了很大的麻烦。

那时候,用户通常需要定期备份一个名为“wallet.dat”的文件。

这个文件包含了所有的私钥信息。如果这个备份文件丢失了,那么用户将无法找回他们的资金。

那么,如何让不同的私钥之间产生联系呢?

助记词又是如何取代这种繁琐且危险的备份方式的呢?

这就要从三个重要的 BIP(Bitcoin Improvement Proposals)说起。

BIP39:助记词

    BIP39 可能是你听到最多的一个标准了。它让备份私钥这件事变得简单了很多。想象一下,如果你要记住的是一串像“5Kb7k3FUPP6a....”这样的字符,不仅难记,而且输入时还很容易出错。

但是有了 BIP39,你可以把私钥变成一组单词,比如“abandon abandon ability about above absence absent absolute absorb”,这样是不是感觉容易多了?

你只需要记住这些单词,就能恢复你的钱包。这也是为什么现在很多比特币钱包都采用了助记词的方式让用户备份自己的钱包。

不过,仅有助记词还不够。因为如果你每次使用一个新的比特币地址,就等于是在用一个新的私钥,理论上来说,你需要为每一个新地址都生成一个新的助记词。

这样做显然还是太麻烦了,和以前直接备份那个“wallet.dat”文件差不多。

那么,目前常用的这些钱包,是如何做到通过一个助记词管理一大堆钱包地址的呢?答案是:BIP32。

BIP32:分层确定性钱包

    想象一下你有一把神奇的钥匙,这把钥匙就像是一个超级母钥匙,我们叫它“主密钥”。

有了这把主密钥,你可以变出无数把其他的钥匙,这些钥匙就是“子密钥”。

而且神奇的是,这些子密钥中的任何一个又可以再变出更多的钥匙。这就像是你在玩一个“钥匙魔法”,可以从一把钥匙开始,不断地创造新的钥匙。

“分层”这个词在这里的意思就是像一棵树一样。树有一个树根,然后树根长出树枝,树枝再长出小枝条,如此类推。BIP32 就是这样的结构:

通过分层派生密钥的方式,我们可以拥有几乎无限的比特币地址。

想象一下,你有一个“种子”(主密钥),这个种子可以长成一棵大树。这棵树的每个分支都代表一个不同的地址。

虽然这些地址看起来彼此独立,但实际上它们都来源于同一个“种子”。

那么,如何建立这些扩展密钥和主密钥之间的联系?派生路径登场!

派生路径

派生路径就像是一个地址的“家谱图”,它告诉你这个地址是怎么从主密钥一步步生成的。

就好比你在家庭中,你的名字后面可以加上一系列的关系描述,比如“我是张三的儿子,李四的孙子,王五的曾孙”。

在比特币钱包中,派生路径通常是用一组数字来表示的。例如:

m / 44' / 0' / 0' / 0 / 1

这里的 m 表示“主密钥”,后面的数字则表示了具体的派生步骤:

  1. 44':表示这是用于加密货币的路径。

  2. 0':表示这是比特币的路径。

  3. 0':表示这是第一个账户。

  4. 0:表示这是第一个子账户。

  5. 1:表示这是第一个子账户下的第二个地址。

当你使用一个助记词(例如 BIP39 的助记词)来恢复钱包时,助记词会生成一个主密钥。

然后,根据你设置的派生路径,这个主密钥会逐步生成你需要的所有地址。

到这里,聪明的读者会发现:如果仅仅依靠助记词本身,是无法直接得到某一个具体的地址的。

必须加上派生路径,才能推导出具体的比特币地址。但是,为什么在大多数情况下,我只是把助记词导入到钱包,曾经用过的那些地址就出来了?

这就要提到BIP44标准

BIP44:派生路径定义规范

BIP44 为“派生路径”中的每一层都赋予了特定的意义。派生路径的形式如下:

m / purpose' / coin_type' / account' / change / address_index

  1. m:

    • 这个 m 就是“主密钥”(master)的意思,表示这是从主密钥开始派生的路径。

  2. purpose:

    • purpose 代表了这个钱包遵循的标准或用途。对于比特币钱包来说,这个数字告诉我们最终生成的比特币地址是什么类型的。

    • 例如,44' 表示这个路径遵循的是 BIP44 标准。

  3. coin_type:

    • coin_type 代表你要使用的加密货币类型。

    • 对于比特币来说,0 表示主网的比特币,1 表示测试网的比特币。每种加密货币都有自己的编号。

  4. account:

    • account 表示你在这个路径下想要管理的账户编号。

    • 例如,0 表示第一个账户,1 表示第二个账户,以此类推。

  5. change:

    • change 定义了这个地址是用来收款还是找零的。

    • 0 通常表示收款地址,1 通常表示找零地址。

  6. address_index:

    • address_index 表示在当前路径下的具体地址编号。

    • 例如,0 表示第一个地址,1 表示第二个地址,以此类推。

假设你有一个助记词,你想生成一个比特币的收款地址。派生路径可能是:

m / 44' / 0' / 0' / 0 / 1

  • m:表示从主密钥开始。

  • 44':表示遵循 BIP44 标准。

  • 0':表示比特币(主网)。

  • 0':表示这是第一个账户。

  • 0:表示这是收款地址。

  • 1:表示这是第一个账户下的第二个地址。

为什么助记词导入后能显示地址?

当你把助记词导入到一个新的钱包时,钱包软件通常会默认使用一个标准的派生路径,例如:

m / 44' / 0' / 0' / 0 / 0

这个路径会生成你的第一个收款地址。大多数钱包都会自动使用这种通用路径,所以当你导入助记词后,它会根据这个路径生成你曾经用过的地址。

这样,你就不需要手动输入复杂的派生路径,钱包软件会自动帮你处理这些细节。这就是为什么助记词导入后,你的钱包可以显示出你以前用过的地址。

以下是比特币钱包中常用的三种地址派生路径标准的总结:

BIP44

  • P2PKH 地址:这是最传统的比特币地址,通常以数字 1 开头。

  • 派生路径:为了生成这样的地址,我们使用 m/44'/0'/... 这样的路径。

  • 意义:这个路径表示我们遵循 BIP44 标准来生成地址,主要用于非隔离见证的传统比特币地址。

BIP49

  • P2WPKH-nested-in-P2SH 地址:这是一种混合型地址,它实际上是将新的隔离见证(SegWit)地址嵌套在旧的支付到脚本哈希(P2SH)地址里,通常以数字 3 开头。

  • 派生路径:为了生成这样的地址,我们使用 m/49'/0'/... 这样的路径。

  • 意义:这个路径表示我们遵循 BIP49 标准来生成地址,主要用于向后兼容旧的钱包系统,同时也能享受隔离见证的一些好处。

BIP84

  • P2WPKH 地址:这是纯粹的隔离见证地址,通常以 bc1q 开头。

  • 派生路径:为了生成这样的地址,我们使用 m/84'/0'/... 这样的路径。

  • 意义:这个路径表示我们遵循 BIP84 标准来生成地址,主要用于完全支持隔离见证的新式比特币地址。

        正是因为有了这些标准的派生路径,钱包软件才知道如何生成不同类型的比特币地址。

当你导入助记词时,钱包软件可以根据你选择的地址类型,自动按照相应的派生路径生成你需要的地址。

因此,用户不需要关心复杂的路径细节,只需要导入助记词并选择地址类型,就可以找回并使用他们的钱包了。

  • 怎么找回钱包?

虽然现在有很多标准来帮助生成和管理比特币钱包,比如前面提到的 BIP44、BIP49 和 BIP84,但有时候仅有助记词还是不够的。

这是因为并不是所有钱包都严格遵循这些标准,有些钱包可能会有自己的做法,导致一些特殊情况出现:

  •  有些钱包没有遵循这些标准:这意味着它们可能用了不同的方法来生成地址。

  •  即使遵循了标准,也可能与其他钱包不一致:不同的开发者可能对同一个标准有不同的理解或实现方式。

  •  采用了较新的标准,但支持的钱包还不多:新标准可能还没被广泛接受。

实际例子

  • Electrum 钱包:如果你用的是 Electrum 钱包,并且尝试把助记词导入到其他钱包中,可能会遇到问题,因为 Electrum 有自己的助记词系统,而不是通用的 BIP39 标准。

  • Ledger 硬件钱包:如果你是 Ledger 硬件钱包的用户,并且想要把助记词导入到另一个钱包,可能会发现生成的地址不一样。这是因为 Ledger 使用了自己的派生路径,和其他钱包不一样。

由于这些不一致性,很多用户在尝试找回他们钱包里的资金时遇到了麻烦。因此,有一些网站,比如 Wallets Recovery,可以在上面试试。

当我们了解了钱包生成的规则,让我们回到最开始的话题

如何找回钱包?

三部曲:

hashcat 是一个破解密码的工具。你需要先下载并安装它。安装好之后,打开命令提示符(Windows)或终端(Mac/Linux)。

在命令行中输入以下命令:

  • 准备字典文件:

    字典文件是一个文本文件,里面包含了各种可能的密码组合。你可以自己创建一个,或者从网上下载一个现成的字典文件。这个文件通常命名为 example.dict

  • 安装并打开 hashcat:

  • 运行 hashcat 命令:

.\hashcat.exe -a0 -m11300 .\wallet.txt .\example.dict
  • 这个命令的意思是:

    • .\\hashcat.exe:运行 hashcat 程序。

    • -a0:使用模式0,即简单的暴力破解模式。

    • -m11300:指定模式为比特币钱包文件(wallet.dat)的哈希类型。

    • .\wallet.txt:这是你要破解的文件,通常是从 wallet.dat 中提取出来的哈希值。

    • .\example.dict:这是你准备好的字典文件。

如图

一个包含 13 万个密码的字典文件,用 hashcat 跑一遍只需要 4 分钟。你会发现,只要你的密码不是特别复杂,找回密码的可能性很大。

但是,最关键的问题是如何从钱包文件中提取出哈希值。

你在网上找到了一个叫做 bitcoin2john.py 的脚本,据说可以用来从 wallet.dat 文件中提取哈希值。

你尝试了好几次,配置了 Python 环境,但每次都失败了。后来你才发现,这个脚本已经过时了,不再适用。

紧接着你又发现一些在线解析网站(且不提在线解析是在帮别人打工的问题)

也都会返回一些莫名其妙的错误,例如:

unexpected file type or format Couldn't open wallet.dat/main. Try quitting Bitcoin and running this again.

让我们回到初心,回到BTC的源码的研究

GitHub - bitcoin/bitcoin: Bitcoin Core integration/staging tree

经过几天的分析,编译,调试。

我找到了钱包部分,稍加修改,就输出了hash

后续我会在Github开源我的程序,但目前还在测试阶段,需要的话可以免费加入社群后,将.dat文件发给我一起研究讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1523634.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【STM32开发笔记】STM32H7S78-DK上的CoreMark移植和优化--兼记STM32上的printf重定向实现及常见问题解决

【STM32开发笔记】STM32H7S78-DK上的CoreMark移植和优化--兼记STM32上的printf重定向实现及常见问题解决 一、CoreMark简介二、创建CubeMX项目2.1 选择MCU2.2 配置CPU时钟2.3 配置串口功能2.4 配置LED引脚2.5 生成CMake项目 三、基础功能支持3.1 支持记录耗时3.2 支持printf输出…

基于FPGA的OV5640摄像头图像采集

1.OV5640简介 OV5640是OV(OmniVision)公司推出的一款CMOS图像传感器,实际感光阵列为:2592 x 1944(即500w像素),该传感器内部集成了图像出炉的电路,包括自动曝光控制(AEC…

内网渗透-域环境搭建

构建内网环境 在学习内网渗透测试时,需要构建一个内网环境并搭建攻击主机,通过具体操作理解漏洞的工作原理,从而采取相应的防范措施。 一个完整的内网环境,需要各种应用程序、操作系统和网络设备,可能比较复杂。我们只需要搭建其中的核心部分,也就是Linux服务器和 Windows服务…

复变函数在大模型中的应用

1. 导入 说来惭愧,我研究生时的研究方向是复分析,但毕业近十年来几乎没用到它。 我还记得实习时做自我介绍时,我说我的研究方向是复分析。面试官不太了解,我便解释说,这是关于对 -1 开平方得到的虚数 i 的研究。 在…

【iOS】——分类拓展关联对象

分类 OC的动态特征允许使用类别为现有的类添加新方法并且不需要创建子类,不需要访问原有类的源代码。通过使用类别即可动态为现有的类添加新方法,而且可以将类定义模块化分布到多个相关文件。 分类是 Objective-C 中的一种语言特性,它允许你…

缓解webclient频繁报‘Connection prematurely closed BEFORE response’的问题

现象: 我在Java代码中使用org.springframework.web.reactive.function.client.WebClient进行网络请求,一开始会有比较多的偶发报错:Connection prematurely closed BEFORE response,网络连接莫名其妙就断了。 处理: …

pm2 + linux + nginx

pm2 pm2是一个用于管理node项目的工具 前言 有如下两个文件 index.js const express require("express"); const app express(); const port 9999;app.get("/index", (req, res) > {res.json({code:200,msg:"songzx001"}) });app.lis…

学习硬件测试06:IIC(SHT30)+HMI串口屏+RS485(modbus)+SPI Flash读写+CAN通信(P81、P91、P95、P120、)

文章以下内容全部为硬件相关知识,鲜有软件知识,并且记的是自己需要的部分,大家可能看不明白。 一、IIC(SHT30 数字温湿度传感器) 1.1实验现象 1、软件模拟 I2C 协议与 SHT30 数字温湿度传感器通讯; &am…

怎么把视频转换成mp4:好用的mp4格式转换器免费版推荐

用手机或者其他拍摄设备记录生活已经成为一种日常,当你想把手机里储存的日常小确幸发布到平台上时,才发现你视频的格式在平台上并不被支持。这个事实难免让人丧气。如果你还想继续上传视频的话,就不得不把视频格式转换成被平台支持的mp4格式。…

ELK系列之一---探索ELK奇妙世界:初识日志界大名鼎鼎的ES集群!

目录 一、为什么要使用ELK 二、ELK简介 三、Elaticsearch入门 3.1、什么是elaticsearch 3.2、elaticsearch的底层优点 3.2.1、全文检索 3.2.2、倒排索引 3.3、elaticsearch集群原理 一、为什么要使用ELK 一般我们需要进行日志分析场景:直接在日志文件中 gre…

Redis从入门到入门(上)

1.Redis概述 文章目录 1.Redis概述1.1 什么是Redis1.2 Redis的应用场景 2.Linux下Redis的安装与使用2.1 Redis下载2.2 Redis的启动2.3 Redis配置2.4 连接Redis 1.1 什么是Redis Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库&#xff0…

C语言sprintf函数使用

1 其函数原型为:int sprintf(char *str, const char *format,...)。 具体用法如下: 基本语法: str:目标字符串的指针,用于存储格式化后的结果。format:格式化字符串,用于指定输出的格式。后续是…

数据结构-队列的介绍及循环队列

1.队列的概念 在开始前,请牢记这句话:队列是一个先进先出的数据结构。 队列(queue)是限定在表的一端进行插入,表的另一端进行删除的数据结构,如同栈的学习,请联系前文所学链表,试想…

4.5SQL注入之加解密注入

SQL注入之加解密注入Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 Less-21关 Cookie加密注入: 通过Burpsuite抓包: 进行Base64解密:

波场(Tron)监听区块交易(TRX,USDT)

前言说明: 本篇文章参考GitHub一位伙伴的代码,再代码基础上优化改良以后的结果,但是一下找不到那位大佬的GitHub链接了,如有侵权请联系作者调整文章,让跟多人收益。谢谢。 实现思路: 波场链是一条很新奇的链&#xff…

Nexus配置npm私服

1,配置npm-hub 2,配置proxy-npm 3,配置group-npm 4,配置local-npm 5,配置淘宝

[overleaf] 论文中含有中文字符导致编译失败

解决方案分为两步: 1. 加入package: UTF8或者xeCJK \usepackage[UTF8]{ctex}二选一 \usepackage{xeCJK} 2. 修改编译方式: Menu -> Setting -> Compiler -> XeLatex

MyPrint打印设计器(七)svg篇-二阶贝塞尔曲线

svg-二阶贝塞尔曲线 介绍一款强大的svg操作库,能够通过简单的代码,实现svg绘制与操纵,实现拖拽等功能 代码仓库 在线体验 代码仓库:github 代码仓库:gitee 实战项目:MyPrint 操作简单,组件丰富…

Ovirt-Engine(4.3.10 )备份恢复

介绍如何进行 oVirt Engine 的备份、恢复以及相关操作,包括自动备份脚本、手动备份步骤、托管引擎的恢复流程,以及恢复后的配置和验证步骤。 1. Engine 备份部分 1.1 备份使用的脚本 以下是一个用于自动备份 oVirt Engine 的 Bash 脚本: …

标签中的ref属性

之前说过了 ref() 函数,现在说的标签中的 ref 属性 和 ref() 函数也存在一定关联。 2、 标签中的 ref 属性分为两种情况: 用在普通DOM标签上,获取的是DOM节点。 用在组件标签上,获取的是组件实例对象 Vue2 中标签上的 ref 属性…