主题: 账户与加密原理(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生成一个账户

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

已经生成好了一个私钥。
各位要各显神通,想办法把私钥安全的保存,不要被任何人知道。否则你的账户就是我的了。
下面我们来写代码,学习一下如何用私钥签名,如何用公钥验证签名。
实战开始录屏
用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
本篇主题:账户与加密原理
