信息安全
考试速通
安全模型:
- P2DR 模型
-
Policy(安全策略)
-
Protection(防护)
-
Detection(检测)
-
Response(响应)
- PDRR 模型
- 防护
- 检测
- 响应
- 恢复
信息安全基本安全属性:机密性、完整性、可用性
密码学的组成:密码编码学、密码分析学
密码体制五元组:明文、密文、加密、解密、密钥
密码体制设计基本方法:
- 公开原则:密码体制安全应该依赖于密钥的保密,而不依赖于算法的保密
- 替换:将明文消息的每个字母替换成其它字母(Substitution)
- 变换:将明文字母重新排列组合(Permutation)
- 扩散:让明文中的每一位景响密文中的许多位(diffusion)
- 混淆:让明文、密文和密钥间的关系变得复杂(confusion)
- 迭代:反复迭代运算
- 乘法:将多个密码联合应用
其中,扩散和混淆用于对抗统计分析。
现代密码学分类:
- 根据密码体制可分为对称密钥密码算法和公开密钥密码算法
- 根据处理过程可分为分组密码算法和序列密码算法
密码分析学基本概念:
- 密码分析基本假设
- 攻击者总能获得密文
- 攻击者总能了解密码算法,但不知道密钥
- 攻击者总是拥有总够的计算资源
- 密码分析的分类
- 唯密文攻击:被动攻击,只知道密文,只能通过统计分析规律
- 已知明文攻击:被动攻击,知道部分明文及对应密文
- 选择明文攻击:主动攻击,构造明文输入密码系统,得到对应密文
- 选择密文攻击:主动攻击,构造密文输入密码系统,得到对应明文
- 选择文本攻击:主动攻击,以上两者的结合
认证协议的参与主体:示证者P(Prover)、验证者V(Verifier)、可信第三方TTP(Trusted third party)、攻击者(adversary)
Dolev - Yao 模型:
Dolev 和 Yao 认为攻击者具有如下能力:
- 可以窃听所有经过网络的消息
- 可以队止和截获所有经过网络的消息
- 可以存储所获得或自身创造的消息
- 可以根据存储的消息伪造消息并发送
- 可以作为合法的主体参与协议的运行
计算机病毒的主要特征:不可预测性、寄生性、可执行性、传染性、潜伏性、破坏性、触发性
计算机病毒的发展趋势:隐蔽化、多样化、智能经、破坏性更强
计算机病毒的分类:传统病毒、蠕虫病毒、木马病毒
消息认证与数字签名的区别:
两者都确保了信息源,但是两者所指是信息源是不同的。
消息认证码确保消息是 “已授权的所有用户” 发送的,采用的是对称加密算法。例如 A、B、C 都在授权范围之内,三人互发消息是使用的是同一相密钥,这只能确保信息是三人中的一人发起的,但不能确定具体发送人是谁,因为三人手中都有相同的密钥。
数字签名则是确保消息是具体的某个人发送的,采用的是非对称加密,消息发送方不可否认。由于使用的是非对称加密,运算速度会慢不少。
插值
拉格朗日插值
https://www.zhihu.com/question/58333118
对于 n 个点的插值:
$$ \begin{align} f_i(x) &= \prod_{j\neq i}^{1\le j\le n}\frac{x-x_j}{x_i-x_j} \\ f(x) &= \sum_{i=1}^{n}y_if_i(x) \end{align} $$
$f(x)$ 为插值公式
加密算法
加密算法都基于计算的不可逆性,其中最常用的就是模运算。
例如,对于这个表达式: $$ 3^{x}\ mod\enspace 5 = y $$ 如果已知 $x$,我们可以轻松地计算出 $y$ 的值,但是反过来,如果已知 $y$,我们并没有很好的办法直接计算出 $x$ 的值,只能一个一个地代入不同的整数去尝试,这本质上是一个离散对数问题,在数学上的离散对数问题一直是个难题,所以 $x$ 的值是没有办法轻松求解的。
MD5 算法
MD5 将数据以 512bit 为一块进行处理,每一块又分为 16 个 32bit 的子块,最终输出由 4 个 32bit 的子块组成,即最终输出为 128bit。计算前需要对数据进行填充,使得结果长度刚好为 512 的倍数。 $$ \begin{align} 总长度 &= 数据长度 + 填充长度 + 64 \\ &= 512 \cdot k \end{align} $$ 后面的 64bit 用来记录数据的实际长度,填充时需要一并考虑。
SHA-1 算法
512bit 为一块,输出为 160bit
盲签名
- A 使用随机数 k 掩盖消息 m,发送给 B
- B 对 A 发送的内容签名,发回给 A
- A 用 k 解掩盖,得到 B 对 m 的签名
过程中 B 并不知道 A 发送的实际内容,只是对内容做了签名。
DH 算法
DH 算法称为密钥协商算法,作用是在一个不可信网络通道中中交换信息以确定 (对称) 密钥,之后就可以使用确定的密钥进行加密通信了。
它的原理也非常简单,假设有一个函数 $f(x) = g^x \ mod \enspace p$,那么: $$ f(xy) = g^{xy}\ mod\enspace p = f(x)^{y} \ mod \enspace p = f(y)^{x} \ mod \enspace p $$ 算法流程:
- 确定一个大整数 $g$ 和质数 $p$,这两个数是可以公开的
- A 生成一个随机数 $a$,B 生成一个随机数 $b$,这是各自的私钥,需要保密
- A 计算 $k_1 = g^a \ mod \enspace p$ 并将 $k_1$ 发送给 B,B 计算 $k_2 = g^b \ mod \enspace p$ 并将 $k_2$ 发送给 A
- A 计算 $k_3 = k_2^a \ mod \enspace p$,B 计算 $k_3 = k_1^b \ mod \enspace p$
最终两人计算出的 $k_3$ 是相等的,而中间人即使截获到 $k_1$ 和 $k_2$,由于没有 A、B 两人手中的密钥,无法计算出 $k_3$ 的值,因此 $k_3$ 只有 A、B 两人知道,接下来 $k_3$ 就可以做为对称密钥进行加密通信了。

Shamir 门限方案
秘密分割:有时候为了避免权力过于集中,必须将秘密分割开来让多人保管,只有达到一定数量的人同时合作才可以还原秘密。
需求:有一个秘钥 S,需要拆分给 n 个人,当任意 t 个人数秘钥拼凑使用时就可以还原出秘钥 S。
我们知道插值多项式具有存在唯一性,即通过 n 个点值信息 $(x_i,y_i)$,我们可以唯一确定一个 n-1 阶的多项式。
Shamir 门限方案就利用了这一性质。首先随机生成 t 个系数,构造出一个 t - 1 阶多项式,接下来使用这个多项式算出 $n(n \ge t)$ 个互不相同的取值点信息,保存这 n 个点值的信息 $(x_i, y_i)$,此时就可以销毁该多项式了。
如果需要还原出该多项式,只需要从已保存的 n 个点值信息中任取 t 个,根据插值多项式的存在唯一性原理,我们可以还原出该 t - 1 阶多项式。
但是利用 t 个点值信息求多项式需要列线性方程组,利用高斯消元求解,如果我们仅仅只是想知道多项式中常数a0的值,就没必要求出所有系数的值,这时就可以请出大名鼎鼎的拉格朗日插值公式。
拉格朗日插值无需算出多项式的各项系数,可以利用 n 个点值信息直接求出对应多项式在其它点上的值,即利用拉格朗日插值定公式可以构造出与原多项式等阶的 $f(x)$。将 x = 0 代入 $f(x)$ 的值即得到 $a_0$ 的值,即多项式的常数项。
既然我们可以还原出 $a_0$,我们将需要加密的数字 s 作为一开始构造多项式时的 $a_0$,这样便实现了门限方案—— n个人保存秘密 s,任意不少于 t 个人可以还原出秘密 s。
DES 算法
进行 16 轮迭代运算,每轮都经过5步:密钥变换、扩展置换、S盒替换、P盒替换 以及异或和交换。DES 的解密过程与加密过程使用的是同一算法,区别是密钥的使用顺序相反。
RSA 加密
根据前面的内容,我们可以定义这样一个加解密过程:
加密:设原始内容为 $m$,加密密钥为 $e$,$n$ 为任意正整数,则加密内容 $c = m^e \ mod \enspace n$
解密:设解密密钥为 $d$,则原始内容 $m = c^d \ mod \enspace n$
两条式子合起来就是: $m^{ed} \ mod \enspace n = m$
所以关键是如何找到两个数 $e$ 和 $d$ 满足上边这条公式,前面说了,一个个代入数字计算并不现实,但由于这条式子比较特殊,我们可以利用欧拉定理:
对于任意互质的两个正整数 $n$ 和 $m$,满足 $m^{\varphi(n)} \ mod \enspace n = 1$
其中,$\varphi(n)$ 为欧拉函数,代表小于等于 $n$ 的数中有多少个与 $n$ 互质的数
欧拉定理可以整理成这样的形式: $$ m^{k\varphi(n)+1} \ mod \enspace n = m $$ 它与前面的 $m^{ed} \ mod \enspace n = m$ 只有指数部分的不同,我们可以令 $ed = k\varphi(n)+1$,即 $$ d = \frac{k\varphi(n)+1}{e} $$ …
RSA 密钥生成过程:
- 选择一对不相等的大质数 $p$ 和 $q$
- 计算 $n = p*q$,结果 $n$ 作为我们的模数
- 计算 $n$ 的欧拉函数 $\varphi(n)$
- 选取一个与 $\varphi(n)$ 互质的整数 $e$,满足 $1 < e < \varphi(n)$,$e$ 即为私钥
- 求出 $e$ 在模 $\varphi(n)$ 意义下的逆元 $d$,$d$ 即为公钥
- 私钥为 $(e, n)$,公钥为 $(d, n)$
Panta 的博客