主页 > imtoken钱包官网安全下载 > 比特币从地址逆向计算私钥

比特币从地址逆向计算私钥

imtoken钱包官网安全下载 2023-12-19 05:14:20

区块链区块链简介

说到比特币,就不得不提区块链。 那么什么是区块链?

区块链的本质是一个数据集,只是数据的组织采用了一种特殊的方法,就是将数据一块一块地拆分成小的数据集。

为什么要进行数据拆分? 因为区块链的作用是作为一个开放的分布式账本,每个人都可以修改。 这需要防止恶意修改。

分成小数据块后比特币换算计算器,我们可以给每个数据块加锁。 要修改数据,首先要找到key。 找到密钥的过程是一个需要大量计算的过程。 比特币使用工作量证明机制(PoW)。

区块链的链体现在哪里? 每个小数据库的key都依赖于前一个block的key,这样就形成了一个链式结构。 这样做的目的是增加篡改数据的难度,降低篡改数据的可能性,因为要篡改一个块的数据比特币换算计算器,必须修改这个块数据之后的所有数据。

打包块的计算

寻找钥匙的过程比较复杂。 让我们在这里简化它。 首先我们来看一下区块链每个区块所包含的属性:

Index:区块编号(创世区块的索引为0)。 Hash:当前区块的哈希值。 Previous Hash:前一个区块的哈希值。 时间戳:当前区块创建时的时间戳。 数据:存储在当前区块上的交易信息。 Nonce:参与哈希运算的值,使得区块的哈希值满足指定条件

function isValidHash(hash, difficulty) {
  for (var i = 0, b = hash.length; i < b; i ++) {
      if (hash[i] !== '0') {
          break;
      }
  }
  return i >= difficulty;
}
let nonce = 0;
let hash;
let input;
let difficulty=4;
while(!isValidHash(hash,difficulty)) {     
  nonce = nonce + 1;
  input = index + previousHash + timestamp + data + nonce;
  hash = SHA256(input)
}

key是使结果满足一定条件的nonce值。 difficulty difficulty的一般取值就是前缀中有多少个0。 例如difficulty等于4,需要调整nonce的值。 一般的算法是从0开始递增,这样通过sha256之类的hash算法的结果的前缀至少包含4个0。

根据hash算法不可逆的特性,我们知道通过一个值是不可能逆向计算nonce的,所以大家只能老老实实的做迭代计算。

很多同学可能会有疑惑:既然大家都只会搬砖,那肯定是实力比较强的人先来吧! 即由计算能力强的计算节点先计算出结果。

主要2点:

算法可以不同。 比如有些人喜欢每次给nonce加1,也可以每次加其他值。 比如2个数据不一样。 数据通常是一种交易。 一般会有一个交易池,每个人选择不同的交易形成数据。 比特币私钥椭圆曲线算法通过地址进行数据逆向计算

逆向计算比特币私钥,首先要知道什么是比特币私钥,什么是比特币公钥。 说到公钥和私钥,肯定会涉及到非对称加密算法,比如RSA、椭圆曲线算法等。

比特币选择椭圆曲线算法:

y^2=x^3+ax+b
4a^3+27b^2!=0

比特币使用 Secp256K1 参数:

a=0
b=7
p=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
X: 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
Y: 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

其中X\Y为生成点的横纵坐标。

椭圆曲线算法并不像通过坐标求解方程那么简单,而是用椭圆曲线来定义一个群。 椭圆曲线方程的作用是将几何运算转化为代数运算。

这里没有图片,不好说。 椭圆曲线算法这里就不详细介绍了。 您可以在自己的搜索引擎上搜索相关信息。 后面会介绍一本详细介绍椭圆曲线算法的书。 如果你有兴趣,你可以看看。

当然你可以直接下载《以太坊智能合约开发实战》一书比特币章节的pdf文件,下载链接为:以太坊智能合约开发实战

提取码是:wb7k

这里简单的说就是用CSPRNG生成一个随机数作为私钥,私钥乘以椭圆曲线乘法生成点,转化为椭圆曲线方程的代数运算,椭圆上的一个点曲线被计算为公钥。

私钥是随机大整数,公钥是一个点

地址的私钥

如果要暴力逆向计算私钥,当然要先了解私钥是怎么来的。

使用比特币可以通过CSPRNG生成,当然也可以自定义,只要范围在1到n-1之间即可,其中n为椭圆曲线参数secp256k1中的n值。 有了私钥privateKey,就很容易计算出公钥,使用椭圆曲线乘法:

publicKey(px,py) = privateKey * G(x,y)

其中*表示椭圆曲线相乘,G为椭圆曲线参数secp256k1中指定的生成点G。

私钥生成

那么如何计算地址呢? 这个过程有点复杂。 如上图所示,先通过CSPRNG生成一个随机数作为私钥,再通过私钥计算出公钥。 我们知道公钥是一个点,不容易计算出Hash值,所以我们需要做一点转换,怎么转换呢,先拼接一个04前缀,再拼接公钥的横坐标,然后拼接公钥的纵坐标得到数据。

然后计算data的sha256值得到R,计算R的ripemd160得到一个extendR,extendR拼接一个00前缀,然后对extendR进行两次sha256哈希计算得到前4个字节,然后使用extendR将之前计算的4个字节拼接得到数据,最后对数据做base58check编码得到最终地址。

公钥压缩

压缩公钥的目的是减少比特币交易的字节数,从而节省运行区块链数据库的节点上的磁盘空间。 公钥是椭圆曲线上的一个点。 将点转换为数字的方法是加一个04前缀,拼接点的横坐标x,再拼接点的y坐标,这样公钥就转换成了520 Bits的数字,其中16进制前缀04占一个字节8位,x坐标256位,y坐标256位。 公钥是如何压缩的? 对于比特币来说,椭圆曲线的参数是确定的,也就是椭圆曲线,所以我们可以通过横坐标x得到纵坐标的值y。 我们只需要存储x点的值,需要y坐标值的时候再进行计算。 如图3.8所示,是获取公钥格式的流程图。 非压缩格式加04前缀主要是为了区分公钥是否压缩。

公钥压缩

判断纵坐标的奇偶性是因为椭圆曲线y值的计算有平方根运算,所以需要区分y的正负值。 y为正则加前缀02,y为负则加前缀03。奇偶性判断与正负判断有什么关系? 我们知道,椭圆曲线上的运算都限于有限域,而在p阶有限域中,奇偶性和正性是相关的。 其中,p在椭圆曲线参数中指定。 比特币使用 secp256k1 的 p 值:FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F 2^256 − 2^32 − 2^9 − 2^8 − 2^7 − 2^6 − 2^4 − 1

私钥格式

私钥有多种格式,最常见的是十六进制格式,例如:18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725 私钥有两种格式,一种是WIF(钱包导入格式),另一种是WIF压缩格式。 WIF 格式类似于 WIF 压缩格式。 我们先来看看如何通过私钥计算WIF。 相比私钥到地址的转换,私钥转换成WIF格式要容易的多。

私钥格式

先在私钥上加一个16进制前缀80,然后计算两次sha256作为中间值H,然后拼接数据末尾H的前4个字节作为校验码得到数据,然后对数据计算base58check WIF获取地址的格式。 WIF-Compressed格式的计算过程基本上与WIF格式的计算过程相同,除了后缀01在计算之前添加到私钥中。一一个01后缀,变:18E14A7B6A307F426A94F8114701E7C8E7774E77F9A47E2C2035B29A20632172172501

私钥逆向计算示例

const bitcoin = require('bitcoinjs-lib')
//找几个比特币较多的地址
constrichAddrs=['16ftSEQ4ctQFDtVZiUBusQUjRrGhM3JYwe','16rCmCmbuWDhPjWTrpQGaU3EPdZF7MTdUk','183hmJGRuTEi2YDCWy5iozY8rZtFwVgahM']
const N = 1000
// 使用prototype方式给Array对象添加一个contains函数,用于检查是否包含指定元素
Array.prototype.contains = function (obj) {
    var index = this.length
    while (index--) {
        if (this[index] === obj) {
            return true
        }
    }
    return false
}
function conclusion(){
    for(let i=0;i

书籍推荐

这里有一本《以太坊智能合约开发实战》,对区块链和智能合约感兴趣的同学可以看看。 书中有很多值得一读的理论知识。

以太坊智能合约开发实战

书中介绍了P2P网络、椭圆曲线算法、智能合约等很多东西,了解P2P网络就可以了解区块链的数据传输,了解椭圆曲线算法就可以理解为什么基本不可能来计算私钥。

当然,其中还包括很多关于智能合约的知识。 智能合约在比特币中不可用。 以太坊基本是参照比特币实现的,但最大的进步体现在智能合约上。 如果你了解智能合约,你会发现区块链是真的。 会有很多有前途的使用场景,我们只需要等待技术变得更加成熟,就可以更好地实施。