大三上学期的密码学课程主要对于经典的密码算法与常用的密码标准进行了简要的介绍,本博客是本人在期末考试前整理的复习提纲,仅供参考。
信息安全:网络信息系统中,涉及到信息传输、信息存储以及对网络传输信息内容等各个环节的安全。
信息安全涉及到信息的保密性、完整性、可用性、可控性。
安全性是一种抵御可能的风险和威胁的能力
威胁是对安全的潜在破坏(不一定是实际发生才成为威胁)
攻击行为:
安全需求:
安全服务:使得系统安全得到保护而免受威胁的服务
安全策略:辨识威胁,定义出确保安全的条件
安全机制:检测和预防攻击,并且从攻击中成功的恢复工作
密码系统组成——五元组(M,C,K,E,D)
密码分析:利用某些先验知识从密文中恢复出明文,或者得到密钥
统计规律是密码分析的重要依据
密码体制:
密码攻击:
古典密码方法:
代换密码
Caesar密码:穷举法——密钥空间仅25个元素,明文具有可读性
移位密码:需满足交换整环,无法抵抗穷举攻击——安全密码体制的密钥空间必须足够大
单表代换密码:密钥为26个字母的一个排列,密钥空间大小26!,抵抗穷举攻击,但是存在语言的统计特性
仿射密码: e ( x ) = a x + b ( m o d 26 ) e(x)=ax+b(mod 26) e(x)=ax+b(mod26) g c d ( a , m ) = 1 gcd(a,m)=1 gcd(a,m)=1 密钥空间大小 ϕ ( m ) × m \phi(m)\times m ϕ(m)×m
playfair密码:多表代换密码,一次加密多个字符。双字母音节->双字母音节。隐藏部分统计规律,但是仍存在统计规律。
Hill密码:一次加密多个字符 m个明文->m个密文。完全掩盖单字母频率特性,抵抗唯密文攻击。不能抵抗已知明文攻击,m个明密文对即可攻破密钥。
多表代换密码:多个单字母代换表,每个字符确定使用哪个字母表。每隔密钥长度的整数倍,出现单表代换。
一次一密:密钥管理很困难。不可破译的。
置换技术:
栅栏加密:密文以对角线顺序写为几行,按照行顺序读出来
换位技术:明文写为矩阵块,再按列读出,列顺序打乱。列顺序就是密钥
转轮机:复杂的代换密码。每个圆筒是一个周期为26的多表代换
一次一密在唯密文攻击下无条件安全,其余算法在唯密文攻击下无法计算安全
分组密码:信息被分块进行加密和解密,连续明文元素使用相同的密钥K来加密
我国颁布的商用密码标准算法中的序列密码算法和分组密码算法分别是ZUC(祖冲之密码)和SM4算法
分组大小选择:分组小——安全性差;分组大:实现困难
Feistel类密码:交替使用替代和换位的方式构造密码(理论基础是Shannon提出用混淆和扩散交替的方式构造密码)
可逆变换:n位明文产生n位密文,共有 2 n 2^n 2n不同明文组,要求每一个明文组唯一的对应一个密文组,共 2 n ! 2^n! 2n!个可逆变换
分组长度为n=4的理想分组密码的密钥长度是 n × 2 n n \times 2^n n×2n
混淆:密钥和密文之间的统计关系尽可能复杂,组织攻击者发现密钥
扩散:明文的统计特征消散在密文中
Feistel密码:基于可逆的成绩密码,目标是逼近简单代换密码。(使用shannon的SPN概念)
Feistel密码分组越长安全性越高,但是降低加解密速度。64位合适,密钥长度128位
DES算法:分组长度64位,密钥长度56位
简化DES:分组长度8位,密钥长度10位
密码分析:
雪崩效应:明文或者密钥的微小变化将对密文产生很大影响(输入或者密钥的1bit变化引起比特一半的变化)
DES具有严格雪崩效应(S盒的输入位i发生变化,输出位j发生变化的可能性为1/2)
DES具有位独立准则:对于任意ijk,当任意输入比特变化时,输出j和k应该独立变化(古典密码不具有这两种性质)
计时攻击不能攻击DES
差分密码分析需要 2 47 2^{47} 247对选择明文密文——对DES无效(穷举攻击代价 2 55 2^{55} 255,差分密码分析代价 2 55.1 2^{55.1} 255.1
线性密码分析需要 2 43 2^{43} 243对已知明文密文
DES是最成功的商用密码算法
分组密码的设计准则:雪崩效应、不可预料性
双重DES:定义的映射大部分不为单个DES所定义( 2 64 ! a n d 2 56 2^{64}! and 2^{56} 264!and256
无法抵御中间相遇攻击:已知两组明文密文对,付出 2 56 2^{56} 256的代价可以攻击密钥空间尺寸为 2 112 2^{112} 2112的双重DES(第二次出错概率为 1 / 2 16 1/2^{16} 1/216)
三重DES:已知明文攻击的代价上升为 2 112 2^{112} 2112,若使用三个不同密钥则密钥长度为168位,EDE则密钥长度为112位。
Merkle Hellman攻击(针对K1=K3):所需明文密文对数量为 2 56 2^{56} 256,所需代价为 2 56 2^{56} 256
已知明文攻击(针对K1=K3):给定n个已知明文密文对,所需代价为 2 120 − l o g n 2^{120-logn} 2120−logn
3DES的应用:PGP,S/MIME
优点:密钥足够长并且密码分析攻击免疫力很强
缺点:DES的设计主要针对硬件实现,但是在软件实现的领域,DES效率相对较低
IDEA算法:国际数据加密算法(international data encryption algorithm )
分组长度为64位,密钥长度为128位。64位明文分成4块进行8轮迭代,同一个算法进行加解密,可以抵抗差分攻击。
混淆和扩散来自逐位异或,模加运算和模乘运算,易于软硬件实现
软件实现比DES快两倍
抗穷举攻击(4轮以后),抗差分攻击(四轮以后)
存在极其少的弱密钥,但是被选中的概率为 1 / 2 96 1/2^{96} 1/296
AES算法:原型是Square算法,可以抵抗差分分析和线性分析
迭代分组密码,分组长度和密钥长度可变
分组长度为128位,密钥长度位128/192/256位,相应轮数位10/12/14
不是Feistel结构,加解密算法不同
加密与解密均以轮密钥加开始,进行9轮迭代(字节代换、行移位、列混淆、轮密钥加)第10轮只包含字节代换、行移位、轮密钥加
仅在轮密钥加阶段使用密钥,每个阶段均可逆
密钥扩展算法将4个字的初始密钥扩展位44个字(每个字32bit,4字节)
SM4算法:我国商用密钥标准算法中的分组密码算法
迭代分组密码算法,分组长度128bit,密钥长度128bit,加密算法和密钥扩展算法都采用32轮迭代,是非平衡的Feistel结构(L0与R0的长度不同)
安全性与AES相当
电码本模式ECB:相同密钥对各个明文组分别加密,明文长度大于64位,明文分段,最后一段需要填充(相同64位明文对应相同64位密文)
对各个分组的加密彼此独立,应用为单个数据的安全传输
利于并行计算,没有误差扩散
密码分组链接模式CBC:消息分块通过加密进行链接,已加密的密文分组与当前的明文分组链接在一起(应用为对大量数据的加密和认证)
最后一个block小于64bit时需要填充(填充null或者写入填充个数)
优点:每个密文分组均依据之前的全部分组,对任意一个分组的改动都会影响后继的所有密文分组,需要随机选择的初始向量
缺点:攻击者获得IV则可以对接收者明文中的部分位取反
明文块的误差会传递到之后所有密文块,密文块依赖前面所有明文块,不利于并行计算
改变IV的值影响解密出的第一块明文。改变密文的一位会导致所在分组完成改变和下一分组的对应位改变,不会影响到其他明文块
密码反馈模式CFB:消息看作比特流,本质是分组加密,可以实现流密码。实现每次对任意比特的加密。
用途:流密码加密、认证
适合数据流的加密,但是和流密码的典型构造不一致
可以及时加密传送小于分组长度的数据
已知全部密文时,解密过程可以并行(但是不可以并行加密)
每得到s个输入比特,需要暂停进行分组加密
存在误差扩散
输出反馈模式OFB:消息看作比特流,加密函数的输出反馈回移位寄存器作为下一次的输出(反馈值可以提前计算)
用途:有信道噪声环境下的流密码
优点:传输过程中比特差错不会扩散
缺点:对抗消息流篡改攻击的能力弱于CFB。密文取反则解密后的明文也取反
绝对不能重复使用相同的密钥序列和IV,发送方和接收方必须同步
计数器模式CTR:分组加密的输入是计数,对每个明文使用不同的密钥和计数器值。可以并行处理(应用为高速网络加密)
优点:可以并行处理多块明文密文,可以预计算,随机访问,
一位密文改变只有对应一位密文发生变化
在使用了真正的随机数生成器且计数器值不重用前提下是选择明文攻击安全的
随机数:认证方案,回话密钥产生,RSA公开密钥加密算法中密钥的产生
检验随机程度的两个准则:均匀分布,独立性
伪随机数:确定算法生成,但是可以经受随机性检测的算法
随机性测试:均匀性,可伸缩性,一致性,不可预测程度
频率测试:0/1个数与真随机序列的期望 大致相等(最基本)
Mayrer通用统计测试:是否可以大幅压缩数据且不损失信息
线性同余法:m选定为计算机所能表示最大素数
知道序列的一小部分,不可预测程度变得很差
X9.17伪随机数产生器:在金融安全及PGP中使用(使用日期时间作为种子)
BBS产生器:基于公钥算法
优点:在续位测试下,满足不可预测性;安全性给予分解大整数N的困难性
缺点:很慢(n太大),仅适用于密钥生成
通信保密:链路加密、端对端加密
链路加密:通信链路两端加上加密设备,链路上信息传输安全
端对端加密:源主机加密数据,密文通过网络传给目的主机。源主机与目的主机共享一个密钥
两种方式的共用:主机用端对端加密密钥来加密用户数据,整个分组使用链路加密(仅在分组交换节点的存储器内可以看到信息头的明文)
链路加密位置:OSI的物理层或者链路层
端到端加密位置:网络层或者传输层,表示层或应用层
加密所在逻辑层次越高,需要加密的数据越少且越安全
流量分析攻击:监控成员间的通信量、消息数目、消息长度等
可以分析得到通信双方的身份,通信双方通信的频率,报文模式、长度、数量,特定的通信之间关联的事件
防范措施:
网络层/IP层实现端对端加密,要求每对主机要有一对密钥
应用层实现端对端加密,每对通信用户/进程需要一对密钥
主密钥:KDC与用户共享,长期
会话密钥:用于数据加密,临时
需要包含对于KDC的认证,通信主体的认证和消息新鲜性的认证
层次KDC方案:一系列KDC,之间存在层次关系,不同区域之间的通信通过上一层KDC进行。主密钥的分配工作量减小,整个系统鲁棒性强。
会话密钥的生命周期:
密钥使用方式:
整数:…,-n,…,-1,0,1,…,n,…
整数的加法运算形成群{Z,0,+}
整数对加法和乘法运算形成整环{Z,+,*,0,1}
素数:只能被1和自身整除
复数:除了1和自身还能被其他正整数整除
Eculid算法(辗转相除法)
Eculid扩展算法
整数唯一因子分解:每一个大于1的整数a都可以唯一的分解为素数的连乘积(可用于求最大公因数和最小公倍数)
整数同余:满足加法、减法、乘法的变换
完全剩余系:用同余关系将整数集合Z分为m个等价类
非负最小完全剩余系:{0,1,…,m-1}=Z_m,是模m的
简化剩余系:模m的完全剩余系中去掉与m不互素的那些数
Euler函数:简化剩余系中的元素个数(不超过m且与m互素的数个数)
Euler定理:a与n互素,则 a ϕ ( n ) ≡ 1 a^{\phi(n)} \equiv 1 aϕ(n)≡1(mod n)
a ϕ ( n ) ≡ a a^{\phi(n)} \equiv a aϕ(n)≡a(mod n)(不需要a与n互素)
ϕ ( 1 ) = 1 \phi(1) = 1 ϕ(1)=1
ϕ ( p ) = p − 1 \phi(p) = p-1 ϕ(p)=p−1
ϕ ( p k ) = p k − 1 ( p − 1 ) \phi(p^k) = p^{k-1}(p-1) ϕ(pk)=pk−1(p−1)
m1=m2, ϕ ( m 1 m 2 ) = ϕ ( m 1 ) ϕ ( m 2 ) \phi(m_1m_2)=\phi(m_1)\phi(m_2) ϕ(m1m2)=ϕ(m1)ϕ(m2)
$\phi(m) = m \prod_{i=1}^n(1-1/p_i) $
Fermat小定理:p为素数,p不能整除a, a p − 1 ≡ 1 a^{p-1}\equiv 1 ap−1≡1(mod p)
a k ( p − 1 ) ≡ 1 a^{k(p-1)} \equiv 1 ak(p−1)≡1(mod p) a k ( p − 1 ) + r ≡ a r a^{k(p-1)+r} \equiv a^r ak(p−1)+r≡ar(mod p)
素性测试:判断一个大整数是否为素数(概率性的算法而非确定性的)
Miller-Rabin算法为概率算法:返回的结果几乎肯定是素数
中国剩余定理(孙子定理):加快求模的速度,可以并行运算
次数:使得 a i a^i ai(mod m序列出现重复的最小正整数k
原根:如果a mod m的次数为 ϕ ( m ) \phi(m) ϕ(m),则a为m的一个原根
并非所有整数都有原根,m有原根的充要条件是2,4, 2 n p k 2^np^k 2npk, p k p^k pk
原根个数为 ϕ ( ϕ ( m ) ) \phi(\phi(m)) ϕ(ϕ(m))个
离散对数问题:计算 x = l o g g y x=log_gy x=loggy(mod m)(比较困难)
若g是m的原根,则离散对数问题一定有整数解,否则可能无解
公钥密码:每个用户拥有一对公私钥对,公钥公开,私钥保密(已知公钥算法和公钥无法得到私钥)
公钥用于加密和验证签名,私钥用于解密和签名
不对称性是公钥最为重要的性质(保证真实性,不可否认性)
单向函数:给定x计算f(x)容易;给定f(x)计算x困难
离散对数问题DLP是单向函数(p为素数,b=2)
陷门单向函数:存在k,已知k时对给定f(x)计算x是容易的
RSA公钥密码:安全性基于大整数分解问题的困难
参数n=pq(pq are both large primes)
公钥e满足e与 ϕ ( n ) \phi(n) ϕ(n)互素
私钥 d = e − 1 d=e^{-1} d=e−1(mod ϕ ( n ) \phi(n) ϕ(n))
加密 c = m e c = m^e c=me(mod n)
解密 m = c d m = c^d m=cd(mod n)
明文空间和密文空间为Z_n,分组为 l o g 2 n log_2n log2nbit
公开参数:大模数n,公钥e
秘密参数:大素数pq,私钥d
RSA算法正确性
RSA安全性:如果n的素数分解是已知的,那么攻破RSA可行
n的长度512bit->1024/2048bit
pq不仅大,而且p-q大且pq为强素数
e= 2 16 + 1 2^{16}+1 216+1,e为小整数时运算快,但是安全性差
d要大于 n 1 / 4 n^{1/4} n1/4
针对RSA攻击:
参数选择不当:pq应当为随机素数且不应该太接近(选择pq几比特不同)
共模攻击:使用相同的n并且存在两个公钥e1和e2互素,则:
小e攻击:e很小时广播加密遭遇的攻击:
计时攻击:指数中某一位为0或者1时,硬件加密速度不同:
硬件实现速度是DES的1/100,软件实现速度是DES的1/10
关于公钥密码的误解:
Diffie-Hellman密钥协商(公钥体制的思想来源,但是基于公钥的密钥分配算法)
攻击者想从alice或bob的公钥中求出会话密钥K则必须解离散对数问题
中间人攻击
ElGamal加密算法
攻击:(均可以抵御)
椭圆曲线密码学:较短的参数长度实现同样的安全级别(基于离散对数的安全性)应用在运算能力较低的环境中
消息认证:验证所收到的信息确实来自真正的发送方,且未被修改。
目的:实体认证、消息认证
抵抗攻击:伪装、消息内容修改、重放攻击、延时攻击
三类认证函数:报文加密,报文认证码(MAC),散列函数(HASH)
报文加密:对称加密和公钥加密
对称加密:
公钥加密:
散列函数:任意长度 消息映射为较短的定长输出信息的函数(为分组数据产生数字指纹)
性质:
简单散列函数算法:不满足三个性质,但是在模式匹配中有用
Merkle Damgard结构:如果压缩函数f具有抗碰撞能力,则MD结构定义的hash函数也抗碰撞
MD5算法:输入任意长度信息,输出128位hash输出,以512位数据块处理数据,4轮操作,每轮16步
2005年,王小云教授找到MD5碰撞的快速算法
MD4算法:小于 2 64 2^{64} 264输入产生128位输出,经过3轮,每轮16步
2 6 2^6 26次运算就可以找到MD4的碰撞,攻击MD4的代价为 2 10 2^{10} 210
MD5的强抗碰撞性代价 2 33 2^{33} 233,弱抗碰撞性没有实用结果
安全Hash函数:SHA-1:输入最大长度为 2 64 2^{64} 264位的信息,输出160位hash值,以512位数据块处理输入。——2005年王小云找到SHA-1碰撞
SHA-1进行4轮,每轮20步
SHA-2系列:输出长度256/384/512
SHA3函数:Keccak依赖基于海绵结构的海绵函数,状态更新使用在三维数组上的五步迭代排列
硬件实现优势明显(与SHA2设计存在极大差别)
消息认证码(MAC):对选定报文M,使用密钥K,产生一个短小定长数据分组,附加在报文中提供认证功能
消息认证码与对称加密区别:类似加密函数,但是它不可逆——比加密函数更难破解;MAC不能实现保密性;认证函数不提供数字签名
消息认证码使用方式:
数据认证码DAC:基于DES的MAC,使用DES的CBC模式,输入长度为mn(m为固定值,n为分组加密的分组长度)可以用于处理不定长的输入
基于密文的CMAC:使用三个密钥克服DAC的长度限制
HMAC:hash函数的软件执行速度比对称加密快 H K ( M ) H_K(M) HK(M)
同时实现认证性和保密性:
CCM模式:
GCM模式:
数字签名:给以电子形式存储的消息进行签名,签名后的消息可以通过计算机网络传输
数字签名作用:
数字签名特征:
RSA签名方案:
公钥:e,n
私钥:d,n
签名 S ≡ M d S \equiv M^d S≡Md(mod n)
验证 V e r ( M , S ) = 1 Ver(M,S)=1 Ver(M,S)=1 iff M ≡ S e M \equiv S^e M≡Se(mod n)
RSA问题 :
DSS签名:
使用的算法是DSA,改进自EIGamal和Schnorr签名方案
使用了SHA,安全性基于求离散对数的困难性
全局公钥p, q, g——p为1024bit以上大素数;q是p-1的素因子,为160bit的素数;g= h ( p − 1 ) / q h^{(p-1)/q} h(p−1)/q(mod p)且g不为1
私钥x:x为(0,q)内的随机数
公钥y: y ≡ g x y \equiv g^x y≡gx(mod p)
DSA攻击:如果k暴露,则攻击者可以从签名中恢复出私钥
如果对两个不同的消息使用了同样的k进行签名,攻击者也可以恢复出私钥
公钥的分配途径:
Kerberos的使用环境和基本模块:Kerberos是用于分布式系统中安全的进行客户与服务器之间的认证服务。分为三个模块:Client,Server和Kerberos(包括AS和TGS和存放用户标示和用户口令的数据库)
Kerberos工作步骤(六步):
X.509协议:基于公钥密码体制和数字签名的服务
A和B都到可信任的证书中心CA去,CA各为他们颁发一个证书,此后每当A和B想向对方验证身份时,只需要把自己的证书发给对方就可,对方看到这是我信任的CA颁发的证书,那么就用CA的公钥去验证这个证书的真实性,如果验证通过了,那么A也就相信B的身份了。
若不同CA发放的用户证书,则A将有X1签名的X2的证书,从而A只要拥有X1的公钥就可以从证书中获得X2的公钥,并用X1的签名来验证证书。
证书的撤销:在旧证书失效前发放新证书
提前撤销证书:
Web安全的需求:随着互联网的发展,企业、公司、组织在互联网上进行电子商务的活动量也就增加了,于是他们需要一个安全的网络传输,这就是Web安全的需求
SSL协议在传输层,由SSL握手协议、SSL修改密文协议、SSL告警协议以及SSL记录协议构成。
握手协议:通信实体在交换应用数据之前协商密钥算法、加密密钥。(首先利用证书验证对方身份,其次用公钥加密传输预主秘钥,最后利用这个预主秘钥产生的各种秘钥,包括会话秘钥、初始向量以及验证秘钥,来利用对称加密加密数据)
不强制要求双向的认证
IpSec协议在网络层,是由AH(仅用于提供认证服务)和ESP协议(可提供有限的认证服务以及保密服务)构成
IPSec结构:
安全关联SA:定义了通信对等方之间所采用安全机制各要素间的一种单向关系(由安全参数索引、IP目的地址和安全协议标识符唯一表示)确定协议的操作模式、密码算法、密钥和密钥的生存期
认证头AH:为IP包提供数据完整性和鉴别功能(不提供加密),鉴别范围为整个包,鉴别模式:
利用MAC码实现鉴别,双方必须共享一个密钥
封装安全载荷ESP:将需要加密的用户数据进行加密后再封装到一个新的IP包中,ESP只鉴别ESP头之后的信息
两种模式:传输模式和隧道模式
传输模式:主机提供加密和认证
隧道模式:主机没有保护能力
密钥管理:密钥确定和密钥分配(默认IKE协议)
ISAKMP:提供可由任意密钥交换协议使用的通用密钥交换框架
Oakley:基于Diffie-Hellman密钥协商
PGP算法:加密、签名以及混合集成到一个程序中,不由政府或标准化组织开发控制
S/MIME:商用或组织使用的工业标准