Crypto
1. 常见的加密方式
-
不可逆
- 单项散列函数:MD5、SHA 等
-
可逆
- 对称加密:DES、3DES、AES 等
- 非对称加密:RSA 等
-
单项散列函数(也被称为:消息摘要、哈希函数)
-
可以根据消息内容计算出散列值
-
散列值的长度与消息长度无关,无论消息是 1bit、10m、100G,单项散列函数都会计算出固定长度的散列值
-
根据任意长度,计算出固定长度的散列值
-
计算速度快
-
消息不通,散列值不通
-
输出的散列值也被称为:消息摘要,指纹
-
常见的几种单项散列函数
-
md4、md5
- 产生128bit的散列值,MD 就是 Message Digest (消息摘要)的缩写,目前已经不安全
-
SHA-1
产生 160bit 的散列值,目前已经不安全
-
SHA-2
SHA-256、SHA-384、SHA-512,散列值长度分别是 256、384、512 bit
-
SHA-3 全新标准
-
-
应用场景
- 通过单项散列函数,将文件生成一个散列值,如果散列值相等就说明文件内容没有变化。比如下载一个软件时,会有一个 md5 文件,可以将下载的软件生成 md5,然后对比下载下来的与自己本地生成的,相等则下载的软件是完整的
- 输入密码给服务器时,将密码通过散列函数加密后发给服务器,服务器数据库存的密码也是散列值,服务器通过对比散列值是否相等判断密码是否正确(密码丢失给时,点击忘记密码后,通过验证后直接修改密码,并不能返回旧密码)
-
2. 加解密
将明文加密生成密文,必须通过密钥才能解密,双方协商好使用什么加密算法
2.1 对称加密(Symmetric Cryptograp)
- 概念:加密用的密钥与解密用的密钥是相同的
- 特点:简单、加密速度快
- 常见对称加密算法
- AES
- DES
- 缺点:不安全(密钥配送问题)
- 我把加过密的内容发送给了 A,A 必须要有我使用的密钥才可以,因此必须将密钥也发给 A,此时如果有人窃听,拿到了密文、密钥,就能解密,双方通信的安全得不到保障
- 使用对称加密时,一定会遇到密钥配送问题
- 解决:事先共享,密钥不要走网络
- 非对称加密
2.2 非对称加密(Asymmetric Cryptography)
-
概念:加密与解密用的密钥不同
-
特点:安全
-
缺点:复杂、加解密速度慢
-
密钥
-
公钥:加密密钥,网络传播给消息发送者
-
私钥:解密密钥,将消息发送者通过公钥加密过的消息解密为明文,不可在网络上传播
-
公钥与私钥是一一对应的,不能单独生成
-
由公钥加密的密文,必须使用该公钥对应的私钥才能解密
-
2.3 混合密码系统
- 概念:将对称加密与非对称加密的优势相结合的方法
- 优点:解决了非对称加密速度慢,对称加密的密钥配送问题
- 加密策略
- 为本次通信生成一个对称加密的密钥,将明文进行非对称加密,然后将对称加密的密钥进行非对称加密(对称加密的密钥所占字节远小于明文),然后将加密后的密钥与密文结合在一起发送给对方
- 拿到两部分合在一起的密文后,使用私钥解开使用公钥加密的对称加密的密钥,得到密钥后,通过密钥解开密文
3. 数字签名
-
解决社么问题?
- A 给 B 发消息,A 发的内容可能被篡改、或者有人伪装成 A 发消息、或者就是 A 发的,但是 A 不承认
- 如何确定这段消息的真实性?如何识别篡改、伪装、否认?
-
解决方案
- 数字签名
-
应用场景:
- 不是为了保证机密性,是为了能够识别内容有没有被篡改
-
数字签名技术中,有两种行为
- 生成签名(消息发送者完成,对消息散列值进行签名)
- 验证签名(消息接收者完成)
-
发送方将文件通过 单项散列函数 得到一份 128 bit 的摘要,这份摘要相当于该文件的 ”指纹“,能够唯一地识别文件。(只要文件发生改动,经过单项散列函数处理后得到地摘要都会不一样,所以,文件和文件的摘要具有很强的对应关系)
-
然后发送方使用自己的私钥将单项散列函数生成的摘要进行加密,得到一份加密摘要
-
然后发送方将文件、加密的摘要发送给接收方
-
接收方接收后,使用发送方的公钥,将加密的摘要解开,得到 128 bit 的摘要,然后将文件进行单项散列函数,得到摘要,然后与解密出来的摘要进行对比,相等则文件完整。不相等,接收到的文件或者加密的摘要可能被篡改。
-
报文鉴别:消息接收者可以使用收到的公钥对加密的摘要进行解密,从而核实消息发送者对文件的签名
-
报文的完整性:消息接收者通过对比摘要判断消息是否完整
-
消息发送人不可否认:只有发送者拥有私钥,并能使用私钥产生 ”加密的摘要“,这样发送者就不能否认自己发送的消息
4. 证书(Certificate)
只要涉及到将公钥分享出去,就避免不了中间人攻击。
- 解决的问题:通过证书的方式,让消息发送者确定了公钥确实是消息接收者的
- 消息接收者将公钥发给权威机构(CA),CA 将公钥进行签名,然后将签名、接收者公钥等信息打包成证书发给消息发送者
- 消息发送者通过 CA 公钥解开签名得到公钥,然后将该公钥与证书中的公钥进行比较,相等证明该公钥确实是接收方的公钥