区块链交易签名相关知识总结

ops/2025/3/20 23:39:09/
  1. 基础概念

  2. 签名流程

  3. 安全相关问题

  4. 实际场景

  5. 代码示例

  6. 进阶问题


一、基础概念

1. 为什么区块链交易需要签名

  • 答案

    • 身份认证:证明交易由私钥持有者发起。

    • 数据完整性:确保交易内容未被篡改。

    • 抗抵赖性签名者无法否认已签名的交易。

  • 关键术语私钥签名哈希验证公钥推导

2. 常见的区块链签名算法

算法特点应用案例
ECDSA基于椭圆曲线,兼容性强比特币、以太坊
EdDSA高性能,抗侧信道攻击Monero、Zcash
Schnorr支持签名聚合,节省区块空间比特币Taproot

二、签名流程

3. 交易签名的核心步骤

  1. 生成密钥对

    math

    \text{私钥} \xrightarrow{\text{椭圆曲线乘法}} \text{公钥}  

  2. 构建交易:包含输入输出、金额、Nonce等字段。

  3. 哈希交易数据:使用SHA-256等算法生成摘要。

  4. 私钥签名:对摘要加密生成签名(如ECDSA的(r, s))。

  5. 广播与验证:节点用公钥验证签名有效性。


三、安全相关问题

4. 私钥泄露的后果与防护

  • 风险:资产被盗、身份冒充。

  • 防护措施

    • 硬件钱包(如Ledger、Trezor)。

    • 多重签名(需多个私钥授权)。

    • 助记词离线存储(BIP-39标准)。

5. 防御重放攻击的方法

  • 链ID(以太坊的chain_id区分网络)。

  • Nonce机制:每笔交易唯一递增编号。

  • 时间窗口:限制交易有效期(如Stellar网络)。


四、实际场景

6. 比特币 vs 以太坊签名差异

特性比特币以太坊
算法ECDSA (secp256k1)ECDSA (secp256k1)
签名结构(r, s)(v, r, s)
公钥恢复需单独提供公钥通过v值推导公钥

7. 多重签名(Multisig)应用

  • 场景:企业资金管理、DAO治理。

  • 规则:如“3/5签名”,需至少3个授权者签署。


五、代码示例

8. Python生成ECDSA签名

python

from ecdsa import SigningKey, SECP256k1
import hashlib# 生成密钥对
private_key = SigningKey.generate(curve=SECP256k1)
public_key = private_key.get_verifying_key()# 哈希交易数据
tx_data = "send 1 BTC to Alice"
tx_hash = hashlib.sha256(tx_data.encode()).digest()# 签名与验证
signature = private_key.sign(tx_hash)
assert public_key.verify(signature, tx_hash), "验证失败"

9. 签名>以太坊交易签名(web3.py)

python

from web3 import Web3
from eth_account import Account# 创建账户并签名交易
account = Account.create()
tx = {'to': '0xRecipientAddress','value': Web3.to_wei(1, 'ether'),'nonce': 0,'gas': 21000,'chainId': 1  # 主网ID
}
signed_tx = Account.sign_transaction(tx, account.key)
print(f"原始交易数据: {signed_tx.rawTransaction.hex()}")

六、进阶问题

10. Schnorr签名的优势

  • 聚合签名:合并多个签名,节省区块空间(例如比特币的Taproot升级)。

  • 增强隐私:隐藏实际签名者数量。

11. 签名(Cold Signing)的意义

  • 实现方式:私钥存储在离线设备(如硬件钱包)。

  • 安全价值:避免私钥接触互联网,防止远程攻击。


http://www.ppmy.cn/ops/167420.html

相关文章

在处理欧拉函数时如何使用逆元

1. 逆元的引入 在计算欧拉函数时,如果 (n) 是质数,那么 (\phi(n) n - 1),这是直接的结果。然而,当 (n) 是合数时,我们需要处理分母中的质因数 (p_i)。 为了高效计算 (\phi(n)),尤其是在编程实现中&#…

蓝牙技术联盟中国实体成立!华为、小米发声支持本土化战略

2025年3月14日,负责制定蓝牙技术全球标准的行业协会——蓝牙技术联盟(Bluetooth SIG)宣布正式成立中国实体“蓝牙技术(北京)有限公司”,总部设于北京,并在上海、深圳设立分部。这一动作标志着全…

Python学习第二十天

Redis Redis 是一个高性能的键值存储数据库,适合存储临时数据或缓存。可以将用户的部分信息(如会话、登录状态、缓存数据)存储在 Redis 中。 安装 点击下载后将zip解压、并配置环境变量path中 使用 redis默认端口6379,redis-se…

AI视频生成产品体验分享(第2趴):Vidu、Hailuo、Runway、Pika谁更胜一筹?

hi,大家,继上次体验完可灵、即梦和pixverse,今天打算从产品经理的角度再研究下Vidu、Hailuo、Runway、Pika这几款产品!欢迎加入讨论! 一、产品简介 1. Vidu:国产自研的「一致性标杆」 📌官网…

目标检测——清洗数据

清洗VOC格式数据集代码示例 import os import xml.etree.ElementTree as ETdef process_annotations(image_folder, annotation_folder):# 遍历标签文件夹中的所有XML文件for xml_file in os.listdir(annotation_folder):if not xml_file.endswith(.xml):continuexml_path os…

如何基于Gone编写一个Goner对接Apollo配置中心(下)—— 对组件进行单元测试

项目地址:https://github.com/gone-io/gone 原文地址:https://github.com/gone-io/goner/blob/main/docs/test_goner.md 本文介绍的例子,代码在:https://github.com/gone-io/goner/blob/main/apollo 文章目录 引言编写“可测试”的…

Rust + WebAssembly 实现康威生命游戏

1. 设计思路 1.1 选择有限的世界 康威生命游戏的世界是 无限二维网格,但由于 计算机内存有限,我们可以选择三种有限宇宙方案: 动态扩展:仅存储“活跃区域”,按需扩展(可能无限增长)。固定大小…

Matlab 四分之一车辆被动悬架和模糊pid控制对比

1、内容简介 Matlab 183-四分之一车辆被动悬架和模糊pid控制对比 可以交流、咨询、答疑 2、内容说明 略 3.1 车辆多自由度模型建立 对于车辆动力学,一般都是研究其悬架系统,悬架系统由轮胎,轮胎空气,弹簧,减震器和…