密码学六元组
- - 明文
- - 密文
- - 加密算法
- - 解密算法
- - 加密秘钥
- - 解密秘钥
其中加密算法和解密算法一般都是公开的,只有公开的算法才能被验证是安全的。不要试图开发自己的保密加密算法,一旦算法泄露,加密体系就崩溃了。所以加密时要选用公开的算法。
机密性完全依赖于秘钥的安全性,秘钥泄露了,就无安全可言了,密文可以被截获,加解密算法都是公开的,对于破译者来说,算法不是秘密,关键是拿到密码本。
加密算法的分类
- 对称加密(传统加密算法) -- 加解密秘钥相同
- 非对称加密(公钥加密算法)--加解密秘钥不同
JAVA
JDK对密码学算法的支持基本都位于下面两个包中- -- javax.security
- -- javax.crypto
对称加密算法
- DES (Data Encryption Standard)
- 3DES (Triple DES)
- AES (Advanced Encryption Standard)
对称算法特点
- 加解密过程是互逆的
- 加减密算法使用置换和移位
algorithm | key length | security | speed |
DES | 56 | 可被穷举破解 | 快 |
3DES | 112或168 | 较高 | 慢 |
AES | 128、192、256 | 暂时还未被破解 | 快 |
安全性是相对而言的,随着计算机性能的提升和云计算的发展,安全算法的破解也会成为可能
AES
秘钥长度:128、192、256 (JDK默认只能使用128,如需使用更长的秘钥,需要从Oracle官网下载对应扩展包)
对称加密的最新标准
安全性高(暂时没有被破解)、加密效率高
推荐使用
AES扩展包
非对称加密算法(公钥加密算法)
常用算法- RSA
- DH
- EIGamal
公钥密码体系
每个人都有两个秘钥:PublicKey,PrivateKey
公钥公开给别人用,私钥自己保管好不可泄露
用途
通信加密:公钥加密,私钥解密
数字签名:私钥加密,公钥解密
通信模型
为什么需要公钥密码体系
在互联网环境下,对称秘钥的配送需要安全保证
非对称密钥还可以做数字签名
优缺点
优点:解决了秘钥配送的安全问题
缺点:运算复杂,加密效率低
RSA算法
- 由MIT的3位学者提出,取每个人姓氏的第一个字母为算法命名
- 秘钥长度:512-65536(JDK默认是1024)
- 算法的本质:两个大素数的乘积分解问题
- 目前是不可破解的
DH算法
- DH是一种秘钥交换算法
- 用于通信双方生成相同的对称密码
两类算法的关系
相互补充,而不是后者取代前者
algorithm | key exchange | encryption speed |
AES | 不安全 | 快 |
RSA | 安全 | 慢 |
使用非对称算法来交换秘钥(甲乙双方产生相同对称秘钥)
使用对称算法加密数据
二者结合使用即安全又高效 比如:HTTPS