第二章 流密码
1.完善保密性的基本概念
- 分析者不能通过观察密文得到明文(必要性)
- 单表代换密码不完善的原因在于使用同一个密钥代换得到的明文和密文具有相同的概率分布特性
2.熵的定义和基本性质(未更)
3.一次一密本加密
- 使用与消息长度等长的随机密钥,密钥本身只使用一次
4.什么是流密码
- 用密钥k和种子产生密钥流,用密钥流对明文进行加密,得到密文
- 密文用同样的密钥流解密可以得到明文
5.常见流密码算法有哪些
- RC4
- A5
第三章 分组密码
1.分组密码体制的基本概念、基本方法
-
一个明文分组被当作一个整体来产生一个等长(通常)的密文分组的密码
-
分组密码的一般设计原理
分组密码是将明文消息编码表示后的数字(简称明文数字序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长输出数字(简称密文数字)序列
-
-
扩散
将明文及密钥的影响尽可能迅速地散步到较多个输出的密文中(将明文冗余部度分散到密文中)。产生扩散的最简单方法是通过“置换Permutation”(比如:重新排列字符) 实现方式: 使得密文的每一位由明文中多位产生
-
混淆
目的在于使作用于明文的密钥和密文之间的关系复杂化,使明文和密文之间、密文和密钥之间的统计相关特性极小化,从而使统计分析攻击不能奏效。通常的方法是替换(substitution)(回忆凯撒密码) 实现方式: 使用复杂的代换算法可得预期的混淆效果,而简单的线性代换函数得到的混淆效果不够理想
2.Feistel 密码结构的特点
1.Feistel 加密结构
输入: 分组长为2w的明文和一个密钥K
将每组明文分成左右两半L0和R0,在进行完n轮迭代后,左右两半再合并到一起以产生密文分组
其中第i轮迭代的输入为前轮输出的函数:
Li = R i-1 1
Ri = L i-1 ^ F(R i - 1,K i) 2
其中^ 为异或,K i 是第i轮用的子密钥,由加密密钥K得到,一般,各轮自密钥彼此不同而且与K也不同
2.Feistel网络的实现与以下参数和特性有关
(1)分组大小,分组越大则安全性越高,但加密速度就越慢。分组密码设计中最为普遍使用的分组大小为64bit
(2)密钥大小。密钥越长则安全性越高,但加密速度就越慢。现在64bit不安全,通常用128bit
(3)轮数,多轮结构会更安全,典型用16轮
(4)子密钥产生算法。该算法的复杂性越高,密码分析的困难性就越大
(5)轮函数。轮函数的复杂性约高,密码分析的困难性也越大。
3.Feistel解密结构
R i-1 = Li
L i-1 = Ri ^ F(R i-1 , K i) = Ri ^ F(Li,Ki)
3.常见分组密码算法
1.DES加密流程
2.AES加密(未更)
4.分组密码的运行模式及其主要特点
0.CTR(未更)
1.电码本模式(ECB)
描述:一次对一个64bit长的明文分组加密,而且每次的加密密钥都相同。
用途:传送端数据
特性:若同一明文分组在消息中重复出现,则产生的密文分组也相同
安全性: 长消息时可能不够安全,如果消息有固定结构,密码分析者有可能找出这种关系。
优点 :
(1)实现简单;
(2)不同明文分组的加密可并行实施,尤其是硬件实现时速度很快
缺点 :
(1)相同明文分组对应相同密文分组
(2)不能隐蔽明文分组的统计规律和结构规律, 不能抵抗替换攻击
应用:
(1)用于随机数的加密保护
(2)用于单分组明文的加密
2.密码分组链接模式(CBC) 重点
为了解决ECB的安全缺陷,可以让重复的明文分组产生不同的密文分组,CBC (Cipher Block Chaining)模式就可满足这一要求。
描述:加密算法的输入是当前明文组与前一密文组的异或
用途:传送数据分组;认证;
特性:
1. 明文块的统计特性得到了隐蔽,由于在CBC模式中,各密文块不仅与当前明文块有关,而且还与以前的明文块 及初始化向量有关,从而使明文的统计规律在密文中得到了较好的隐藏。
2. 具有有限的(两步) 错误传播特性
一个密文块的错误将导致两个密文块不能正确解密。
3. 具有自同步功能
密文出现丢块和错块不影响后续密文块的解密. 若从第t块起密块正确,则第t+1个明文块就能正确求出。
3.密码反馈模式(CFB)
DES是分组长为64比特的分组密码,但利用CFB(Cipher Feed Back)模式或OFB模式可将DES转换为流密码。流密码不需要对消息填充,而且运行是实时的。因此如果传送字母流,可使用流密码对每个字母直接加密并传送。
流密码具有密文和明文一样长这一性质,因此,如果需要发送的每个字符长为8比特,就应使用8比特密钥来加密每个字符。如果密钥长超过8比特,则造成浪费。
4.输出反馈模式(OFB)
OFB(Output Feed Back)模式的结构类似于CFB,见图不同之处如下:OFB模式是将加密算法的输出反馈到移位寄存器,而CFB模式中是将密文单元反馈到移位寄存器。
OFB的缺点是它比CFB模式更易受到对消息流的篡改攻击,比如在密文中取1比特的补,那么在恢复的明文中相应位置的比特也为原比特的补。因此使得敌手有可能通过对消息校验部分的篡改和对数据部分的篡改,而以纠错码不能检测的方式篡改密文。
5.比较
第四章 公钥密码
1.对称密码与公钥密码各自的优缺点
对称密码体制:保密性,运算速度快,适合加密,大量数据
公钥密码体制:保密性,密钥分配,认证;运算速度慢,适合加密少量数据。
如:用公钥密码加密传送分组密码的密钥
2.公钥密码体制的基本概念、基本原理
公钥密码算法的最大特点:采用两个相关密钥,将加密和解密能力分开,
加密:用其中一个密钥加密(公开,也称公钥)
解密:用其中一个密钥解密(保密,也称密钥)
##公钥密码体制也称为双钥密码体制或非对称密码体制。
算法有以下重要特性:已知密码算法和加密密钥,求解密密钥在计算上是不可行的。
3.RSA 加密算法及其安全性分析
1.RSA算法描述
1.密钥的产生
1.选两个保密的大素数p和q
2.计算n = p x q,φ(n) = (p-1)x(q-1),其中φ(n)是n的欧拉函数值
##欧拉函数值是比n小,跟n互素的数的个数
3.选一整数e,满足 1<e<φ(n),且gcd(φ(n),e) = 1#即e与φ(n)互素
4.计算d,满足 d·e === 1 mod φ(n)#即求e在模φ(n)下的逆元
5.以{e,n}为公钥 {d,n}为密钥
2.加密
1.将明文比特串分组,使得每个分组对应的十进制数小于n,即分组的长度小于log2n。
2.对明文分组m,作加密运算: c === m^(e) mod n
3.解密
对密文分组的解密运算为: m ===c^(d) mod n
2.安全性分析
1.RSA的安全性是基于分解大整数的困难性假定的。
2.如果n被成功分解为pxq,则立即获得φ(n)=(p-1)x(q-1).从而确定e模φ(n)的乘法逆元d
3.目前1024bit已经被成功破解,采用2048bit才安全
缺陷:
RSA存在以下两种攻击,并不是因为算法本身存在缺陷,而是由于参数选择不当造成的。
1. 共模攻击(略)
2. 低指数攻击(略)
4.椭圆曲线密码的优点
1.安全性高(重点)
椭圆曲线密码体制比基于有限域上的离散对数问题的公钥体制更安全。
2.密钥量小(重点)
在实现相同的安全性能条件下,椭圆曲线密码体制所需的密钥量远比基于有限域上的离散对数问题的公钥体制的密钥量小
3.灵活性好
限域GF(q)一定的情况下,其上的循环群(即GF(q)-{0})就定了。而GF(q)上的椭圆曲线可以通过改变曲线参数,得到不同的曲线,形成不同的循环群。因此,椭圆曲线具有丰富的群结构和多选择性。
- 相比RSA,椭圆曲线密码可用更短的密钥得到相同的安全性
5.El Gamal 加密算法
第五章 密钥分配与密钥管理
1.对称密码体制的密钥分配基本方法
1.密钥分配的基本方法
两个用户(主机、进程、应用程序)在用单钥密码体制进行保密通信时,首先必须有一个共享的秘密密钥,而且为防止攻击者得到密钥,还必须时常更新密钥。因此,密码系统的强度也依赖于密钥分配技术。
两个用户A和用户B获得共享密钥的方法:
1.密钥由A选取,并通过物理手段发给B
2.密钥由第三方选取,并通过物理手段发给AB
#以上两种称为人工发送,如果有n个用户,则密钥数目为n(n-1)/2。因此当n很大时,密钥分配的代价非常大,密钥的人工发送是不可行的。
3.如果AB事先已经有一密钥,则一方通过该密钥加密新密钥发给另一方
#缺点:攻击者一旦获得一个密钥就可获取以后所有的密钥;而且用这种方法对所有用户分配初始密钥时,代价仍然很大。
4.如果AB与第三方C分别有一保密通道,则C为AB选取密钥后,分别在保密通信上发送给AB
#比较常用
#其中的第三方通常是一个负责为用户分配密钥的密钥分配中心。这时每一用户必须和密钥分配中心有一个共享密钥,称为主密钥。通过主密钥分配给一对用户的密钥称为会话密钥,用于这一对用户之间的保密通信。通信完成后,会话密钥即被销毁。如上所述,如果用户数为n,则会话密钥数为n(n-1)/2。但主密钥数却只需n个,所以主密钥可通过物理手段发送。
2.会话密钥的有效期
-
会话密钥更换得越频繁,系统的安全性就越高(正面作用)。因为敌手即使获得一个会话密钥,也只能获得很少的密文。
-
但另一方面,会话密钥更换得太频繁,又将延迟用户之间的交换,同时还造成网络负担(负面影响)。所以在决定会话密钥的有效期时,应权衡矛盾的两个方面。
3.无中心的密钥控制
- 用密钥分配中心为用户分配密钥时,要求所有用户都信任KDC,同时还要求对KDC加以保护。
- 如果密钥的分配是无中心的,则不必有以上两个要求。然而如果每个用户都能和自己想与之建立联系的另一用户安全地通信,则对有n个用户的网络来说,主密钥应多达n(n-1)/2个。当n很大时,这种方案无实用价值,但在整个网络的局部范围却非常有用。
2.公钥密码体制的密钥分配基本方法
1.公钥的分配
1.公开发布
公开发布指用户将自己的公钥发给每一其他用户,或向某一团体广播。例如PGP(pretty good privacy)中采用了RSA算法,它的很多用户都是将自己的公钥附加到消息上,然后发送到公开(公共)区域,如因特网邮件列表。
缺点:任何人都可伪造这种公开发布。如果某个用户假装是用户A并以A的名义向另一用户发送或广播自己的公开钥,则在A发现假冒者以前,这一假冒者可解读所有意欲发向A的加密消息,而且假冒者还能用伪造的密钥获得认证。
2. 公用目录表
公用目录表指一个公用的公钥动态目录表,其建立、维护以及公钥的分布由某个可信的实体或组织承担,称这个实体或组织为公用目录的管理员。与第1种分配方法相比,这种方法的安全性更高。
该方案有以下一些组成部分:
- 管理员为每个用户都在目录表中建立一个目录,目录中有两个数据项: 一是用户名,二是用户的公钥。
- 每一用户都亲自或以某种安全的认证通信在管理者那里为自己的公钥注册。
- 用户如果由于自己的公钥用过的次数太多或由于与公钥相关的秘密钥已被泄露,则可随时用新密钥替换现有的密钥。
- 管理员定期公布或定期更新目录表。例如,像电话号码本一样公布目录表或在发行量很大的报纸上公布目录表的更新。
- 用户可通过电子手段访问目录表,但从管理员到用户必须有安全的认证通信。
本方案的安全性虽然高于公开发布的安全性,但仍易受攻击。如果敌手成功地获取管理员的秘密钥,就可伪造一个公钥目录表,以后既可假冒任一用户又能监听发往任一用户的消息。而且公用目录表还易受到敌手的窜扰。
3. 公钥管理机构(未更完)
如果在公钥目录表中对公钥的分配施加更严密的控制,安全性将会更强。与公用目录表类似,这里假定有一个公钥管理机构来为各用户建立、维护动态的公钥目录,但同时对系统提出以下要求,即:每个用户都可靠地知道管理机构的公钥,而只有管理机构自己知道相应的秘钥。公钥的分配步骤如下
1.用户A向公钥管理机构发送一个带时戳的消息,消息中有获取用户B的当前公钥的请求。
2.管理机构对A的请求作出应答,应答由一个消息表示,该消息由管理机构用自己的秘密钥SKAU签名,因此A能用管理机构的公钥验证,并使A相信这个消息的确是来源于管理机构。
4.公钥证书
上述公钥管理机构分配公开钥时也有缺点,由于每一用户要想和他人联系都需求助于管理机构,所以管理机构有可能成为系统的瓶颈,而且由管理机构维护的公钥目录表也易被敌手窜扰。
分配公钥的另一方法是公钥证书,用户通过公钥证书来互相交换自己的公钥而无须与公钥管理机构联系。
公钥证书由证书管理机构CA(Certificate Authority)为用户建立,其中的数据项有与该用户的秘密钥相匹配的公开钥及用户的身份和时戳等,所有的数据项经CA用自己的秘密钥签字后就形成证书
3.Diffie-Hellman 密钥交换协议
4.数字证书的主要内容及其作用
公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。
数字证书的基本架构是公开密钥PKI,即利用一对密钥实施加密和解密。其中密钥包括私钥和公钥,私钥主要用于签名和解密,由用户自定义,只有用户自己知道;公钥用于签名验证和加密,可被多个用户共享。
数字证书的基本工作原理主要体现在:
1.发送方在发送信息前,需先与接收方联系,同时利用公钥加密信息,信息在进行传输的过程当中一直是处于密文状态,包括接收方接收后也是加密的,确保了信息传输的单一性,若信息被窃取或截取,也必须利用接收方的私钥才可解读数据,而无法更改数据,这也有利保障信息的完整性和安全性。
2.数字证书的数据签名类似于加密过程,数据在实施加密后,只有接收方才可打开或更改数据信息,并加上自己的签名后再传输至发送方,而接收方的私钥具唯一性和私密性,这也保证了签名的真实性和可靠性,进而保障信息的安全性。
作用:保证信息和数据的完整性和安全性
第六章 消息认证和哈希函数
信息安全面对的攻击类型
- 被动攻击:获取消息的内容、业务流分析
- 主动攻击:假冒、重发、消息的篡改、业务的拒绝
消息认证验证接收信息
- 真实性(的确是由它所声称的实体发的)
- 完整性(未被篡改、插入、删除)
- 顺序性和时间性(未重排、重放、延迟)
同时要保证消息的不可否认性 (防止通信双方中的某一方对所传输消息的否认)
通过数字签名实现,同时数字签名也可以用来抗击主动攻击
1.消息认证码的基本定义及使用方式
消息认证码:消息被一个密钥控制的公开函数作用后产生的、用作认证符的、固定长度的数值,也成为密码校验和。
步骤如下:
- 需要通信双方A和B共享一密钥K
- A需要发送信息M
- 用M计算 MAC=CK(M), 其中CK()是密钥控制的公开函数
- A发送M || MAC
- B接收后,对M做同样的计算,即计算得到MAC
- 比较MAC是否相等
实现的功能:
- 接收方相信发送方发来的消息未被篡改(因为攻击这不知道密钥,不能够算出篡改消息M后正确的MAC)
- 接收方小心发送方不是冒充的(除了收发方,无人知道密钥,不可能对自己发送的消息计算出正确的MAC)
2.消息认证码的构造方法
对MAC来说,由于产生MAC的函数一般都为多到一映射,如果产生n比特长的MAC,则函数的取值范围即为2^n个可能的MAC,函数输入的可能的消息个数N≫2n,而且如果函数所用的密钥为k比特,则可能的密钥个数为2k。
数据认证算法是最为广泛使用的消息认证码中的一个
算法基于CBC模式的DES算法,其初始向量取为零向量。需被认证的数据(消息、记录、文件或程序)被分为64比特长的分组D1,D2,…,DN,其中最后一个分组不够64比特的话,可在其右边填充一些0,然后按以下过程计算数据认证码
3.散列函数(哈希函数)的定义及使用方式
- 哈希函数:一个公开函数、用于将任意长度的消息M映射为较短的、固定长度的一个值H(M)
作为认证符,称函数值H(M)为哈希值、哈希码或消息摘要 - 哈希码由消息中所有的bit生成,因此改变消息中任意一个值都会改变哈希码,提供错误检测的能力
哈希函数用来提供消息认证的基本使用方式。
思考:为什么要对哈希码加密再发送呢?
因为哈希函数是一个公开函数,如果不加密,攻击者可以篡改发送消息,用公开的哈希函数算出哈希值再发给接收方,此时消息被篡改了。
思考:为什么要单独对哈希码加密呢?
因为有时候通信不需要提供数据保密性,只需要提供信息可靠性,因此可以单独加密哈希码再和消息一起发送,
这样接收方就可以拿到加密的哈希码,用共享的密钥解密,再跟用H(M)比较,验证消息的可靠性。
思考:哈希函数跟消息认证的区别是什么?
消息认证码: 其中 MAC=CK(M),这里的CK(M)是密钥控制的公开函数
哈希函数:一个公开函数,用于将任意长度的消息M映射为较短的、固定长度的一个值H(M),作为认证符,称函数值H(M)为哈希值、哈希码或消息摘要
可以这样理解,哈希函数是消息认证码的一个工具,用来对消息明文作一个映射。而消息认证码中CK(M)的K就是密钥的意思,他是依赖于密钥的一个公开函数
CK(M)包含了两步
1.H(M)#对消息明文作哈希
2.EK(H(M))#做哈希值作加密
以上见解仅个人理解,有误可联系小编。
-
消息与哈希码链接后用单钥加密算法加密,由于所用密钥仅为收发双方A、B共享,因此可保证消息的确来自A并且未被篡改。同时还由于消息和哈希码都被加密,这种方式还提供了保密性。
发送方: M(消息) || H(哈希码) ,将M和H链接,再做加密发给接收方 接收方: 将消息解密,再分解出M和H,对M作H(M),和收到的H比较是否相同,达到判断身份的效果
-
用单钥加密算法仅对哈希码加密,这种方式用于不要求保密性的情况下,可减少处理负担。
前提:双方拥有共享密钥K 发送方:将哈希码加密,和M链接发送给接收方,即 发送M||E(H) 接收方:对接收的消息拆分,拆分成M和E(H),解密出H,再对M作H(M),比较,达到判断身份的效果 相比于上一种方式,减轻了加密明文的压力,速度更快,但仅局限于不要求保密性的通信
-
用数字签名算法和发送方的秘钥仅签名哈希码,和2一样,这种方式提供认证性,又由于只有发送方能产生加密的哈希码,因此这种方式还对发送方发送的消息提供了数字签名,事实上这种方式就是数字签名
-
消息的哈希值用数字签名算法和发送方的秘钥加密后与消息链接,再对链接后的结果用单钥加密算法加密,这种方式提供了保密性和数字签名
名词解释:
M:明文消息SKA:用于前面的私钥
E:签名/加密
PKA:用于认证的公钥
D:认证/解密
K:双方共享的密钥,用于加解密
-
秘密值链接后哈希,跟明文消息链接直接发送
用这种方式时要求通信双方共享一个秘密值S,A计算消息M和秘密值S链接在一起的哈希值,并将此哈希值附加到M后发往B。因B也有S,所以可重新计算哈希值以对消息进行认证。由于秘密值S本身未被发送,敌手无法对截获的消息加以篡改,也无法产生假消息。这种方式仅提供认证
-
秘密值链接后再哈希,跟明文消息链接加密发送
这种方式是在5中消息与哈希值链接以后再增加单钥加密运算,从而又可提供保密性
由于加密运算的速度较慢,代价较高,而且很多加密算法还受到专利保护,因此在不要求保密性的情况下,方式2和3将比其他方式更具优势。
4.散列函数(哈希函数)的安全性要求
哈希函数的目的是为需认证的数据产生一个“指纹”。为了能够实现对数据的认证
哈希函数应满足的条件:
-
函数的输入可以是任意长的
-
函数的输出是固定长的
-
已知x,求H(x)是容易的,可用硬件或者软件实现
前三个条件是消息认证的基本要求
-
已知h,h=H(x),求x是不可行的,即满足单向性
这个条件对使用秘密值的认证技术极为重要。 假设哈希函数不具有单向性,则敌手可以根据H(M||S)求出 M||S,从而得到S,认证则失效。
-
已知x,找出一个y使得H(y)=H(x)是不可行的,弱单向哈希函数
这个条件使得敌手无法在已知某个消息时,找到与该消息具有相同哈希值的另一消息 在上述2和3的情况下,消息明文不要求有保密性,只对哈希值进行了加密或者签名。 这种情况,敌手不能知道哈希值的加密或签名的密钥,则无法修改哈希值,但敌手可以修改明文消息,使得修改后明文消息的哈希值跟原来相同。 因为哈希函数是公开的,如果敌手能找到一个消息明文使得它的哈希值与原来的哈希值相同,则接收方无法知道该信息被篡改过。
-
找出任意x和y,使得H(x)=H(y)是不可行的
用于抵抗生日攻击
5和6给出了无碰撞性的概念,如果哈希函数,给不同的输入可产生相同的输出,则称该哈希函数有碰撞性
5.生日攻击
-
第Ⅰ类生日攻击:
已知一哈希函数H有n个可能的输出,H(x)是一个特定的输出,如果对H随机取k个输入,则至少有一个输入y使得H(y)=H(x)的概率为0.5时,k有多大?
答案:1−[1−1/n]^k
-
生日悖论
在k个人中至少有两个人的生日相同的概率大于0.5时,k至少多大?当k=23时,P(365,23)=0.5073,即上述问题只需23人,人数如此之少。
若k=100,则P(365,100)=0.9999997,即获得如此大的概率。
之所以称这一问题是悖论是因为当人数k给定时,得到的至少有两个人的生日相同的概率比想象的要大得多。这是因为在k个人中考虑的是任意两个人的生日是否相同,在23个人中可能的情况数为C(23,2)=253。 -
生日攻击
6.常见的散列函数(MD5、SHA、SM3 等)(未更)
- MD5
- SHA
- SM3