密码学基础知识
一、密码学基础体系
现代密码学主要分为:
1 | 密码学 |
二、对称加密(Symmetric Encryption)
核心思想
加密和解密使用同一把钥匙。
1 | 明文 |
例如:
1 | 原文: |
生活例子
你和朋友约定:
1 | 所有信息都用一本密码本编码 |
双方都持有同一本密码本。
发送:
1 | 今晚吃火锅 |
编码后:
1 | X9A3D8 |
别人拿到看不懂。
朋友拿着同样密码本:
1 | X9A3D8 |
优点
速度极快。
例如:
AES
每秒可处理:
1 | GB级数据 |
因此:
1 | 数据库加密 |
最终都是 AES 在干活。
缺点
密钥交换困难。
例如:
1 | A ←→ B |
第一次通信时:
1 | 怎么把AES密钥发过去? |
如果:
1 | 微信发 |
攻击者截获:
1 | 密钥泄露 |
整个加密失效。
三、非对称加密(Asymmetric Encryption)
解决:
1 | 密钥交换问题 |
核心思想
两把钥匙:
1 | 公钥(Public Key) |
特性
公钥加密
只能私钥解密
1 | 公钥 → 加密 |
例如:
服务器:
1 | 公钥: |
用户拿到:
1 | PK |
发送:
1 | hello |
变成:
1 | Encrypt(PK,hello) |
只有服务器私钥:
1 | SK |
才能解开。
为什么安全
因为:
1 | PK 推不出 SK |
数学上极其困难。
四、RSA原理
最经典的非对称加密算法。
由:
Ron Rivest、
Adi Shamir、
Leonard Adleman
提出。
核心基于:
1 | 大整数分解难题 |
例如:
1 | 17 × 19 = 323 |
容易。
但是:
1 | 323 = ? |
要反推质因数。
数字足够大:
1 | 2048 bit |
目前几乎不可行。
五、哈希算法(Hash)
哈希不是加密。
很多人误解这一点。
例如:
1 | hello |
经过 SHA256:
1 | 2cf24dba... |
特点:
1 不可逆
1 | hello |
不能反推。
2 固定长度
无论:
1 | 1个字节 |
输出长度固定。
3 雪崩效应
1 | hello |
与
1 | Hello |
只差一个字符。
结果完全不同。
常见算法:
- MD5(已不安全)
- SHA1(已不安全)
- SHA256
- SHA512
六、数字签名
很多人理解反了。
签名不是加密。
签名是证明:
1 | 真的是我发的 |
原理
反过来使用非对称加密。
1 | 私钥签名 |
例如:
服务器拥有:
1 | SK |
消息:
1 | hello |
先计算哈希:
1 | hash(hello) |
然后:
1 | Sign(SK,ABC123) |
得到签名:
1 | XYZ999 |
发送:
1 | hello |
客户端:
1 | hash(hello) |
然后:
1 | Verify(PK,XYZ999) |
验证成功。
说明:
1 | 消息没被修改 |