区块链中的数字签名:安全性与可信度的核心
数字签名是区块链技术的信任基石,它像区块链世界的身份证和防伪标签,确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言,带你彻底搞懂区块链中的数字签名!

文章目录
- 1. 数字签名是什么?从现实世界到区块链
- 现实中的签名 vs 区块链中的签名
- 核心三要素
- 2. 数字签名如何工作?手把手拆解流程
- 场景模拟
- 第一步:生成签名(小明操作)
- 第二步:验证签名(矿工操作)
- 文字版流程图描述
- 3. 区块链为什么离不开它?四大核心作用
- 作用1:身份认证——证明“你是你”
- 作用2:数据完整性——内容未被篡改
- 作用3:不可抵赖性——无法否认交易
- 作用4:防止重放攻击——杜绝“复制粘贴”
- 4. 技术细节:ECDSA、哈希函数与代码实现
- 为什么用椭圆曲线(ECDSA)而不是RSA?
- 代码演示:生成并验证签名
- 5. 常见问题
- 问题1:量子计算机能破解数字签名吗?
- 问题2:私钥丢失或被盗怎么办?
- 6. 总结与未来展望
- 总结
- 未来趋势
1. 数字签名是什么?从现实世界到区块链
现实中的签名 vs 区块链中的签名
- 现实签名:在合同上签字 → 证明同意内容 → 但可能被伪造。
- 区块链签名:用数学算法生成唯一标识 → 无法伪造 → 还能验证内容是否被篡改。
核心三要素
| 要素 | 作用 | 类比现实世界 |
|---|---|---|
| 私钥 | 生成签名的密码钥匙 | 个人印章 |
| 公钥 | 验证签名的公开钥匙 | 印章的官方备案 |
| 哈希函数 | 把任意数据变成唯一指纹 | 文件的唯一编号 |
2. 数字签名如何工作?手把手拆解流程
场景模拟
小明用比特币向小红转账1 BTC,如何保证这笔交易真实有效?
第一步:生成签名(小明操作)
-
准备交易数据
发送方:小明的地址 接收方:小红的地址 金额:1 BTC 时间戳:2024-10-01 10:00:00 -
生成数据指纹(哈希)
- 将交易数据输入SHA-256哈希函数 → 得到64位的指纹(例如
a1b2c3...)。 - 哈希的作用:
- 长数据变短指纹,方便处理。
- 任何微小改动都会让指纹彻底变化(如金额改成1.1 BTC,指纹变为
d4e5f6...)。
- 将交易数据输入SHA-256哈希函数 → 得到64位的指纹(例如
-
用私钥加密指纹
- 小明的私钥(类似密码)对哈希值加密 → 生成数字签名(如
0x3f7a...)。
- 小明的私钥(类似密码)对哈希值加密 → 生成数字签名(如
-
广播交易
- 小明将原始交易数据和数字签名一起发送到区块链网络。
第二步:验证签名(矿工操作)
-
拿到小明公钥
- 小明的公钥是公开的(如比特币地址
1A1zP1...)。
- 小明的公钥是公开的(如比特币地址
-
解密签名得到原始指纹
- 用小明的公钥解密签名 → 得到
a1b2c3...(若解密失败,签名无效)。
- 用小明的公钥解密签名 → 得到
-
重新计算交易指纹
- 对收到的交易数据做SHA-256哈希 → 生成新指纹
a1b2c3...。
- 对收到的交易数据做SHA-256哈希 → 生成新指纹
-
对比两个指纹
- 一致 → 交易有效!
- 不一致 → 交易被篡改或伪造!
由于部分平台对Mermaid流程图的支持有限,以下提供两种替代方案供您选择:
文字版流程图描述
1. 小明写交易 → 2. 生成交易哈希 → 3. 私钥加密哈希 → 4. 广播交易和签名 ↓
5. 矿工接收 → 6. 用公钥解密签名 → 7. 得到原始哈希 → 8. 重新计算哈希 ↓
9. 对比哈希是否一致? ├─ 是 → 交易合法,打包进区块 └─ 否 → 交易无效,丢弃
3. 区块链为什么离不开它?四大核心作用
作用1:身份认证——证明“你是你”
- 案例:比特币地址
1A1zP1...对应小明的公钥。 - 逻辑:只有用小明私钥签名的交易才能被公钥验证通过 → 确保交易发起者身份。
作用2:数据完整性——内容未被篡改
- 场景:黑客篡改金额为10 BTC → 哈希值变化 → 验证失败 → 交易被拒绝。
作用3:不可抵赖性——无法否认交易
- 类比:亲手签名的合同无法抵赖。
- 区块链体现:交易签名被全网验证 → 小明无法否认转账。
作用4:防止重放攻击——杜绝“复制粘贴”
- 攻击方式:黑客截获交易并重复广播。
- 防御:每笔交易包含唯一编号(Nonce),重复交易被识别并拒绝。
4. 技术细节:ECDSA、哈希函数与代码实现
为什么用椭圆曲线(ECDSA)而不是RSA?
| ECDSA(区块链) | RSA(传统Web) | |
|---|---|---|
| 密钥长度 | 256位 | 2048位 |
| 签名速度 | 快(适合高频交易) | 慢 |
| 资源消耗 | 低(适合去中心化网络) | 高 |
代码演示:生成并验证签名
from ecdsa import SigningKey, SECP256k1
import hashlib# 生成密钥对
private_key = SigningKey.generate(curve=SECP256k1) # 私钥(绝密!)
public_key = private_key.get_verifying_key() # 公钥(公开)# 准备交易数据
transaction = "小明给小红转账1 BTC"# 生成交易哈希
tx_hash = hashlib.sha256(transaction.encode()).hexdigest()# 用私钥签名
signature = private_key.sign(tx_hash.encode())# 矿工验证过程
try:public_key.verify(signature, tx_hash.encode())print("验证成功!交易合法")
except:print("验证失败!交易可疑")
5. 常见问题
问题1:量子计算机能破解数字签名吗?
- 现状:ECDSA理论上可被量子计算机破解,但需数十年发展。
- 防御方案:
- 抗量子算法(如XMSS)。
- 分层安全(定期更换密钥)。
问题2:私钥丢失或被盗怎么办?
- 案例:QuadrigaCX交易所因私钥丢失,1.9亿美元资产冻结。
- 解决方案:
- 多重签名(需多个私钥授权)。
- 硬件钱包(离线存储私钥)。
6. 总结与未来展望
总结
数字签名通过密码学实现:
- 身份认证 → 私钥签名证明身份。
- 数据可信 → 哈希对比确保完整。
- 不可抵赖 → 签名全网验证。
未来趋势
- 更高效:聚合签名(如BLS)减少存储开销。
- 更隐私:零知识证明(如Zcash)隐藏交易细节。
延伸学习
- 动手实验:区块链演示工具
- 论文推荐:比特币的ECDSA实现
如有疑问,欢迎在评论区交流!
相关文章:
区块链中的数字签名:安全性与可信度的核心
数字签名是区块链技术的信任基石,它像区块链世界的身份证和防伪标签,确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言,带你彻底搞懂区块链中的数字签名! 文章目录 1. 数字签名是什么?从现实世界到区块…...
vulnhub渗透日记23:bulldog
声明 文中涉及操作均来自靶机虚拟环境,禁止用于真实环境,任何未经授权的渗透测试都是违法行为! 开搞 首先nmap扫描目标机开放端口和服务 访问80端口 扫目录撒 发现登录口 点击web-shell提示登录后才能使用 /dev/下面查看网页源码发现村咋h…...
macOS - 使用 tmux
文章目录 安装 tmux使用更多快捷键说明 安装 tmux brew install tmux使用 在终端输入 tmux 进入 tmux 界面,然后 输入 Control Option B 进入交互模式 输入 % 左右分栏," 上下分割 上一个窗格:{,下一个:} PS…...
Armbian: 轻量级 ARM 设备专用 Linux 发行版全面解析
引言 在嵌入式开发和物联网(IoT)领域,选择合适的操作系统至关重要。对于 Raspberry Pi、Orange Pi、Banana Pi 以及 Rockchip、Amlogic、Allwinner 等 ARM 平台上的单板计算机(SBC),一个高效、轻量级并且易…...
微服务通信:用gRPC + Protobuf 构建高效API
引言 在微服务架构中,服务之间的通信是系统设计的核心问题之一。传统的RESTful API虽然简单易用,但在性能、类型安全和代码生成等方面存在一定的局限性。gRPC作为一种高性能、跨语言的RPC框架,结合Protobuf(Protocol Buffers&…...
Spring Boot 整合 JMS-ActiveMQ,并安装 ActiveMQ
1. 安装 ActiveMQ 1.1 下载 ActiveMQ 访问 ActiveMQ 官方下载页面,根据你的操作系统选择合适的版本进行下载。这里以 Linux 系统,Java环境1.8版本为例,下载 apache-activemq-5.16.7-bin.tar.gz。 1.2 解压文件 将下载的压缩包解压到指定目…...
容器 /dev/shm 泄漏学习
容器 /dev/shm 泄漏的介绍 在容器环境中,/dev/shm 是一个基于 tmpfs 的共享内存文件系统,通常用于进程间通信(IPC)和临时数据存储。由于其内存特性,/dev/shm 的大小是有限的,默认情况下 Docker 容器的 /de…...
Spring Boot 3.x 基于 Redis 实现邮箱验证码认证
文章目录 依赖配置开启 QQ 邮箱 SMTP 服务配置文件代码实现验证码服务邮件服务接口实现执行流程 依赖配置 <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr…...
车载测试:智能座舱测试中多屏联动与语音交互的挑战
智能座舱作为汽车智能化发展的核心,集成了多屏联动和语音交互功能,为驾驶员和乘客提供更便捷的体验。然而,这些功能的测试面临诸多挑战,包括多屏同步性、噪声干扰和复杂场景的处理。本文将详细分析这些挑战,探讨测试方…...
C/C++输入输出(1)
1.getchar和putchar 1.1getchar() 函数原型: 1 int getchar(void); getchar()函数返回用户从键盘输入的字符,使用时不带有任何参数。 程序运行到这个命令就会暂停,等待用户从键盘输入,等同于使用cin或scanf()方法读取一个字符…...
前端面试场景题葵花宝典之四
87.场景面试之大数运算:超过js中number最大值的数怎么处理 在 JavaScript 中,Number.MAX_SAFE_INTEGER(即 2^53 - 1,即 9007199254740991)是能被安全表示的最大整数。超过此值时,普通的 Number 类型会出现…...
探索Elasticsearch:索引的CRUD
在企业环境中,Elasticsearch的索引CRUD(创建Create、读取Read、更新Update、删除Delete)操作是非常基础且频繁使用的功能。这些操作对于管理和维护数据至关重要,尤其是在处理大规模数据集和需要实时搜索与分析的应用场景中。 目录…...
Java数据结构第十六期:走进二叉树的奇妙世界(五)
专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、非递归实现遍历二叉树 1.1. 二叉树的前序遍历 1.2. 二叉树的中序遍历 1.3. 二叉树的后序遍历 一、非递归实现遍历二叉树 1.1. 二叉树的前序遍历 我们这里要使用栈来进行实现。我们反向思考一下为…...
【开源免费】基于SpringBoot+Vue.JS疫情管理系统(JAVA毕业设计)
本文项目编号 T 227 ,文末自助获取源码 \color{red}{T227,文末自助获取源码} T227,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
有关Java中的集合(1):List<T>和Set<T>
学习目标 核心掌握List集合了解Set集合 1.List<T> ● java.util.List。有序列表。 ● List集合元素的特点:有序表示存取有序(因为有索引)而且可以重复 ● List常用实现类: ArrayList、LinkedList、Vector等 1.1 常用方法…...
使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控
使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控系统,可以分为以下几个步骤: 1. 系统架构设计 前端:使用 Vue.js、React 或 Angular 等前端框架实现用户界面。后端:使用 Spring Boot 提供 RESTful API,负责与…...
在 Apache Tomcat 中,部署和删除项目
在 Apache Tomcat 中,部署和删除 WAR 文件是常见的操作。以下是详细步骤: 1. 删除 WAR 文件 (1) 停止应用 进入 Tomcat 的管理界面(默认地址:http://localhost:8080/manager/html)。 找到需要删除的应用,…...
宇树科技G1人形机器人:从炫技到实用,AI驱动下的进化跃迁
宇树科技的G1人形机器人近期凭借“720度回旋踢”“走梅花桩”等高难度动作频频出圈,成为人形机器人领域的现象级产品。 G1人形机器人看似炫技的表演背后,实则暗含了技术突破的深意。G1的每一次技能升级,都是对机器人运动控制、平衡算法和A…...
给定计算预算下的最佳LLM模型尺寸与预训练数据量分配
给定计算预算下的最佳LLM模型尺寸与预训练数据量分配 FesianXu 20250304 at Wechat Search Team 前言 如果给定了计算预算 C C C,如何分配LLM的模型尺寸 N N N和训练的数据量 D D D,才能使得模型的效果 L L L最好呢?笔者在此介绍一篇经典的文…...
H5DS编辑器是如何让企业快速构建动态页面
H5DS编辑器核心亮点: 1.拖拽式操作,小白友好:无需设计与代码基础!通过简单拖拽元素、调整文字和动画,即可生成交互式H5页面。内置海量模板和素材库,支持自定义设计风格,轻松适配企业品牌需求。…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
