密码学的目标:
机密性、完整性、身份认证和不可否认性。
- 机密性:确保数据在存储或传输中保持秘密状态
- 完整性:保证数据在传输中不被篡改
- 身份认证:对声明的系统用户进行身份验证
- 不可否认性:为接收者提供了担保,保证消息确实来自发送者而不是来自伪装者。
现代密码学基础知识:
1. 对称密钥算法
加密和解密使用相同的密钥,密钥需要事先分发给所有参与通信的成员。当密钥长度足够长时,破解比较困难。缺点如下:
- 需要解决密钥分发问题。需要事先采用安全的方式共享加密密钥。
- 未解决不可否认性。任意拥有密钥的人都可以加密,无法分辨加密消息来自于谁。
- 密钥需要经常更新。每当有成员离开用户组时,所有涉及这个成员的密钥都需要更新。
DES算法:美国政府1977年公布,DES是一个64位的分组密码,实际使用的密钥长度为56位。
3DES算法:由于现代密码分析技术和超级计算能力提升,DES算法已经不在安全。DES的修改版本三重数据加密算法3DES能够使用相同的算法实现更安全的加密。
AES算法:2000年10月,美国国家标准和技术协会NIST宣布Rijndael分组密码替换DES成为新的加密算法标准。AES密码准许使用三种密钥长度:128位,192位,256位。
常见的对称密码算法
算法 | 分组大小(位) | 密钥大小(位) |
DES | 64 | 56 |
3DES | 64 | 112或168 |
AES | 128 | 128、192、256 |
Rijndael | 可变 | 128、192、256 |
Twofish | 128 | 1-256 |
Blowfish(通常在SSH中使用) | 64 | 32-448 |
IDEA | 64 | 128 |
2. 非对称密钥算法
非对称密钥算法也叫公钥算法,有效的解决了对称密钥算法的很多痛点。在这个系统中,每个用户都有两个密钥,一个在所有用户间共享的公钥,一个是只有用户自己知道的私钥。
三种非对称密码算法的密钥长度
密码算法 | 密钥长度 |
RSA | 1088 |
DSA | 1024 |
ECC | 160 |
3. 散列函数
散列函数具有一个非常简单的用途,就是它们接收一个可能很长的消息,然后根据消息内容生成唯一的输出值,以此来确保消息是否被篡改。
散列算法记忆表
算法名称 | 哈希值的长度(位) |
HAVAL一种MD5变种 | 128、160、192、224、256 |
HMAC | 可变 |
MD2 | 128 |
MD4 | 128 |
MD5 | 128 |
SHA-1 | 160 |
SHA-224 | 224 |
SHA-256 | 256 |
SHA-384 | 384 |
SHA-512 | 512 |
4. 数字签名
数字签名的应用有两个明显的作用:
- 向接收方保证:消息确实来自声明的发送者,并且实施了不可否认性
- 向接收方保证:消息在发送方和接收方之间进行传输过程中不会被改变。
签名过程
验签过程
5. 公钥基础设施(PKI)
公钥基础设施PKI使得原本互不相识的双方间通信变得更加容易。由可信证书颁发机构CA签发证书来对用户的公钥做身份证明。
数字证书为通信双方提供了保证,保证正在通信的人确实具有他们所宣称的身份。数字证书本质上是个人公钥的认可副本。当用户验证证书确实是由可信证书颁发机构(CA)发布时,他们就相信这个公钥是合法的。数字证书X.509国际标准包含以下数据:
- 序列号(来自证书建立者)
- 签名算法标识符
- 发布者姓名(发布证书的证书授权机构的身份标识)
- 有效期
- 主体的名字
- 主体的公钥