密码学基础回顾:哈希函数、对称加密与非对称加密、数字签名、椭圆曲线密码学
各位同学,欢迎来到密码学基础回顾。说实话,很多刚入行的朋友觉得密码学很枯燥,一堆数学公式。但我想说,理解这些基础,是你理解零知识证明的必经之路。我自己当年啃这些概念时也踩过不少坑,今天咱们就用最直白的方式把它们捋清楚。
1. 哈希函数:数据的“指纹”
哈希函数,说白了就是一个“压缩器”。你给它任意长度的数据,它给你一个固定长度的摘要。这个摘要就像数据的指纹,独一无二。
核心特性:
- 单向性:从哈希值反推原始数据,几乎不可能。我见过有人想暴力破解,结果算到天荒地老也没戏。
- 抗碰撞性:很难找到两个不同的输入,产生相同的哈希值。嗯,这里要注意,理论上存在碰撞,但找到它的计算成本高得离谱。
- 雪崩效应:输入改一个比特,输出就面目全非。
重要提醒:在Web3里,哈希函数无处不在。从区块头的计算到交易ID的生成,都离不开它。我个人习惯用SHA-256,它足够安全,性能也还行。
常见哈希函数对比:
| 算法 | 输出长度 | 安全性 | 典型应用 |
|---|---|---|---|
| SHA-256 | 256位 | 高 | 比特币、以太坊 |
| Keccak-256 | 256位 | 高 | 以太坊智能合约 |
| BLAKE2 | 可变 | 高 | Zcash、零知识证明 |
我的经验:曾经有个项目,团队用了MD5做签名验证,结果被攻击者轻松伪造了数据。从那以后,我再也不敢用任何不安全的哈希算法。记住,在密码学里,不要自己发明算法,用经过验证的标准方案。
2. 对称加密:一把钥匙开一把锁
对称加密,就是加密和解密用同一个密钥。你想想看,就像你家的门锁,钥匙只有一把,你自己能开,别人也能开(如果他有钥匙)。
工作流程:
- 发送方用密钥K加密明文M,得到密文C。
- 接收方用同样的密钥K解密密文C,恢复明文M。
常见算法:
- AES:目前最流行的对称加密算法。我在项目中几乎都用它,速度快,安全性高。
- ChaCha20:流加密算法,在移动设备上性能更好。
避坑指南:我曾经在分布式系统中直接用了AES的ECB模式,结果发现相同的明文块会产生相同的密文块,攻击者很容易看出规律。后来我改用CBC或GCM模式,才解决了这个问题。记住,永远不要用ECB模式。
3. 非对称加密:公钥和私钥的舞蹈
非对称加密,说白了就是有两把钥匙:公钥公开,私钥保密。公钥加密的数据只能用私钥解密,私钥签名的数据只能用公钥验证。
为什么需要它?对称加密有个大问题:密钥怎么安全地传给对方?非对称加密完美解决了这个痛点。
典型应用:
- 加密通信:用对方的公钥加密消息,只有对方能用私钥解密。
- 数字签名:用私钥签名消息,任何人用公钥验证签名是否有效。
核心概念:非对称加密的安全性基于数学难题。比如RSA基于大整数分解,椭圆曲线密码学基于椭圆曲线离散对数问题。这些难题在经典计算机上很难破解,但量子计算机来了就不好说了。
4. 数字签名:身份的“电子印章”
数字签名,就是你在数字世界里的手写签名。它保证了三件事:
- 真实性:消息确实是你发的。
- 完整性:消息没有被篡改。
- 不可否认性:你不能事后抵赖。
签名过程:
- 对消息M进行哈希,得到摘要H。
- 用私钥对H进行加密,得到签名S。
- 将(M, S)一起发送给接收方。
验证过程:
- 接收方对M进行哈希,得到H'。
- 用公钥解密签名S,得到H。
- 比较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应用中,这些工具很少单独使用。我来举个例子:
一个典型的交易流程:
- 用户构造交易数据(比如转账金额、接收地址)。
- 对交易数据进行哈希(SHA-256)。
- 用私钥对哈希值进行签名(ECDSA)。
- 将交易和签名广播到网络。
- 矿工用公钥验证签名,确认交易有效。
- 交易被打包进区块,区块头包含所有交易的Merkle根哈希。
你看,哈希函数、非对称加密、数字签名、椭圆曲线密码学,全都用上了。这就是密码学的魅力——每个工具各司其职,组合起来就能构建出安全可靠的系统。
总结一下:
- 哈希函数:保证数据完整性。
- 对称加密:保证数据机密性,但密钥分发是痛点。
- 非对称加密:解决密钥分发问题,但速度慢。
- 数字签名:保证身份真实性和不可否认性。
- 椭圆曲线密码学:Web3世界的基石,高效且安全。
好了,这一章的内容就到这里。下一章我们会深入零知识证明的核心概念,到时候你会发现,这些密码学基础就是理解零知识证明的钥匙。有什么问题,欢迎随时交流。