密码学基础教程

Devin
Web3

密码学基础教程

Web3 密码学基础教程

目录


第一部分:公钥/私钥原理(1 小时)

1.1 什么是公钥密码学?

公钥密码学(Public Key Cryptography),也称为非对称加密,是现代密码学的基石,也是 Web3 技术的核心。

核心概念:

  • 私钥(Private Key):一个随机生成的 256 位数字,必须严格保密
  • 公钥(Public Key):由私钥通过数学算法派生而来,可以公开分享
  • 地址(Address):由公钥进一步派生,是区块链上的账户标识

1.2 工作原理

密钥对的生成过程

私钥(Private Key)
    ↓ [椭圆曲线算法]
公钥(Public Key)
    ↓ [哈希算法]
地址(Address)

以太坊为例:

  1. 生成私钥
    • 随机生成一个 256 位的数字(64 个十六进制字符)
    • 示例:0x4c0883a69102937d6231471b5dbb6204fe512961708279f8c3c2c32d6f8ce3e7
  2. 派生公钥
    • 使用椭圆曲线数字签名算法(ECDSA)中的 secp256k1 曲线
    • 私钥 × G(生成点)= 公钥
    • 公钥是一个坐标点(x, y),共 512 位
  3. 生成地址
    • 对公钥进行 Keccak-256 哈希
    • 取后 160 位(40 个十六进制字符)
    • 加上"0x"前缀
    • 示例:0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb

1.3 关键特性

单向性(One-way Function)

  • 从私钥可以轻松计算出公钥
  • 从公钥几乎不可能反推出私钥
  • 这是基于椭圆曲线离散对数问题的数学难题

唯一性

  • 每个私钥对应唯一的公钥和地址
  • 私钥空间极大(2^256),碰撞概率几乎为零

验证性

  • 任何人都可以用公钥验证私钥的所有权
  • 无需暴露私钥本身

1.4 安全性考量

私钥安全的重要性:

私钥 = 你的数字资产完全控制权
丢失私钥 = 永久失去资产
泄露私钥 = 他人可以盗取资产

最佳实践:

  • ✅ 使用硬件钱包存储私钥
  • ✅ 备份助记词并离线保存
  • ✅ 使用多重签名钱包
  • ❌ 永远不要截图或拍照私钥
  • ❌ 不要在线上存储明文私钥
  • ❌ 不要与任何人分享私钥

1.5 Web3 中的应用场景

  1. 身份验证
    • 连接钱包时,用私钥签名证明身份
    • 无需用户名和密码
  2. 资产控制
    • 只有持有私钥的人才能转移资产
    • "Not your keys, not your coins"
  3. 智能合约交互
    • 签名交易来调用智能合约
    • 授权 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 字段编码:

  1. 函数选择器(前 4 字节):函数签名的 Keccak-256 哈希的前 4 字节
  2. 参数编码:按 ABI 规范编码的参数

2.7 安全考量

交易安全最佳实践:

  1. 验证交易内容
    • 仔细检查接收地址
    • 确认转账金额
    • 审查 Data 字段(特别是合约调用)
  2. Gas 费用管理
    • 设置合理的 gas limit
    • 监控 gas 价格避免过高费用
    • 考虑使用 EIP-1559 的动态费用
  3. 防止常见攻击
    • 重放攻击:Nonce 机制防护
    • 前端运行攻击:使用私密交易或 FlashBots
    • 钓鱼攻击:验证 DApp 域名和合约地址
  4. 使用硬件签名
    • 在硬件钱包上签名交易
    • 屏幕上确认交易详情
    • 避免在热钱包中存储大额资产

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 的离线版本):

  1. 生成一个新的私钥
  2. 观察对应的公钥和地址
  3. 尝试导入私钥到不同钱包
  4. 注意:仅用于学习,不要在主网使用测试私钥

练习 2:分析真实交易

访问 Etherscan.io:

  1. 查找一笔真实的以太坊交易
  2. 识别交易的各个组成部分(from, to, value, gas 等)
  3. 查看签名数据(r, s, v)
  4. 理解交易状态和确认过程

练习 3:使用测试网

在测试网络上实践:

  1. 创建 MetaMask 钱包
  2. 切换到 Sepolia 测试网
  3. 从水龙头获取测试 ETH
  4. 发送一笔测试交易
  5. 在区块浏览器上查看交易详情

练习 4:智能合约交互

  1. 找到一个简单的 ERC-20 测试代币合约
  2. 使用 Etherscan 或 Remix IDE 连接钱包
  3. 执行一次代币转账
  4. 分析交易的 Data 字段编码

参考资料

官方文档

  1. 以太坊官方文档
  2. 以太坊黄皮书
  3. EIP(以太坊改进提案)

教程和指南

  1. Mastering Ethereum
  2. CryptoZombies
  3. Web3 University
  4. Alchemy University

密码学资源

  1. 椭圆曲线密码学简介
  2. Understanding Ethereum Digital Signatures
  3. Bitcoin and Cryptocurrency Technologies(普林斯顿课程)

工具和区块浏览器

  1. Etherscan
  2. Remix IDE
  3. MetaMask 文档
  4. MyCrypto 知识库

安全资源

  1. Consensys Smart Contract Best Practices
  2. OpenZeppelin 博客
  3. Rekt News

社区资源

  1. Ethereum Stack Exchange
  2. r/ethereum 和 r/ethdev
  3. Week in Ethereum News

视频资源

  1. Finematics YouTube 频道
  2. Whiteboard Crypto
  3. Patrick Collins(freeCodeCamp)

进阶阅读

  1. A Graduate Course in Applied Cryptography
  2. Bitcoin Whitepaper
  3. Vitalik Buterin's Blog

学习路径建议

第一阶段:基础理解(本教程)

  • ✅ 公钥/私钥原理
  • ✅ 数字签名机制
  • ✅ 交易流程

第二阶段:实践操作(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 中两个最核心的概念:

  1. 公钥/私钥系统提供了去中心化身份和资产控制的基础
  2. 数字签名确保了交易的真实性和不可否认性

掌握这些基础知识后,你就能理解 Web3 应用的底层工作原理,并为进一步学习智能合约开发、DApp 构建和 DeFi 协议打下坚实基础。

记住:安全第一! 在主网上使用真实资产之前,一定要在测试网上充分练习。


最后更新:2025 年 11 月如有问题或建议,欢迎贡献到本教程