文章目录
- 前言
-
- 区块链中的密码学
-
- [1. 哈希算法](#1. 哈希算法)
- [2. 哈希树](#2. 哈希树)
- [3. 公钥密码学](#3. 公钥密码学)
-
- [3.1. 生成关系](#3.1. 生成关系)
- [3.2. 功能关系](#3.2. 功能关系)
- [3.3. 安全关系](#3.3. 安全关系)
- [3.4. 场景](#3.4. 场景)
-
- [3.4.1. 场景一:加密通信场景 (公钥加密 → 私钥解密)](#3.4.1. 场景一:加密通信场景 (公钥加密 → 私钥解密))
- [3.4.2. 场景二:数字签名(私钥签名 → 公钥验签)](#3.4.2. 场景二:数字签名(私钥签名 → 公钥验签))
- [3.4.3. 场景区别](#3.4.3. 场景区别)
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
区块链中的密码学

1. 哈希算法
哈希算法是一种单向加密算法,能把一串数据加密成二进制串,但无法从这串二进制还原出原数据;它有三个特点:
1、相同输入会得到相同二进制串(64 位十六进制哈希值);
2、不同输入对应不同二进制串(强对抗性);
3、输出的二进制长度一致;
1个十六进制字符对应 4 位二进制,64 位十六进制字符 = 64×4 = 256 位二进制;
1 字节 = 8 位二进制;
256 位二进制 = 256÷8 = 32 字节;
使用场景:

2. 哈希树
特点:
- 结构灵活:一般是二叉树,也可以是多叉树,具备树结构的基本特性;
- 根节点稳定:根节点只由数据决定,和更新顺序无关,哪怕重新计算整棵树,根节点也不会变;
- 高效校验:若两个默克树的根节点相同,代表对应数据完全一致,用根节点校验能大幅减少数据传输和计算量;
- 分支独立:树的任意一个分支本身也是默克树,可单独用来做数据校验;
- 节省空间:区块链交易数据过多时,只需保留默克树的根节点,删除下层节点就能节省存储空间。
数据结构:

3. 公钥密码学
使用非对称加密技术,其相对于对称加密技术,在对称加密技术中加密使用相同的秘钥加密数据,为了让对方能够解密,需要同时将密文和秘钥发给对方,而非对称加密技术,有公钥和私钥两个,公钥用来加密,私钥用来解密,公钥可以发给任何人。
公钥和私钥是非对称加密算法 的核心,它们是一对 "数学绑定、单向推导、功能互补" 的密钥。
3.1. 生成关系
- 私钥是起点:由加密算法生成的一个超大随机数,是整个密钥对的根源。
- 公钥是推导结果:通过椭圆曲线(如 ECDSA)或 RSA 算法,从私钥计算得出。
- 关键特性:这个推导过程是单向不可逆的 ------ 你可以从私钥算出公钥,但无法从公钥反推出私钥,这也是非对称加密安全的核心。
3.2. 功能关系
| 序号 | 私钥(Secret Key) | 公钥(Public Key) |
|---|---|---|
| 1 | 由用户秘密保存 ,绝不对外泄露 | 可以公开给任何人 ,无需保密 |
| 2 | 用于解密 用对应公钥加密的消息 | 用于加密 只有对应私钥才能解密的消息 |
| 3 | 用于生成数字签名 ,证明身份 | 用于验证数字签名 ,确认消息来源与完整性 |
3.3. 安全关系
- 用公钥加密的内容,只有对应的私钥才能解密。
- 用私钥生成的数字签名,只有对应的公钥才能验证。
- 这种 "唯一对应" 的数学关系,保证了数据传输和身份验证的安全性。
3.4. 场景
3.4.1. 场景一:加密通信场景 (公钥加密 → 私钥解密)
- 你在本地生成私钥 → 用算法推导出公钥
- 你把公钥发给发送方(或公开在网络上)
- 发送方用你的公钥加密原始消息 → 得到密文
- 密文在网络传输(不怕被截获,因为没有私钥解不开)
- 你用自己的私钥解密密文 → 得到原始消息
✅ 核心目的:保证消息的保密性
3.4.2. 场景二:数字签名(私钥签名 → 公钥验签)
数字签名是区块链中的重要技术,它的作用可以类比我们生活中的手写签名:
- 手写签名用来确认纸质文件的内容和签署人;
- 数字签名则用来证实数字内容的完整性(内容没被篡改)、来源(是谁发出的),并保证签名的有效性和不可抵赖性(签名者事后不能否认自己签过字);
关键特性:
- 完整性:一旦内容被篡改,数字签名就会失效,能立刻发现数据被改动。
- 不可抵赖性:因为签名是由用户的私钥生成的,其他人无法伪造,所以签名者无法否认自己的行为。
- 身份认证:通过验证数字签名,可以确认数据确实来自声称的发送方。
区块链中的作用:
在区块链里,每一笔交易都需要数字签名来确认身份和内容。这保证了:
- 只有私钥持有者才能发起交易;
- 交易数据在全网广播和存储过程中不会被篡改;
- 所有节点都可以通过公钥验证签名的有效性;
大概流程:
- 你生成私钥 → 推导出公钥,并把公钥发给接收方。
- 你用自己的私钥对消息摘要做签名运算 → 得到数字签名。
- 你把原始消息 + 签名发给接收方。
- 接收方用你的公钥对签名做验证运算 → 得到消息摘要。
- 接收方对收到的原始消息重新计算摘要,对比后确认消息未被篡改且来自你。
✅ 核心目的:保证消息的真实性和完整性,防止抵赖。
示例:
假设Alice要向Bob发送一条信息,Bob需要验证信息的完整性和真实性。
bash
* 生成密钥对:Alice 生成私钥(自己保管)和公钥(公开给 Bob)。
* 生成摘要:Alice 用哈希算法(如 SHA-256)对消息 M 生成唯一的摘要 H (M)。
* 生成签名:Alice 用私钥对 H (M) 进行签名运算,得到数字签名 S。
* 发送消息:Alice 把 M 和 S 一起发给 Bob。
* 验证签名:
* Bob 用 Alice 的公钥对 S 进行验证运算,得到 H'(M)。
* Bob 对收到的 M 重新计算哈希,得到 H (M)。
* 比较 H'(M) 和 H (M),如果一致,说明消息未被篡改且确实来自 Alice。
3.4.3. 场景区别
- 加密通信是 "别人锁,你开"
- 数字签名是 "你锁,别人开"