当前位置: 首页 > 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 通过引入计算延迟,使得攻击者无法快速生成大量有效的身份或签名。攻击者必须消耗一定的时间来进行计算,这个过程对他们来说是昂贵且缓慢的,从而有效减少了攻击的可能性。


http://www.kler.cn/a/610605.html

相关文章:

  • 【linux复习】——进程间通信
  • Flutter 中 GetX 的优缺点及常见问题解决方案
  • Java的DES/CBC/PKCS7Padding加密算法封装类
  • 在线运行vscode
  • 应用服务接口第二次请求一直pending问题
  • qtcreator不能用调试怎么办,打开维护工具,添加Qt Debug Information Files” 这一选项
  • 【区块链安全 | 第五篇】DeFi概念详解
  • LabVIEW多CAN设备连接故障
  • ref和reactive区别
  • Ardupilot开源无人机之Geek SDK进展2025Q2
  • Linux Namespace(网络命名空间)系列二 --- 使用 Open vSwitch 和网络命名空间搭建虚拟网络
  • 2025.03.26【基因数据解析】| BackSPIN:高效基因聚类与过滤工具详解
  • 图的广度优先搜索(BFS)和深度优先搜索(DFS)算法介绍与应用场景以及 C# 代码实现
  • C++蓝桥杯实训篇(一)
  • MySQL数据库表的约束,关联及查询
  • 三方线上美食城|基于Springboot的三方线上美食商城系统
  • 力扣刷题-热题100题-第24题(c++、python)
  • 如何保障kafka的数据不会重复消费呢,如何防止漏掉呢
  • Git的认识安装及创建配置本地仓库
  • [c语言日寄]数据输出