当前位置: 首页 > news >正文

【加密社】私钥碰撞器原理及工作展示

加密社

在区块链和加密货币系统中,私钥是保护用户资产安全的核心。
私钥用于生成公钥和地址,并且是唯一能够签署交易的密钥。私钥的安全性直接关系到用户的资金安全。本文将从技术角度探讨私钥碰撞的可能性、风险以及如何防范。

点击上方蓝字关注我们

新来的朋友记得关注并设为星标才能第一时间收到每天的文章推送

  • 什么是私钥?

动图封面

在比特币和其他基于椭圆曲线密码学(ECC)的系统中,私钥通常是一个256位的整数。私钥 dd 用于生成对应的公钥 QQ,公式如下:

其中 GG 是椭圆曲线上的一个基点(生成元),dd 是私钥。

公钥 QQ 可以进一步转换为地址。对于比特币,地址的生成过程包括:

  1. 计算公钥哈希:使用SHA-256和RIPEMD-160对公钥进行两次哈希运算。

2.添加版本字节并进行Base58Check编码。

私钥碰撞的概念

私钥碰撞是指两个不同的私钥生成了相同的公钥或地址的情况。这种情况理论上可能发生,但实际发生的概率极低。

对于256位的私钥空间来说,可能的私钥数量是2的256次方,这是一个天文数字,比宇宙中的原子数量还要多得多。

理论上的可能性

生日悖论

虽然私钥碰撞的概率非常低,但我们可以借用“生日悖论”来理解这种小概率事件。生日悖论表明,在一个房间里有23个人时,至少两个人生日相同的概率超过50%。

然而,私钥空间远远大于这个规模,因此即使考虑生日悖论,私钥碰撞的实际发生率仍然极其微小。

量子计算威胁

随着量子计算技术的发展,传统加密算法可能会面临新的挑战。量子计算机理论上可以通过Shor算法在多项式时间内破ECC等公钥密码体制,从而找到私钥。

但这仍然是一个未来的问题,目前的量子计算机还不足以对现有的密码体系构成实质性威胁。

实际风险

尽管私钥碰撞的理论可能性极低,但在实践中,以下几种情况可能导致类似的风险:

  1. 弱随机数生成器:如果使用的随机数生成器不安全或被恶意篡改,可能会生成重复或可预测的私钥。
  2. 硬件故障:某些硬件设备可能存在缺陷,导致生成的私钥不是完全随机的。
  3. 软件漏洞:乾包软件或其他相关工具中的漏洞可能导致私钥生成过程出现错误。

防范措施

为了防止私钥碰撞及相关风险,可以采取以下措施:

  1. 使用高质量的随机数生成器:确保使用的随机数生成器符合密码学安全标准,如FIPS 140-2认证的CSPRNG。以下是一个使用Python的示例代码,展示如何生成一个安全的私钥:
import os
import hashlibdef generate_private_key():# 生成256位的随机数private_key = os.urandom(32)return int.from_bytes(private_key, byteorder='big')# 生成一个私钥
private_key = generate_private_key()
print(f"Generated Private Key: {private_key}")
  • 概率解释&工具展示

动图封面

椭圆曲线密码学模型

私钥碰撞在理论上存在,但在实际应用中极为罕见

但是仍挡不住技术爱好者想要在里面试试自己的运气。

初版的私钥碰撞是根据RPC节点去无线循环匹配地址,可以多开程序,如图:

干货来咯~!私钥碰撞器,需要拿走

但是后来和几个技术圈的朋友讨论后,觉得这样的想法是比较天真的,这样的概率来跑的话,除非运气逆天,否则真的很难中奖。

于是我把目光转移到了助记词上,了解技术的朋友都知道。

大部分助记词(种子短语)都是通过BIP39标准规则生成的,目的是生成的一种人类可读的、易于记忆的单词序列,用于恢复和备份加密货币乾包。

BIP-39定义了一种从随机数生成助记词的方法,并且这些助记词可以用来重新生成私钥。本文将详细解释助记词与私钥之间的关系,以及它们在加密货币乾包中的应用。

BIP-39定义了一个包含2048个单词的词典,每个单词对应一个11位的索引。

首先,需要生成一个随机数,这个随机数通常是128到256位的二进制数据。这个随机数被称为“熵”。

import os
import hashlib# 生成128位的熵
entropy = os.urandom(16)  # 16 bytes = 128 bits
print(f"Entropy: {entropy.hex()}")

为了确保助记词的正确性,需要在熵后面添加一个校验码。校验码是通过SHA-256哈希函数对熵进行哈希运算后取前几位得到的。

def add_checksum(entropy):checksum_length = len(entropy) // 32  # 1 bit per 32 bits of entropyhash = hashlib.sha256(entropy).hexdigest()checksum = int(hash, 16) >> (256 - checksum_length)return (int.from_bytes(entropy, 'big') << checksum_length) | checksum# 添加校验码
checksummed_entropy = add_checksum(entropy)
print(f"Checksummed Entropy: {checksummed_entropy:02x}")

将带有校验码的熵转换为助记词。BIP-39定义了一个包含2048个单词的词典,每个单词对应一个11位的索引。

def entropy_to_mnemonic(entropy):wordlist = open('bip39_wordlist.txt', 'r').read().splitlines()checksum_length = len(entropy) // 32hash = hashlib.sha256(entropy).hexdigest()checksum = int(hash, 16) >> (256 - checksum_length)combined = (int.from_bytes(entropy, 'big') << checksum_length) | checksummnemonic = [wordlist[(combined >> (11 * i)) & 0x7FF] for i in range(len(entropy) * 8 + checksum_length // 11)]return ' '.join(mnemonic)# 生成助记词
mnemonic = entropy_to_mnemonic(entropy)
print(f"Mnemonic: {mnemonic}")

种子可以用来生成一个主私钥(Master Private Key),这是通过BIP-32(Hierarchical Deterministic Wallets)标准实现的。BIP-32定义了一种从种子生成一系列派生私钥的方法。

from bip_utils import Bip32, Bip39SeedGenerator, Bip39WordsNum# 生成主私钥
seed_generator = Bip39SeedGenerator(mnemonic)
seed = seed_generator.Generate()
bip32_ctx = Bip32.FromSeed(seed)
master_private_key = bip32_ctx.PrivateKey().Raw().ToBytes()print(f"Master Private Key: {master_private_key.hex()}")

通过BIP-32,还可以从主私钥派生出多个子私钥

展示:(这里用的是浏览器脚本+自动化测试脚本实现的)

后来呢,为了更加简化这种步骤,(省却从中调起浏览器啥啥的之类的,更加优化策略)

改成了以下三个步骤:

1.生成助记词

2.查询交易次数(因为如果这个私钥地址交易次数>=1,那么就可以认为是有效乾包地址)

3.查询到后利用WxPusher推送至对应的用户(代码内设置,可开源)

这样的步骤下来就非常大大的提高了效率。

如图:

但是同时的话,如果你的机器够好的话,原先的那种RPC的私钥碰撞的也可以同时挂着,不影响的。

动图封面

● 【加密社】Web3加密市场最全免费180个工具类集合(建议收藏)

● 宏观看待目前世界经济格局(大A,币圈,美股)等市场

● 币圈加密社群 含TG机器人监控咨询

● 【加密社】深度解析白皮书 比特币海量数据问题解决方案


http://www.mrgr.cn/news/47698.html

相关文章:

  • 【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题
  • 基于GAN和RL的思想来训练对话生成
  • uniapp实现在card卡片组件内为图片添加长按保存、识别二维码等功能
  • ue5 按下ctrl,角色蹲下/解除蹲下。添加角色蹲伏动画。动画蓝图和状态机,状态,状态别名
  • 【颜色分类--荷兰国旗问题】
  • uniapp使用chooseLocation安卓篇
  • 如何看待诺贝尔物理学奖颁给了机器学习与神经网络?
  • electron-vite_4使用WebContentsView快速集成已有项目
  • 使用Windows 自带的 图片 改变图像的任意分辨率:
  • xxxxx51c嵌入式~mbedtls移植各MCU
  • 构建卓越企业架构:数字化转型中的TOGAF框架最佳实践解析
  • SSM(set、foreach、sql代码片段)
  • 数据结构之二叉搜索树(key模型与key_value模型)
  • 串口(UART)的FPGA设计(接收与发送模块)
  • 6个步骤消除SOC告警倦怠
  • MySQL:基于Spring监听Binlog日志
  • map系列的使用
  • ChatGPT 4o with Canvas — 新特性详解
  • openpdf
  • 10.10每日作业
  • [Git] Git下载及使用 从入门到精通 详解(附下载链接)
  • k8s部署jenkins集群,配置集群kubernetes plugin的pod模板
  • x-cmd pkg | fastfetch: 轻松获取系统信息,打造个性化输出!
  • uniapp的相关知识(1)
  • centos7执行yum命令时报:Could not resolve host: mirrorlist.centos.org; Unknown error
  • 网友反馈:移动套餐只能升不能降怎么办?