深入比特币原理(二)——比特币密钥地址生成

【摘要】 比特币的安全性是由现代密码学所提供,其中最重要的既是比特币的密钥,下面我们来看一下比特币的密钥生成过程。 比特币地址实际上是公钥转换而来,而公钥实际上是由私钥转换得到,所以实际上一切的来源都是一个随机生成的私钥。

本章开始出现密码学内容,希望你不要就此被劝退,加油!

比特币的安全性是由现代密码学所提供,其中最重要的既是比特币的密钥,下面我们来看一下比特币的密钥生成过程。

比特币地址实际上是公钥转换而来,而公钥实际上是由私钥转换得到,所以实际上一切的来源都是一个随机生成的私钥。

step 1通过操作系统随机数生成器生成一个随机数,并进行SHA256哈希运算(结果必须是1到n-1之间的任何数字,n=1.158 * 1077)

 该数字即为私钥最原始的内容,所以需要通过密码学安全的随机源中选出一串随机字节,以防暴力破解

 使用SHA256哈希运算是为了方便的产生一个固定长度为256位的数字,使用十六进制表示如下:

6954ac6d0402d7239f1cc150da224d0ef08fd1226f245f06fe4d6d68accfce8a

 step 2如果使用压缩公钥,在私钥的结果后面增加0x01;若使用非压缩公钥,则不追加0x01

私钥

### 比特币地址生成过程 比特币地址的创建涉及多个加密操作,具体流程如下: #### 私钥生成 私钥是一个随机产生的256位数,在椭圆曲线密码学中用于签名交易。这个密钥必须保密并妥善保管。 ```python import os private_key = int.from_bytes(os.urandom(32), 'big') print(f"Private Key (hex): {private_key:x}") ``` #### 公钥计算 通过椭圆曲线乘法运算由私钥得出公钥。此过程中使用的算法基于特定参数定义下的椭圆曲线方程[^1]。 ```python from ecdsa import SigningKey, SECP256k1 sk = SigningKey.generate(curve=SECP256k1) vk = sk.verifying_key public_key = vk.to_string() print(f"Public Key: {public_key.hex()}") ``` #### 哈希处理 为了提高安全性并对较长的数据串进行压缩,采用SHA-256和RIPEMD-160两种哈希函数依次作用于公钥上得到更短而唯一的表示形式。 ```python import hashlib hash_256 = hashlib.sha256(public_key).digest() ripe_md_160 = hashlib.new('ripemd160', hash_256).hexdigest() print(f"Hashed Public Key: {ripe_md_160}") ``` #### 添加版本前缀与校验码 在上述结果之前附加一个字节作为版本号(对于P2PKH类型的地址通常是`0x00`),之后再经过两次SHA-256散列获取四位检验字符以防止输入错误。 ```python version_prefix = b'\x00' checksum_input = version_prefix + bytes.fromhex(ripe_md_160) double_sha256_checksum = hashlib.sha256(hashlib.sha256(checksum_input).digest()).digest()[:4] address_body_with_check_code = checksum_input + double_sha256_checksum print(f"Address Body with Check Code(hex): {address_body_with_check_code.hex()}") ``` #### Base58编码转换 最后一步是对包含校验码在内的整个字符串应用Base58编码方案来获得最终的人类可读格式——即所谓的“比特币地址”。 ```python import base58 final_bitcoin_address = base58.b58encode(address_body_with_check_code).decode() print(f"Final Bitcoin Address: {final_bitcoin_address}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值