近期在了解加密安全方面的内容,总结一些关于加密方面的知识。
1、Hashing算法
- Hashing算法将不同长度的输入加密成一样大小的加密串
- 好的Hash算法应当具备一下3点:
- Collision-Resistant: 对于不同的输入应当产生不一样的加密结果,例如:对于x,y,不会得到任何加密算法使得H(x) == H(y)成立
- 对输入串的修改会导致加密结果大不相同
- 单向加密,对于加密结果Z,不可能得到H(x) == Z
- Hash应当具备完整性
使用加密后的结果可以验证输入的正确性
目前存在的Hash算法有:
- MD5
用在90年代Win NT系统的密码加密,不安全 - SHA-1
1995年的NAS加密,不安全 - SHA-2
目前比较安全的加密算法
2、Symmetric Encryption
- 加密双方使用相同的key: k
- Encryption:E(k, M) -> C where:
E 是加密算法
M 是要机密的明文
C 是加密后的密文 - Decryption: D(k, C) -> M
D是解密算法 - 无法得知是谁生成的C
Symmetric Encryption使用场景:
- 值得信任的双发,因为只有他们共享加密、解密时使用的Key
- 性能很快
- 值得注意的是,这种加密不会保护传输的数据不受侵犯
Key Management
Participants | Unique Keys |
---|---|
2 | 1 |
4 | 6 |
10 | 45 |
20 | 190 |
30 | 435 |
100 | 4950 |
如果对于有多个角色加进对称算法中的情况,Key的管理和维护会是一个大问题,如上表所示,2个参与者时需要1个Key,4个就需要6个Key ... 100个的时候就需要4950个key,当有n个参与者时,就需要n(n-1)/2 个key。
对称加密算法应用:RC4, DES, 3DES, AES
3、Asymmetric Encryption
非对称加密算法的特点是Keypair被分成两种Key:
- Public Key, 对所有人可见
- Private Key, 非公开的key
加密原理:
- 一个人用自己的公钥加密一段文字,只有这个人的私钥才能解密该文字
- 这个人不能保证这段加密文字发送到了什么地方
加密流程
- 签名过程:张三用Hash Function对一段文字计算Hash值,然后用自己的私钥对这个Hash值进行签名
- 验证过程:李四用Hash Function对一段文字计算Hash值,然后用张三发来的公钥对上一步中的签名解密,对比解密结果是否和Hash值一样来判断这段文字是否正确