网络安全课程笔记六:Crypto

Network Security Lecture 6: Crypto

6.1 四大安全服务

  1. 认证(Authentication)
  2. 数据机密性(Confidentiality)
  3. 数据完整性(Integrity)
  4. 不可抵赖性(Non-Repudiation)

6.2 对称加密模型

发送方和接收方使用同一个密钥进行加密和解密。

将明文转换为密文的操作:

  • 替换:明文中的每个元素都被替换(映射)为另一个元素
  • 置换:明文中的元素被重排顺序

加密方式可以分为两类:

  • 块加密(Block cipher):输入、输出单位都是块(Block),一个块等于多个元素
  • 流加密(Stream cipher):输入、输出单位都是元素(Element),且按顺序进行操作

6.2.1 Kerckoff 法则

即使一个密钥加密系统的所有信息(除了其密钥)都被公开了,它也应该是安全的。

换句话说,攻击者只要没能拿到密钥,就算他知道这个加密系统的加密算法、知道密文、知道其他一切东西,也无济于事。

6.2.2 攻击类型

攻击类型 说明
已知密文 一个或多个密文被知晓
已知明文 一组或多组明文-密文对被知晓
可选明文 攻击者可以自己构造明文,并知道其对应的密文
可选密文 攻击者可以自己构造密文,并知道其对应的明文
可选文本 可选明文可选密文的结合

6.2.3 加密系统地安全性

无条件安全:

  • 无论攻击者拿到多少密文,这些密文都没有包含足够的信息来唯一确定其对应的明文
  • 无论攻击者有多少时间,他都不可能破解出这个密钥

计算安全:

  • 破解这个密钥所需的花费超过了这个被加密信息本身的价值
  • 破解这个密钥所需的时间超过了这个被加密信息的有用时效

6.2.4 替换策略

6.2.4.1 Caesar Cipher

将字母表中的每个元素替换为其后移三位对应的元素(循环),比如 A –> D, B –> E 等。

6.2.4.2 一次性密码本

一次性密码本(one-time pad,缩写为OTP)是古典密码学中的一种加密算法。是以随机的密钥(key)组成明文,且只使用一次。

特点:

  • 用以加密的文本,也就是一次性密码本,必须是随机产生的
  • 它必须至少和被加密的文件等长
  • 一次性:只能使用一次
  • 这是无条件安全的

加密方法:

首先手上要有一本一次性密码本用以加密文件,接着将一次性密码本里的字母,与被加密文件的字母给依序按某个事先约定的规定一一相混。

其中一个相混的作法是将字母指定数字(如在英语中,将 AZ 依序指定为 0 至 25),然后将一次性密码文本上的字母所代表的数字和被加密文件上相对应的数字给相加,再除以该语言的字母数后取得其余数。假设字母数是 $n$(如英语为 26),若就此得出来的某个数字小于零,则将该小于零的数给加上 $n$,如此便完成加密。

实践中的局限性:

  • 很难生成大量的随机密钥
  • 很难安全分发、保护这些密钥

6.2.5 置换策略

将明文写成一个 $n * m$ 矩阵,密钥是 $1… m$ 的一个排列,如下所示:

Key:   4 3 1 2 5 6 7
Plain: a t t a c k p
o s t p o n e
d u n t i l t

密文即将明文的每一列按照密钥的顺序进行重组(插入空格是为了方便阅读):

ttn apt tsu aod coi knl pet

6.2.6 块加密

一块明文对应一块密文,且每块都是等长的。

基本原则:

  • 使得明文密文之间的统计规律的联系尽可能复杂
  • 使得密文密钥之间的统计规律的联系尽可能复杂
  • 明文的统计规律(比如周期性字符串),在密文中不再得到体现
  • 明文的一位影响密文的多位。换句话说,密文中的每一位都被多个明文位影响

6.2.6.1 Feistel Cipher

费斯妥密码(Feistel cipher)是用于构造分组密码的对称结构,通常也称为费斯妥网络(Feistel network)。大部分分组密码使用该方案,包括数据加密标准(DES)。费斯妥结构的优点在于加密和解密操作非常相似,在某些情况下甚至是相同的,只需要逆转密钥编排。

维基百科:https://simple.wikipedia.org/wiki/Feistel_cipher

6.2.6.2 DES (Data Encryption Standard)

数据加密标准(Data Encryption Standard,缩写为 DES)是一种对称密钥加密块密码算法。它使用 56 位密钥,将数据加密在 64 位的块中。

维基百科:https://en.wikipedia.org/wiki/Data_Encryption_Standard

DES 由于只有 56 位密钥,已被证明是不够安全的。其替代为 3DES:https://en.wikipedia.org/wiki/Triple_DES

6.2.6.3 块加密的操作

假定一个块由 $b$ 个比特组成,如果一个明文的长度长于 $b$,则应该将其划分为多个 $b$ 比特的块(末尾不足则对齐)。

NIST 定义了几种块加密操作模式:

  • Electronic codebook (ECB)

$$C_j=E(K, P_j)$$

  • Cipher block chaining (CBC):

$$C_j=E(K, P_j \oplus C_{j-1}), C_0=IV$$

  • Cipher feedback (CFB):

$$C_j=E(K, C_{j-1}) \oplus P_j, C_0=IV$$

  • Output feedback (OFB):

$$C_j=E(K, I_j) \oplus P_j$$

$$I_j=E(K, I_{j-1}), I_0=IV$$

  • Counter (CTR):

$$C_j=E(K, T_j) \oplus P_j, T_j 为第 j 个计数器$$

6.2.7 流加密

流加密方法一次加密一个 Byte 或一个 Bit,因此它不要求明文进行对齐,且密文会和明文等长。

6.2.7.1 流加密的操作

Cipher feedback (CFB) 可以作为流加密操作使用,它会截取加密后的块密码的前 $s$ 位(通常 $s=8$)与明文中的某一个 Byte 进行异或。

6.3 非对称加密模型

公开密钥加密(Public-key cryptography),也称为非对称加密(Asymmetric cryptography),是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密,另一个则用作解密。使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文;甚至连最初用来加密的密钥也不能用作解密。

由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密。虽然两个密钥在数学上相关,但如果知道了其中一个,并不能凭此计算出另外一个;因此其中一个可以公开,称为公钥,任意向外发布;不公开的密钥为私钥,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通信的另一方。

非对称加密模型主要提供两种功能:加密和认证。

6.3.1 加密

如何确保 A 发送给 B 的数据包不会被其他人解密?

A 可以将数据用 B 的公钥加密,那么只有 B 用自己的私钥才能解密它。(其他人没有 B 的私钥)

6.3.2 认证

如何确定一个自称来自 A 的数据包真的来自 A?

A 可以将数据包用自己的私钥加密,B 收到之后如果能用 A 的公钥进行解密,那就证明这个数据包一定来自 A。(其他人没有 A 的私钥)

6.3.3 加密 + 验证

A 先将数据用自己的私钥加密,再将上一步的结果用 B 的公钥加密后发送给 B;B 收到后先用自己的私钥解密,再将上一步的结果用 A 的公钥解密。这就达到了加密 + 验证的双重效果。

6.3.4 非对称加密系统理论前提

以下操作必须易于完成:

  • 生成一对公钥和私钥
  • 已知明文和公钥,加密生成密文
  • 已知密文和私钥,解密得到明文

以下操作必须难以完成:

  • 已知公钥,确定其对应的私钥
  • 已知密文和公钥,恢复出明文

6.3.5 Diffie-Hellman 密钥交换

https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

6.4 密码学哈希函数

哈希函数 $H$ 将可变长度的数据块 $M$ 作为输入,产生固定长度的哈希值 $h = H(M)$。输入数据 $M$ 中任何一位发生变化,都将导致输出 $M$ 发生很大的变化。

一个消息对应的哈希值被计算出来之后,往往附在消息之后,被称为其“摘要”。常用于消息验证、数字签名。

6.4.1 消息验证

用于验证消息的完整性,有两种主要的应用场景:

  • 使用对称密钥加密消息和哈希值,整个数据包被加密,且可通过验证哈希值证明数据在传输过程中未被更。

  • 使用对称密钥只对哈希值加密。对于明文无需加密的应用,这种方案减少了加密操作的负担。

6.4.2 数字签名

用于进行发送方的身份验证,有两种主要的应用场景:

  • 发送方使用自己的私钥只对哈希值加密。接收方收到数据包后,使用发送方的公钥对哈希值解密,并将其与消息原文进行比对。

  • 发送方使用自己的私钥只对哈希值加密,再使用对称密钥加密整个数据包。接收方收到数据包后,先使用对称密钥解密整个数据包,再使用发送方的公钥哈希值解密,并将其与消息原文进行比对。这种方法既保证保密性,又提供了数字签名认证。

6.4.3 SHA-2

SHA-2,名称来自于安全散列算法 2(Secure Hash Algorithm 2)的缩写,是一种密码散列函数算法标准,属于 SHA 算法之一,是 SHA-1 的后继者。

其下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。

维基百科:https://en.wikipedia.org/wiki/SHA-2