跳到文章正文
01 / B / 起步

账户与加密原理

公钥、私钥、地址与签名,理解钱包背后的账户模型。

约 4 分钟阅读
第 1 课:Web3 认知重启 · Part 2/6 — 账户与加密原理
本文为作者已发布教程的站内版本。在 X 查看原文与讨论

主题: 账户与加密原理(Keys & Signatures) 简介: Web2 vs Web3 账户模型 / 非对称加密 / Viem 签名演示


2. 加密钱包与账户体系

1. Web2 vs Web3 的账户模型

首先我们来了解一下账户在web2和web3中的区别。

在web2里面,如果我们要用一个网站,通常需要先注册帐号,设置密码。帐号和密码会保存在网站的服务器里面。如果忘掉了密码,还能通过邮箱或者手机号找回,退一万步讲,可能还能直接找到网站管理员去取回帐号。

在web3里面呢?账户,只是一对公钥和私钥,没有任何服务器保存我们的账户。区块链只关心一个人是不是拥有一个账户的所有权,也就是他是不是知道这个账户私钥。所以在web3里面,掌握了私钥就能控制一个账户,但是也意味着,丢失了私钥,就彻底丢失了这个账户。

2. 非对称加密(公钥/私钥)原理

Web3的账户体系,基于严格的数学原理,通过已经被证明了的数学定理去保证账户系统的运行,而不是通过一个中心化的管理员来保证。

这个数学原理,就是非对称加密。

一个web3的账户,就是一个私钥,由私钥可以推导出公钥,由公钥可以生成一个钱包地址。

钱包地址用来识别一个账户,来与外界交互。

公钥可以用来加密一段信息,然后用私钥解密。

私钥也能用来签名一段信息,然后用公钥来验证签名是否有效。

签名这个操作很重要,在web2里面,我们通过验证用户输入的密码,来确认账号的所有权。在web3,则通过签名,来验证。

而且,因为签名和验证签名使用数学保证正确性的,所以在web3的世界里,一个公私钥对代表的账号,可以用来登录和使用所有web3 的app。

2.1 实战演示:生成一个账户

用bit address生成账户,

下面我们实战一下,通过bigaddress.org生成一个账户

账户与加密原理 · 配图 1

我们来不断的晃动鼠标,来创造真正的随机数,直到进度达到100%

账户与加密原理 · 配图 2

已经生成好了一个私钥。

各位要各显神通,想办法把私钥安全的保存,不要被任何人知道。否则你的账户就是我的了。

下面我们来写代码,学习一下如何用私钥签名,如何用公钥验证签名。

实战开始录屏

用viem写代码,展示如何签名和验证签名

import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
import { recoverMessageAddress } from 'viem'

// 1. 生成随机私钥
const privateKey = generatePrivateKey()
console.log("私钥:", privateKey)

// 2. 从私钥生成账户
const account = privateKeyToAccount(privateKey)

console.log("地址:", account.address)

console.log("公钥:", account.publicKey)

// 3. 签署一条消息
const message = "Hello Web3"
const signature = await account.signMessage({ message })

console.log("消息:", message)
console.log("签名:", signature)
// 4. 验证签名并恢复地址
const recoveredAddress = await recoverMessageAddress({
  message,
  signature
})

console.log("恢复的地址:", recoveredAddress)

console.log("验证成功:", recoveredAddress === account.address)

系列导航(第 2/6 篇)

《 第 1 课:Web3 认知重启 》拆分为 6 篇 X Articles。

  • ← 上一篇:01a - 全景概览
  • → 下一篇:01c - MetaMask 安装
  • 📚 完整目录:见 README.md
  • 🔗 原始长文:见 ../01-Web3 认知重启.md
本篇主题:账户与加密原理

关于作者

,现居湖北武汉,拥有 10 多年经验的全栈开发工程师,分享 AI 编程、Web3 与独立开发实践。

X 原文