【网络信息安全】密码技术概述笔记

前一课的笔记【网络信息安全】密码学入门笔记

主要内容和重点

  1. 密码技术的起源和历史
  2. 对称密码
  3. 公钥密码
  4. 消息验证和数字签名

老师给出的重点

  1. D-H算法的难解性基础、功能(用途)、为啥是公开加密算法
  2. D-H算法生成K的过程、为啥黑客难以破解(怎么理解离散对数难解性)、安全性上主要不足,容易遭受的攻击
  3. ECC相对RSA的主要优势:安全性基础更好、三个功能都有、密钥位短加解密速度快
  4. 公开加密和对称加密的优缺点比较,两者结合使用(数字信封)
  5. Hash函数的六个性质
  6. 散列值和HMAC的不同;接收方算出HMAC值匹配,确认哪几点?
  7. MD-5和SHA-1的比较
  8. 理论上的数字签名和实际中的数字签名实现上的不同
  9. 双向/单向鉴别,密钥分配的重要性以及难以安全分配、鉴别和密钥分配为何在同一章

密码技术的起源和历史

三个阶段:
阶段一(古代~1949):密码学诞生的前夜

  • 这一阶段有众多密码实践,比如二次世界大战中通信密码的应用和破译,但密码学还没有成为一门科学的体系。
  • 这一时期的密码专家常常靠直觉、猜测和信念来设计、分析密码,而不是凭借推理和证明。

阶段二(1949~1975):1949年,香农发表论文《保密系统的通信理论》

  • 为对称密码系统奠定了理论基础,使密码成为一门科学
  • 而从1949年到1975年这段时间内,密码学的理论进展不大。

阶段三(1976~现在):1976年,Diffie和Hellman发表《密码学的新方向》

  • 建立了公钥密码系统,引发了密码学上的一次革命性的变革。

随着在密码学理论和技术上的探索和实践,人们逐渐认识到认证和保密是两个独立的密码属性。

Simmons系统研究了认证问题,并建立了一套与香农保密理论平行的认证(Hash)理论。

对称密码

对称密码技术也叫做单钥常规密码技术

  • 分支1:分组密码技术
  • 分支2:流密码技术

在公钥密码技术出现之前,它是唯一的加密类型。

在这里插入图片描述

基本原理

对称密码必须满足如下要求:

  • 算法足够强大。
    无法通过部分明文密文对计算出密钥或明文。
  • 不依赖于算法的保密,而依赖于密钥。
    著名的 Kerckhoff 原则。
  • 正常加密和解密要快,破译越慢越好。
  • 密文相对明文最好无数据位扩展。
  • 好的加密算法要具有雪崩效应
  • 好的加密算法的密文很难被压缩。

分组密码

分组密码是一个明文分组被作为一个整体来产生一个等长的密文分组的密码,通常使用的是 64bit 的分组大小。

数据加密标准DES

  • DES是一种对二元数据进行加密的算法,将明文消息分成 64bit 一组进行加密。
    密文分组的长度也是 64bit ,没有数据扩展。

  • DES使用 “密钥” 进行加密,“密钥” 的长度是64bit。

  • DES算法中每逢第 8bit 就被忽略(校验位),因此密钥的实际大小为 56bit。

  • DES整个体制公开,系统的安全性完全依赖密钥的保密

DES算法主要包括:

  • 初始置换 IP
  • 16 轮变换的乘积变换
  • 逆初始置换 IP-1
  • 16 个密钥产生器

在这里插入图片描述

DES具有雪崩效应:明文或密钥 1bit 改变引起
密文许多 bit 改变
。如果密文的变化太小,很容易找到某种规律从而破译密码。

两种形式的雪崩效应:

  • 密钥不变,明文产生1bit变化
    在3次循环后,两个分组有 21bit 不同
    整个加密过程结束后,两个密文有34个位置不同。
  • 明文不变,密钥发生1bit变化
    密文中有大约一半的 bit 不同。

DES算法可能有如下安全问题:

  • 算法本身安全,但56位密钥太小。
    1998年7月,EFE宣布攻破了DES算法,他们使用的是不到25万美元的特殊的“DES破译机”,这种攻击只需要不到3天的时间。

  • DES的迭代次数可能太少(16次恰巧能抵抗差分分析)。

  • S盒(替代函数S)中可能有不安全因素。

  • DES的一些关键部分不应当保密。

S盒代换(S-box Substitution)

  • S盒有6位输入,4位输出
  • 48位数据经过8个S盒后输出32位数据。
  • 将异或后的 48bit 依次分成8组,每组 6bit,分别送入8个S盒中进行代换。
  • 每个S盒由一个4行16列的表确定。

算法:对每个S盒,将6位输入的第一位最后一位组成一个二进制数,用于选择S盒中的一行。用中间的4位选择S盒16列中的某一列,行列交叉处的十进制数转换为二进制数可得到4位输出。

例:对于S1盒而言, 如果输入为011001,则行是01(十进制1,即S盒的第2行),列1100(12,即S盒的第13列),该处的值是9,转换为二进制数为1001,即为该S盒的输出.。

在这里插入图片描述

单一性距离

已知密文/明文对时,密钥搜索攻击就是简单地搜索所有可能的密钥;
没有已知的密文/明文对时,攻击者必须自己识别明文。
(1) 如果报文是以普通英语写成的,可以使用程序自动完成英语的识别。
(2) 如果明文报文在加密之前做过压缩,那么识别工作就更加困难。
(3) 如果报文是某种更一般的类型,如二进制文件,那么问题就更加难以自动化。

单一性距离

  • 可在其他事物中测定出所需的只含有合理明文的加密文本的数量。
  • 单一性距离越大,密文越难破解。
  • 计算公式:K/6.8个字符
    • DES:56 / 6.8 = 8.2个字节
    • IDEA:128 / 6.8 = 19个字节
  • 如果明文含有一个格式的文件头(例如邮件文件头),易识别
    如果明文是二进制(压缩文件),很难识别明文。

用单一性距离说明一次一密是理论上无法破解的:
一次一密中,K趋向无穷大,单一性距离非常大,越大所以越难破解。

三重DES

三重DES是人们在发现DES密钥过短,易受到蛮力破解而提出的一种替代加密算法。

出现过二重DES,但很快被破解。
针对二重DES的破解方法:相遇攻击

三重DES 使用3个密钥,执行3次DES算法
加密过程为:加密-解密-加密EDE),可表示为如下的公式:
C = E K 3 ( D K 2 ( E K 1 ( M ) ) ) C=E_{K3}(D_{K2}(E_{K1}(M)))

为了避免三重DES使用3个密钥进行三阶段加密带来的密钥过长(168bit) 的缺点,Tuchman提出使用两个密钥的三重加密方法,这个方法只要求112bit 密钥,即令其 K 1 = K 3 K1=K3
C = E K 1 ( D K 2 ( E K 1 ( M ) ) ) C=E_{K1}(D_{K2}(E_{K1}(M)))

三重DES的第二阶段的解密并没有密码编码学上的意义。它的唯一优点是可以使用三重DES解密原来的单次DES加密的数据,即 K 1 = K 2 = K 3 K1=K2=K3
C = E K 1 ( D K 1 ( E K 1 ( M ) ) ) = E K 1 ( M ) C=E_{K1}(D_{K1}(E_{K1}(M)))=E_{K1}(M)

国际数据加密算法IDEA

IDEA使用的是 128bit 密钥(最早使用)。IDEA 与 DES 的明显区别在于:循环函数和子密钥生成函数的不同

(1) 对循环函数来说,IDEA不使用S盒子,而且IDEA依赖于3种不同的数学运算:

  • 异或XOR
  • 16位整数的二进制加法
  • 16位整数的二进制乘法

这些函数结合起来可以产生复杂的转换,这些转换很难分析,也很难进行密码分析。

(2) 子密钥生成算法完全依赖于循环移位的使用,但使用方式复杂,对 IDEA 的8个循环中的每一个都会生成6个子密钥。

IDEA算法有如下优点:

  • 加密速度快
  • 密钥产生简单
  • 用软硬件都能实现

IDEA 是最早的 128bit 替换中的一个,经历了大量的审查,其安全性主要体现在:

  • 穷举搜索破译,要求进行 2 128 2^{128} 约为 1 0 38 10^{38} 次尝试,对每秒完成100万次加密的机器,需要 1 0 13 10^{13} 年;
  • 能抗差分分析和相关分析攻击;
  • 没有 DES 意义下的弱密钥(密钥的01串有规律),但仍然有 2 51 2^{51} 个弱密钥。

高级加密标准 AES

AES 的基本要求是:

  • 比三重 DES 快而且至少和三重 DES 一样安全。
  • AES分组长度为 128bit,密钥长度为 128/192/256 bit。

1998年8月NIST(美国国家标准与技术研究院)召开了第一次 AES 候选会议,并公布了15个 AES 候选算法。
经过一年的考察 MARS、RC6、Rijndael、Serpent、Twofish 共 5 种算法通过了第二轮的选拔。
2000年10月,NIST 选择 Rijndael 作为 AES 的算法。

Rijndael 算法是一种分组长度和密钥长度均可变的分组密码算法,其分组长度和密码长度都分别可为 128/192/256 bit。

一般说来, Rijndael 汇聚了安全、效率、简单、灵活等优点,使它能成为 AES 最合适的选择。

  • 安全性
    Rijndael 算法抗线性攻击和抗差分攻击的能力大大增强。
    没有比穷举更有效的攻击方法。

  • 算法的速度
    RC6 需要用到乘法运算,并且需要大量内存;
    Twofish 不便于在硬件中实现;
    Mars 和 Serpent 的速度都不如 Rijndael

  • 灵活性
    Rijndael密钥长度可根据不同的加密级别进行选择。
    Rijndael分组长度也是可变的,弥补了DES的弊端。
    Rijndael 的循环次数允许在一定范围内根据安全要求进行修正。

分组加密算法对比

在这里插入图片描述

流密码(是通信双方事先共享的,可重复)

流密码是密码体制中的一个重要分支。20世纪50年代,数字电子技术的发展使密钥可以方便地利用移位寄存器为基础的电路来产生,这促使线性和非线性移位寄存器理论迅速发展。

流密码一直是作为军事和外交场合使用的主要密码技术。通常情况下,流密码总是以明文的位作为加密的单位。

与一次一密的异同:

  • 一次一密绝对安全,但没有实用性。
  • 流加密在一次一密的基础上,降低安全性,增加实用性。
    密钥流生成器(硬件的)将一个短的随机 Key 值扩展为一个长得多的伪随机序列,使得与真随机序在计算上不可区分,以替换对真随机Key流的需求,同时又能满足计算上的安全性。

加密和解密过程:

  • 加密时,将一段类似于噪声的伪随机序列与明文序列模2加后作为密文序列,这样即使对于一段全“0”或全“1”的明文序列,经过流密码加密后也会变成类似于随机噪声的乱数流。
  • 在接收端,用相同的随机序列与密文序列模2加便可恢复明文序列。
  • 保持收发两端密钥的精确同步是实现可靠解密的关键技术。

RC-4

RC-4 是由 RSA 公司的 Rivest 在1987年提出的密钥长度可变流密码
它对差分攻击和线性分析具有免疫力,没有短循环,且具有高度非线性,尚无公开的分析结果。
它大约有 256 ! 2562 = 2 1700 256! * 2562=2^{1700} 个可能的状态。

公钥密码(基于单向陷门函数)

单向陷门函数包含两个明显特征:

  • 一是单向性
    所谓单向性,也称不可逆性
    即对于一个函数 y = f ( x ) y=f(x) ,若已知 x x 要计算出 y y 很容易
    但是已知 y y 要计算出 x = f 1 ( y ) x=f ^{-1} (y) 则很困难。
    单向函数的命名就是源于其只有一个方向能够计算
  • 二是存在陷门
    所谓陷门,也被称为后门
    对于单向函数,若存在一个 z z 使得知道 z z 则可以很容易地计算出 x = f 1 ( y ) x=f ^{-1}(y)
    而不知道 z z 则无法计算出 x = f 1 ( y ) f ^{-1}(y) ,则称函数 y = f ( x ) y=f(x) 为单向陷门函数,而 z z 称为陷门。

公钥密码技术是在试图解决常规加密面临的两个最突出问题密钥分配数字签名的过程中发展起来的。

(1) 1976年,Diffie和Hellman创造性地提出了公开密码体制。
(2) 这一体制的最大特点是采用两个密钥将加密和解密分开:一个公开作为加密密钥,叫做公钥;一个为用户专用,作为解密密钥,叫做私钥。
(3) 要从公钥和密文分析出明文或私钥,在计算上是不可行的。

Diffie-Hellman密钥交换算法

  • Whitfield Diffie 和 Martin Hellman 提出 D-H密钥交换算法代 —— 公钥密码体制出现
  • D-H密钥交换算法的重大意义 —— 第一次提出不需要保密信道来安全分发对称密钥
  • 公钥加密是重大创新(每人一对密钥)—— 从根本上改变 加密/解密 过程

公开加密系统中每个用户有两个密钥,私钥公钥

  • 私钥保密,只能在一方保存
  • 公钥不保密,可广泛共享
  • 密钥对具有数学上特殊的互补关系(一对一关系)
    每个密钥只能与密钥对中的另一个密钥配合进行加/解密。

D-H算法的用途和特点

D-H算法的用途:

  • 算法本身只用于密钥交换,而不能实现加密和数字签名
  • 安全性依赖于计算离散对数的困难性。

D-H算法特点:

  • 只在需要时才计算出对称密钥对称密钥不需保存,也不会泄密
  • 密钥交换只需要约定全局参数。
  • 不需要 PKI 的支持,目前 SSL、IPSec 等都使用 D-H 密钥交换算法。

在这里插入图片描述

D-H算法功能、证明、举例

D-H 的功能和证明
功能:A 想要与 B 建立连接,并安全地生成一个双方共享的对称密钥,用来加密传递的消息。
在这里插入图片描述
D-H 的示例
素数 q = 97 q=97 ,原根 a = 5 a=5 ,私钥 X A = 36 X_A=36 ,私钥 X B = 58 X_B=58

  • A 计算 Y A = 5 36 m o d 97 = 50 Y_A = 5^{36} mod 97 = 50
  • B 计算 Y B = 5 58 m o d 97 = 44 Y_B = 5^{58} mod 97 = 44

A 和 B 交换公钥后,双方均可单独计算出对称密钥 K:

  • A 计算 K = ( Y B ) X A m o d 97 = 4 4 36 m o d 97 = 75 K= (Y_B)^{X_A} mod 97 = 44^{36} mod 97 = 75
  • B 计算 K = ( Y A ) X B m o d 97 = 5 0 58 m o d 97 = 75 K= (Y_A)^{X_B} mod 97 = 50^{58} mod 97=75

D-H算法的安全性

D-H算法中的计算公式都是单向函数,其逆运算就是求解离散对数问题,所以具有难解性。

q q a a Y A Y_A Y B Y_B K K 都足够大时:

  • 黑客由 q、a 和截获的公钥 Y A / Y B Y_A/Y_B 并不能得到 A/B 的私钥 X A / X B X_A/X_B
  • 即使截获大量密文破解了本次 K,由 K、q 和截获的公钥 Y A / Y B Y_A/Y_B ,也不能得到 A/B 的私钥 X A / X B X_A/X_B

D-H算法的不足与改进

  • 没有提供通信双方的身份信息,所以不能鉴别双方身份,容易遭受中间人攻击
  • 是密集型计算,容易遭受拒绝服务攻击
    即攻击者请求大量密钥,被攻击者花费大量计算资源求解无用的幂系数。
  • 无法防止重放攻击

在这里插入图片描述

OAKLEY算法改进了D-H算法,具有五个重要特征:

  1. 采用 64位随机cookie 对抗拒绝服务攻击。
    cookie 为双方提供一种较弱的源地址认证,如果伪造了源地址,则攻击者不能得到该 cookie 并攻击成功。
  2. 双方能够协商全局参数(q、a)。
  3. 增加了 “现时” 机制来抗重放攻击
  4. 能够交换D-H的公开密钥
  5. 对D-H中公钥值的交换进行身份鉴别

RSA算法

RSA公钥密码算法是目前因特网上进行保密通信数字签名的最有效的安全算法之一。

RSA算法的安全性基于:数论中大素数分解的困难性,所以RSA需采用足够大的素数。因子分解越困难,密码就越难破译,安全强度越高。但数学上至今还未证明因子分解就是攻击RSA的最佳方法,也未证明分解大整数就是NP问题,可能有尚未发现的多项式时间分解算法。

统计数据表明,在重要应用中,需要采用 1024bit 的密钥,在SET协议中要采用 2048bit 的密钥。
RSA加密比DES加密至少要慢100倍。

椭圆曲线密码技术ECC

椭圆曲线公钥系统是替代RSA的强有力的竞争者。

ECC的安全性基于:定义在椭圆曲线点群上的离散对数问题的难解性。该问题比RSA的有限域上的离散对数问题更难求解。

椭圆曲线加密方法与RSA方法相比,有下述优点:

  • 安全性能更高
  • 计算量小,处理速度快(密钥短得多)
  • 存储空间占用小和带宽要求低等

ECC与RSA一样全能,但各方面都比它强,因此,ECC必然取代RSA。比如,SET协议的制定者已把它作为下一代SET协议中缺省的公钥密码算法。

公钥密码总结

在这里插入图片描述

公钥密码、对称密码技术比较

对称密码技术特点

优点:运算简单、易于实现,占用资源少,加密速度快

缺点:

  • 通信前的密钥交换必须是安全的,在互联网环境下非常困难。
  • 无法实现发送端的鉴别(不可否认性)。
  • 密钥规模非常大,密钥管理困难。
    N 个用户两两进行相互通信,每个用户需要维护 N-1 个密钥,总共需要 (N-1)N/2 个密钥。

公开密码技术特点

优点:

  • 通信双方事先不需要通过保密信道交换密钥。
    公钥不怕泄露,私钥不需要交换。
  • 密钥持有量大大减少。
    N 个用户两两相互通信只需要拥有 2N 密钥 (每个用户一对密钥)。
  • 公开密码技术提供了对称密码技术无法或很难提供的服务,如与Hash函数联合运行可生成数字签名。

缺点:大量的浮点运算致使计算量大,加密/解密速度慢,需占用较多资源,对于电子商务活动尤为突出。

对称密码、公开密码的综合应用

实际运用中,对称加密和公开加密结合使用公开加密算法加密的是对称密钥,而不直接加密明文。这就是数字信封技术

使用这种方式,用户可以在每次发送保密信息时都使用不同的对称密钥,从而增加密码破译的难度。一次密码的破译不影响其他传递。

消息验证和数字签名

消息验证(防止第三方攻击)和数字签名技术(防止相互攻击)是防止主动攻击的重要技术。

消息验证

消息加密:以整个消息的密文作为它的验证码。

消息验证码(MAC):以一个公开函数和一个密钥作用于消息,产生一个定长数据分组,即消息验证码,并将其附加在报文中。

散列函数:一个将任意长度的消息映射为定长的散列值的公开函数,以散列值作为验证码。

消息验证码

通信双方共享一个密钥K。如果A有消息要送给B,会通过消息和密钥的函数 MACM=F(K,M) 计算出消息的验证码。

消息和验证码被传送给接收方,接收方对接收到的消息进行同样的计算,并将接收的验证码与计算出的验证码相比较。如果接收方和发送方知道密钥,而且接收的验证码与计算出的验证码相等,则:

  • 接收方能够确信消息没有被改动。
    如果攻击者改动了消息,但没有改动验证码,则接收方计算出的验证码就会与收到的验证码不同。因为攻击者不知道保密密钥,所以攻击者也就不能按消息中的改动相应地改动验证码。
  • 接收方能够确信消息确实来自其声称的来源。
    因为没有其他人知道密码,所以也没有人能够用正确的验证码来伪造消息。
  • 如果消息包含了序列号,则接收方就能够确信序列是正确的
    因为攻击者不能成功地改动序列号。

散列函数

散列值由如下形式的函数产生:
h = H ( M ) h=H(M)

当确信或已知消息正确时,散列值在发送方被加到消息上接收方通过重算那个消息的散列值来验证该消息。散列函数H必须具有性质:

  • H 能用于任何长度的数据分组
  • H 产生定长的输出
  • 对给定的 x,H(x) 要相对容易计算;
  • 对给定的码 h,寻找 x 使得 H(x) = h 在计算上是不可行的,称为单向性;
  • 对给定的分组 x,寻找不等于 x 的 y,使得 H(y) = H(x) 在计算上是不可行的,称为弱抗冲突
    (对设计者容易)
  • 寻找 (x,y) 对,使得 H(y) = H(x) 在计算上是不可行的,称为强抗冲突。(抗生日攻击)
    (对设计者难)

HMACM = Hash(K, M) 不需要密钥就能求出散列值,但 HMAC 算法是需要密钥的,并可与多种散列算法结合。如 HMAC-MD5 和 HMAC-SHA-1 。最新研究表明,MD5散列算法已不安全,必须向SHA-1转换

对散列函数最直接攻击是字典(蛮力)匹配攻击。

MD5

  • 由 Ron Rivest 提出,MD5是使用最普遍的安全散列算法。
  • 该算法以一个任意长的消息作为输入,生成 128bit 的消息摘要输出。输入按 512bit 分组。
  • 随着处理器速度的提升,128bit 散列值已经不够安全。
  • 可以看出,处理具有相同摘要两个消息需要264次操作(弱抗冲突)
    给定摘要寻找消息需要2128次操作。(强抗冲突)
    前一个数字太小,不能够保证安全。

SHA-1

SHA 由 NIST 提出,并在1995年推出了改进版本 SHA-1 。

该算法输入消息的最大长度不超过 264bit输出一个 160bit 的消息摘要。输入按 512bit 分组进行处理。

SHA-1的每位散列值都是输入位的函数,具有良好的雪崩效应。

SHA-1摘要比MD5摘要长32位, SHA-1要比MD5安全:

  • 对蛮力攻击,产生与给定报文摘要相同摘要的报文难度对于 MD5 是2128、对于 SHA-1 是2160数量级;
  • 而产生摘要相同的两个报文的难度对 MD5 是264、对于 SHA-1 是280数量级。

数字签名

消息验证用来保护通信双方免受第三方的攻击。然而它无法防止通信双方相互攻击

最吸引人的解决方案是数字签名,有如下性质:

  • 必须能够证实是作者本人的签名以及签名的日期和时间。(抗否认)
  • 在签名时必须能够对内容进行鉴别。
  • 签名必须能被第三方证实以便解决争端。

数字签名消息加密有所不同:

  • 消息加密和解密可能是一次性的,它只要求在解密之前是安全的;
  • 而一个签名的消息可能会作为一个法律上的文件,很可能在对消息签署多年以后才验证其签名,且可能需要多次验证此签名

因此,对签名的安全性和防伪造要求更高,并且要求验证速度比签名速度要快,特别是联机在线实时验证。

RSA签名体制

签名过程:

  1. 把需要签名的消息M作为一个散列函数的输入,由此输出一个定长的安全散列码;
  2. 发送方用自己的私钥KRa将这个散列码进行加密就形成签名。
  3. 此后,将消息M和签名传送出去。(完整性,不可否认性)

验证过程:

  1. 接收方接受到消息M,根据消息M计算一个散列码,同时使用发送方的公钥对签名解密。
  2. 若解密后的散列码与计算得出的散列码一致,则签名是有效的。

量子密码

某种程度上是一次一密思想的一个变体 —— 产生和传输数字(随机数)。

为实现量子密码,我们需要随机但可检测方向的光源(发送者使用的光子枪),和很可靠地过滤接收到光子的方法。

发布了170 篇原创文章 · 获赞 47 · 访问量 2万+

猜你喜欢

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