密码学笔记
1.加密三要素
- 密钥,密文,加密算法
PS:对称加密,非对称加密
- 对称加密
- 特点:简单,效率高,加密强度低,加密和解密的密钥是相同的
- 使用场景:应用于大文件,大数据加密
- 缺点:密钥分发困难
- 非对称加密
- 特点:效率低,加密强度高,密钥对,对应公钥加密,对应的私钥解密
- 使用场景:针对少量数据。(消息认证,签名)
- 公钥:可以公开获取
- 私钥:私密保存,越少人知道越好
- 优点:密钥分发容易
- 缺点:无法快速处理大数据
2.最早的加密方式————>凯撒密码——>将明文按照一定的字数进行“平移”的方式加密
3.密码信息安全常识:
- 不要使用保密的密码算法
- 使用低强度的密码比不进行任何加密更加危险
- 任何密码终有一天会被破解
- 密码只是信息安全的一部分
4.DES加密——对称加密(不安全)
- DES的密钥长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实质上其密钥长度是56 比特。
- 加密和解密的密钥是相同的
- 分组长度:8byte=64bit
5.3DES——三重DES加密(安全)
- 将DES重复三次所得到的一种密码算法
- 每一次加密的密钥都不相同,一共三个不同密钥
- 同时兼容DES,只要三个密钥都相同,就是普通的DES
6.AES加密——对称加密(更安全)
- 在AES中,密钥长度只有128,192(24byte),256bit三种,go语言中只支持16byte
- 分组密码模式,最后一个分组,采用缺几补几的方式填充。对于刚好整除的,补分组数据长度(16byte)
- 按位 异或 加密 (XOR)
7.分组密码模式(5种)
- EBC
- 特点:简单,效率高,密文有规律,容易破解
- 最后一组明文分组要填充
- DES,3DES(8byte)
- ADE(16byte)
- 不需要初始化向量
- CBC (重点)
- 特点:效率略低,密文无规律,不容易破解,推荐使用
- 最后一组明文必须填充
- 需要初始化向量
- 初始化向量长度==分组数据长度
- 加密解密使用的是同一个初始化向量
- 加密者提供初始化向量
- CFB
- 特点:密文无规律,将初始化向量借助密钥加密,生成一个密钥流(数据流), 用明文分组与密钥流异或得到密文
- 最后一个明文分组,不需要填充
- 需要初始化向量
- 初始化向量长度==分组数据长度
- 加密解密使用的是同一个初始化向量
- 加密者 提供 初始化向量
- OFB (了解)
- 逐层加密初始化向量,而CFB是将上一级的密文当作本层的初始化向量
- 其他内容跟CFB一致,直接看图
-
- **CTR(重点)**推荐使用
- 特点:密文无规律,将 计数器+随机数 借助密钥加密,生成一个密钥流(数据流), 用明文分组与密钥流异或得到密文
- 最后一个明文分组 不需要填充。
- 不需要初始化向量
- Go语言中 IV 不是初始化向量,对应一个 随机数种子。 大小 == 分组数据长度。
- 总结:
- 最后一个明文分组的填充
- ECB、CBC分组密码模式需要填充
- CFB、OFB、CTR分组密码模式 不需要填充
- 初始化向量 - IV — 一个数组 (切片)
- ECB、CTR 分组密码模式 不需要
- CFB、OFB、CBC 分组密码模式 需要
- 数据长度:== 分组长度。(受加密算法影响)
- des、3des --> 8byte = 64bit
- AES --> 16byte = 128bit
- 数据长度:== 分组长度。(受加密算法影响)
- 最后一个明文分组的填充