一、数字加密的概念

1.1 加密概念

数据加密技术是指一条消息通过加密密钥和加密函数转换成无意义的密文,接收者通过解密函数和解密密钥将密文还原成明文。这样,我们就可以保护数据不被非法窃取和读取。提高计算机安全水平的基础是掌握数据加密的本质,数据加密由明文(未加密报文)、密文(加密报文)、加解密设备或算法、加解密密钥四部分组成。加密方法有很多种,但主要有对称加密算法、非对称加密算法和不可逆加密算法。密钥加密有两种类型:分组和序列。

1.2 硬件加密

  • 链路加密:对网络中的指定传输链路实施加密。
  • 节点加密:在链路加密的基础上对传输的数据在节点的安全模块进行加密,解密也是在节点的安全模块内对数据进行解密。
  • 端对端加密:从源数据节点到目标节点数据始终采用加密的方式传输,数据在到达目标节点之前不以明文的方式出现。

1.3 异或运算

  • 概念:异或是一个数学运算符,应用与逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。
  • 运算公式:
  • 运算法则:

    • 归零律:a ⊕ a = 0
    • 恒等律:a ⊕ 0 = a
    • 交换律:a ⊕ b = b ⊕ a
    • 结合律:a ⊕ b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c
    • 自反:a ⊕ b ⊕ a = b
  • 应用场景:

    • 位反转:0异或任何数,其结果等于任何数。1异或任何数,其结果等于任何数取反。
    • 值替换场景:利用交换律实现两个变量的值替换不需要引入中间变量。
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    • 加密场景:通过明文和密钥的异或加密,通过密钥和密文的异或进行解密。

二、哈希(摘要)算法

2.1 哈希算法的概念

哈希算法、散列算法和摘要算法指的都是一个东西,是指根据目标文本生成具有固定长度的、不可逆的杂凑字符串(或叫做消息摘要)。

而加密是将目标文本转换成具有不同长度的、可逆的密文。Hash 算法严格上来说并不属于加密算法,一般都叫摘要算法或者签名算法。

哈希算法的与算法的最大区别是不可逆,这里的不可逆既指不能根据转换后的结果逆转回原文,也指对于两个输入,即使其转换结果相同也不能说这两个输入就一定相同。因为,Hash 算法的定义域是一个无限集合,但是值域确是一个有限集合,将一个无限集合映射到有限集合上,每个哈希结果都存在无数个可能的目标文本,因此哈希是一个多对一的映射,所以它也不存在逆映射。但是对于加密算法,它的结果往往取决于输入,其定义域和值域都是无限集合,明显是一个一一映射,对于一一映射,理论上都是可逆的。

哈希算法的特点是,不同的内容有可能生成一样的Hash Code,这里引入评价一个哈希算法的重要指标:碰撞率。常见的 Hash 算法有:MD5、SHA-1、HMAC、SHA-256 等。MD5的密钥长度是32个字符128个二进制位,所以MD5的碰撞率是1/2^128

哈希算法的特点包含:

  • 算法的输出长度固定:散列函数可以接受任意长度的数据输入,但是输出的数据长度固定。
  • 雪崩效应:原始输入数据的改动,得到的输出会有非常大的变化。
  • 单向性:只能通过输入计算出hash code输出,但是不能从hash code得到原始数据。
  • 唯一性:因为目前流行的hash算法的碰撞率都极小,所以认为针对任何输出,输入都具有唯一性。

2.2 常用哈希算法的实现流程

MD5

  • 填充:如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余结果等于448。填充的方法是填充一个1和n个0。填充完成后,信息的长度为N*512+448
  • 记录信息长度:用64位内存来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N512 + 448 + 64 = (N+1)512
  • 装入四个幻数:准备四个整数常量A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L
  • 循环运算:将数据分为512一组,,再将一组中的512位分为16个int32_,分组执行数据处理函数,循环执行处理函数…每一轮运算后加上上面的四幻数,依次循环加完所有的组数,最终得到的ABCD就是MD5的输出结果。

2.3 哈希算法的应用场景

  • 文件传输
    在文件传输时,哈希算法的目的是为了保证文件的唯一性。比如在下载软件时,一般会单独提供该软件文件的md5的摘要或者sha摘要,文件下载完成后计算md5与软件提供方提供的md5进行对比,如果不一致则认为该软件文件已经被篡改。
  • 消息摘要
    当用户使用用户名密码登录网站时,网站服务器的数据库只针对用户密码的hash值进行保存,避免了密码明文在网络传输。网站验证密码时只对用户输入的密码签名和数据库中的签名进行比对。
  • 键值对应
    在对数据进行管理时,如果需要查找数据可以根据数据的hash值进行查找,数据的hash值和原始数据组成键值对,在数据的删改查过程中提高效率。

2.4 哈希算法对比

哈希算法对比.png

三、加密算法

3.1 按照加密密钥特点划分

3.1.1 分组加密

先将明文填充为小组个数的整数倍,再将明文分组,按照小组加密后混合小组的内容生成密文。常见的加密模式有下面几种

1、ECB:电子密码本格式,是指将明文组块独立加密后将加密结果直接作为密文分组。
ECB加解密.png
ECB模型.png
2、CBC:密文分组链接模式,将将每个明文分组与前一个密文分组进行异或运算再进行加密。第一个明文分组前面没有密文分组,需要IV
CBC加解密.png
CBC模型.png
3、CFB:密文反馈模式,将每一组的密文组作为密码算法的输入端产生新的密钥流,再将生成的密钥加密下一个明文。需要IV
CFB加解密.png
CFB模型.png
4、OFB:输出反馈模式,将密码加密算法的输出和明文进行异或生成密文分组
OFB加解密.png
OFB模型.png
5、CTR:计数器模式,CTR与CFB和OFB一样,本质上都是将分组加密和序列加密结合得到密文分组
CTR加解密.png
CTR模型.png

3.1.2 分组加密

根据密钥种子和S盒生成密钥,再将密钥和明文进行异或运算生成密文。解密端通过密钥种子和S盒生成密钥,再通过密钥和密文异或操作生成明文。

3.2 按照加解密的统一性划分

3.2.1 对称加密算法

加密过程和解密过程使用同一个密钥,则称为对称加密
对称加密模型.png
1、对称加密的应用场景
  • 无线数据的安全传递:蓝牙、网络数据传输的过程中数据可能被抓包捕获,为了数据的安全性采用两端协商后的加密算法将数据以密文的形式传输,保证数据的安全性。
  • 数据的安全存储:数据以明文的方式存储在数据库中可以被数据库后台看到或者数据库可能被非法侵入访问,但是采用加密的方式存储数据,客户端读写数据时再解密,可以保证数据在数据库端被访问时的安全性。

2、常用对称加密算法

  • AES

    • 分组密码:将明文分成一段一段来分组加密生成密文,最后再将密文拼接生成密文
    • padding:分组的过程中最后一组长度可能不够,在后面填充数据补齐。常用填充方式有:

      • PKCS5:末尾缺少n个字节就在末尾补上n个n
      • PKCS7:末尾缺少n个字节,就在末尾补上多少个0
      • NoPadding:不需要填充,就是明文需要自己保证数据可以是被分组的个数整除的
    • 初始化向量IV:初始化IV使更加可靠,除了ECB和CTR两种加密模式,其他的加密模式需要IV来加密第一组明文
    • 加密模式:AES支持四种加密模式:ECB、CBC、CFB、OFB
    • 密钥加法:明文和密钥进行异或得到运算结果
    • 字节代换:通过明文和S_box找到对应的值进行替换

    S盒.png

    • 行移位:将矩阵数据按行移位,第0行移动0位,….第n行移动n位
    • 列混合:将生成的矩阵与一个常矩阵进行相乘

3、常用对称算法对比
对称加密对比.png

3.2.2 非对称加密算法

加密过程和解密过程使用的不是同一个密钥,则称为非对称加密。密钥是以一个秘钥和一个公钥对的形式出现的,使用私钥加密的内容只能公钥进行解密,使用公钥加密的内容只能私钥进行解密。
非对称加密流程.png
1、常用应用场景
  • 信息传递加密:发信者对数据使用私钥进行加密,收信者通过发信者的公钥进行解密
  • 传输秘钥:登录/连接的过程中A先拿到B的公钥,再通过B的公钥将对称加密的秘钥和IV加密后传输给B,B使用秘钥进行解密。在后续的通信过程中使用解密后的秘钥和IV进行加解密传输。

2、常用非对称加密算法
RSA
ECC
3、常用非对称加密算法对比
非对称加密对比.png

四、加密技术的典型应用场景

4.1 固件升级验签

固件升级验签是为了保证,打包的固件与用户最终下载的固件文件一致,过程中没有被篡改,签名和验签过程中使用了哈希算法和非对称加密算法

  • 哈希算法:计算固件文件的HASH值
  • 非对称加密算法:打包时对HASH值进行加密,验签时对签名信息进行解密
    固件签名过程.png
    升级验签过程.png

    4.2连接握手协议

    连接握手指的是已经建立稳定的传输层连接后,对后续的通信加密方式进行协商,保证数据能够正确传输。

  • 对称加密:握手之后数据的传输
  • 非对称加密:握手过程可以防止对称加密密钥的明文传输
    连接握手协议.png