1 安全知识
四个代表性问题:
- 窃听:传输数据有可能被第三方窃取
- 欺骗:有可能伪装成接收者或者发送者
- 伪造:传输数据有可能被第三方重写或者某种原因损坏
- 否认:不承认是自己发送的数据
解决方案
问题 | 解决方案 |
---|---|
窃听 | 加密 |
欺骗 | 消息认证码 或者 数字签名 |
窃听 | 消息认证码 或者 数字签名 |
窃听 | 数字签名 |
2 加密基础知识
加密技术:将信息加密后发送给接收者,接收后再解密的过程。
加密就是用密钥来做数值计算,将数据转化为不能读取的东西。
密钥也是一串数值。
解密则通过密钥的数值将密文计算还原为原始数据。
异或逻辑(XOR)
:相同为0,不同为1,与二进制加法一样,也称为不进位加法。
异或逻辑的好处是可以还原数据,比如:
原始数据=1001
密钥=0010
加密:
1001 XOR 0010 = 1011
解密:
1011 XOR 0010 = 1001
所以使用异或逻辑可以使用相同的密钥加密和解密。
3 哈希函数
哈希函数 是将给定数据转化为固定长度的不规则值的函数。
输出的不规则值称为哈希值。哈希值是一个数字,通常以16进制表示。
哈希函数的特征:
- 哈希值长度不变:取决于函数,比如SHA-1,固定20个字节
- 相同的输入输出也相同
- 相似的数据,输出也很不同
- 输入完全不同的数据,输出相同的哈希值会低概率出现
- 不可能通过哈希值计算出原始数据
- 计算相对简单
哈希算法分类:MD4、MD5、SHA-0、SHA-1、SHA-2
SHA-2最常用
MD5的强抗碰撞性已经被攻破,现在已经可以制造出两条相同MD5值的消息。它已经不安全了。
4 共有密钥加密
双方都使用相同的密钥加密解密数据。也叫对称加密。
存在的问题:
密钥可能在传输过程中被第三方窃取。
解决方案:
- 使用密钥交换协议
- 使用公开密钥加密
4.1 DES
DES是一种将64比特(bit)的明文加密成64比特(bit)密文的对称加密算法。它的密钥长度也是64比特,即8字节。
它将明文按照8字节分组,然后对每组进行位运算(我猜是异或)。
当分组长度不够的时候,填充方式:
- 计算出要填充的字节数,比如x;
- 每个字节填充的值也为x,比如要填充6个字节,每个字节填充的值也为6;
- 解密之后将最后一个字节的值取出,转为整型,即为要删除的字节数。
当分组长度刚好是8的整数倍字节,则在末尾添加一个分组,每个字节的值和当前分组长度相等。
DES加密已经可以在短时间内被暴力破解,所以不推荐使用。
4.2 AES
AES 是取代前任标准(DES)后称为新标准的对称加密算法。AES的分组长度为128位(即16字节),而密钥长度有128、192和256三种。
5 公开密钥加密
即非对称加密。密钥是一对,一个叫公钥一个叫私钥。公钥是公开的,私钥要保护好。
我们可以用公钥加密、私钥解密也可以用私钥加密、公钥解密。
与公有密钥加密相比,公开密钥加密解密需要更多时间。因此不适合使用大数据。可以使用混合加密。
公开密钥可靠性不是特别好。可以使用数字证书。
5.1 RSA
RSA是非对称加密中最广泛的算法。
加密过程:
释义:明文的E次方对N取余。
其中 E
和 N
是 通过加密密钥算出来的,具体怎么算估计很复杂。
解密过程:
释义:密文的D次方对N取余。
其中 D
和 N
是通过解密密钥算出来的。
RSA的具体密钥算法可以参考 :
6 混合加密
混合加密是用于SSL上不可或缺的加密方法。
用于解决公开加密解密时间太长的问题。
原理:使用公开加密方法传送共有密钥,然后用共有密钥加密解密。
- A方有共有密钥
- B方给A方公钥
- A用公钥加密共有密钥,发送给B
- B方使用密钥解密共有密钥
- 这样A方B方可以使用共有加密方法
7 迪菲-赫尔曼密钥交换
是一种在双方之间安全交换密钥的方法。
总之很安全。
8 讯息鉴别码
讯息鉴别码是实现 认证 和 伪造检测 两种功能的系统。
- A方和B方通过公开密钥加密 或者 迪菲-赫尔曼密钥交换 发送共有加密密钥和一个用于创建讯息鉴别码的密钥;
- A使用已经加密的密文以及讯息鉴别码密钥创造一个值(MAC),类似哈希值,我们称之为 HMAC 方法;
- B收到密文和MAC值,同样使用讯息鉴别码密钥创造MAC值,与收到的比较后得到是否被伪造的结果;
- 如果没有被伪造则解密消息。
缺点:发送方A可以否认自己发送了消息,因为无法区分到底是谁制造了该消息。
解决该问题的方式是使用 数字签名。
9 数字签名
数字签名类似于将 公开密钥加密 倒过来。
- 发送方A准备公钥和密钥,将公钥传给B;
- A加密信息的哈希值作为签名;
- A将信息和签名发给B;
- B使用公钥解密签名获取哈希值,与信息的哈希值比较,如果相同则表示信息由A发出。
缺点:不知道公钥属于谁,有可能是A,也有可能是冒充A的人。
解决方法:数字证书。
10 数字证书
数字证书
是通过认证机构保证公钥创建者的社会性机制。
认证机构是管理数字证书的组织。理论上任何人都可以成为这样的组织,而且数量很多,因此,使用政府或者大公司作为认证机构比较安全。
认证机构有自己准备的公钥PC和私钥SC。
- A有公钥PA和私钥PS
- A向认证机构发送自己的个人信息,包括公钥PA以及电子邮件;
- 认证机构使用密钥SC从A发送的信息创建数字签名,和A的信息整合成一个文件,发给A;
- 该文件就成了A的数字证书;
- A将新数字证书发给B;
- B确认信息中的邮件来自A;
- B获得认证机构的公开密钥;
- 验证签名来自认证机构;
- 提取A方的公钥,完成了密钥交付。
认证机构的公钥PC其实也作为数字签名被交付,给认证机构签名的是排名高的认证机构,最高职位的认证机构被称为 根认证机构(root CA)
,它能自己证明自己,证明自己的证书称为根证书
。
网站通讯也会使用数字证书,网站从认证机构获取的证书叫 服务器证书
,它绑定的是域名。
这就是加密系统。