1 安全知识

四个代表性问题:

  • 窃听:传输数据有可能被第三方窃取
  • 欺骗:有可能伪装成接收者或者发送者
  • 伪造:传输数据有可能被第三方重写或者某种原因损坏
  • 否认:不承认是自己发送的数据

解决方案

问题 解决方案
窃听 加密
欺骗 消息认证码 或者 数字签名
窃听 消息认证码 或者 数字签名
窃听 数字签名

2 加密基础知识

加密技术:将信息加密后发送给接收者,接收后再解密的过程。

加密就是用密钥来做数值计算,将数据转化为不能读取的东西。

密钥也是一串数值。

解密则通过密钥的数值将密文计算还原为原始数据。

异或逻辑(XOR):相同为0,不同为1,与二进制加法一样,也称为不进位加法。

异或逻辑的好处是可以还原数据,比如:

  1. 原始数据=1001
  2. 密钥=0010
  3. 加密:
  4. 1001 XOR 0010 = 1011
  5. 解密:
  6. 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字节),而密钥长度有128192256三种。

5 公开密钥加密

非对称加密。密钥是一对,一个叫公钥一个叫私钥。公钥是公开的,私钥要保护好。

我们可以用公钥加密、私钥解密也可以用私钥加密、公钥解密。

与公有密钥加密相比,公开密钥加密解密需要更多时间。因此不适合使用大数据。可以使用混合加密。

公开密钥可靠性不是特别好。可以使用数字证书。

5.1 RSA

RSA是非对称加密中最广泛的算法。

加密过程:

加密算法 - 图1

释义:明文的E次方对N取余。

其中 EN 是 通过加密密钥算出来的,具体怎么算估计很复杂。

解密过程:

加密算法 - 图2

释义:密文的D次方对N取余。

其中 DN 是通过解密密钥算出来的。

RSA的具体密钥算法可以参考 :

RSA算法原理一

RSA算法原理二

6 混合加密

混合加密是用于SSL上不可或缺的加密方法。

用于解决公开加密解密时间太长的问题。

原理:使用公开加密方法传送共有密钥,然后用共有密钥加密解密。

  1. A方有共有密钥
  2. B方给A方公钥
  3. A用公钥加密共有密钥,发送给B
  4. B方使用密钥解密共有密钥
  5. 这样A方B方可以使用共有加密方法

7 迪菲-赫尔曼密钥交换

是一种在双方之间安全交换密钥的方法。

总之很安全。

8 讯息鉴别码

讯息鉴别码是实现 认证伪造检测 两种功能的系统。

  1. A方和B方通过公开密钥加密 或者 迪菲-赫尔曼密钥交换 发送共有加密密钥和一个用于创建讯息鉴别码的密钥;
  2. A使用已经加密的密文以及讯息鉴别码密钥创造一个值(MAC),类似哈希值,我们称之为 HMAC 方法;
  3. B收到密文和MAC值,同样使用讯息鉴别码密钥创造MAC值,与收到的比较后得到是否被伪造的结果;
  4. 如果没有被伪造则解密消息。

缺点:发送方A可以否认自己发送了消息,因为无法区分到底是谁制造了该消息。

解决该问题的方式是使用 数字签名

9 数字签名

数字签名类似于将 公开密钥加密 倒过来。

  1. 发送方A准备公钥和密钥,将公钥传给B;
  2. A加密信息的哈希值作为签名;
  3. A将信息和签名发给B;
  4. B使用公钥解密签名获取哈希值,与信息的哈希值比较,如果相同则表示信息由A发出。

缺点:不知道公钥属于谁,有可能是A,也有可能是冒充A的人。

解决方法:数字证书。

10 数字证书

数字证书 是通过认证机构保证公钥创建者的社会性机制。

认证机构是管理数字证书的组织。理论上任何人都可以成为这样的组织,而且数量很多,因此,使用政府或者大公司作为认证机构比较安全。

认证机构有自己准备的公钥PC和私钥SC。

  1. A有公钥PA和私钥PS
  2. A向认证机构发送自己的个人信息,包括公钥PA以及电子邮件;
  3. 认证机构使用密钥SC从A发送的信息创建数字签名,和A的信息整合成一个文件,发给A;
  4. 该文件就成了A的数字证书;
  5. A将新数字证书发给B;
  6. B确认信息中的邮件来自A;
  7. B获得认证机构的公开密钥;
  8. 验证签名来自认证机构;
  9. 提取A方的公钥,完成了密钥交付。

认证机构的公钥PC其实也作为数字签名被交付,给认证机构签名的是排名高的认证机构,最高职位的认证机构被称为 根认证机构(root CA),它能自己证明自己,证明自己的证书称为根证书

网站通讯也会使用数字证书,网站从认证机构获取的证书叫 服务器证书,它绑定的是域名。

这就是加密系统。