这篇是密码学考试复习的个人笔记,我写的目的也是想记录一下学习生活,如果有什么错误也请大家指正
问题一
公钥密码的思想:密钥协商协议的提出的背景,单向可交换函数,DH密钥交换协议及中间人攻击,有限域上的离散对数问题;公钥密码提出的背景,单向陷门函数,利用单向陷门函数设计公钥密码的方法,安全性要求。
密钥协商协议的提出的背景
关于研究如何利用公开信道共享保密的密钥的问题
单向可交换函数
单向函数:
任给定义域中的 x x x,计算 y = F ( x ) y=F(x) y=F(x)容易,而给定 y y y求相应的 x x x使 y = F ( x ) y=F(x) y=F(x)困难 的函数
可交换性:
E a ( E b ( g ) ) = E b ( E a ( g ) ) E_a(E_b(g))=E_b(E_a(g)) Ea(Eb(g))=Eb(Ea(g)),主要保证加解密的正确性
- 有限域上的离散对数问题
- ( g a ) b m o d p = ( g b ) a m o d p (g^a)^b mod p=(g^b)^a mod p (ga)bmodp=(gb)amodp
- g a m o d p , g b m o d p → 困 难 a , b g^a mod p,g^b mod p\xrightarrow{困难}a,b gamodp,gbmodp困难a,b
- g , a , b → 容 易 g a m o d p , g b m o d p g,a,b\xrightarrow{容易}g^a mod p,g^b mod p g,a,b容易gamodp,gbmodp
DH密钥交换协议及中间人攻击
- DH密钥交换协议
公开参数: p ( 素 数 模 数 ) , g ( 生 成 元 ) p(素数模数),g(生成元) p(素数模数),g(生成元)
x 1 x_1 x1为A的私钥, x 2 x_2 x2为B的私钥
A:随机选取 x 1 ∈ Z p ∗ x_1\in Z^*_p x1∈Zp∗计算 y 1 = g x 1 m o d p y_1=g^{x_1} mod p y1=gx1modp
B:随机选取 x 2 ∈ Z p ∗ x_2\in Z_p^* x2∈Zp∗,计算 y 2 = g x 2 m o d p y_2=g^{x_2} mod p y2=gx2modp
两人交换 y 1 y_1 y1和 y 2 y_2 y2的值
公钥 k = g x 1 x 2 m o d p k=g^{x_1x_2}mod p k=gx1x2modp
A计算 y 2 x 1 = g x 1 x 2 y_2^{x_1}=g^{x_1x_2} y2x1=gx1x2,B计算 y 1 x 2 = g x 1 x 2 y_1^{x_2}=g^{x_1x_2} y1x2=gx1x2
DH密钥交换协议实现的目标:A,B之间共享了一个只有他们知道的密钥K.
-
中间人攻击:(主动攻击)
α \alpha α冒充B和A共享了一个密钥 k 1 k_1 k1
α \alpha α冒充A和B共享了一个密钥 k 2 k_2 k2
根本原因:缺乏消息源的认证
公钥密码提出的背景
对称密码的密钥的分配、存储与管理是非常棘手的问题
单向陷门函数
一个函数如果满足如下两个特性:
-
任给定义域中的 x x x,计算 y = F ( x ) y=F(x) y=F(x)容易
-
如果不知道函数F的构造特性,则对于值域中的y,求相应的 x x x,使 y = F ( x ) y=F(x) y=F(x)是计算困难;若知道F的构造特性,则求满足 y = F ( x ) y=F(x) y=F(x)成立的 x x x容易。
则称为单向陷门函数,构造特性叫作陷门.
利用单向陷门函数设计公钥密码的方法&&安全性要求
设计公钥密码的方法
①将做为加密变换公开
②任何人均可将明文 x x x经 F F F加密得到密文 y = F ( x ) y=F(x) y=F(x)
③合法用户利用陷门信息容易由 y y y求 x x x,实现脱密
④不掌握陷门信息者无法由密文求得明文。
安全性要求
①由公开密钥无法解出保密密钥。
②无解密密钥的用户无法由密文求得明文
问题二
RSA算法:RSA基于的单项陷门函数是什么?基于的数学困难问题是什么?算法原理(密钥生成,加密和解密算法);安全性分析,包括选择明文攻击,选择密文攻击,攻击成功的原因是什么?对RSA的共模攻击。如何对RSA算法进行改进,使得其能够抵抗选择明文攻击。
RSA基于的单项陷门函数是什么?
n n n是一个大合数,若 ( e , φ ( n ) ) = 1 , f ( x ) = x e m o d n \big(e,\varphi(n)\big)=1,f(x)=x^e\:mod\:n (e,φ(n))=1,f(x)=xemodn是一个单向陷门函数
y = f ( x ) = x e m o d n y=f(x)=x^e\:mod\:n y=f(x)=xemodn其中 ( e , φ ( n ) ) = 1 \big(e,\varphi(n)\big)=1 (e,φ(n))=1
x = f − 1 ( y ) = y d m o d n x=f^{-1}(y)=y^d\:mod\:n x=f−1(y)=ydmodn其中 e d ≡ 1 ( m o d p ) ed\equiv1(mod\:p) ed≡1(modp)
解密过程: ( m e ) d ≡ m m o d n , e d ≡ 1 m o d ( φ ( n ) ) (m^e)^d\equiv m\:mod\:n,ed\equiv1\:mod\big(\varphi(n)\big) (me)d≡mmodn,ed≡1mod(φ(n))( m m m为明文, n , e n,e n,e为公开参数, d d d为私钥)
基于的数学困难问题是什么?
大整数分解问题的困难性, φ ( n ) \varphi(n) φ(n)的求解是困难的
若已知的整数 n n n分解形式,则容易求出 d d d,若的整数 n n n分解形式是未知的,则求解 d d d是困难的。
n = p q n=pq n=pq(p,q均为大素数) φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ(n)=(p−1)(q−1)
*知道公钥 e e e求出 d d d必须有 φ ( n ) \varphi(n) φ(n)*
算法原理(密钥生成,加密和解密算法)
密钥生成
首先选取两个大素数 p p p 和 q q q,计算出 N = p q , φ ( p q ) = ( p − 1 ) ( q − 1 ) N=pq,\varphi(pq)=(p-1)(q-1) N=pq,φ(pq)=(p−1)(q−1)
选取加密密钥 e e e满足 1 < e < φ ( N ) 1<e<\varphi(N) 1<e<φ(N)且 ( e , φ ( N ) ) = 1 \big(e,\varphi(N)\big)=1 (e,φ(N))=1**(加密密钥 e e e的取值最多有 φ ( φ ( N ) ) \varphi\big(\varphi(N)\big) φ(φ(N))个,对于 R S A RSA RSA变形算法, e e e的取值最多有 φ ( λ ( N ) ) \varphi\big(\lambda(N)\big) φ(λ(N))个), λ ( N ) = l c m ( p − 1 , q − 1 ) ) \lambda(N)=lcm(p-1,q-1)) λ(N)=lcm(p−1,q−1))**
由 e d ≡ 1 m o d ( φ ( N ) ) ed\equiv1\:mod\big(\varphi(N)\big) ed≡1mod(φ(N))求出 e e e的唯一逆元 d d d,作为脱密密钥
加密
使用公钥 e e e加密明文 m m m,计算 E ( m ) ≡ m e ≡ c m o d N E(m)\equiv m^{e}\equiv c\:mod\:N E(m)≡me≡cmodN,得到密文 c c c
解密
使用私钥 d d d脱密计算$D©\equiv c^d\equiv m:mod:N , 得 到 明 文 ,得到明文 ,得到明文m$
安全性分析:选择明文攻击,选择密文攻击,攻击成功的原因是什么?对RSA的共模攻击。
选择明文攻击(小明提前获取考试成绩)
攻击者建立一个字典,字典包含各个明文对应的密文
成功原因:在一个RSA中密文和明文一一对应
选择密文攻击
成功原因:RSA的乘法同态性
c = E ( m ) = m e m o d N c=E(m)=m^e\:mod\:N c=E(m)=memodN
( m 1 m 2 ) e m o d N = ( ( m 1 e m o d N ) ( m 2 e m o d N ) ) m o d N (m_1m_2)^e\:mod\:N=\big((m_1^e\:mod\:N)(m_2^e\:mod\:N)\big)\:mod\:N (m1m2)emodN=((m1emodN)(m2emodN))modN
E ( m 1 m 2 ) = E ( m 1 ) E ( m 2 ) E(m_1m_2)=E(m_1)E(m_2) E(m1m2)=E(m1)E(m2)
攻击者能够查询A的解密机!则攻击者可以得到特定密文对应的明文
对RSA的共模攻击
共模 R S A RSA RSA体制:系统中用户使用相同的 N N N
-
共模RSA系统中任一用户均可破译系统中其他用户的加密消息。
( e A , d A ) → 分 解 N (e_A,d_A)\xrightarrow{}分解N (eA,dA)分解N(此处证明复杂,略
我也不会)( N , e B ) → d B (N,e_B)\xrightarrow{}d_B (N,eB)dB
-
共模RSA系统中广播信息是不安全的
c 1 = m e 1 , c 2 = m e 2 c_1=m^{e_1},c_2=m^{e_2} c1=me1,c2=me2
若 g c d ( e i , e j ) = 1 gcd(e_i,e_j)=1 gcd(ei,ej)=1,存在 s , t s,t s,t使得 s e i + t e j = 1 se_i+te_j=1 sei+tej=1
m = m s e i + t e j m o d N = m e i s m e j t m o d N = c i s c j t m o d N m=m^{se_i+te_j}\:mod\:N=m^{e_is}m^{e_jt}\:mod\:N=c_i^sc^t_j\:mod\:N m=msei+tejmodN=meismejtmodN=ciscjtmodN
已知 ( c 1 , c 2 , e 1 , e 2 , N ) (c_1,c_2,e_1,e_2,N) (c1,c2,e1,e2,N)可求出 m m m
对小加密指数e的攻击
主要是利用孙子定理求解明文
m
m
m先鸽了
问题三
E I G a m a l EIGamal EIGamal算法:算法的设计思想的来源是什么?算法原理(密钥生成,加密和解密算法)。在实际应用中,若需要加密的消息是全0比特,该怎么处理?对 E I G a m a l EIGamal EIGamal的选择密文攻击过程是什么?借鉴SM2加密算法的设计思想,如何将其改成一个选择密文安全的算法。
算法的设计思想的来源是什么?
D i f f i e − H e l l m a n Diffie-Hellman Diffie−Hellman密钥交换协议+有限域上的离散对数问题
算法原理(密钥生成,加密和解密算法)
公开参数 p ( 大 素 数 ) , g ( 生 成 元 ) p(大素数),g(生成元) p(大素数),g(生成元), A A A和 B B B通信:
B → A : Y = g y m o d p B\xrightarrow{}A:Y=g^y\:mod\:p BA:Y=gymodp
A → B : X = g x m o d p , c = m Y x m o d p A\xrightarrow{}B:X=g^x\:mod\:p,c=mY^x\:mod\:p AB:X=gxmodp,c=mYxmodp
密钥生成
会话密钥: s k = x y = g x y m o d p sk=x^y=g^{xy}\:mod\:p sk=xy=gxymodp
加密算法
c = m Y x m o d p c=mY^x\:mod\:p c=mYxmodp,传输 ( X , c ) (X,c) (X,c)
解密算法
m = c ˙ ( s k ) − 1 m=c\:\dot{}(sk)^{-1} m=c˙(sk)−1
???在实际应用中,若需要加密的消息是全0比特,该怎么处理?
- 选取的私钥取值范围改为 [ 1 , p − 1 ] → [ 0 , p − 2 ] [1,p-1]\xrightarrow{}[0,p-2] [1,p−1][0,p−2]
- 使用哈希避免明文全为0的情况
未知
对 E I G a m a l EIGamal EIGamal的选择密文攻击过程是什么?
攻击者已知 c = ( c 1 , c 2 ) c=(c_1,c_2) c=(c1,c2)求明文 m m m
c 1 = g k m o d p , c 2 = h k ⋅ ( m o d p ) c_1=g^k\:mod\:p,c_2=h^k\cdot(mod\:p) c1=gkmodp,c2=hk⋅(modp)
攻击者查询 c = ( c 1 , c 2 m ‘ ) c=(c_1,c_2m`) c=(c1,c2m‘)得到 m ‾ \overline{m} m
m = m ‾ ⋅ m ‘ − 1 m=\overline{m}\cdot{}{m`}^{-1} m=m⋅m‘−1
成功的原因:密文的可延展性:给定一份密文
c
c
c,可以得到
与该密文相关的新密文。
???借鉴SM2加密算法的设计思想,如何将其改成一个选择密文安全的算法。
**问题四
ECC:有限域上的椭圆曲线上的特殊加法运算;基于椭圆曲线的DH密钥交换协议;MV算法原理;对MV算法的选择密文攻击过程。
问题五
**杂凑函数:杂凑函数的安全性要求,重要应用领域;**自由碰撞攻击的成功率和数据复杂度之间的关系;利用分组密码算法设计消息认证码的方法
杂凑函数的安全性要求
- 单向性(求第一原像不可行).
给出一个杂凑值 z z z,求出一个 m m m ,使 H ( m ) = z H(m)=z H(m)=z 成立,在计算上不可行的。
- 弱无碰撞性(求第二原像不可行)
任意给定一个报文$ m_1 , 找 出 另 一 个 不 同 的 报 文 ,找出另一个不同的报文 ,找出另一个不同的报文 m_2 , 使 得 ,使得 ,使得 H(m_2) = H(m_1)$ 在计算上不可行。
- 强无碰撞性
找出具有相同杂凑值$ H(m_1) = H(m_2) 的 两 份 不 同 的 报 文 的两份不同的报文 的两份不同的报文 m_1 和 和 和 m_2$ ,在计算上是不可行的。
重要应用领域
- 数据完整性检验
- 伪随机数生成
- 数字签名
- 密钥推导(??)
???利用分组密码算法设计消息认证码的方法
。。。这是对称密码的部分
问题六
**数字签名: 具有什么特点的公钥加密可转换为数字签名?RSA数字签名原理,针对RSA数字签名方案,分析为什么不能直接对消息进行签名,而必须对消息的杂凑值进行签名?**DSA数字签名的原理。基于对称密码算法、公钥加密算法、数字签名、杂凑函数的保密通信模式。
具有什么特点的公钥加密可转换为数字签名?
并非所有的公钥加密算法都能实现数字签名,只有当加密变换和脱密变换可交换时才可以。
因为数字签名需要签名人使用自己的私钥对自己的消息进行加密得到签名,然后验证者使用公钥验证签名,相当于是对公钥加密的逆运算。
RSA数字签名原理
发送方 A A A的参数: N A , e A , d A N_A,e_A,d_A NA,eA,dA
A A A使用私钥 d A d_A dA签名消息 m m m,计算 y ≡ m d A m o d N A y\equiv m^{d_A}mod\:N_A y≡mdAmodNA,发送 ( y , m ) (y,m) (y,m)发给 B B B
B使用公钥 ( N A , e A ) (N_A,e_A) (NA,eA)验证,计算 m 1 ≡ y e A m o d N A m_1\equiv y^{e_A}mod\:N_A m1≡yeAmodNA
m 1 = m ⇔ y 是 A 对 m 的 签 名 m_1=m\Leftrightarrow y是A对m的签名 m1=m⇔y是A对m的签名
针对RSA数字签名方案,分析为什么不能直接对消息进行签名,而必须对消息的杂凑值进行签名?
RSA数字签名方案的签名密钥是 ( d , N ) (d,N) (d,N), 对消息 m 1 m_1 m1的签名是 s 1 s_1 s1,对消息 m 2 m_2 m2的签名是 s 2 s_2 s2,则对消息 m 1 m 2 m o d N m_1m_2mod\:N m1m2modN的签名值是 s 1 s 2 s_1s_2 s1s2,无法抵抗伪造攻击
根本原因:RSA的乘法同态性
???基于对称密码算法、公钥加密算法、数字签名、杂凑函数的保密通信模式。
问题七
身份加密方案与传统公钥加密相比,最大的不同是什么?双线性性质是什么,双线性性质的灵活运用。
身份加密方案与传统公钥加密相比,最大的不同是什么?
不需要CA(CA:证书颁发、撤销、更新等)
证书的目的:将Bob的公钥与Bob的身份进行绑定。
???双线性性质是什么,双线性性质的灵活运用。
双线性对:双线性对是定义在代数曲线上的一个可有效计算的双线性映射。