参考 https://blog.youkuaiyun.com/liao20081228/article/details/77159039
参考 《深入浅出HTTPS》
未完待续…
通信以明文传输有以下问题
- 数据被截取->加密
- 数据被篡改->信息校验码
- 数据被伪造->数字签名
对称加密
核心理论:同一密钥对明文异或后,再对得到的密文异或就可得到明文
显著特点
* 加解密使用同一个密钥
* 加解密过程完全相同
优点
* 加解密的高速度和使用长密钥的难破解性
缺点
* 多用户需要多密钥,管理不便
分类
1. 分组加密
* DES
https://blog.youkuaiyun.com/luckydog612/article/details/80547781
DES使用的密钥长度为64比特, 但由于每隔7个比特设置一个奇偶校验位, 因此其密钥长度实际为56比特
11111111和00000000效果一样
+ 长度 56/8
* 3DES
3DES的加密过程为密钥1加密->密钥2解密->密钥3加密
3DES的解密过程为密钥3解密->密钥2加密->密钥1解密
+长度 128/8(双倍长密钥,go加密需要填充前8byte到结尾) 192/8(三倍密钥长)
* AES<http://www.cnblogs.com/happyhippy/archive/2006/12/23/601353.html>
+ 长度 128/8 192/8 256/8
* 其他
2. 流加密
* RC4
* 其他
3. 迭代模式
- ECB, Electronic CodeBook mode, 电子密码模式, 不推荐使用
在ECB模式中,将明文分组加密之后的结果直接成为密文分组。
- CBC, Cipher Block Chaining mode, 密码分组链接模式, 推荐使用
加入初始化向量IV, IV长度是分组长度, 加密过程如下
IV2 = plainText1 XOR IV XOR KEY
IV3 = plainText2 XOR IV2 XOR KEY
- CFB, Cipher FeedBack mode, 密文反馈模式, 不推荐使用
- OFB, Output FeedBack mode, 输出反馈模式, 不推荐使用
- CTR, CounTeR mode, 计数器模式, 推荐使用
加入计数器Nonce, Nonce与IV等同理解, 加密过程如下
Nonce XOR KEY XOR plainText1, (Nonce+1) XOR KEY XOR plainText2, ...
- GCM, Galois/Counter Mode, G就是指GMAC, C就是指CTR, 推荐使用
https://blog.youkuaiyun.com/andylau00j/article/details/79269303
man 3 EVP_EncryptInit
以下几个可以设置
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, taglen, tag);
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, taglen, tag);
4. 填充模式padding
当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充
- PKCS#5
- PKCS#7
根据填充的字节数量进行对应的填充
非对称加密
特点
- 加密密钥和解密密钥不同
- 密钥对中的一个密钥(公钥)可以公开
- 根据公开密钥很难推算出私人密钥
常用算法
- RSA
- 可用于数字签名和密钥交换
- DH
- 用于密钥交换
- DSA
- 用于数字签名
随机数
要求: 效率高, 随机性, 不可预测性, 不可重现性
/dev/urandom
/dev/random
Hash算法
- MD5 有点不安全
- SHA
- SHA-1: SHA-1 不安全
- SHA-2: SHA-256、SHA-512、SHA-224、SHA-384
- SHA-3: SHA3-256、SHA3-512、SHA3-224、SHA3-384
消息验证码
- CBC-MAC
- HMAC(常用)
数字签名
签名算法建议对消息摘要进行签名,因为摘要值的长度是固定的,运算的时候速度会比较快。