区块链中的数字签名:安全性与可信度的核心
数字签名是区块链技术的信任基石,它像区块链世界的身份证和防伪标签,确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言,带你彻底搞懂区块链中的数字签名!
文章目录
- 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页面。内置海量模板和素材库,支持自定义设计风格,轻松适配企业品牌需求。…...

面试题汇总(一)
熙牛医疗面经 1.平衡二叉树的概念 平衡二叉树是一种二叉搜索树,他的左右两个字数的高度差绝对值不超过1,并且左右两个子树都是一颗平衡二叉树,通过左旋,右旋,左右双旋,右左双旋,来保持平衡&…...

论坛系统测试报告
目录 一、项目背景二、论坛系统测试用例思维导图三、论坛系统测试3.1界面测试3.2登陆测试3.3主页测试3.4个人中心测试 四、自动化测试脚本4.1配置驱动4.2创建浏览器类4.3功能测试4.3.1登陆测试4.3.2注册测试4.3.3主页测试4.3.4帖子编辑4.3.5运行主代码 五、BUG分析六、测试总结…...

算法比赛中处理输入和输出
在算法比赛中,不推荐使用 Scanner 和 System.out.println()。Scanner 线程安全,有大量同步操作,读取输入时每次都要解析数据类型,处理大数据量时性能开销大、效率低,易使程序超时间限制。System.out.println() 每次调用…...

llama.cpp: GGUF格式及模型量化参数介绍
GGUF格式介绍 GGUF(GPT-Generated Unified Format)是推理框架llama.cpp 中使用的一种专为大语言模型设计的二进制文件格式,旨在实现模型的快速加载和保存,同时易于读取。GGUF格式的特点: 单文件部署:模型…...

PGlite:浏览器中运行的PostgreSQL
PGlite 是一款基于 WebAssembly(WASM)构建的轻量级 PostgreSQL 数据库引擎,旨在简化开发者在浏览器、Node.js、Bun 或 Deno 环境中运行 PostgreSQL。PGlite 无需复杂的安装或配置,特别适合开发测试、本地化应用及快速原型设计。 一…...

【C++】vector(上):vector的常用接口介绍
文章目录 前言一、vector的介绍二、vector的常用接口介绍1.vector类对象的常见构造2.vector iterator 的使用3.vector类对象的容量操作3.1 size、capacity 和 empty的使用3.2 reserve的使用3.3 resize的使用 4.vector类对象的访问(包含data:返回底层数组…...

【算法】二分查找(上)
目录 一、写好二分查找的四个步骤 二、在排序数组中查找元素的第一个和最后一个位置 三、搜索插入位置 四、x的平方根 通过上篇文章【手撕二分查找】,我们知道了二分查找的【四要素】:初始值、循环条件、mid的计算方式、左右边界更新语句。 循环条件…...

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?
前言 2025年,人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角,AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型,从技术背景、应用领域、性能、成本效益等多个方…...

linux nginx 安装后,发现SSL模块未安装,如何处理?
?? 主页: ?? 感谢各位大佬 点赞?? 收藏 留言?? 加关注! ?? 收录于专栏:运维工程师 文章目录 前言SSL模块安装 前言 nginx 安装后,发现SSL模块未安装,如果不需要配置SSL域名,就无关紧要。但是很多时候客户后…...

蓝桥杯 - 每日打卡(类斐波那契循环数)
题目: 解题思路: 假设输入数值为number 分析题目,如果想要解决这个问题,我们需要实现两个方法,第一个检查number是否是类斐波那契,第二个是模拟1e7 - 0的过程,因为是求最大的,那么我们从1e7开始…...