网安笔记04 公钥密码体制

公钥密码体制

公钥密码体制的基本概念

保密性:确保信息只被授权的人访问
认证:确认某实体/数据源的真实性

保密性需要考虑到

  • 不可否认性
  • 数据完整性

保密系统要考虑

  1. 达到实际上不可破
  • 接获密文、某些明文密文对,决定密钥或者明文是不可行的
  1. Kerckhoff原则 保密性不依赖于加密体制或算法的保密,而是密钥

  2. 加密和解密算法适用于所有密钥空间中的元素

  3. 便于实现、使用方便

在这里插入图片描述
保密系统模型

( M , C , K 1 , K 2 , E k 1 , D k 2 ) (M,C,K_1,K_2,E_{k1}, D_{k2}) (M,C,K1,K2,Ek1,Dk2)

  1. 明文消息空间 M M M
  2. 密文消息空间 C C C
  3. 密钥空间 K 1 K1 K1 K 2 K2 K2:在单钥体制下 K 1 = K 2 = K K1 =K2 =K K1=K2=K,此时密钥 k ∈ K k ∈ K kK 需经安全的密钥信道由发方传给收方
  4. 加密变换: E k 1 ∈ E , m → c = E k 1 ( m ) E_{k1} ∈E, m→c=E_{k1}(m) Ek1Emc=Ek1(m),其中 k 1 ∈ K 1 , m ∈ M , c ∈ C k_1∈K_1, m∈M, c∈C k1K1mM,cC 由加密器完成。
  5. 解密变换: D k 2 ∈ D , c → m = D k 2 ( c ) D_{k2}∈D,c→m= D_{k2}(c) Dk2Dcm=Dk2(c),其中 k 2 ∈ K 2 , m ∈ M , c ∈ C k_2∈K_2, m∈M, c∈C k2K2mM,cC, 由解密器实现。

密码体制分类

单钥加密

  • 流密码 STREAM CIPHER
  • 分组密码 BLOCK CIPHER

在这里插入图片描述

双钥加密体制
m = D k B 2 ( c ) = D k B 2 ( E k B 1 ( m ) ) m = D_{kB2}(c) = D_{kB2}(E_{kB1}(m)) m=DkB2(c)=DkB2(EkB1(m))

公开密钥 k B 1 k_{B1} kB1与密文 c c c推出明文 m m m与密钥 k B 2 k_{B2} kB2是不可行的

在这里插入图片描述

双钥认证体制

Alice吧自己密钥 k A 2 k_{A2} kA2对消息m进行 A A A的专用变换 D k A 2 D_{kA2} DkA2.A 计算密文 c = D k A 2 ( m ) c = D_{kA2}(m) c=DkA2(m)给用户B。B验证 m = E K A 1 ( c ) = E k A 1 ( D k A 2 ( m ) ) m = E_{KA1}(c) = E_{kA1}(D_{kA2}(m)) m=EKA1(c)=EkA1(DkA2(m))是否成立

k A 2 kA2 kA2保密,无法伪造密文 c c c,所以可以认证A的身份

在这里插入图片描述

对称密码公钥密码
一般要求相同密钥 共享密钥加密解密算法相同 密钥不同
发送方有加密or解密密钥,接收方有另一个密钥
安全要求密钥保密
无密钥无法解密
知道算法和密文无法确定密钥
保密其中一个密钥
无密钥无法解密
知道算法、密文、其中一个密钥无法确定另一个密钥
思路简单相互推导出密钥 K e K_e Ke公钥无法推断 K d K_d Kd私钥

理论上可以推断,实际上计算量太大,难以实施

构造公钥算法的考虑

  1. 对称算法: 混乱替换
  2. 数学特性:公钥可推导私钥,但难以实现
  3. 单向函数

公钥密码学

基础

单向函数

定义 1. f是A集合到B集合的映射 f : A → B f:A\rightarrow B f:AB,并且是单射,1-1映射或可逆函数

定义 2:可逆函数 f : A → B f:A\rightarrow B f:AB 若满足

  1. ∀ x , x ∈ A \forall x , x \in A x,xA
  2. 几乎所有 x ∈ A 几乎所有x\in A 几乎所有xA,难以由 f ( x ) f(x) f(x)求出 x x x

定义 3: 陷门单向函数是一类满足下述条件的单向函数

f z : A z → B z , z ∈ Z f_z:A_z\rightarrow B_z, z\in Z fz:AzBz,zZ

Z是陷门信息集合
对所有的 z ∈ Z z\in Z zZ 给定z容易找到一对算法 E z , D z E_z,D_z Ez,Dz,有如下性质

f z ( x ) = E z ( x ) D z ( f z ( x ) ) = x f_z(x) = E_z(x) \\ D_z(f_z(x))=x fz(x)=Ez(x)Dz(fz(x))=x
并且 ∀ z ∈ Z \forall z \in Z zZ 给定 E z 和 D z E_z和D_z EzDz 对所有 x ∈ A x\in A xA很难从 f z ( x ) f_z(x) fz(x)算出x

单向函数

  1. 多项式球根
  2. Discrete Logarithm
  3. Factorization Problem
  4. Knapsack problem
  5. Diffie-Hellman
  6. Quadratic Residue
  7. SQROOT

公钥、密钥体制密钥管理

  1. 公钥可公开,只需要保留私钥
  2. 发送方可以用人人皆知的接受方公开密钥对发送的信息进行加密,安全的传送给该接受方,然后由接受方用自己的私有密钥进行解密

公钥分发
公钥加密
数字签名

安全性:

  1. 困难
  2. 理论能破解,实际难破解
  3. 足够长密钥 > 512bits
  4. 密钥太长导致速度慢。多用于对称密钥传递

RSA公钥密码算法

密码分析者尚不能证明其安全性,但也不能否定其安全性
—— 特殊的可逆模指数运算
—— 加密/数字签名
—— 比DES慢100-1000倍

其安全性依赖于大整数分解的难度(integer fact orization problem)

参数

  • n = p q n = pq n=pq
  • ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n) = (p-1)(q-1) ϕ(n)=(p1)(q1)
  • 公钥e ( e , ϕ ( n ) ) = 1 (e, \phi(n)) = 1 (e,ϕ(n))=1
  • 私钥d d = e − 1   m o d   ϕ ( n ) d = e^{-1} \ mod\ \phi(n) d=e1 mod ϕ(n)
  • encryption m → c = m e   m o d   n m\rightarrow c = m^e\ mod\ n mc=me mod n
  • decryption c → c d = m   m o d   n c\rightarrow c^d = m\ mod\ n ccd=m mod n

算法说明

  1. q和p是两个奇素数。 n = p q n = pq n=pq
  2. 计算n的欧拉函数 ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n) = (p-1)(q-1) ϕ(n)=(p1)(q1)
  3. 选择一个整数e,e满足 1 ≤ e < ϕ ( n ) ∧ ( e , ϕ ( n ) ) = 1 1\le e < \phi(n) \land (e,\phi(n)) = 1 1e<ϕ(n)(e,ϕ(n))=1
  4. 得到mod ϕ ( n ) \phi(n) ϕ(n)下e的逆元 d = e − 1   m o d   ϕ ( n ) d = e^{-1}\ mod\ \phi(n) d=e1 mod ϕ(n)
  5. 公钥是n,e 密钥是d(p和q不能泄露)

E p u b ( x ) = x e   m o d   n D p r i ( y ) = y d   m o d   n E_{pub}(x) = x^e\ mod\ n\\ D_{pri}(y) = y^d\ mod\ n Epub(x)=xe mod nDpri(y)=yd mod n

作用

加解密
和A不相识,B知道A的公钥也可以保密通讯。要保护公开密钥,防止修改与替换??

数字签名、身份认证

  1. A公开密钥 ( e , n ) (e, n) (e,n),私钥 d d d,于是A对消息m签名 s = H ( m ) d   m o d   n s = H(m)^d\ mod\ n s=H(m)d mod n 其中 H ( m ) H(m) H(m)为杂凑函数(hash函数)
  2. 如何验证A对m签名的有效性? H ( m ) = s e   m o d   n H(m) = s^e \ mod\ n H(m)=se mod n, 进行比对
  3. 针对 篡改,伪造、抵赖(否认)、假冒
  4. 对公开密钥“保护” —— 不能修改

加密和数字签名(上述两种方法)同时使用

  1. A公钥 : ( e 1 , n 1 ) (e_1, n_1) (e1,n1); A私钥: d 1 d_1 d1
  2. B公钥 : ( e 2 , n 2 ) (e_2, n_2) (e2,n2); B私钥: d 2 d_2 d2
  3. A发消息m给B,签名
  4. A算出 c = ( ( m e 2    m o d    n 2 ) ) d 2   m o d   n 1 c = (( m^{e_2}\ \ mod \ \ n_2))^{d_2}\ mod\ n_1 c=((me2  mod  n2))d2 mod n1
  5. A发c给B
  6. B验证 m = ( ( c e 1    m o d    n 1 ) d 2    m o d    n 2 m = ((c^{e_1}\ \ mod\ \ n_1)^{d_2}\ \ mod\ \ n_2 m=((ce1  mod  n1)d2  mod  n2

密钥交换

  1. A和B使用堆成密钥(IDEA or DES)加密消息m
  2. 用RSA交换单钥加密体制密钥
  3. B产生工作密钥k,找到A的公开密钥 ( e , n ) (e,n) (e,n)
  • B 计算 c = k e    m o d    n c = k^e\ \ mod \ \ n c=ke  mod  n
  • A 计算 k = c d    m o d    n k = c^d\ \ mod\ \ n k=cd  mod  n

example

p1 = 47
p2 = 71
n = 47 * 71 = 3337
\phi(n) = 46 * 70 = 3220

设置e = 79
d   = e^{-1} mod 3220
    = e^(\phi(3220) - 1) mod 3220
    = 1019

明文x = 688 232 687 966 688 3
分组
arr = [688, 232, 687, 966, 3]

for i in arr:
    i = i ^ (e) mod n;

解密 
for i in arr
    i = i ^ (d) mod n;

原理

欧拉定理
M k ϕ ( n ) + 1 = M    m o d    n M^{k\phi(n) + 1} = M\ \ mod\ \ n Mkϕ(n)+1=M  mod  n

上式中
n = p × q n = p\times q n=p×q
ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n) = (p - 1)(q - 1) ϕ(n)=(p1)(q1)
选择 e , d 使得 e × d = 1    m o d    ϕ ( n ) 选择e,d使得 e\times d = 1\ \ mod\ \ \phi(n) 选择ed使得e×d=1  mod  ϕ(n)
存在 k 使得 e × d = 1 + k × ϕ ( n ) 存在k使得e\times d = 1 + k\times \phi(n) 存在k使得e×d=1+k×ϕ(n)
得到
C d = ( M e ) d = M 1 + k ϕ ( n ) = M    m o d    n C^d = (M^e)^d = M ^{1 + k\phi(n)} = M \ \ mod \ \ n Cd=(Me)d=M1+kϕ(n)=M  mod  n

安全性?

  1. RSA的安全性取决于模n分解的困难性。人们完全可以设想有另外的途径破译RSA,如求解密指数d或找到(p1-1)(p2-1)等。

但这些途径都不比分解n来得容易 —— 从RSA加密的密文恢复某些bit的困难性也和恢复整组明文一样困难

  1. 其他途径:从n求出 ϕ ( n ) \phi(n) ϕ(n) 得到 p , q p, q p,q
    n − ϕ ( n ) + 1 = p q − ( p − 1 ) ( q − 1 ) + 1 = p + q n - \phi(n) + 1 = pq -(p - 1)(q-1)+1=p + q nϕ(n)+1=pq(p1)(q1)+1=p+q
    但求出它的欧拉函数等价于分解n。然而还是不知道其他方法能破解RSA且不等价于大数分解

  2. 迭代攻击
    给定
    ( n , e , y ) = ( 35 , 17 , 3 ) (n,e,y) = (35,17,3) (n,e,y)=(35,17,3)
    由于
    y 0 = y = 3 y_0=y=3 y0=y=3
    计算出
    y 1 = 3 17 = 33   m o d   35 y_1=3^{17}=33\ mod\ 35 y1=317=33 mod 35
    再计算
    y 2 = y 1 17 = 33   m o d   35 y_2 = y_1^{17}=33\ mod \ 35 y2=y117=33 mod 35
    对x加密多次可以再现。但当n足够大的时候,攻击方法成功概率为0

  3. 选择明文
    攻击者收集用户A的密文(以密钥e加密)
    y = x e   m o d   n y=x^e\ mod\ n y=xe mod n

为了分析消息x。选择随机数
r < n r < n r<n
计算
y 1 = r e   m o d   n y 2 = y 1 × y   m o d   n y_1=r^e\ mod \ n \quad y_2 = y_1\times y\ mod\ n y1=re mod ny2=y1×y mod n

攻击者 A A A请A对消息 y 2 y_2 y2进行解密得到

s = y 2 d   m o d   n s=y_2^d\ mod\ n s=y2d mod n

攻击者计算
s r   m o d   n = x \frac{s}{r} \ mod\ n = x rs mod n=x
得到明文 x x x

(攻击者找了个明文r,用e和n把r变成y1, y1和y处理变成y2,让A解密y2得到s。s/r mod n得到明文x)

  1. 共用模
    多人共用同一模数 n n n, 各自选择 e , d e,d e,d。 简单但不安全。 共用模秦广下,两个密钥互素,可用任意密钥恢复明文 —— 概率方法可分解n和用确定性
    算法可计算某一用户密钥而不需要分解n

  2. 低加密指数攻击
    加密钥e选择得太小,则容易受到攻击

e e e选择3, 模为 n 1 , n 2 , n 3 n_1,n_2,n_3 n1,n2,n3 密文如下
y 1 = x 3   m o d   n 1 x < n 1 y 2 = x 3   m o d   n 2 x < n 2 y 3 = x 3   m o d   n 3 x < n 3 y_1 = x^3\ mod\ n_1\quad x<n_1\\ y_2 = x^3\ mod\ n_2\quad x<n_2\\ y_3 = x^3\ mod\ n_3\quad x<n_3\\ y1=x3 mod n1x<n1y2=x3 mod n2x<n2y3=x3 mod n3x<n3
n 1 , n 2 , n 3 n_1,n_2,n_3 n1,n2,n3互质,可以使用中国剩余定理,用 y 1 , y 2 , y 3 y_1, y_2, y_3 y1,y2,y3求出 y = x 3   m o d   ( n 1 , n 2 , n 3 ) y = x^3 \ mod\ (n_1,n_2,n_3) y=x3 mod (n1,n2,n3)
x比三个模校,于是有 x 3 < n 1 n 2 n 3 x^3 < n_1n_2n_3 x3<n1n2n3
y 3 = x \sqrt[3]y = x 3y =x

  1. 定时攻击
    测定RSA解密所进行的模指数运算的时间来估计解密指数d,而后再精确定出d 的取值

还可采用盲化技术,即先将数据进行盲化,再进行加密运算,而后做去盲运算 —— 计算时间被随机化而难于推测解密所进行的指数运算的时间

RSA参数选择

  1. n

n = p × q n = p\times q n=p×q,p和q要足够大,为强素数。p 与q差要大(否则可以从n的开方入手),p-1, q-1最大公因子要小

  1. e

( e , ϕ ( n ) ) = 1 (e,\phi(n)) = 1 (e,ϕ(n))=1条件满足,两个随机数互素概率约为 3 / 5 3/5 3/5。 但e太小,x小, y = x e   m o d   n y = x^e\ mod\ n y=xe mod n,当 x e < n x^e < n xe<n的时候未取模。 且容易遭受低指数攻击

  1. d
    Euclidean算法在多项式时间内求出d。 d > n 1 / 4 d > n ^{1/4} d>n1/4. d小,签字和解密运算快,d不能太小,会被已知明文攻击

RSA实现中,建议用e = 3, 17, 65537这种二进制只有两位1的数据

对称算法/公钥算法

对称公钥
速度
密钥管理额外的安全信道证书中心CA

安全性?无法简单比较

混合密码:

  1. 公钥算法用于签名认证
  2. 公钥算法传输密会话密钥
  3. 会话密钥(对称密钥)加密数据
  4. 避免密钥分配麻烦

ElGamal公钥签名算法

ElGamal,Schnorr和DSA都是基于离散对数问题的三个例子

一个既可用于数字签名又可用于加密的密码体制。

安全性依赖于 离散对数问题 discrete logarithms problem

  1. 参数 G F ( n ) GF(n) GF(n)的本原元 g g g

GF为有限域,p为素数, G F ( p ) GF(p) GF(p)中的加乘与普通加法区别为结果要mod p

本原元:当a模n的阶为 ϕ ( n ) \phi(n) ϕ(n),当且仅当x时 ϕ ( n ) \phi(n) ϕ(n)使得 a x = 1   m o d   n a^{x} = 1\ mod\ n ax=1 mod n成立,这时候a时n的本原元

  1. 秘密钥 x ∈ ( G F ( p ) ∗ − 0 ) x\in (GF(p)^* - 0) x(GF(p)0)
  2. 公钥 y = g x   m o d   p y = g^x\ mod \ p y=gx mod p
  3. 随机数:k

加密
m → ( g k , m y k )   m o d   p = ( r , s ) m\rightarrow(g^k, my^k)\ mod\ p = (r,s) m(gk,myk) mod p=(r,s)

解密
m = s r − x   m o d   p m = sr^{-x}\ mod\ p m=srx mod p

Others

  1. Rabin密码
  2. 背包密码
  3. McEliece 体制
  4. LUC密码
  5. DH算法
  6. 有限自动机
  7. 概率加密
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值