1 - 加密与数据安全介绍

加密与数据安全介绍

我的博客
原书:《Understanding Cryptography: A Text book for Students and Practitioners》

1.1 密码学简介

如果我们听过密码学,可能会首先想到邮件加密,安全网页访问,银行智能卡应用等。

略。

1.2 对称加密

1.2.1 基础

爱丽丝希望与鲍勃通过一个不受信任的信道进行沟通,因此爱丽丝需要对发送的信息进行加密,得到密文,将密文发送给鲍勃,鲍勃获取到密文之后,解密密文得到原文信息。如果加密算法足够强大,对于截获这个密文的人而言,它更像是随机数,不能从密文中获取到有效信息。这会涉及:

  • 原文
  • 密文
  • 密钥
  • 可能的密钥集称为密钥空间

这个系统需要安全的通道,来让爱丽丝与鲍勃进行密钥分发。一个总要但反直觉的事实是,在这个场景中加密与解密算法是众所周知的。将加密算法保密好像是更加安全的方法,但是这样的算法是未经测验的算法,确定一个加密算法是否安全的唯一方法是将算法公开,并被其他学者研究是否可以攻破。

评价:

  1. 如果奥斯卡具有密钥,那么他可以轻松解密信息(因为算法是公开的),因此问题来到了如何安全分发密钥
  2. 在这个场景中,还有一些问题没有提及,比如如何防止奥斯卡对信息做修改(信息完整性),并保证信息确实来自爱丽丝(发送者认证)

1.2.2 简单对称加密:代换加密

代换加密的是十分简单的:我们只需要将字母替换为另一个:

例 1.1:

A -> k

B -> d

C -> w

...

比如 ABBA 加密后变为密文 kddk

这个加密系统的替换表是加密算法的关键,在对称加密中,密钥以一种安全的方式在爱丽丝与鲍勃之间共享。

例 1.2:一个密文

iq ifcc vqqr fb rdq vfllcq na rdq cfjwhwz hr bnnb hcc hwwhbsqvqbre hwq vhlq

第一种攻击方式:暴力破解,穷举密钥搜索

暴力破解基于一个简单的概念,做为攻击者,奥斯卡截获了密文,并且恰好掌握有一小段原文(比如文件头的固定内容)。奥斯卡现在可以简单的使用已知可能的密钥来解密原文的密文,如果得到的解密结果与原文匹配,那么他知道他掌握了密钥。

暴力破解在原理上总是可以破解对称加密的,但这与密钥空间有关,如果在多台现代计算机中这个破解方法需要很长时间(数年),那么这个对称加密就是对暴力破解安全的。

比如,在替换算法中,A 使用另一个字符替换,B 使用剩下字符中的一个替换,以此类推,那么可能的替换表是 26!,使用高端机器暴力破解可能都需要数十年,那么这种算法安全吗?

第二种攻击方式:字符频率分析

在上一个破解方法中,我们将密文当成了一种黑箱,我们并不会分析密文内部的信息,如果使用算法分析,那么将更容易破解。

第一个弱点是,一个原文符号只匹配同一个密文符号,这意味着,原文中具有的统计学数据依然会在密文中体现。在第二个例子中,我们不难发现,q 出现的频率最高,我们可以推断,q 是英文中出现最频繁的字母。

在现实的攻击中,我们会使用下面的一些原理:

  1. 英文字母的频率
  2. 英文字母伴随关系,比如 Q 总是跟着 U
  3. 如果单词分隔是可知的,可以确定到频繁出现的 THE、AND 等

例 1.3:不难发现,上面例子中的密文可以解密得到

WE WILL MEET IN THE MIDDLE OF THE LIBRARY AT NOON ALL ARRANGEMENTS ARE MADE

表 1.1:字母频率

字母 频率 字母 频率
A 0.0817 N 0.0675
B 0.0150 O 0.0751
C 0.0278 P 0.0193
D 0.0425 Q 0.0010
E 0.1270 R 0.0599
F 0.0223 S 0.0633
G 0.0202 T 0.0906
H 0.0609 U 0.0276
I 0.0697 V 0.0098
J 0.0015 W 0.0236
K 0.0077 X 0.0015
L 0.0403 Y 0.0197
M 0.0241 Z 0.0007

教训:好的密文应该能够隐藏原文的统计学属性,密文符号应该是随机的,一个大的密钥空间并不能确保安全的加密。

1.3 加密分析

对称加密的密钥推荐长度,不同的攻击方式。如果攻击者明确知道加密算法,如何确保密文安全。

1.3.1 破解密码系统的一般想法

我们破解密文一般会认为需要大量计算,聪明的人以及大型计算机。

经典加密分析

从密文推出原文,或从密文推出密钥,前面提到了两种方法。分析攻击,探索加密方法的内部结构;暴力攻击,将加密算法看作黑箱,并推测所有可能的密钥。

应用攻击

边带分析可以用来获取密钥。比如,通过测量处理器功耗。功耗跟踪之后可以通过使用信号处理技术来恢复密钥。

社会攻击

勒索,恐吓信,欺骗或间谍可以通过人来获取密钥。

1.3.2 多长的密钥才够

在 19 世纪 90 年代,对密钥的长度有很多讨论。有两个重要的考量标准要牢记:

  1. 密钥长度的讨论仅局限与对称运算算法的暴力破解,如果有可用的分析攻击,长的密钥空间并不会有好的效果,当然,在其他的攻击方式下长的密钥也不起作用
  2. 对称算法或非对称算法的密钥长度的意义是不同的,比如,一个 80 位的对称密钥与 1024 位的 RSA 算法密钥提供几乎相同的安全性

下表列出了针对对称运算暴力破解的安全性。

密钥长度 安全性评估
56 - 64 位 几小时破解
112 - 128 位 如果不用量子计算机,几十天可以破解
256 位 几十天破解,即便使用量子计算机运行已知的量子运算算法也需要消耗几天

对未来的预测: 这里参考了摩尔定律。

1.4 模算术和更多的历史运算

模算术在现代密码学中十分重要,尤其是在对称算法中。一个例子是凯撒运算。

为了实现字符的计算,我们可以位每一个字符分配一个数字。这样,卡萨运算就成为了模算术。

1.4.1 模算术

几乎所有的密码算法,对称或非对称,都是基于有限的数值的运算。我们使用的大部分数值集,比如自然数集或实数集是无限的。下面我们介绍模算术,这是在有限整数集的算术运算。

让我们先看一个日常生活中常见的整数集例子:

例1.4 考虑时钟上的时刻,如果只考虑整数时刻,可以得到:

1h, 2h, 3h, ..., 11h, 12h, 1h, 2h, 3h, ..., 11h, 12h, 1h, 2h, 3h, ...

我们会持续地加上一小时,但是总不会脱离这个集合。

让我们看一下如何处理这样地有限集合。

例1.5 考虑下面的整数集:

{0, 1, 2, 3, 4, 5, 6, 7, 8}

我们可以做四则算术:

2 x 3 = 6

4 + 4 = 8

但是 8 + 4 结果是什么呢?现在让我们尝试下面的规则:因为 8 + 4 = 12,12/9 余数为 3,可以有:

\[8 + 4 \equiv 3\quad mod\quad 9 \]

我们现在介绍一个定义:

定义1.4.1 取模运算

\[若a,r,m \in Z(Z是所有整数集),且 m > 0,如果 \quad a-r = m,我们可以写: a \equiv r\quad mod\quad m,m称作模数,r称作余数 \]

余数计算

\[若 a \in Z, 有 a = q\cdot m + r 0 \leq r \leq m \quad \quad \quad(1.1) \]

\[因为 a - r = q\cdot m(a-r = m),我们可以写:a\equiv r\quad mod \quad m,其中 r\in {0,1,2,...,m-1} \]

例1.6 令 a = 42,m = 9,那么有:

\[42 = 4\cdot 9 + 6 \]

因此有:

\[42\equiv 6 \quad mod \quad 9 \]

余数不唯一

给定模数 m 以及数 a,会有无穷的有效余数,比如:

例1.7 数 12 模数 9,可以有:

\[\bullet \quad 12\equiv 3\quad mod \quad 9,3是有效余数因为 9|(12-3) \]

\[\bullet \quad 12\equiv 21 \quad mod \quad 9,21是有效余数因为9|(21 - 3) \]

\[\bullet 12\equiv -6 \quad mod \quad 9,-6 是有效余数因为9|(-6-3) \]

有下面的等效类:

{...,-27,-18,-9,0,9,18,27,...}

{...,-26,-17,-8,1,10,19,28,...}

{...,-19,-10,-1,8,17,26,35,...}

给定等式类所有成员行为等效

由给定的模数m,对于给定计算选择哪一个类中的元素并没有什么关系。如果涉及的计算具有固定的模数(这是在密码学中常见的情况),可以自由选择类元素来令计算简单化。

例1.8 在一些实际的公钥策略中,是指数形式的:

\[x^e\quad mod \quad m \]

其中 x,e,m 都是非常大的整数,每一个都有 2048 比特位。可以使用一个简单的案例,比如,我们希望计算:

\[3^8 \quad mod \quad 7 \]

第一种方法是直接的方式:

\[3^8 = 6561 \equiv 2 \quad mod \quad 7,6561 = 937\cdot 7 + 2 \]

第二种我们在两个等效类之间切换:

\[3^8 = 3^4 \cdot 3^4 = 81\cdot 81 \]

我们现在可以替换位其他等价类:

\[81 = 11\cdot 7 + 4,81\cdot 81 \equiv 4\cdot 4 = 16 \quad mod \quad 7 \]

这样我们可以得到最终结果:

\[16 \equiv 2 \quad mod \quad 7 \]

选择哪个余数

通常,我们选取满足如下规则的 r:

\[0 \leq r \leq m - 1 \]

1.4.2 整数环

定义 1.4.2 环

\[整数环 Z_m 组成如下: \]

\[1. 集合 Z_m = {0,1,2,...,m-1} \]

\[2. Z_m 中的元素 a,b 的 +与\times 操作满足:1. a+b \equiv c\quad mod \quad m,(c \in Z_m);2. a\times b\equiv d \quad mod \quad m,(d\in Z_m) \]

让我们看一个小的整数环:

例1.9 令 m = 9,既,我们的环为:

\[Z_9 = {0,1,2,3,4,5,6,7,8} \]

有如下算术操作:

\[6 + 8 = 14 \equiv 5 \quad mod \quad 9 \]

\[6 \times 8 = 48 \equiv 3 \quad mod \quad 9 \]

现在先介绍一些关于环基础的特性:

  • 我们可以对两个数进行加/乘操作,得到的结果依旧位于环中,环是闭合的

  • 加法与乘法是可结合的:

    \[a + (b + c) = (a + b) + c \]

    \[a\cdot(b\cdot c) = (a\cdot b)\cdot c \]

  • 存在元素 0,满足:

    \[a \in Z_m,a + 0 \equiv a \quad mod \quad m \]

  • 对于一个给定的元素 a,有一个负元素 -a,满足:

    \[a + (-a) \equiv 0 \quad mod \quad m \]

  • 存在元素 1,满足:

    \[a \in Z_m,a\times 1 \equiv a \quad mod \quad m \]

  • 对于给定元素 a,若存在逆,则有:

    \[a\cdot a^{-1} \equiv 1\quad mod \quad m \]

  • 找元素的逆是需要付出努力的(通常需要使用欧拉算法),不过有一个简单的方法可以确定一个给定元素是否有逆:

    若元素:

    \[a \in Z_m \]

    只有在满足如下条件时,才有逆存在:

    \[gcd(a,m) = 1 \]

    其中 gcd 是最大的除数。上面的式子表示,如果两个数互质,那么存在逆。

    \[gcd(15,26) = 1,逆存在 \]

    \[gcd(14,26) = 2 \neq 1,逆不存在 \]

  • 分配律存在:

    \[a \times (b + c) = (a \times b) + (a \times c),a,b,c \in Z_m \]

1.4.3 移位运算(凯撒运算)

这里我们会介绍历史上曾经使用过的加密方法,移位加密或称之为凯撒加密,将每一个英文字符给到数字编码:

A B C D E F G H I J K L M
0 1 2 3 4 5 6 7 8 9 10 11 12
N O P Q R S T U V W X Y Z
13 14 15 16 17 18 19 20 21 22 23 24 25

将每一个字符所对应的编码在环中向右移动 3 位,得到密文。

这样,原文与密文都是环 Z26 中的元素。而密钥,既移动的偏移位置也是 Z26 环的成员(因为超过 26 的移位是没有意义的)。加密解密过程如下:

令:

\[x,y,k\in Z_{26} \]

加密:

\[e_k(x) \equiv x + k \quad mod \quad 26 \]

解密:

\[d_k(x) \equiv y - k \quad mod \quad 26 \]

例1.11 令密钥(既移位偏移)为 17,原文为 ATTACK,那么有原文:

\[ATTACK = x_1,x_2,...,,x_6 = 0,19,19,0,2,10 \]

可以得到密文:

\[y_1,y2,...,y_6 = 17,10,10,17,19,1 = rkkrtb \]

就像之前讨论过的,移位运算加密一点都不安全,有两种方式可以破解:

  1. 因为只有 26 个密钥,如果原文是有意义的文本,那么密文可被轻松暴力破解
  2. 也可以通过频率分析,进行破解

1.4.4 仿射运算

我们可以向移位运算加密引入加密函数来提升安全性。上文提到的移位运算加密的密码空间只有 26 个。

仿射运算下的加密,假设:

\[x,y,a,b\in Z_{26} \]

加密过程:

\[e_k(x) = y \equiv a\cdot x + b \quad mod \quad 26 \]

解密过程:

\[d_k(y) = x \equiv a^{-1} \cdot (y - b) \quad mod \quad 26 \]

这个过程中的密钥是一个组合 k = (a, b),满足 gcd(a, 26) = 1。因此 a 是下面结合中的成员:

\[a\in \{1,3,5,7,9,11,15,17,19,21,23,25\} \]

例1.12 若密钥 k = (a, b) = (9, 13),原文是 ATTACK:

\[ATTACK = x_1,x_2,...,x_6 = 0,19,19,0,2,10 \]

a = 9 的逆存在为 3,密文可以依公式得到:

\[y_1,y_2,...,y_6 = 13,2,2,13,5,25 = nccnfz \]

当然仿射运算加密也不是安全的,它的密钥空间只有:

\[12 \times 26 = 312 \]

实际上仿射运算加密与移位运算加密的安全性是同一个量级的。

posted @ 2023-02-11 16:27  ArvinDu  阅读(106)  评论(0编辑  收藏  举报