1. 哈希算法(Hash)
❓1.1 什么是哈希算法?区块链中为什么需要哈希?
哈希算法是一种不可逆的、确定性的、固定长度的散列函数,用于将输入数据映射成固定长度的字符串。
在区块链中的作用:
- 数据完整性:确保区块内容未被篡改(Merkle Tree)。
- 唯一标识:区块哈希值用于唯一标识区块。
- 密码学安全性:哈希值难以逆推,保证安全性。
常见哈希算法:
- SHA-256(比特币):固定 256 位输出,抗碰撞强。
- Keccak(以太坊):SHA-3 变种,优化安全性。
❓1.2 哈希算法的特性?
- 确定性:相同输入必定得到相同输出。
- 快速计算:输入能在短时间内计算出哈希值。
- 抗碰撞性:不同的输入尽量不产生相同的哈希值(哈希碰撞概率极低)。
- 抗篡改性:任意小的输入改动,输出都将大幅度变化(雪崩效应)。
- 单向性:无法由哈希值反推出原始数据(不可逆性)。
❓1.3 哈希算法的碰撞攻击是什么?
碰撞攻击是指两个不同的输入产生相同的哈希值,这会影响区块链的安全性。
目前 SHA-256 仍然足够安全,而 MD5、SHA-1 已被攻破,不建议使用。
2. 数字签名(Digital Signature)
❓2.1 什么是数字签名?如何保证交易的不可篡改性?
数字签名由 私钥签名、公钥验证,用于确保消息的真实性和完整性。
区块链中的数字签名机制:
发送方(私钥签名):
- 计算交易哈希
H(msg)
- 用私钥
sk
生成签名sig = Sign(sk, H(msg))
- 发送交易
(msg, sig)
- 计算交易哈希
接收方(公钥验证):
- 计算哈希
H(msg)
- 使用公钥
pk
验证Verify(pk, sig, H(msg))
- 计算哈希
不可篡改性:
如果攻击者想要篡改交易 msg'
,他必须生成新的 sig' = Sign(sk, H(msg'))
,但他没有 sk
,因此无法伪造有效签名。
❓2.2 常见的数字签名算法
- ECDSA(椭圆曲线数字签名算法)(比特币、以太坊)
- EdDSA(Ed25519)(Solana、ZCash,速度更快)
- Schnorr 签名(Taproot,支持多重签名聚合)
❓2.3 ECDSA 签名过程
- 选取随机数
k
- 计算椭圆曲线点
(r, s)
- 计算
s = k⁻¹(H(m) + r * sk) mod n
(r, s)
作为签名
ECDSA 关键问题:
- k 不能泄露,否则私钥会被推导出来
- r, s 不能重用,否则可恢复私钥
3. 公私钥体系 & 非对称加密
❓3.1 什么是非对称加密?与对称加密的区别?
加密方式 | 密钥数量 | 速度 | 安全性 | 适用场景 |
---|---|---|---|---|
对称加密(AES) | 1 把密钥 | 快 | 相对较低 | 数据加密 |
非对称加密(RSA/ECDSA) | 公钥+私钥 | 慢 | 更高 | 签名、身份认证 |
在区块链中,公私钥对主要用于身份认证,而不会用于加密数据,因为非对称加密开销较大。
❓3.2 区块链如何生成公私钥对?
以 ECDSA 为例:
- 私钥(sk):随机生成一个
256-bit
整数。 - 公钥(pk):
pk = sk * G
(G 是椭圆曲线基点)。
比特币 & 以太坊地址生成过程:
rust
复制编辑
私钥 (256-bit) --> 公钥 (椭圆曲线计算) --> 取哈希 (SHA-256 + RIPEMD-160) --> 地址
❓3.3 为什么私钥不能暴露?
- 只要攻击者获得私钥
sk
,就可以 伪造签名 并盗取资产。 - 私钥是唯一身份凭证,无法找回。
4. 零知识证明(ZKP)
❓4.1 什么是零知识证明?
零知识证明(ZKP) 允许证明者向验证者证明某个声明为真,但不暴露具体内容。
例如,在不暴露密码的情况下,证明自己知道密码。
❓4.2 零知识证明的三大性质
- 完备性(Completeness):如果声明为真,验证者一定能验证通过。
- 可靠性(Soundness):如果声明为假,证明者无法欺骗验证者。
- 零知识性(Zero Knowledge):验证者无法获得额外信息。
❓4.3 零知识证明在区块链的应用
- 隐私保护(ZCash,Mina):交易金额、账户余额隐私化。
- Layer2 扩展(zk-Rollup):大规模交易聚合,提高吞吐量。
常见零知识证明:
- zk-SNARK(ZCash、Polygon zkEVM)
- zk-STARK(无需可信设置,安全性更高)
5. 多方计算(MPC)、门限签名(TSS)
❓5.1 MPC(多方安全计算)
MPC 允许多个参与方共同计算,但不暴露彼此的输入,常用于:
- 去中心化钱包(Safe, MPC 钱包):私钥分片存储,防止单点攻击。
- 门限签名(TSS):多个参与方共同签名,不泄露私钥。
❓5.2 门限签名(TSS)
TSS 允许N 个节点共同签名,但只有 T
个节点可以恢复签名:
- 应用:
- 去中心化交易所(DEX)
- 多重签名钱包(Safe, Binance Custody)
- 优点:
- 无私钥单点故障(私钥分布在多个节点)。
- 比普通多签(MultiSig)更高效。
总结
- 哈希算法:SHA-256(比特币)、Keccak(以太坊),提供不可篡改性。
- 数字签名:ECDSA、EdDSA,保障交易的真实性与完整性。
- 公私钥:非对称加密,保证身份认证。
- 零知识证明:zk-SNARK、zk-STARK,保护交易隐私,提高扩展性。
- 多方计算:MPC、TSS,用于去中心化身份认证、钱包安全。