当前位置: 首页 > article >正文

【区块链安全 | 第一篇】密码学原理

文章目录

    • 1.哈希函数
      • 1.1 哈希函数的性质
      • 1.2 常见哈希算法
      • 1.3 Merkle Tree(默克尔树)
      • 1.4 HMAC(哈希消息认证码)
    • 2. 公钥密码学
      • 2.1 对称加密 vs 非对称加密
      • 2.2 RSA 算法
      • 2.3 ECC(椭圆曲线密码学)
      • 2.4 Diffie-Hellman 密钥交换
    • 3. 常见的加密算法与协议
      • 3.1 AES(高级加密标准)
      • 3.2 TLS(传输层安全协议)
    • 4. 区块链特有的密码学技术
      • 4.1 Merkle Patricia Tree(MPT)
      • 4.2 多重签名(Multisig)
      • 4.3 环签名(Ring Signature)
      • 4.4 zk-SNARKs(零知识简洁非交互式论证)
    • 5. 加密中的智能合约安全
      • 5.1 Commit-Reveal 机制
      • 5.2 可验证延迟函数(VDF)

1.哈希函数

哈希函数是一种输入长度不定、输出长度固定的函数,广泛用于数据完整性校验、密码存储、区块链中的区块链接等。

1.1 哈希函数的性质

在这里插入图片描述

1.2 常见哈希算法

算法输出长度安全性现状
MD5128 位已被破解,不安全
SHA-1160 位已被破解,不安全
SHA-256256 位仍然安全
SHA-3224/256/384/512 位目前安全
BLAKE2256/512 位速度快,安全性高

MD5算法已被破解,例图:

在这里插入图片描述

1.3 Merkle Tree(默克尔树)

Merkle 树是一种基于哈希函数的树结构,常用于数据完整性验证,区块链中的交易数据存储采用 Merkle 树。

Merkle 树的构造如下:
1.将交易数据分别进行哈希运算。
2.以配对方式对哈希值再次进行哈希,直到生成一个根哈希值(Merkle Root)。
3.只需存储根哈希,即可验证某个交易是否在区块中,无需存储完整数据。

示例

       Root/  \H12    H34/  \    /  \H1   H2  H3  H4

在比特币区块中,Merkle 根用于证明一笔交易是否包含在某个区块里。

假设一个区块有 4 笔交易,Merkle 树结构如下:

       Root = H12_34/            \H12               H34/   \             /   \
H1     H2       H3     H4

假设你要验证 H3 是否在树中,只需要知道:
1.交易的哈希值 H3。
2.同层的兄弟哈希 H4(用于计算 H34)。
3.上层的兄弟哈希 H12(用于计算 Root)。

通过如下计算:
1.计算 H34 = Hash(H3 || H4)
2.计算 Root = Hash(H12 || H34)
3.比对 Root 是否等于区块头中的 Merkle Root,即可判断 H3 是否在树中。

这样做的好处是:
1.节省存储空间,区块链上的轻客户端(如 SPV 客户端)不需要存储完整交易,只存 Merkle Root。
2.只需要下载根哈希,比直接下载整个区块更快,特别适用于移动设备或存储受限的节点。
3.如果交易数据被篡改,Merkle Root 也会变,保证了数据的不可篡改性。

1.4 HMAC(哈希消息认证码)

HMAC(Hashed Message Authentication Code)是一种基于哈希函数的消息认证机制,用于数据完整性和认证。例如,TLS 1.2 使用 HMAC-SHA256 进行消息完整性验证。

公式:

在这里插入图片描述

其中:

  • ( K ) 是密钥
  • ( M ) 是消息
  • ( opad ) 和 ( ipad ) 是填充常数

认证流程:
1.发送方选择一个密钥K(双方预先共享)。
2.发送方通过公式,带入消息M来计算HMAC值
3.发送方发送消息M与HMAC值,如图:
在这里插入图片描述

4.接收方收到消息M后,带入消息M,使用相同的密钥K计算HMAC值
5.比较接收到的HMAC值和计算出的HMAC值
6.如果匹配,说明消息未被篡改,验证通过。
7.如果不匹配,说明消息可能被修改或密钥错误,验证失败。

这样做的好处是
1.攻击者即使拦截消息并修改内容,也无法伪造正确的 HMAC(除非他知道密钥)。
2.即使攻击者知道HMAC值,也无法反推出密钥K。

2. 公钥密码学

公钥密码学(非对称加密)使用一对密钥(公钥和私钥),广泛用于加密、数字签名和身份验证。

2.1 对称加密 vs 非对称加密

类别加密方式密钥速度应用
对称加密加密和解密使用相同密钥需要共享密钥速度快AES、DES
非对称加密公钥加密,私钥解密公私钥对速度慢RSA、ECC

看一个对称加密的场景:

1.假设 Alice 想给 Bob 发送加密消息,她使用 AES 对称加密。
2.Alice 和 Bob 事先共享一个密钥 K(密钥必须保密)。
3.Alice 使用 AES 加密明文 M,得到密文 C
4.Alice 发送密文 C 给 Bob。
5.Bob 收到密文 C 后,使用相同的密钥 K 进行解密:
6.Bob 得到原始消息 M。

可以看到,对称加密的缺点是:如果密钥泄露,攻击者可以解密所有通信内容;不适用于身份认证,无法确认是谁发送的消息。

非对称加密使用一对密钥(公钥 + 私钥),虽然数据加密速度慢,但适用于安全通信和身份认证。流程如下:

1.假设 Alice 需要向 Bob 发送一条加密消息。
2.Bob 生成 RSA 公私钥对:

  • 公钥 PK_B(公开给所有人)。
  • 私钥 SK_B(只有 Bob 自己知道)。

3.Alice 获取 Bob 的公钥 PK_B。
4.Alice 使用 PK_B 加密消息 M,得到密文 C:
5.Bob 使用私钥 SK_B 解密 C,恢复明文 M
6.Bob 得到原始消息 M。

此时密钥泄露的可能降低,同时可以看出,非对称加密可用于身份认证(如数字签名)。

在实际应用中,可以使用非对称加密传输对称密钥,再用对称加密进行数据加密,典型的案例是HTTPS:
1.客户端(浏览器)使用服务器公钥加密 AES 密钥,并发送给服务器。
2.服务器用私钥解密,得到 AES 密钥。
3.后续通信使用 AES 进行对称加密,提高速度。

2.2 RSA 算法

RSA 是最早的公钥加密算法之一,基于大数因子分解问题。

RSA 加密流程

在这里插入图片描述

2.3 ECC(椭圆曲线密码学)

ECC(Elliptic Curve Cryptography)是一种基于椭圆曲线数学的公钥加密算法,相比 RSA,提供相同安全性时,所需密钥更短,计算速度更快,因此广泛应用于区块链和现代密码系统。

基于 ECC 的数字签名算法:

  • ECDSA(椭圆曲线数字签名算法):比特币和以太坊使用的签名算法。
  • EdDSA:更快、更安全的数字签名算法。

2.4 Diffie-Hellman 密钥交换

用于在不安全信道上安全地共享密钥,区块链中的 P2P 加密通信常用该协议。

交换流程:

在这里插入图片描述

在这里插入图片描述

3. 常见的加密算法与协议

3.1 AES(高级加密标准)

AES 是最常用的对称加密算法,支持 128、192、256 位密钥。

其模式有:

  • ECB(电子密码本)- 不安全
  • CBC(密码块链接)- 需要 IV
  • GCM(Galois/Counter Mode)- 高效且支持认证

3.2 TLS(传输层安全协议)

TLS 1.3 采用 ECDHE(椭圆曲线 Diffie-Hellman 交换)进行密钥交换,使用 AES-GCM 进行加密。

4. 区块链特有的密码学技术

4.1 Merkle Patricia Tree(MPT)

以太坊采用 MPT 存储账户状态,每次状态更新都会更新 Merkle 根,保证数据完整性。

4.2 多重签名(Multisig)

多重签名(Multisig,Multi-Signature) 允许一个交易需要多个私钥签名才能生效,提升安全性,常用于共享钱包、智能合约等场景。

N-of-M 签名模式:

  • M:总共有 M 个授权方(持有私钥的人)。
  • N:需要至少 N 个私钥签名才能执行交易。

例如,2-of-3 多重签名表示:3 个人持有私钥,但至少需要 2 人签名,交易才能生效。

比特币支持多重签名,交易流程如下(以 2-of-3 为例):

在这里插入图片描述

这样做的好处是:
1.共享钱包,实现公司账户或DAO组织的安全性,防止单点风险。
2.买卖双方将资金托管(Escrow)在第三方,确保公正交易。
3.即使一个私钥泄露,攻击者仍无法盗取资金。

4.3 环签名(Ring Signature)

环签名是一种群体签名技术,在一组公钥(混合了其他人的公钥)中,只有一个是真正的签名者,但无法区分是谁。

签名流程如下:

在这里插入图片描述

这样做的好处是:
1.外部观察者无法确定资金的真正来源。
2.去中心化匿名性,不依赖第三方。
3.即使攻击者分析链上数据,也无法还原真实交易路径。

4.4 zk-SNARKs(零知识简洁非交互式论证)

zk-SNARKs 是一种 零知识证明(Zero-Knowledge Proof)技术,在 Zcash 等隐私币中被用来保护交易隐私,确保交易有效性同时隐藏交易细节(如交易金额和发送方、接收方信息)。

特点:只有参与交易的双方知道具体的交易细节,第三方无法从区块链上获得任何信息。

工作原理:

在这里插入图片描述

5. 加密中的智能合约安全

5.1 Commit-Reveal 机制

前瞻攻击指的是在某些交易或竞拍环境中,恶意用户通过提前得知即将提交的交易或出价信息,在其之前进行自己的交易或操作,从而获得不公平的优势。例如,在一个去中心化交易所(DEX)中,攻击者可能会提前看到用户的交易订单,然后在交易执行之前先行交易,从而操控市场价格,获取额外利润。

Commit-Reveal 机制通过以下两步实现防止前瞻攻击:

1.提交(Commit)阶段
在提交阶段,用户在提交他们的实际交易数据或出价之前,会先提交一个加密哈希值(commitment),这个哈希值是通过哈希函数对交易数据进行加密处理得到的。例如,用户想要竞拍某项物品,先通过某个算法(如哈希)生成该竞拍信息的哈希值,然后将该哈希值提交到区块链上。哈希值本身并不暴露用户的真实意图或交易数据,因此即使其他用户看到这个哈希值,他们也无法知道具体的交易内容。这样就避免了恶意用户根据即将发生的交易进行前瞻攻击。

2.揭示(Reveal)阶段
用户在合适的时间(通常是经过一定的延迟)后,将其实际交易内容或出价公开。系统会将提交的哈希值与用户揭示的实际数据进行匹配。如果两者匹配,则证明该用户在提交阶段的承诺是合法且真实的。如果不匹配,则交易将被认为是无效的。

5.2 可验证延迟函数(VDF)

可验证延迟函数(Verifiable Delay Function, VDF) 是一种加密技术,旨在生成一个需要一定时间来计算的值,但一旦计算完成,任何人都可以快速验证其正确性。其主要特点是,它不仅要求计算时间延迟,而且这个延迟是不可并行化的,意味着必须按顺序逐步计算,无法通过并行处理来加速。

Sybil 攻击(女巫攻击)的成功通常依赖于节点能够快速而低成本地生成大量虚假身份,从而影响网络的共识过程。VDF 通过引入计算延迟,使得攻击者无法快速生成大量有效的身份或签名。攻击者必须消耗一定的时间来进行计算,这个过程对他们来说是昂贵且缓慢的,从而有效减少了攻击的可能性。

相关文章:

【区块链安全 | 第一篇】密码学原理

文章目录 1.哈希函数1.1 哈希函数的性质1.2 常见哈希算法1.3 Merkle Tree(默克尔树)1.4 HMAC(哈希消息认证码) 2. 公钥密码学2.1 对称加密 vs 非对称加密2.2 RSA 算法2.3 ECC(椭圆曲线密码学)2.4 Diffie-He…...

Linux安装MySQL数据库并使用C语言进行数据库开发

目录 一、前言 二、安装VMware运行Ubuntu 1.安装VMware 2.使用VMware打开Ubuntu 三、配置VMware使用网卡 1.添加NAT网卡 四、Linux下安装MySQL数据库 五、安装MySQL开发库 六、演示代码 sql_connect.c sql_connect.h main.c中数据库相关代码 结尾 一、前言 由于最…...

2024年MathorCup数学建模A题移动通信网络中PCI规划问题解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 A题 移动通信网络中PCI规划问题 原题再现: 物理小区识别码(PCI)规划是移动通信网络中下行链路层上,对各覆盖小区编号进行合理配置,以避免PCI冲突、PCI混淆以及PCI模3干扰等现象。PCI规划对于减少…...

伯努利分布和二项分布学习笔记

目录 1. 伯努利分布1.1定义1.2概率质量函数1.3数学期望与方差1.4应用示例 2. 二项分布2.1定义2.1概率质量函数2.2数学期望与方差2.3性质与图形 3. 伯努利分布与二项分布的关系4. 总结 1. 伯努利分布 伯努利分布(Bernoulli Distribution),又称…...

Redis实战常用二、缓存的使用

一、什么是缓存 在实际开发中,系统需要"避震器",防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪. 这在实际开发中对企业讲,对产品口碑,用户评价都是致命的。所以企业非常重视缓存技术; 缓存(Cache):就是数据交换的缓冲区&…...

G口服务器和普通服务器之间的区别

今天小编主要来为大家介绍一下G口服务器和普通服务器之间的区别! 首先,从硬件配置上看,普通服务器通常都会配备中央处理器、内存和硬盘等基本的硬件配置,能够适用于各种应用程序和服务;G口服务器除了基础的硬件配置还增…...

通过国内源在Ubuntu20.0.4安装repo

国内三大免费源: 清华大学:清华大学开源软件镜像站 | Tsinghua Open Source Mirror中国科技大学:USTC Open Source Software Mirror阿里云:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 repo只在清华源网站里搜到:…...

多维动态规划 力扣hot100热门面试算法题 面试基础 核心思路 背题

多维动态规划 不同路径 https://leetcode.cn/problems/unique-paths/ 核心思路 比较简单 f[i][j] f[i - 1][j] f[i][j - 1] ; 示例代码 class Solution {public int uniquePaths(int n, int m) {int[][] f new int[n][m];for (int i 0; i < n; i)f[i][0] 1;for…...

《Java到Go的平滑转型指南》

文章目录 **文章摘要****核心主题****关键内容提炼****决策者行动清单****核心结论** **第一章&#xff1a;转型决策&#xff1a;为什么要从Java转向Go&#xff1f;****1.1 性能对比&#xff1a;GC机制与并发模型差异****GC机制对比****并发模型基准测试** **1.2 开发效率&…...

【软件测试】:软件测试实战

1. ⾃动化实施步骤 1.1 编写web测试⽤例 1.2 ⾃动化测试脚本开发 common public class AutotestUtils {public static EdgeDriver driver;// 创建驱动对象public static EdgeDriver createDriver(){// 驱动对象已经创建好了 / 没有创建if( driver null){driver new EdgeDr…...

SpringMVC 请求处理

SpringMVC 请求处理深度解析&#xff1a;从原理到企业级应用实践 一、架构演进与核心组件协同 1.1 从传统Servlet到前端控制器模式 SpringMVC采用前端控制器架构模式&#xff0c;通过DispatcherServlet统一处理请求&#xff0c;相比传统Servlet的分散处理方式&#xff0c;实…...

unittest自动化测试实战

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 为什么要学习unittest 按照测试阶段来划分&#xff0c;可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程…...

leetcode3.无重复字符的最长字串

采用滑动窗口方法 class Solution { public:int lengthOfLongestSubstring(string s) {int ns.size();if(n0)return 0;int result0;unordered_set<char> set;set.insert(s[0]);for(int i0,j0;i<n;i){while(j1<n&&set.find(s[j1])set.end()){set.insert(s[…...

Android Compose 框架派生状态(derivedStateOf、rememberCoroutineScope)深入剖析(十五)

一、引言 在 Android 开发领域&#xff0c;高效的状态管理对于构建响应式、高性能的应用程序至关重要&#xff0c;在 Jetpack Compose 中&#xff0c;derivedStateOf 和 rememberCoroutineScope 这两个与派生状态相关的特性在状态管理方面发挥着关键作用。派生状态允许我们根据…...

3.25-2request库

request库 一、介绍request库 &#xff08;1&#xff09;requests是用python语言编写的简单易用的http库&#xff0c;用来做接口测试的库&#xff1b; &#xff08;2&#xff09;接口测试自动化库有哪些&#xff1f; requests、urllib 、urllib2、urllib3、 httplib 等&…...

《破解老龄化的智能密钥:机器人四维战略与未来养老生态》

一、引言&#xff1a;老龄化社会与智能机器人的必然性 全球老龄化趋势与老年人核心需求&#xff08;健康管理、生活辅助、心理陪伴、安全保障&#xff09; 全球正面临着严峻的老龄化挑战。根据联合国发布的数据&#xff0c;全球60岁及以上人口数量在过去几十年中持续增长&…...

Docker-Volume数据卷详讲

Docker数据卷-Volume 一&#xff1a;Volume是什么&#xff0c;用来做什么的 当删除docker容器时&#xff0c;容器内部的文件就会跟随容器所销毁&#xff0c;在生产环境中我们需要将数据持久化保存&#xff0c;就催生了将容器内部的数据保存在宿主机的需求&#xff0c;volume …...

SpringMVC 配置

一、MVC 模式简介 在软件开发的广袤天地中&#xff0c;MVC 模式宛如一座明亮的灯塔&#xff0c;指引着开发者构建高效、可维护的应用程序。Spring MVC 作为基于 Spring 框架的重要 web 开发模块&#xff0c;更是将 MVC 模式的优势发挥得淋漓尽致&#xff0c;堪称 Servlet 的强…...

Python 3.8 Requests 爬虫教程(2025最新版)

遵守网站的爬虫规则、避免爬取敏感信息、保护个人隐私&#xff01; 一、环境配置与基础验证 # 验证 Python 版本&#xff08;需 ≥3.8&#xff09; import sys print(sys.version) # 应输出类似 3.8.12 的信息# 安装 requests 库&#xff08;若未安装&#xff09; # 命令行执…...

蓝桥杯备考之 最长上升子序列问题(挖地雷)

这道题其实就是正常的最长上升子序列问题&#xff0c;但是我们还要把最优方案输出出来&#xff0c;我们可以用个pre数组来维护就行了&#xff0c;每当我们更新以i为结尾的最长子序列&#xff0c;如果i是接在1到i-1某个点后面的话就把前面的点存到pre里面 最后我们把pre倒着打印…...

华为OD机试2025A卷 - 游戏分组/王者荣耀(Java Python JS C++ C )

最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 2020年题: 英雄联盟是一款十分火热的对战类游戏。每一场对战有10位玩家参与,分为两组,每组5人。每位玩家都有一个战斗力,代表着这位玩家的厉害程度。为了对战尽可能精彩,我们需要…...

【Python Cookbook】字符串和文本(二)

字符串和文本&#xff08;二&#xff09; 6.字符串忽略大小写的搜索替换7.最短匹配模式8.多行匹配模式9.将 Unicode 文本标准化10.在正则式中使用 Unicode 6.字符串忽略大小写的搜索替换 你需要以忽略大小写的方式搜索与替换文本字符串。 为了在文本操作时忽略大小写&#xf…...

Redisson 实现分布式锁简单解析

目录 Redisson 实现分布式锁业务方法&#xff1a;加锁逻辑LockUtil 工具类锁余额方法&#xff1a;工具类代码枚举代码 RedisUtil 工具类tryLock 方法及重载【分布式锁具体实现】Supplier 函数式接口调用分析 Redisson 实现分布式锁 业务方法&#xff1a; 如图&#xff0c;简单…...

六十天Linux从0到项目搭建(第五天)(file、bash 和 shell 的区别、目录权限、默认权限umask、粘滞位、使用系统自带的包管理工具)

1. file [选项] 文件名 用于确定文件类型的实用工具。它会通过分析文件内容&#xff08;而不仅仅是文件扩展名&#xff09;来判断文件的实际类型 示例输出解析 $ file /bin/bash /bin/bash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, i…...

信源的分类及数学模型

信源的分类及数学模型 按照信源发出的时间和消息分布分为离散信源和连续信源 按照信源发出符号之间的关系分为无记忆信源和有记忆信源 单符号离散信源&#xff08;一维离散信源&#xff09; 信源输出的消息数有限或可数&#xff0c;且每次只输出符号集的一个消息 样本空间&…...

嵌入式硬件工程师从小白到入门-PCB绘制(二)

PCB绘制从小白到入门&#xff1a;知识点速通与面试指南 一、PCB设计核心流程 需求分析 明确电路功能&#xff08;如电源、信号处理、通信&#xff09;。确定关键参数&#xff08;电压、电流、频率、接口类型&#xff09;。 原理图设计 元器件选型&#xff1a;匹配封装、电压、…...

抽象工厂设计模式及应用案例

引言 在软件开发中&#xff0c;合理的设计模式可以有效地提高代码的可维护性、可扩展性和可重用性。抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;便是一个重要的创建型设计模式&#xff0c;它允许我们在不指定具体类的情况下&#xff0c;创建一系列相关或相…...

LVS NAT模式实现三台RS的轮询访问

节点规划: 配置RS&#xff1a; RS1-RS3的网关配置均为 192.168.163.8 配置RS1&#xff1a; [rootlocalhost ~]# hostnamectl hostname rs1 [rootlocalhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.163.7/24 ipv4.gateway 192.168.163.8 conne…...

LSM-Tree(Log-Structured Merge-Tree)详解

1. 什么是 LSM-Tree? LSM-Tree(Log-Structured Merge-Tree)是一种 针对写优化的存储结构,广泛用于 NoSQL 数据库(如 LevelDB、RocksDB、HBase、Cassandra)等系统。 它的核心思想是: 写入时只追加写(Append-Only),将数据先写入内存缓冲区(MemTable)。内存数据满后…...

uni-app jyf-parser将字符串转化为html 和 rich-text

uni-app jyf-parser将字符串转化为html-CSDN博客 方法二&#xff1a; rich-text | uni-app...