【网络信息安全】密码学入门笔记


网络信息安全这门课属于 自然科学,自然科学必须有完备的数学理论基础, 密码学就是信息安全的数学理论基础

主要内容与重点

  • 一、传统密码学
  • 二、现代密码学
  • 三、理论不可破解和计算不可破解的加密算法
  • 四、对称加密算法
  • 五、公开加密算法
  • 六、两种加密算法结合使用
  • 七、散列算法

密码学的发展的三个阶段

  • 手工阶段(传统密码学)

    从古代到1949年为密码学诞生的前夜。这一阶段虽然有众多密码实践,比如两次世界大战中通信密码的大规模应用和密码的破译活动,但密码技术不是一种科学,而可称之为一种艺术。
    这一时期的密码专家常常靠直觉、猜测和信念来设计、分析密码,而不是凭借推理和证明。

  • 机械阶段(传统密码学)

    1949年,香农(Claude Shannon)在《贝尔系统技术杂志》上发表论文《保密系统的通信理论》,为对称密码系统奠定了理论基础,从而密码成为一门科学。而从1949年到1975年这段时间内,密码学的理论进展不大。

  • 电子计算机出现以后(现代密码学)

    直到1976年,Diffie和Hellman发表了《密码学的新方向》一文,建立了公钥密码系统,引发了密码学上的一次革命性的变革

密码学的四个空间

  • 待加密的明文空间
  • 加密后得到的密文空间
  • 加密和解密所使用的的算法空间
  • 加密和解密所使用的密钥空间

密码学的三个操作

  • 加密

    明文、加密算法 —— 【加密密钥的作用下】 ——> 密文

  • 解密

    密文、解密算法 —— 【解密密钥的作用下】 ——> 明文

  • 破译

    密文、解密算法 —— 【没有解密密钥的情况下】 ——> 明文

老师手迹~


1、老师提问:上图里对称加密下面的 C、D 的英文全称是什么?

答: 扩散(Diffusion)混淆(Confusion)

2、老师提问:现代密码学为什么N个人两两通讯所需的算法数只有1?

答:算法公开,所有的秘密都在密钥上。

3、老师提问:公开加密 中公开的是什么?

答案 :加密算法,解密算法,一部分密钥都是公开的。私钥是保密的。


密码的安全性取决于以下几点:

  • 密码算法本身的安全性(质变)

  • 密钥的长度(量变)

  • 随机数发生器的随机性(熵)

    熵是不确定性的量度,密钥空间为 2 128 2^{128} (不完全随机)并不意味着熵就能达到128,声称的熵和实际达到的熵不一样。熵为128只能说明破解密钥的最大工作量,丝毫不能说明最小量。

    随机数完全随机 ——> 密钥出现概率相等 ——> 达到最大熵

一、传统密码学

算法和密钥都必须保密,如模3的恺撒加密算法
缺点是:N个人两两相互通信则需要互不相同的算法太多。

二、现代密码学

  • 算法公开
    公开越久的算法,如一直在使用,有理由相信其加密强度越高,因为经过长时间攻击已完善;反之不公开算法加密强度可能不高。
  • 所有的秘密都在密钥上

三、理论不可破解和计算不可破解的加密算法

理论不可破解的加密算法:一次一密钥(无实用价值,密钥和明文一样长)

计算不可破解的加密算法:如,在现有商用计算机条件下,112 位的 3DES 算法1024 位的 RSA 算法

密码系统的基本要求和设计原则

在这里插入图片描述

密码学常见表示:

  • K —— 密钥
  • E —— 加密
  • D —— 解密
  • M ——明文
  • C —— 密文

密码学基本要求:

  1. 知道 K 时, C = E ( M K ) C = E(M,K) 要容易计算
    在某个加密算法E下,对明文M使用密钥K加密,获得的密文为C

  2. 知道 K 时, M = D ( C K ) M = D(C,K) 要容易计算
    在某个解密算法D下,对密文C使用密钥K解密,获得的明文为M

  3. 不知道 K 时,由 C 不容易推导出 M(难以破译)

设计原则:

  1. 合法的通信双方来说,加密和解密容易,D、E 公开
  2. 密码分析员来说由密文推导出明文困难,难以破译密码
  3. 衡量密码系统的好坏,应以能否被攻破和易于被攻破为基本标准。

一次一密密码系统

  • 属于流密码体系,是对称加密
  • 由美国 AT&T 的 G.W.Vernam 发明
  • 唯一理论上不可攻破的密码系统
  • 计算简单,效率高,但密钥管理困难

一次一密码系统的算法

假定明文是 M = m 0 m 1 m n 1 M = (m_0,m_1,…,m_{n-1})
用下述算法 C i = E K i ( m i ) = m i + K i m o d 26 0 i < n 1 C_i = E_{Ki}(m_i) = (m_i + K_i)(mod 26) 0\leq i < n(1)
可以得出密文 C = C 0 C 1 C n 1 C =(C_0,C_1,…,C_{n-1})

明文的每一位( M i M_i )加上密钥的每一位( K i K_i ),模上26,得到密文的每一位( C i C_i ),这就是流密码体系,明文与密文一一对应。

有以下几点要求:

  1. 密钥 K = K 0 K 1 K n 1 K =(K_0,K_1,…,K_{n-1}) 是一个随机序列
  2. 密钥只能使用一次
  3. 密钥长度要等于明文长度,即 K = M \left | K \right | = \left | M\right |

一次一密密码系统举例

在这里插入图片描述

明文为 send help,由 0-a,1-b,2-c,3-d,4-e … 对应规则可知:

M = ( 18 4 13 3 7 4 11 5 ) n = 8 M = (18,4,13,3,7,4,11,5),n=8

上面提到,把明文的每一位( M i M_i )加上密钥的每一位( K i K_i ),模上26,得到密文的每一位( C i C_i )。

通讯双方在知道密钥(K)的情况下,可以很容易的将密文©还原为明文(M)。


老师提问:一次一密密码例子中,由密文5 - 密钥20,不够减怎么办?
答:由于算法中明文的每一位与密钥相加后会模26,因此解法为: 5 + 26 20 = 11 5+26-20 = 11


无法破解出明文的原因分析

不知道 K 无法破解出明文 M:

  1. 密钥序列 2 6 n 26^n 可能是个天文数字,用穷尽搜索方法工作量大。

  2. 上述例子中 K=(4,3,2,21,22,24,20,20)​时,由同一个密文 C,可生成另一个有意义明文:M =(t,o,m,i,s,i,1,1)。

    “send help” 和 “tom is ill” 作为明文的可能性相同,获悉密文丝毫不能增加破译的可能性。

一次一密密码系统不实用的原因

  1. 很难生成真正随机的密钥序列。
  2. 即使已经生成,很难分发/存储和明文等长的随机密钥序列。
  3. 若有安全信道可传递每次不同、任意长的密钥序列,为何不直接用来传递明文呢?

实际不可攻破的密码系统是指:它们在理论上是可以攻破的,但所需计算资源超出实际的可能性。

四、对称加密算法

对称加密算法的唯一功能:保证机密性的加密和解密(与后面的公开加密算法区分)

特点:加密密钥和解密密钥完全相同,相反过程迭代就可解密。

常见的对称加密:

  • DES(64位,其中56位参与运算,8位是校验位)
  • 3DES(112位、168位)
  • IDEA(最早的128位对称加密算法之一,到目前仍然安全)
  • AES(新的国际标准)

对称加密的优点:

  • 速度快

对称加密的缺点:

  • 密钥分发难(带外发送)
  • 不能进行发送端鉴别(源端抗否认),如发布密钥可能泄露给第三人
  • N 个人两两相互通信只需要 1 个算法,但需要 N(N-1)/2 个密钥

五、公开加密算法

公开加密算法具有难解性(通常是难以解决的数学难题)。

公开加密算法公开了:加密算法,解密算法,一部分密钥

公开加密算法的三个功能:

  1. 保证机密性的加密和解密
  2. 实现不可否认性的数字签名和验证签名
  3. 可以进行密钥的分配和交换

常见的公开加密算法:

  • RSA

    基于大合数分解成大质数的困难。(可用于加密和数字签名)

    公开密钥的三个功能都可以做到,缺点是速度慢

  • D-H

    基于有限域上计算离散对数的难解性。(只用于密钥交换)

  • 椭圆曲线

    基于椭圆曲线点群上计算离散对数的难解性。(可以取代RSA)

    公开密钥的三个功能都可以做到,并且速度比RSA快

    公开加密算法的发展方向

  • DSS(数字签名标准)

    只能进行数字签名

    以 RSA 算法为例

    两个大质数 (1024bi) 相乘容易,但将一个大合数分解成两个大质数难(计算上不可行)。

    1. 一个函数生成两个密钥
    2. 不能由其中一个推导到另外一个
    3. 一个密钥用于加密,另一个用于解密
    4. 哪一个用于加密,哪一个用于解密无所谓
    5. 但用一个加密的密文,肯定能用另一个解密

相互通信的每个用户生成一对密钥(N个人共有2N个密钥),一个可以公开发布(公钥),另一个自己使用,只能自己知道(私钥)

为什么公开加密算法中密钥需要1024 位强度才够,而对称加密只需要100多位?
1)对称密钥是完全保密的,所以短密钥就可以具有高强度;
2)公开密钥算法毕竟公钥已公开公钥和私钥肯定有一定联系(尽管难以推导),所以长密钥才安全。

密钥的管理问题

对称加密系统中,由于加密的密钥就是解密的密钥,因此对称加密担心泄露密钥

公开加密系统中,用户的公钥不担心泄密,但是担心公钥被人篡改,也称为公钥担心被假冒。解决方案是,利用 CA(电子认证服务),由CA这个可信第三方来颁发数字证书,保证公钥数据的真实性。


公开加密算法的两种用法:

情况:A 发送消息给 B

  1. A 用 B 的公钥加密 ——> B 用自己私钥解密

    非 B 不能得到 A 发送的消息(保证了机密性

  2. A 用自己私钥加密 ——> B 用 A 的公钥解密

    别人也不能假冒 A 发送消息(没有 A 的私钥,其他无法用A 的公钥解密开,因此无法假冒 A)

    A 也不能否认发送过该消息(数字签名不可否认

以上用法有两个前提:

  • A 必须得到 正确的 B 的公钥
  • B 必须得到 正确的 A 的公钥

B 要确认自己得到的声称是 A 公钥的密钥确实是 A 的公钥,而不是其他人的公钥(否则别人就可以冒充 A 发送消息, 也可以得到原来是发送给 A 的机密数据)—— 需要从 CA 处得到 A 的公钥CA 以自己的私钥加密 A 的公钥担保,而 CA 的公钥众所周知。

综合上述两种用法:

加密:A 用自己的私钥加密,用 B 的公钥加密

解密:B 用自己的私钥解密,用 A 的公钥解密

公式化描述:

C = E B ( E A ( M ) ) C = E_{B的公钥}(E_{A的私钥}(M)) —> M = D A ( D B ( C ) ) M = D_{A的公钥}(D_{B的私钥}(C))

以上操作:

  • 确保只有 B 能够接收到消息(机密性
  • B 确认消息是 A 发送的(数字签名
  • 相反顺序加解密不能实现数字签名

老师问题:讨论A发消息给B的所有情况

(1)A用自己的公钥加密,能否加密,有没有意义?

(2)A用自己的私钥加密,能否加密,有没有意义?

(3)A用B的公钥加密,能否得到B的正确公钥,安全意义?

(4)A用B的私钥加密,有没有意义?


接收端不可否认 —— 数字签名收条(S/MIME v3)

时间不可否认(抗重放)—— 时间戳

公开加密算法的特点

优点:

  • 产生密钥个数少,公开分发密钥

  • 数字签名

  • 适用于互联网环境

缺点:

  • 速度慢(密钥太长),不合适直接加密明文

六、两种加密算法结合使用

公开加密与对称加密结合使用,形成了 PGP 加密算法雏形 (简单了解)

A 发送前

  • A 用自己私钥加密明文散列值
  • 再用随机对称密钥加密明文和散列值
  • 最后用B公开密钥加密该对称密钥

B 接收后:

  • B 用自己私钥解密得到对称密钥
  • 再用对称密钥对密文解密得明文和散列值
  • 最后用A公钥解密明文散列值

七、散列算法

雪崩效应:明文修改一点点,散列函数不变,散列值发生巨大变化

(1)算法公开:MD5、SHA1、…

(2)数字指纹(压缩函数):使得散列算法具有完整性(数据在发送过程中不被破坏,发怎样收怎样)

(3)散列算法与加密算法的区别:

  • 散列过程不可逆,只加密不解密
  • 散列算法无密钥
  • 散列得出的密文与明文长短无关只与散列算法有关

(4)如何用散列算法实现完整性

  • 比较传输得到的散列值计算得到的散列值,如不匹配要求重传
  • 明文M(长) 和传H(M)信道(短)出错的概率相差很大
  • 直接传明文及其散列值没有任何安全性

(5)冲突(碰撞)

  • 冲突必然存在,只是很难找到。
  • "冲突"与"可逆"的不同,散列不可逆。
  • Hash 值不够安全:不是它们可逆,而是能够比较确定、较快地找到冲突。
发布了170 篇原创文章 · 获赞 47 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43734095/article/details/104889181