1 - 加密与数据安全介绍
加密与数据安全介绍
我的博客
原书:《Understanding Cryptography: A Text book for Students and Practitioners》
1.1 密码学简介
如果我们听过密码学,可能会首先想到邮件加密,安全网页访问,银行智能卡应用等。
略。
1.2 对称加密
1.2.1 基础
爱丽丝希望与鲍勃通过一个不受信任的信道进行沟通,因此爱丽丝需要对发送的信息进行加密,得到密文,将密文发送给鲍勃,鲍勃获取到密文之后,解密密文得到原文信息。如果加密算法足够强大,对于截获这个密文的人而言,它更像是随机数,不能从密文中获取到有效信息。这会涉及:
- 原文
- 密文
- 密钥
- 可能的密钥集称为密钥空间
这个系统需要安全的通道,来让爱丽丝与鲍勃进行密钥分发。一个总要但反直觉的事实是,在这个场景中加密与解密算法是众所周知的。将加密算法保密好像是更加安全的方法,但是这样的算法是未经测验的算法,确定一个加密算法是否安全的唯一方法是将算法公开,并被其他学者研究是否可以攻破。
评价:
- 如果奥斯卡具有密钥,那么他可以轻松解密信息(因为算法是公开的),因此问题来到了如何安全分发密钥
- 在这个场景中,还有一些问题没有提及,比如如何防止奥斯卡对信息做修改(信息完整性),并保证信息确实来自爱丽丝(发送者认证)
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 是英文中出现最频繁的字母。
在现实的攻击中,我们会使用下面的一些原理:
- 英文字母的频率
- 英文字母伴随关系,比如 Q 总是跟着 U
- 如果单词分隔是可知的,可以确定到频繁出现的 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 年代,对密钥的长度有很多讨论。有两个重要的考量标准要牢记:
- 密钥长度的讨论仅局限与对称运算算法的暴力破解,如果有可用的分析攻击,长的密钥空间并不会有好的效果,当然,在其他的攻击方式下长的密钥也不起作用
- 对称算法或非对称算法的密钥长度的意义是不同的,比如,一个 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,可以有:
我们现在介绍一个定义:
定义1.4.1 取模运算
余数计算
例1.6 令 a = 42,m = 9,那么有:
因此有:
余数不唯一
给定模数 m 以及数 a,会有无穷的有效余数,比如:
例1.7 数 12 模数 9,可以有:
有下面的等效类:
{...,-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,m 都是非常大的整数,每一个都有 2048 比特位。可以使用一个简单的案例,比如,我们希望计算:
第一种方法是直接的方式:
第二种我们在两个等效类之间切换:
我们现在可以替换位其他等价类:
这样我们可以得到最终结果:
选择哪个余数
通常,我们选取满足如下规则的 r:
1.4.2 整数环
定义 1.4.2 环
让我们看一个小的整数环:
例1.9 令 m = 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 的移位是没有意义的)。加密解密过程如下:
令:
加密:
解密:
例1.11 令密钥(既移位偏移)为 17,原文为 ATTACK,那么有原文:
可以得到密文:
就像之前讨论过的,移位运算加密一点都不安全,有两种方式可以破解:
- 因为只有 26 个密钥,如果原文是有意义的文本,那么密文可被轻松暴力破解
- 也可以通过频率分析,进行破解
1.4.4 仿射运算
我们可以向移位运算加密引入加密函数来提升安全性。上文提到的移位运算加密的密码空间只有 26 个。
仿射运算下的加密,假设:
加密过程:
解密过程:
这个过程中的密钥是一个组合 k = (a, b)
,满足 gcd(a, 26) = 1
。因此 a
是下面结合中的成员:
例1.12 若密钥 k = (a, b) = (9, 13)
,原文是 ATTACK:
a = 9
的逆存在为 3,密文可以依公式得到:
当然仿射运算加密也不是安全的,它的密钥空间只有:
实际上仿射运算加密与移位运算加密的安全性是同一个量级的。