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

发布于:2025-03-26 ⋅ 阅读:(23) ⋅ 点赞:(0)

1.哈希函数

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

1.1 哈希函数的性质

在这里插入图片描述

1.2 常见哈希算法

算法 输出长度 安全性现状
MD5 128 位 已被破解,不安全
SHA-1 160 位 已被破解,不安全
SHA-256 256 位 仍然安全
SHA-3 224/256/384/512 位 目前安全
BLAKE2 256/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 通过引入计算延迟,使得攻击者无法快速生成大量有效的身份或签名。攻击者必须消耗一定的时间来进行计算,这个过程对他们来说是昂贵且缓慢的,从而有效减少了攻击的可能性。