前言:关于密码学课程老师讲述重点的针对性复习
部分转载自博文:
信息安全期末复习整理
密码学(期末复习版)
密码学复习笔记1【基本概念与传统密码技术】
密码学五个性质分为机密(保密性)性、完整性、可用性、认证(真实)性和不可否认(不可追溯)性 。
计算机网络面临以下的四种威胁:截获,中断,篡改,伪造。
网络安全的威胁可以分为两大类:即被动攻击和主动攻击。
威胁指破坏安全的潜在可能,在环境、能力、行为或事件允许的情况下,它们会破坏安全 ,造成危害,也就是说,威胁是脆弱性被利用而可能带来的危险;
攻击指对系统安全的攻击,它来源于一种具有威胁的智能,即有意违反安全服务和侵犯系统安全策略的智能行为;
安全攻击:任何危及信息系统安全的行为。
安全机制:用来检测、阻止攻击或者攻击状态恢复到正常状态的过程。
安全服务:加强数据处理系统和信息传输的安全性的一种处理过程或通信服务。目的在于利用一种或者多种安全机制进行反攻击。
三者的关系:一种安全机制可以提供多种安全服务,而一种安全服务也可以采用多种安全机制。安全服务阻止安全攻击。
例题:请说明安全策略、安全攻击、安全机制与安全服务之间的关系。
答:安全服务实现了安全策略,而安全机制实现了安全服务。
安全服务是用来防范安全攻击的,它们利用了一种或多种安全机制来提供服务。共同解决安全攻击问题。
主动攻击:伪装、重播、消息修改、拒绝服务
伪装:假装别的实体。如:捕获认证信息,进行重播
重播:将获得的信息再次发送以产生非授权效果
消息修改:修改合法消息的一部分或者延迟消息,或改变消息的顺序以获得非授权效果
拒绝服务:阻止或禁止对通信设施的增产使用和管理。
被动攻击:窃听和检测
代替:明文中的元素映射成另一个元素
置换 :重新排列
要求:不允许信息丢失,即算法可逆
代替密码:
简单代替密码如:恺撒密码,移位密码,仿射密码;
多字母密码如:Playfair代替密码例、Hill密码、Vigenére密码;
置换密码:如斯巴达密码棒、Enigma恩格玛密码机;
(复杂版:)
对称密码体制(Symmetric cipher,也称为单钥密码体制、对称密钥密码体制或常规密码体制)。如果一个密码系统,它的加密密钥和解密密钥相同,或者虽然不相同,但由其中的任意—个可以很容易地导出另外一个,那么该系统所采用的就是对称密码体制。
非对称密码体制(Asymmetric cipher,也称为公开密钥密码体制、非对称密钥密码体制)。如果一个密码系统,其加密算法和解密算法分别用两个不同的密钥实现,并且由加密密钥不能推导出解密密钥,则该系统所采用的就是非对称密码体制。
采用非对称密钥密码体制的每个用户都有一对选定的密钥。其中一个是可以公开的,称为公开密钥(Public key),简称公钥;另一个由用户自己秘密保存,称为私有密钥(Private key),简称私钥。
用某种方法伪装消息以隐藏明文的内容的过程称为加密
把密文转变为明文的过程称为解密
序列密码是一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,硬件实现电路更简单;其缺点是:低扩散(意味着混乱不够)、插入及修改的不敏感性。
分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优点;其缺点是:加解密处理速度慢、存在错误传播。
关键区别:分组密码里相同的明文分组被加密成同样的密文,而序列密码不是
唯密文攻击:
密码分析者仅知道有限数量用同一个密钥加密的密文
已知明文攻击:
密码分析者除了拥有有限数量的密文外,还有数量限定的一些已知“明文—密文”对
选择明文攻击:
密码分析者除了拥有有限数量的密文外,还有机会使用注入了未知密钥的加密机,通过自由选择明文来获取所希望的“明文—密文”对。
选择密文攻击:
密码分析者除了拥有有限数量的密文外,还有机会使用注入了未知密钥的解密机,通过自由选择密文来获取所希望的“密文—明文”对。
选择文本攻击:
选择文本攻击就是选择密文攻击和选择明文攻击的结合,能构造任意的明文/密文,得到相应的密文/明文。
破译的代价超出信息本身的价值
破译的时间超出了信息的有效期
附:密码学起源1975年的工作,迪福赫尔曼1976年提出不对称密码,
(转载于密码学复习笔记1【基本概念与传统密码技术】)
单表(简单)代替密码
概述:加密变换过程就是将明文中的每一个字母替换为密文字母表的一个字母。例:恺撒(Caesar)密码。
缺点:不能抗击字母频度分析,可由统计的方法破译
单表密码的弱点:明文和密文字母之间的一一代替关系。这使得明文中的一些固有特性和规律(比如语言的各种统计特性)必然反映到密文中去。
代替密码还包括多字母密码:即明文中的字符映射到密文空间的字符还依赖于它在上下文的位置。
例:明文空间M 和密文空间C 都是26个英文字母的集合,密钥空间
K={π:Z26→Z26|π是置换},是所有可能置换的集合。
对任意π∈K,定义:
加密变换:eπ(m)=π(m)=c
解密变换:dπ© = π-1©=m, π-1是π的逆置换。
一般单表替代密码算法特点:
密钥空间K很大,|K|=26!=4×10^26,破译者穷举搜索计算不可行;
移位密码体制是替换密码体制的一个特例,它仅含26个置换做为密钥空间。
简单的来说,其实就是将字母表编号成1-26,然后如果移位1,则1号位改为z,2号位改为a,其他等同移动
当移位密码的密钥k=3时,就是历史上著名的凯撒密码(Caesar)。根据其加密函数特 点,移位密码也称为加法密码。
仿射密码算法 f(y)=(a*y + b )mod n , K=(a,b),要求a和n互素
(可能出计算题?)
欧几里德算法(辗转相除法)——求最大公因子的算法,通过欧几里德算法判断是否有gcd(a,n) = 1(最大公约数为 1 则 a,n 互素,即有乘法逆元)来判断一个正整数 a<n 是否有模n的乘法逆元
仿射密码解密算法:d(y)=a-¹ * ( y - b) mod n;a-¹ 是a的乘法逆元(a * a-¹ = 1)
举个例子:
加密算法:f(y)=3y+5 mod 26
求3的逆元就是求:3n mod 26 = 1
3 * 9 mod 26 = 1,即n = 9
∴ 解密算法:d(y)=9(y-5) mod 26⭐要注意负数的取模的情况:
比如-25 mod 26 = 1
可以理解为 -25+26 mod 26 = 1
关于这点,C/Java语言中是直接取模的,即-25 mod 26= -25,在Python中-25 mod 26 = 1再看下面的例子:
加密算法:f(y)=5y+7 mod 26
求5的逆元就是求:5*n mod 26 = 1
-5 * 5 mod 26 = 1,即n = -5
∴ 解密算法:d(y)=-5(y-7) mod 26
例:求120的欧拉数
分解质因数:120=2³ * 3 * 5
欧拉函数:φ(120) = 120 × (1-1/2) × (1-1/3) × (1-1/5) = 120 × 1/2 × 2/3 × 4/5 = 32
或者φ(120) = φ(8) × φ(3) × φ(5)= 4 × 2 × 4 = 32
又称换位密码,是根据一定的规则重新排列明文,以便打破明文的结构特性。置换密码的特点是保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序。也就是说,改变了明文的结构,不改变明文的内容。
栅栏技术:按列写按行读,每列长度为该栅栏的深度
更为复杂的方式是以一个矩形逐行写出消息,再逐列读出该消息(按行写按列读)。
矩阵的列数(n)和按列读出的顺序便是密钥。密钥包含3方面信息:行宽(密匙的位数)、列高(密文总数除以行数得到)、读出顺序(即数字顺序)
(以下转载于:古典密码——置换密码
加密
我们以字符串“hello-my-cipher”为例来演示加密过程
选择密钥,我们这里使用“4213”作为密钥。该密钥共4位,表示中间结果的矩阵共4列,4213表示按照第四列,第二列,第一列,第三列的顺序读出形成密文
生成中间结果矩阵(该行不够4个则用明文中不包含的固定字符填充,这里使用‘@’)>
h e l l
o — m y
— c i p
h e r @
按照密钥所示的列顺序读出 lyp@e-ceho-hlmir,至此加密完成
解密
解密过程即按照密钥所示的长度顺序恢复出矩阵,再按行读取即可。
加密密钥大小的范围,通常以位为单位;
当密钥长度为r时,密钥空间有2的r次方个元素。
对称密码算法:DES、AES、RC5
扩散:要求明文的统计特征消散在密文中。即让明文的每个比特影响到密文的许多比特的取值。尽可能使明文和密文的统计关系变复杂。
混淆:使密文与密钥之间的统计关系尽量复杂,以阻止攻击者发现密钥。
分组密码的结构一般分为:Feistel网络结构和SP网络结构
Feistel网络是由Horst Feistel在设计Lucifer分组密码时基于扩散和扰乱的思想所发明的,并因被DES采用而流行。
Feistel结构安全性取决参数:分组长度、密钥长度 、循环次数、子密钥算法、轮函数。
DES是一个基于组块的加密算法,这意味着无论输入还是输出都是64位长度的。DES产生了一种最多264种的变换方法。
加密步骤
密钥空间太大为2^ 112 =5×10^33
学习视频:应用密码学 | DES算法及简单编程思路讲解 | 信息安全 | 密码学
AES具有128bit的分组长度
密钥位为128bit、192bit、256 bit时,轮数分别为:10、12、14
AES算法结构
学习视频:
AES加密算法
AES算法||北邮复试||密码学
目前已提出许多种分组密码的工作模式,如电码本(ECB)、密码分组链接(CBC)、密码反馈(CFB)、输出反馈(OFB)、计数器(CTR)
转载自博客:密码学基础(一)分组密码与序列密码
总结:
模式 | 描述 | 典型应用 |
---|---|---|
电码本(CBC) | 用相同的密钥分别对明文分组独立加密 | 单个数据的安全传输(如一个加密密钥) |
密文分组链接(CBC) | 加密算法的输入是上一个密文组和下一个明文组的异或 | 面向分组的通用传播认证 |
密文反馈(CFB) | 一次处理s位,上一块密文作为加密算法的输入,产生的伪随机数输出与明文异或作为下一个单元的密文 | 面向数据流的通用传播认证 |
输出反馈(OFB) | 与CFB类似,只是加密算法的输入是上一次加密的输出,且使用整个分组 | 噪声信道上的数据流传输(如卫星通信) |
计数器(CTR) | 每个明文分组都与一个经过加密的计数器相异或。对每个后续分组计数器递增 | 面向分组的通用传播用于高速需求 |
(看懂流程图)
学习视频:应用密码学| RC4算法及其简单编程思路 | 信息安全 | 密码学
若a与n为互素的正整数,则a ∮(n) ≡ 1 mod n
原根(最小生成元)定义
存在最小正整数m < ∮ (n) (m|∮ (n) ),使得a^m ≡ 1 mod n,若对某个a,m=∮ (n),则称a是n的一个原根
求生成元方法:【密码学原理】生成元
求模公式
((a^x mod p)^y) mod p = a^xy mod p
转载博客:Diffie-Hellman算法
假设Alice和Bob希望在不安全的网络环境中协商一个对称密钥进行通信,那么可按如下步骤进行:
前提:Alice和Bob共享同一个素数p及整数g,且g是p的本原根;
1、首先Alice保存自己的私钥a(随机数),Bob也保存自己的私钥b(随机数)
2、Alice计算 A = g^a mod p,并将g,p,A发给Bob(g,p也可提前共享)
3、Bob计算 B = g^b mod p,然后将B发给Alice
4、Alice得到对称密钥K = B^a mod p = (g^b mod p)^a mod p = g^ab mod p
5、Bob同样得到对称密钥K = A^b mod p = (g^a mod p)^b mod p = g^ab mod p
中间人攻击:
转载自博客:【密码学原理】Diffie-Hellman密钥交换算法与中间人攻击
防御措施:签名认证
防御方法:密码学:设计一个安全的(没有中间人攻击)的Diffie-Hellman密钥交换协议
RSA算法的全过程
学习视频:彻底搞懂“公钥加密算法RSA”的工作原理
密码学RSA教学
计算公私钥过程:RSA算法中利用欧几里得算法求d详细过程
对称加密的优点
- 速度快,处理量大,适用于对应用数据的直接加密。
- 加密密钥长度相对较短,如40比特~256比特。
- 可构造各种加密体制,如产生伪随机数,HASH函数等。
对称加密的缺点
- 密钥在双方都要一致、保密,传递较难。
- 大型网络中密钥量大,难以管理,一般需要TTP(KDC)。
- 密钥需要经常更换。
公钥加密的优点
- 只有秘密钥保密,公开钥公开。
- 密钥生命周期相对较长。
- 许多公钥方案可以产生数字签名机制。
- 在大型网络上,所需的密钥相对较少。
公钥加密的缺点
- 速度慢,处理量少,适用于密钥交换。
- 密钥长度相对较长。
- 安全性没有得到理论证明。
消息认证保证完整性(哈希算法)、真实性(靠密钥)
散列函数是对不定长的输入产生定长输出的一种特殊函数,可用于消息认证和数字签名。
h = H(M)
其中M是变长的消息
h=H(M)是定长的散列值或称为消息摘要。
Hash函数是散列函数的一种,其性质有:
(以下转载自博客:【密码学】哈希函数-SHA
- 固定长度输入;
- 可变长度输出;
- 效率高:哈希过程简单;
- 抗原像攻击,单向性,不可逆;
- 伪随机性:输出满足伪随机;
- 抗弱碰撞性:对给定的x,找到满足H(x)=H(y)且x≠y在计算上是不可行的;
- 抗强碰撞性:找到任何满足H(x)=H(y)的数对(x,y)计算上是不可行的;
哈希算法SHA-512步骤:附加填充位,附加长度,初始化Hash缓冲区,压缩函数(以1024位分组处理信息/信息压缩),输出结果
散列函数的基本用法(考过不考):数字签名、单向口令文件、入侵检测和病毒检测、构建随机函数或伪随机函数;
md5,sha512,mac算法(带密钥)
md5分组长度为512位,报文摘要hash值是128位;
sha512分组长度为1024位(128字节),报文摘要hash值是512位;
数据认证算法
HMAC设计目标
无需修改地使用现有的散列函数
当出现新的散列函数时,要能轻易地替换
保持散列函数的原有性能不会导致算法性能的降低
使用和处理密钥的方式简单
对鉴别机制的安全强度容易分析,与hash函数有同等的安全性
HMAC是一种使用单向散列函数来构造消息认证码的方法,
设M是变长的消息,K是仅由收发双方共享的密钥,则M的MAC由如下的函数C生成:
MAC = Ck(M )
这里的Ck(M )是定长的。发送者每次将MAC附加到消息中,接收者通过重新计算MAC来对消息进行认证。
((原始消息)+ 密钥 )* 哈希函数 = 散列值\消息认证码
对密钥K左边补0以产生一个hash用块K+
K+每个字节与ipad(00110110)作XOR以产生Si
对(Si||M)进行hash
K+每个字节与opad(01011010)作XOR以产生So
HMAC = f [IV,So||f(IV,Si||M)]
消息认证码弊端:密钥的分发
消息认证码无法解决的问题:不能进行第三方证明、不能防止否认(由数字签名解决)
密码学全面学习视频:golang-密码学[对称加密, 非对称加密,哈希,消息认证码,数字签名,证书]
传统签名的基本特点:
- 与被签的文件在物理上不可分割
- 签名者不能否认自己的签名
- 签名不能被伪造
- 容易被验证
数字签名是传统签名的数字化,基本要求:
- 与所签文件“绑定”
- 签名者不能否认自己的签名
- 签名不能被伪造
- 容易被自动验证
数字签名满足条件:依赖性、唯一性、可验证、抗伪造、可用性
RSA签名算法(重点)
实现方式与过程
(RSA加密:公钥加密、私钥解密;RSA签名:私钥签名、公钥验证。)
可参考博客:RSA算法和RSA数字签名算法
RSA签名算法概述及使用
数字签名(1):RSA
会话密钥和主密钥的分配过程
创建PKI的主要目的就是用来安全、便捷、高效地获得公钥。
PKI组成要素:用户(申请及使用PKI的人)、认证机构(颁发证书的人)、仓库(保存证书的数据库);
所知:密码、口令;
所有:身份证、护照、密钥盘;
特征:指纹、笔迹、声音、DNA;
时间戳方式:A接受一个消息仅当该消息包含一个时间戳,并且该时间戳在A 看来是足够接近A所知道的当前时间。
提问/应答方式:A期望从B获得 一个新消息,首先发给B一个临时值(challenge),并要求后续从 B 收到的消息(response)中包含正确的这个临时值或是由 这个临时值进行某种事先约定的计算的正确结果。这个临 时值往往是一个随机数,称为现时(nonce)。
过程:
A→KDC:IDA || IDB || N1
KDC→A:EKa [ Ks || IDB || N1 || EKb[ Ks || IDa ]
A→B:EKb [ Ks || IDA ]
B→A:EKs [ N2 ]
A→B:EKs [ f(N2) ]
改进后的步骤(添加了时间戳):
A→KDC:IDA || IDB
KDC→A:EKa [ Ks || IDB || T || EKb[ Ks || IDA || T ]
A→B:EKb [ Ks || IDA || T ]
B→A:EKs [ N1 ]
A→B:EKs [ f(N1) ]
|Clock - T| < △t1 + △t2
缺点:双方都必须等待对方的回答,不适用于双方不同时在线的情况
基于第三方的方案可以避免这一问题:
第三方一般长期在线,双方都可以及时和第三方进行通信(去掉第4、5步)
方案:
A→KDC:IDA || IDB || N1
KDC→A:EKa [ Ks || IDB || N1 || EKb [Ks || IDA ]]
A→B:EKb [ Ks || IDA ] || EKs[ M ]
Kerberos要解决的3个问题:
一个开放的分布式网络环境中
工作站用户希望访问分布在网络各处的服务器上提供的服务
服务器应能认证用户身份,并授权。
传输模式:AH和ESP头标被插在IP头标及其他选项(或扩展头标)之后,但在传输层协议之前。它保护净荷的完整性和机密性。
隧道模式:在隧道模式下,AH或ESP头标插在IP头标之前,另外生成一个新的IP头放在前面,隧道的起点和终点的网关地址就是新IP头的源/目的IP地址,保护整个IP分组。
SSL/TLS原理详解
未见PPT,可参考博客:信息安全(五)——消息认证、数字签名及PGP
PGP的加密原理
试卷博客参考:密码学期末选择填空简答题知识点复习