【区块链】区块链密码学基础
🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"
文章目录
- 区块链密码学基础
- 引言
- 一、哈希函数
- 1.1 基本概念
- 1.2 数学表达
- 二、非对称加密
- 2.1 基本原理
- 2.2 数学基础
- 2.3 应用场景
- 三、数字签名
- 3.1 工作原理
- 3.2 数学表达
- 四、默克尔树
- 4.1 结构特点
- 4.2 数学表达
- 五、零知识证明
- 5.1 基本概念
- 5.2 性质
- 5.3 数学表达
- 六、同态加密
- 6.1 原理
- 结论
- 参考资料
区块链密码学基础
引言
密码学是区块链技术的核心基石,没有现代密码学的支撑,区块链的去中心化、不可篡改等特性将无从谈起。本文将深入浅出地介绍区块链中的密码学基础知识。

一、哈希函数
1.1 基本概念
哈希函数(Hash Function)是区块链中最基础的密码学工具,它可以将任意长度的输入数据映射为固定长度的输出。在区块链中最常用的是 SHA-256 算法。
哈希函数具有以下特性:
- 单向性:由输入计算输出容易,但由输出推算输入几乎不可能
- 抗碰撞性:找到两个不同的输入产生相同的输出是极其困难的
- 确定性:相同的输入必然产生相同的输出
- 雪崩效应:输入的微小变化会导致输出的巨大变化
1.2 数学表达
对于输入消息 m m m,哈希函数 H H H 将生成固定长度的哈希值:
H ( m ) = h H(m) = h H(m)=h,其中 h h h 的长度固定

二、非对称加密
2.1 基本原理
非对称加密使用一对密钥:公钥(Public Key)和私钥(Private Key)。公钥可以公开分享,私钥需要安全保管。在区块链中,最常用的是椭圆曲线加密算法(ECDSA)。
2.2 数学基础
椭圆曲线加密基于如下方程:
y 2 = x 3 + a x + b ( m o d p ) y^2 = x^3 + ax + b \pmod{p} y2=x3+ax+b(modp)
其中 a a a 和 b b b 是系数, p p p 是一个大素数。
私钥是一个随机数 k k k,公钥 K K K 通过以下方式生成:
K = k ⋅ G K = k \cdot G K=k⋅G
其中 G G G 是椭圆曲线上的基点。
2.3 应用场景
- 数字签名
- 地址生成
- 身份认证
三、数字签名

3.1 工作原理
数字签名用于证明消息的真实性和完整性。签名过程如下:
- 计算消息哈希: h = H ( m ) h = H(m) h=H(m)
- 使用私钥 k k k 对哈希值进行签名: s = S i g n ( h , k ) s = Sign(h, k) s=Sign(h,k)
- 生成签名对 ( r , s ) (r,s) (r,s)
验证过程:
V e r i f y ( h , ( r , s ) , K ) = t r u e / f a l s e Verify(h, (r,s), K) = true/false Verify(h,(r,s),K)=true/false
3.2 数学表达
ECDSA 签名算法的核心计算:
- 选择随机数 d d d
- 计算点 R = d ⋅ G = ( x r , y r ) R = d \cdot G = (x_r, y_r) R=d⋅G=(xr,yr), r = x r ( m o d n ) r = x_r \pmod{n} r=xr(modn)
- 计算 s = d − 1 ( h + k r ) ( m o d n ) s = d^{-1}(h + kr) \pmod{n} s=d−1(h+kr)(modn)
其中 n n n 是椭圆曲线的阶。
四、默克尔树
4.1 结构特点
默克尔树(Merkle Tree)是一种哈希树,用于高效地验证大量数据的完整性。
Root Hash/ \Hash(1,2) Hash(3,4)/ \ / \Hash1 Hash2 Hash3 Hash4| | | |TX1 TX2 TX3 TX4
4.2 数学表达
对于交易集合 T X = { t x 1 , t x 2 , . . . , t x n } TX = \{tx_1, tx_2, ..., tx_n\} TX={tx1,tx2,...,txn},默克尔根的计算:
M e r k l e R o o t = H ( H ( H ( t x 1 ) ∣ ∣ H ( t x 2 ) ) ∣ ∣ H ( H ( t x 3 ) ∣ ∣ H ( t x 4 ) ) ) MerkleRoot = H(H(H(tx_1) || H(tx_2)) || H(H(tx_3) || H(tx_4))) MerkleRoot=H(H(H(tx1)∣∣H(tx2))∣∣H(H(tx3)∣∣H(tx4)))
其中 ∣ ∣ || ∣∣ 表示字符串拼接。
五、零知识证明
5.1 基本概念
零知识证明允许证明者向验证者证明某个命题的正确性,而无需透露任何其他信息。
5.2 性质
- 完整性:如果命题为真,诚实的证明者可以说服验证者
- 可靠性:如果命题为假,任何证明者都无法说服验证者
- 零知识性:验证者除了命题的正确性外,无法获得任何其他信息
5.3 数学表达
以 Schnorr 协议为例:
- 证明者选择随机数 r r r,计算 R = r ⋅ G R = r \cdot G R=r⋅G
- 验证者发送随机挑战 c c c
- 证明者计算响应 s = r + c ⋅ x s = r + c \cdot x s=r+c⋅x
- 验证者检查 s ⋅ G = R + c ⋅ P s \cdot G = R + c \cdot P s⋅G=R+c⋅P
六、同态加密
6.1 原理
同态加密允许在加密数据上直接进行计算,而无需解密。
对于明文 m 1 , m 2 m_1, m_2 m1,m2,加密函数 E E E,存在运算 ⊕ \oplus ⊕,使得:
E ( m 1 ) ⊗ E ( m 2 ) = E ( m 1 ⊕ m 2 ) E(m_1) \otimes E(m_2) = E(m_1 \oplus m_2) E(m1)⊗E(m2)=E(m1⊕m2)
结论
密码学为区块链提供了坚实的安全基础。通过哈希函数、非对称加密、数字签名等技术的组合,实现了去中心化、不可篡改、匿名性等核心特性。随着零知识证明、同态加密等新技术的发展,区块链的应用场景将更加广泛。
参考资料
- Nakamoto, S. (2008). Bitcoin: A Peer-to-Peer Electronic Cash System
- Goldwasser, S., Micali, S., & Rackoff, C. (1989). The Knowledge Complexity of Interactive Proof Systems
- Merkle, R. C. (1987). A Digital Signature Based on a Conventional Encryption Function
相关文章:
【区块链】区块链密码学基础
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 区块链密码学基础引言一、哈希函数1.1 基本概念1.2 数学表达 二、非对称加密2.1…...
NCV4275CDT50RKG 车规级LDO线性电压调节器芯片——专为新能源汽车设计的高可靠性电源解决方案
产品概述: NCV4275CDT50RKG 是一款符合 AEC-Q100 车规认证的高性能LDO(低压差线性稳压器),专为新能源汽车的严苛工作环境设计。该芯片支持 输出调节为 5.0 V 或 3.3 V,最大输出电流达 450mA,具备超低静态电流…...
【Pycharm+Git+Gitlab】安装部署(粗糙版)
1、安装Git 2、安装Pycharm(这里选择的是社区版) 3、桌面右键打开Git Bash 1)设置全局用户名(准备连接的Gitlab仓库的访问用户名) git config ---global user.name "username"2)设置全局邮箱&…...
位运算算法篇:进入位运算的世界
位运算算法篇:进入位运算的世界 本篇文章是我们位运算算法篇的第一章,那么在我们是算法世界中,有那么多重要以及有趣的算法,比如深度优先搜索算法以及BFS以及动态规划算法等等,那么我们位运算在这些算法面前相比&#…...
.net一些知识点5
1.dot Net带out的参数如何使用 string name;//假设这个参数带out TestMethod(1,out name);//一定要有out 方法体中,一定要有out参数的赋值,并且能输出 2.参数的传递方式有哪些 a.值传递 b.引用传递 ref c.输出传递 out 3.设计模式知道哪些 3.us…...
高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案
目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行(下载) 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…...
Cursor无法使用老版本python debug的解决办法
我服务器上的python版本是3.6.8,使用官方的python插件进行debug的时候,弹窗提示说不支持3.7以下的,建议升级python,但是我的工程就是3.6.8的屎山,辗转发现一个土办法: 手动下载老版本的python插件ÿ…...
webpack配置之---output.filename
output.filename 在 Webpack 中,output.filename 配置项用来指定打包后生成的文件名称。它是 Webpack 构建输出目录中的关键部分,决定了生成文件的名字格式。 1. 基本字符串配置 最简单的配置方式是通过字符串设置文件名。比如: module.e…...
如今物联网的快速发展对hmi的更新有哪些积极影响
一、功能更加丰富 物联网的快速发展使得 HMI(人机界面)能够连接更多的设备和系统,从而实现更加丰富的功能。例如,通过与传感器网络的连接,HMI 可以实时显示设备的运行状态、环境参数等信息,为用户提供更加…...
黑马 Linux零基础快速入门到精通 笔记
初识Linux Linux简介 提及操作系统,我们可能最先想到的是windows和mac,这两者都属于个人桌面操作系统领域,而Linux则属于服务器操作系统领域。无论是后端软件、大数据系统、网页服务等等都需要运行在Linux操作系统上。 Linux是一个开源的操作…...
Go 中的 7 个常见接口错误
Go 仍然是一门新语言,如果你正在使用它,它很可能不是你的第一门编程语言。 不同的语言,既为你带来了经验,也带来了偏见。你用以前的任何语言做的事情,在 Go 中用相同的方法可能不是一个好主意。 学习 Go 不仅仅是学习一种新的语法。这也是学习一种新的思维方式来思考你的…...
LLAMA-Factory安装教程(解决报错cannot allocate memory in static TLS block的问题)
步骤一: 下载基础镜像 # 配置docker DNS vi /etc/docker/daemon.json # daemon.json文件中 { "insecure-registries": ["https://swr.cn-east-317.qdrgznjszx.com"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.c…...
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
目录 一、程序填空📝 --- 十进制转其他进制 题目📃 分析🧐 二、程序修改🛠️ --- 非素数求和 题目📃 分析🧐 三、程序设计💻 --- 重复数统计 题目📃 分析🧐 前言…...
Unity3D引擎首次用于光伏仿真设计软件爆火
在光伏设计领域,绿虫光伏仿真设计软件宛如一匹黑马,凭借其基于 Unity3D 引擎的强大功能,为行业带来了全新的解决方案。借助 Unity3D 引擎技术,实现了游戏级高清画面,2D/3D 自由转换,让场景代入感极强&#…...
基础入门-网站协议身份鉴权OAuth2安全Token令牌JWT值Authirization标头
知识点: 1、网站协议-http/https安全差异(抓包) 2、身份鉴权-HTTP头&OAuth2&JWT&Token 一、演示案例-网站协议-http&https-安全测试差异性 1、加密方式 HTTP:使用明文传输,数据在传输过程中可以被…...
深入理解 C++17 std::is_swappable
文章目录 深入理解 C17 std::is_swappable引言std::is_swappable 概述std::is_swappable 的工作原理std::is_swappable 的变体注意事项结论 深入理解 C17 std::is_swappable 引言 在 C 编程中,交换两个对象的值是一个常见的操作。为了确保代码的通用性和安全性&am…...
Oracle常用响应文件介绍(19c)
文章目录 1. 数据库安装响应文件1.1 响应文件模板1.2 参数说明1.2.1 响应文件版本参数1.2.2 安装选项参数1.2.3 Unix 用户组参数1.2.4 软件清单参数1.2.5 安装目录参数1.2.6 安装版本参数1.2.7 特权操作权限组指定参数1.2.8 Root脚本执行配置参数1.2.9 Grid选项配置参数1.2.10 …...
Vue(4)
一.组件的三大组成部分-注意点说明 (1)scoped样式冲突 默认情况:写在组件中的样式会全局生效 → 因此很容易造成多个组件之间的样式冲突 ①全局样式:默认组件中的样式会作用到全局 ②局部样式:可以给组件加上scoped属…...
4G核心网的演变与创新:从传统到虚拟化的跨越
4G核心网 随着移动通信技术的不断发展,4G核心网已经经历了从传统的硬件密集型架构到现代化、虚拟化网络架构的重大转型。这一演变不仅提升了网络的灵活性和可扩展性,也为未来的5G、物联网(LOT)和边缘计算等技术的发展奠定了基础。…...
探讨如何在AS上构建webrtc(2)从sdk/android/Build.gn开始
全文七千多字,示例代码居多别担心,没有废话,不建议跳读。 零、梦开始的地方 要发美梦得先入睡,要入睡得找能躺平的地方。那么能躺平编译webrtc-android的地方在哪?在./src/sdk/android/Build.gn。Build.gn是Build.nin…...
C语言时间相关宏定义
在C语言中,预处理器提供了一些与时间相关的宏定义,用于在编译时获取日期、时间等信息。除了 __TIMESTAMP__ 和 __DATE__,还有以下相关的宏定义: __DATE__ 当前编译日期的字符串,格式为 "Mmm dd yyyy"&#x…...
【Linux基础】Linux下常用的系统命令
一、前言 本文主要总结了工作中常用的linux指令,有遇到新的命令会不定期更新。 二、系统监控和进程管理指令 2.1 ps命令 作用:查看当前进程信息。 常用选项: -e: 显示所有进程,包括其他用户的进程。-f: 显示更详细的进程信息…...
Spring Boot 线程池自定义拒绝策略:解决任务堆积与丢失问题
如何通过自定义线程池提升系统稳定性 背景 在高并发系统中,线程池管理至关重要。默认线程池可能导致: 资源浪费(创建过多线程导致 OOM)任务堆积(队列满后任务被拒绝)任务丢失(默认拒绝策略丢…...
人工智能D* Lite 算法-动态障碍物处理、多步预测和启发式函数优化
在智能驾驶领域,D* Lite 算法是一种高效的动态路径规划算法,适用于处理环境变化时的路径重规划问题。以下将为你展示 D* Lite 算法的高级用法,包含动态障碍物处理、多步预测和启发式函数优化等方面的代码实现。 代码实现 import heapq impo…...
C#常用集合优缺点对比
先上结论: 在C#中,链表、一维数组、字典、List<T>和ArrayList是常见的数据集合类型,它们各有优缺点,适用于不同的场景。以下是它们的比较: 1. 一维数组 (T[]) 优点: 性能高:数组在内存中…...
多线程下jdk1.7的头插法导致的死循环问题
20250208 多线程下jdk1.7的头插法导致的死循环问题 多线程下jdk1.7的头插法导致的死循环问题 【新版Java面试专题视频教程,java八股文面试全套真题深度详解(含大厂高频面试真题)】 jdk1.7在hashmap扩容时使用的是头插法,所以扩容…...
MySQL的深度分页如何优化?
大家好,我是锋哥。今天分享关于【MySQL的深度分页如何优化?】面试题。希望对大家有帮助; MySQL的深度分页如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL在处理深度分页(即查询页数较大时,通常是查询…...
uniapp中使用uCharts折线图X轴数据间隔显示
1、先看官网 https://www.ucharts.cn/ 2、设置代码 "xAxisDemo3":function(val, index, opts){if(index % 2 0){return val}else {return }}, 再在数据中引入设置好样式...
VMware下Linux和macOS安装VSCode一些总结
本文介绍VMware下Linux和macOS安装VSCode的一些内容,包括VSCode编译器显示中文以及安装.NET环境和Python环境。 VSCode下载地址:Download Visual Studio Code - Mac, Linux, Windows 一.Linux系统下 1.安装中文包 按 Ctrl Shift P 打开命令面板。输…...
公司配置内网穿透方法笔记
一、目的 公司内部有局域网,局域网上有ftp服务器,有windows桌面服务器; 在内网环境下,是可以访问ftp服务器以及用远程桌面登录windows桌面服务器的; 现在想居家办公时,也能访问到公司内网的ftp服务器和win…...
