密码学基础教程
密码学基础教程
Web3 密码学基础教程
目录
第一部分:公钥/私钥原理(1 小时)
1.1 什么是公钥密码学?
公钥密码学(Public Key Cryptography),也称为非对称加密,是现代密码学的基石,也是 Web3 技术的核心。
核心概念:
- 私钥(Private Key):一个随机生成的 256 位数字,必须严格保密
- 公钥(Public Key):由私钥通过数学算法派生而来,可以公开分享
- 地址(Address):由公钥进一步派生,是区块链上的账户标识
1.2 工作原理
密钥对的生成过程
私钥(Private Key)
↓ [椭圆曲线算法]
公钥(Public Key)
↓ [哈希算法]
地址(Address)
以太坊为例:
- 生成私钥
- 随机生成一个 256 位的数字(64 个十六进制字符)
- 示例:
0x4c0883a69102937d6231471b5dbb6204fe512961708279f8c3c2c32d6f8ce3e7
- 派生公钥
- 使用椭圆曲线数字签名算法(ECDSA)中的 secp256k1 曲线
- 私钥 × G(生成点)= 公钥
- 公钥是一个坐标点(x, y),共 512 位
- 生成地址
- 对公钥进行 Keccak-256 哈希
- 取后 160 位(40 个十六进制字符)
- 加上"0x"前缀
- 示例:
0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb
1.3 关键特性
单向性(One-way Function)
- 从私钥可以轻松计算出公钥
- 从公钥几乎不可能反推出私钥
- 这是基于椭圆曲线离散对数问题的数学难题
唯一性
- 每个私钥对应唯一的公钥和地址
- 私钥空间极大(2^256),碰撞概率几乎为零
验证性
- 任何人都可以用公钥验证私钥的所有权
- 无需暴露私钥本身
1.4 安全性考量
私钥安全的重要性:
私钥 = 你的数字资产完全控制权
丢失私钥 = 永久失去资产
泄露私钥 = 他人可以盗取资产
最佳实践:
- ✅ 使用硬件钱包存储私钥
- ✅ 备份助记词并离线保存
- ✅ 使用多重签名钱包
- ❌ 永远不要截图或拍照私钥
- ❌ 不要在线上存储明文私钥
- ❌ 不要与任何人分享私钥
1.5 Web3 中的应用场景
- 身份验证
- 连接钱包时,用私钥签名证明身份
- 无需用户名和密码
- 资产控制
- 只有持有私钥的人才能转移资产
- "Not your keys, not your coins"
- 智能合约交互
- 签名交易来调用智能合约
- 授权 DApp 执行操作
第二部分:数字签名与交易机制(1 小时)
2.1 什么是数字签名?
数字签名是一种数学方案,用于验证数字消息或文档的真实性和完整性。
类比理解:
- 传统签名:手写在纸上,可以被伪造
- 数字签名:数学证明,几乎不可能伪造
2.2 数字签名的工作流程
签名过程
1. 准备交易数据
↓
2. 对交易数据进行哈希(生成消息摘要)
↓
3. 使用私钥对哈希值进行加密
↓
4. 生成签名(r, s, v三个值)
↓
5. 将签名附加到交易中
验证过程
1. 接收交易和签名
↓
2. 使用公钥解密签名
↓
3. 对交易数据进行相同的哈希
↓
4. 比较两个哈希值
↓
5. 一致则验证通过,确认交易有效
2.3 ECDSA 签名详解
以太坊使用 ECDSA(Elliptic Curve Digital Signature Algorithm)签名算法。
签名组成部分:
- r:签名的一部分(256 位)
- s:签名的另一部分(256 位)
- v:恢复标识符(8 位,通常是 27 或 28)
签名示例:
{ r: "0x88ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0", s: "0x45e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33a", v: 28 }
2.4 区块链交易流程
完整的交易生命周期
1. 创建交易
// 交易对象示例 { from: "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb", to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72", value: "1000000000000000000", // 1 ETH in Wei gas: "21000", gasPrice: "20000000000", // 20 Gwei nonce: "5", data: "0x" }
2. 签名交易
- 使用私钥对交易数据进行签名
- 生成(r, s, v)签名值
- 将签名附加到交易中
3. 广播交易
- 将签名后的交易发送到网络
- 节点验证签名的有效性
4. 矿工打包
- 矿工验证交易
- 将交易包含在区块中
- 执行交易并更新状态
5. 确认交易
- 区块被添加到链上
- 等待多个确认以确保最终性
2.5 交易参数详解
必需参数
Nonce(交易序号)
- 从该地址发送的交易计数器
- 防止重放攻击
- 必须按顺序递增
Gas Limit(燃料限制)
- 愿意为交易支付的最大计算量
- 简单转账:21,000 gas
- 复杂智能合约调用:可能需要更多
Gas Price(燃料价格)
- 每单位 gas 愿意支付的价格(以 Gwei 为单位)
- 决定交易优先级
- 高 gas 价格 = 更快被打包
To(接收地址)
- 交易的目标地址
- 可以是外部账户或智能合约
Value(转账金额)
- 要发送的以太币数量(以 Wei 为单位)
- 1 ETH = 10^18 Wei
Data(数据字段)
- 用于智能合约调用的编码数据
- 简单转账时为空
2.6 智能合约交互
调用合约方法
// ERC-20代币转账示例 { to: "0xTokenContractAddress", value: "0", // 不发送ETH data: "0xa9059cbb" + // transfer函数选择器 "000000000000000000000000RecipientAddress" + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" // 1 token }
Data 字段编码:
- 函数选择器(前 4 字节):函数签名的 Keccak-256 哈希的前 4 字节
- 参数编码:按 ABI 规范编码的参数
2.7 安全考量
交易安全最佳实践:
- 验证交易内容
- 仔细检查接收地址
- 确认转账金额
- 审查 Data 字段(特别是合约调用)
- Gas 费用管理
- 设置合理的 gas limit
- 监控 gas 价格避免过高费用
- 考虑使用 EIP-1559 的动态费用
- 防止常见攻击
- 重放攻击:Nonce 机制防护
- 前端运行攻击:使用私密交易或 FlashBots
- 钓鱼攻击:验证 DApp 域名和合约地址
- 使用硬件签名
- 在硬件钱包上签名交易
- 屏幕上确认交易详情
- 避免在热钱包中存储大额资产
2.8 高级概念
EIP-1559(以太坊改进提案 1559)
新的费用机制:
- Base Fee:动态调整的基础费用(被销毁)
- Priority Fee:给矿工的小费(可选)
- Max Fee:愿意支付的最高费用
{ maxFeePerGas: "100000000000", // 100 Gwei maxPriorityFeePerGas: "2000000000", // 2 Gwei // 实际费用 = min(baseFee + priorityFee, maxFee) }
元交易(Meta Transactions)
允许第三方代付 gas 费用:
- 用户签名交易意图
- 中继者支付 gas 费并提交交易
- 实现无 gas 费体验
批量交易
- 使用智能合约批量执行多个操作
- 节省 gas 费用
- 提高效率
实践练习
练习 1:理解密钥派生
使用在线工具(如 MyCrypto 或 MyEtherWallet 的离线版本):
- 生成一个新的私钥
- 观察对应的公钥和地址
- 尝试导入私钥到不同钱包
- 注意:仅用于学习,不要在主网使用测试私钥
练习 2:分析真实交易
访问 Etherscan.io:
- 查找一笔真实的以太坊交易
- 识别交易的各个组成部分(from, to, value, gas 等)
- 查看签名数据(r, s, v)
- 理解交易状态和确认过程
练习 3:使用测试网
在测试网络上实践:
- 创建 MetaMask 钱包
- 切换到 Sepolia 测试网
- 从水龙头获取测试 ETH
- 发送一笔测试交易
- 在区块浏览器上查看交易详情
练习 4:智能合约交互
- 找到一个简单的 ERC-20 测试代币合约
- 使用 Etherscan 或 Remix IDE 连接钱包
- 执行一次代币转账
- 分析交易的 Data 字段编码
参考资料
官方文档
- 以太坊官方文档
- https://ethereum.org/zh/developers/docs/
- 全面的以太坊开发者文档
- 以太坊黄皮书
- https://ethereum.github.io/yellowpaper/paper.pdf
- 以太坊的技术规范(深度阅读)
- EIP(以太坊改进提案)
- https://eips.ethereum.org/
- 包括 EIP-1559, EIP-2718 等重要提案
教程和指南
- Mastering Ethereum
- https://github.com/ethereumbook/ethereumbook
- 免费开源书籍,深入讲解以太坊
- CryptoZombies
- https://cryptozombies.io/
- 互动式智能合约开发教程
- Web3 University
- https://www.web3.university/
- Web3 开发完整学习路径
- Alchemy University
- https://university.alchemy.com/
- 免费的区块链开发课程
密码学资源
- 椭圆曲线密码学简介
- Understanding Ethereum Digital Signatures
- Bitcoin and Cryptocurrency Technologies(普林斯顿课程)
- https://www.coursera.org/learn/cryptocurrency
- 涵盖密码学基础的优秀课程
工具和区块浏览器
- Etherscan
- https://etherscan.io/
- 以太坊区块浏览器
- Remix IDE
- https://remix.ethereum.org/
- 在线智能合约开发环境
- MetaMask 文档
- https://docs.metamask.io/
- 最流行的 Web3 钱包文档
- MyCrypto 知识库
- https://support.mycrypto.com/
- 钱包安全和密钥管理
安全资源
- Consensys Smart Contract Best Practices
- OpenZeppelin 博客
- https://blog.openzeppelin.com/
- 安全和开发最佳实践
- Rekt News
- https://rekt.news/
- 记录区块链黑客事件,学习安全教训
社区资源
- Ethereum Stack Exchange
- r/ethereum 和 r/ethdev
- Week in Ethereum News
- https://weekinethereumnews.com/
- 每周以太坊生态更新
视频资源
- Finematics YouTube 频道
- https://www.youtube.com/c/Finematics
- 优秀的 DeFi 和 Web3 概念讲解
- Whiteboard Crypto
- Patrick Collins(freeCodeCamp)
- https://www.youtube.com/c/PatrickCollins
- 全栈区块链开发教程
进阶阅读
- A Graduate Course in Applied Cryptography
- https://toc.cryptobook.us/
- Dan Boneh 的密码学教材
- Bitcoin Whitepaper
- https://bitcoin.org/bitcoin.pdf
- 中本聪的比特币白皮书(理解区块链起源)
- Vitalik Buterin's Blog
- https://vitalik.ca/
- 以太坊创始人的技术博客
学习路径建议
第一阶段:基础理解(本教程)
- ✅ 公钥/私钥原理
- ✅ 数字签名机制
- ✅ 交易流程
第二阶段:实践操作(1-2 周)
- 使用测试网进行交易
- 学习使用 Web3.js 或 ethers.js
- 编写简单的智能合约
第三阶段:深入学习(1-2 个月)
- Solidity 智能合约开发
- DApp 前端开发
- 安全最佳实践
第四阶段:专业发展(持续)
- 参与开源项目
- 了解最新 EIP
- 探索 Layer 2 和其他扩容方案
常见问题
Q: 如果忘记私钥怎么办? A: 如果没有助记词备份,资产将永久丢失。这就是"不是你的密钥,就不是你的币"的真正含义。
Q: 为什么交易需要 Gas 费? A: Gas 费激励矿工/验证者处理交易,同时防止网络垃圾信息和 DOS 攻击。
Q: 公钥可以安全分享吗? A: 是的,公钥和地址可以安全分享。它们用于接收资金和验证签名,不会泄露私钥。
Q: 交易可以取消吗? A: 已确认的交易不能取消。未确认的交易可以通过发送相同 nonce 但更高 gas price 的交易来"覆盖"。
Q: 什么是助记词? A: 助记词(通常是 12 或 24 个单词)是私钥的人类可读形式,可以恢复整个钱包。
总结
本教程涵盖了 Web3 中两个最核心的概念:
- 公钥/私钥系统提供了去中心化身份和资产控制的基础
- 数字签名确保了交易的真实性和不可否认性
掌握这些基础知识后,你就能理解 Web3 应用的底层工作原理,并为进一步学习智能合约开发、DApp 构建和 DeFi 协议打下坚实基础。
记住:安全第一! 在主网上使用真实资产之前,一定要在测试网上充分练习。
最后更新:2025 年 11 月如有问题或建议,欢迎贡献到本教程