密码学基础回顾:哈希函数、对称加密与非对称加密、数字签名、椭圆曲线密码学

各位同学,欢迎来到密码学基础回顾。说实话,很多刚入行的朋友觉得密码学很枯燥,一堆数学公式。但我想说,理解这些基础,是你理解零知识证明的必经之路。我自己当年啃这些概念时也踩过不少坑,今天咱们就用最直白的方式把它们捋清楚。

1. 哈希函数:数据的“指纹”

哈希函数,说白了就是一个“压缩器”。你给它任意长度的数据,它给你一个固定长度的摘要。这个摘要就像数据的指纹,独一无二。

核心特性:

  • 单向性:从哈希值反推原始数据,几乎不可能。我见过有人想暴力破解,结果算到天荒地老也没戏。
  • 抗碰撞性:很难找到两个不同的输入,产生相同的哈希值。嗯,这里要注意,理论上存在碰撞,但找到它的计算成本高得离谱。
  • 雪崩效应:输入改一个比特,输出就面目全非。

重要提醒:在Web3里,哈希函数无处不在。从区块头的计算到交易ID的生成,都离不开它。我个人习惯用SHA-256,它足够安全,性能也还行。

常见哈希函数对比:

算法 输出长度 安全性 典型应用
SHA-256 256位 比特币、以太坊
Keccak-256 256位 以太坊智能合约
BLAKE2 可变 Zcash、零知识证明

我的经验:曾经有个项目,团队用了MD5做签名验证,结果被攻击者轻松伪造了数据。从那以后,我再也不敢用任何不安全的哈希算法。记住,在密码学里,不要自己发明算法,用经过验证的标准方案。

2. 对称加密:一把钥匙开一把锁

对称加密,就是加密和解密用同一个密钥。你想想看,就像你家的门锁,钥匙只有一把,你自己能开,别人也能开(如果他有钥匙)。

工作流程:

  1. 发送方用密钥K加密明文M,得到密文C。
  2. 接收方用同样的密钥K解密密文C,恢复明文M。

常见算法:

  • AES:目前最流行的对称加密算法。我在项目中几乎都用它,速度快,安全性高。
  • ChaCha20:流加密算法,在移动设备上性能更好。

避坑指南:我曾经在分布式系统中直接用了AES的ECB模式,结果发现相同的明文块会产生相同的密文块,攻击者很容易看出规律。后来我改用CBC或GCM模式,才解决了这个问题。记住,永远不要用ECB模式

3. 非对称加密:公钥和私钥的舞蹈

非对称加密,说白了就是有两把钥匙:公钥公开,私钥保密。公钥加密的数据只能用私钥解密,私钥签名的数据只能用公钥验证。

为什么需要它?对称加密有个大问题:密钥怎么安全地传给对方?非对称加密完美解决了这个痛点。

典型应用:

  • 加密通信:用对方的公钥加密消息,只有对方能用私钥解密。
  • 数字签名:用私钥签名消息,任何人用公钥验证签名是否有效。

核心概念:非对称加密的安全性基于数学难题。比如RSA基于大整数分解,椭圆曲线密码学基于椭圆曲线离散对数问题。这些难题在经典计算机上很难破解,但量子计算机来了就不好说了。

4. 数字签名:身份的“电子印章”

数字签名,就是你在数字世界里的手写签名。它保证了三件事:

  • 真实性:消息确实是你发的。
  • 完整性:消息没有被篡改。
  • 不可否认性:你不能事后抵赖。

签名过程:

  1. 对消息M进行哈希,得到摘要H。
  2. 用私钥对H进行加密,得到签名S。
  3. 将(M, S)一起发送给接收方。

验证过程:

  1. 接收方对M进行哈希,得到H'。
  2. 用公钥解密签名S,得到H。
  3. 比较H和H',如果相等,签名有效。

我的建议:在以太坊中,交易签名用的是ECDSA算法。我刚开始写智能合约时,总搞不清签名和验证的细节。后来我写了个小工具,每次部署前都手动验证一遍签名逻辑,再也没出过问题。

5. 椭圆曲线密码学:小而美的密码学

椭圆曲线密码学(ECC),是目前Web3世界的基石。比特币、以太坊、零知识证明,全都离不开它。

为什么选椭圆曲线?

  • 密钥更短:256位的ECC密钥,安全性相当于3072位的RSA密钥。
  • 计算更快:同样的安全级别,ECC的运算速度更快。
  • 带宽更省:签名和密钥的长度更短,适合区块链这种带宽敏感的场景。

常用曲线:

曲线名称 密钥长度 应用场景
secp256k1 256位 比特币、以太坊
Curve25519 256位 Monero、Signal
BLS12-381 381位 以太坊2.0、零知识证明

避坑指南:我曾经在项目中用了不标准的椭圆曲线参数,结果导致签名验证时出现随机失败。后来我查了三天,才发现是曲线参数没选对。记住,永远使用标准曲线,比如secp256k1或Curve25519。

6. 这些密码学工具如何组合?

在实际的Web3应用中,这些工具很少单独使用。我来举个例子:

一个典型的交易流程:

  1. 用户构造交易数据(比如转账金额、接收地址)。
  2. 对交易数据进行哈希(SHA-256)。
  3. 用私钥对哈希值进行签名(ECDSA)。
  4. 将交易和签名广播到网络。
  5. 矿工用公钥验证签名,确认交易有效。
  6. 交易被打包进区块,区块头包含所有交易的Merkle根哈希。

你看,哈希函数、非对称加密、数字签名、椭圆曲线密码学,全都用上了。这就是密码学的魅力——每个工具各司其职,组合起来就能构建出安全可靠的系统。

总结一下:

  • 哈希函数:保证数据完整性。
  • 对称加密:保证数据机密性,但密钥分发是痛点。
  • 非对称加密:解决密钥分发问题,但速度慢。
  • 数字签名:保证身份真实性和不可否认性。
  • 椭圆曲线密码学:Web3世界的基石,高效且安全。

好了,这一章的内容就到这里。下一章我们会深入零知识证明的核心概念,到时候你会发现,这些密码学基础就是理解零知识证明的钥匙。有什么问题,欢迎随时交流。