对称密码(Symmetric Encryption)
- 分组密码:AES、DES/3DES
模式:- ECB模式(Electronic CodeBook mode),电子密码本模式
- CBC模式(Cipher Block Chaining mode),密码分组链接模式
- CFB模式(Cipher FeedBack mode),密文反馈模式
- OFB模式(Output FeedBack mode),输出反馈模式
- CTR模式(CounteR mode),计数器模式
- 流密码:RC4、ChaCha20
非对称密码(Asymmetric Encryption),又称公钥密码
- 公钥加密,私钥解密
- 公钥公开,私钥自己持有,且不能泄露
- RSA、ECC
消息认证码(Message Authentication Code,MAC)
- 发送者Alice与接收者Bob事先共享密钥
- 发送者Alice根据请求消息计算MAC值(使用共享密钥)
- 发送者Alice将请求消息和MAC值两者发送给接收者Bob
- 接收者Bob根据接收到的请求消息计算MAC值(使用共享密钥)
- 接收者Bob将自己计算的MAC值与从Alice处收到的MAC值进行对比。如果一致,则证明此消息来自Alice,否则此消息不是来自Alice
单向散列函数
- MD5、SHA1
数字签名
-
算法:RSA,ElGamal,DSA,ECDSA,Rabin
-
签名:私钥加密
-
签名验签:公钥解密
-
认证机构(Certification Authority,CA)
-
注册机构(Registration Authority,RA)
-
公钥基础设施(Public Key Infrastructure, PKI)
直接对消息签名
- Alice用自己的私钥对消息进行加密
- Alice将消息和签名发送给Bob
- Bob用Alice的公钥对收到的签名进行解密
- Bob将签名解密后得到的消息与Alice直接发送的消息进行对比
对消息的散列值签名
- Alice用单向散列函数计算消息的散列值
- Alice用自己的私钥对散列值进行加密
- Alice将消息和签名发送给Bob
- Bob用Alice的公钥对收到的签名进行解密
- Bob将签名解密后得到的散列值与Alice直接发送的消息的散列值进行对比
证书
-
签发证书:1. 根CA使用自己的私钥给自己的公钥签名包装成证书 2. 根CA用自己的私钥给二级CA的公钥签名包装成证书 3. 二级CA用自己的私钥给终端的公钥签名包装成证书
-
证书验签:1. 从根CA证书中获取公钥验签根CA证书 2. 从根CA证书中获取公钥验签二级CA证书 3. 从二级CA证书中获取公钥验签终端证书
-
基于口令的密码(Password Based Encryption,PBE)
-
初始化向量(Initialization Vector,IV)
-
密钥分配中心(Key Distribution Center,KDC)
-
椭圆曲线密码(Elliptic Curve Cryptography,ECC)
-
密钥加密密钥(Key Encrypting Key,KEK)
-
内容加密密钥(Contents Encrypting Key,CEK)
密钥配送方式
- 非对称密码
- DH密钥协商
- 预共享密钥(PSK)
- 硬件介质配送
- 密钥分发中心(KDC)/证书授权中心(CA)
- 量子密钥分发(QKD)
四种攻击方式
- 唯密文攻击(Ciphertext-Only Attack, COA)
- 已知明文攻击(Known-Plaintext Attack, KPA)
- 选择明文攻击(Chosen-Plaintext Attack, CPA)
- 选择密文攻击(Chosen-Ciphertext Attack, CCA)
密码系统五要素
- 明文
- 密文
- 加密算法(公开)
- 解密算法(公开)
- 密钥(保密)
密码学工具箱6个工具
- 对称密码
- 非对称密码
- 单向散列函数
- 消息认证码
- 数字签名
- 伪随机数生成器
密码安全四大属性
- 机密性:确保信息仅被授权主体访问,未授权者无法获取或解读。对称密码和非对称密码实现
- 完整性:确保信息在存储、传输、使用过程中未被未授权篡改、伪造或破坏,保持原始状态。单向散列函数、消息认证码和数字签名实现
- 认证:验证实体(人、设备、系统)或信息来源的真实性,确认对方是其所声称的身份。消息认证码和数字签名实现
- 不可否认性:确保操作主体(人、系统)无法事后否认其已执行的操作(如发送消息、签署文件、发起交易)。数字签名实现
基于口令的密码(Password Based Encryption,PBE)
加密
- 使用盐和口令生成KEK
- 生成会话密钥并加密数据
- 使用KEK加密会话密钥
- 存储盐、加密会话密钥和加密数据
解密
- 使用盐和口令重建KEK
- 使用KEK解密会话密钥
- 使用会话密钥解密数据
| 对比项 | 对称密码 | 非对称密码 |
|---|---|---|
| 发送者 | 用共享密钥加密 | 用公钥加密 |
| 接收者 | 用共享密钥加密 | 用私钥解密 |
| 密钥配送问题 | 存在 | 不存在,但公钥需要另外认证 |
| 机密性 | 保证 | 保证 |
| 对比项 | 消息认证码 | 数字签名 |
|---|---|---|
| 发送者 | 用共享密钥计算MAC值 | 用私钥生成签名 |
| 接收者 | 用共享密钥计算MAC值 | 用公钥验证签名 |
| 密钥配送问题 | 存在 | 不存在,但公钥需要另外认证 |
| 完整性 | 保证 | 保证 |
| 认证 | 保证(仅限通信对象双方) | 保证(可适用于任何第三方) |
| 不可否认 | 不保证 | 保证 |