【密码学】第四章、公钥密码

基本概念

对称密钥缺陷

  • 密钥分配
    • 很难实现秘密的安全信道协商加密密钥。
  • 密钥管理
    • 任何两个用户之间都需要有共享的密钥。
    • 用户量很大时,系统开销很大。
  • 没有签名功能
    • 当主体A收到主体B的电子文档时,无法向第三方证明此文档来自B
    • 单钥加密无法实现抗抵赖的需求。

公钥密码作用

  • 公钥加密
    • 用于加密任何消息
    • 任何人可以使用公钥加密消息,只有私钥拥有者可以解密。
  • 数字签名
    • 生成对某消息的数字签名。
    • 私钥的拥有者生成数字签名,任何人可用公钥验证签名
  • 密钥分配
    • 用于交换秘密信息,常用于协商对称密钥
    • 采用公钥加密的算法实现密钥分配。
    • 可使用单独设计的密钥交换算法DH密钥交换协议)。
  • 理论基础
    • 陷门单向函数

**单向函数:**已知x易求y=f(x);已知y难求对应的x
**陷门单向函数:**在单向函数基础上,若知道陷门t,易求y对应的x

公钥密码体制

  • 生成密钥对
    • 公钥在系统被公开。
    • 私钥由本人保管。

满足要求

  • 接收方产生密钥对在计算上是容易的
  • 发送方对消息加密产生密文在计算上是容易的
  • 接收方用自己的私钥解密在计算上是容易的
  • 敌方由公钥求私钥在计算上是不可行的
  • 敌方由密文和公钥恢复明文在计算上是不可行的

设计关键就是要找出合适的陷门单向函数

困难问题

  • 大整数分解问题
    • 已知两个大素数pq,求n=pq是容易的;
    • 而由npq是困难的。
  • 离散对数问题
    • 大素数p,其中p-1包含另一个大素数因子q,可构造一个乘法群,它为p-1阶循环群;
    • g是一个生成元(1<g<p-1);
    • 已知x,求y=g^x mod p是容易的;
    • 已知ygp,求x是困难的。
  • 多项式求根问题
    • 已知系数序列{a}px,求y是容易的;
    • 已知系数序列{a}y,求x是困难的。
      y = f ( x ) = x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 ( m o d p ) y=f(x)=x^n+a_{n-1}x^{n-1}+...+a_1x+a_0\pmod p y=f(x)=xn+an1xn1+...+a1x+a0(modp)
  • 二次剩余问题
    • 已知合数n和整数a,判断a是否为mod n的二次剩余。
      是 否 存 在 x , 使 得 x 2 ≡ a ( m o d n ) 是否存在x,使得x^2\equiv a\pmod n x使x2a(modn)

RSA

密钥产生

  • 选取大素数pq100-200位十进制数字);
  • 计算n=pq,其欧拉函数为:
    ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n)=(p-1)(q-1) ϕ(n)=(p1)(q1)
  • 随机选取一整数e,保证:
    1 ≤ e < ϕ ( n ) , g c d ( ϕ ( n ) , e ) = 1 1 \leq e < \phi(n),gcd(\phi(n),e)=1 1e<ϕ(n)gcd(ϕ(n),e)=1
  • 计算e的逆元d
    d = e − 1 ( m o d ϕ ) ( n ) d=e^{-1}\pmod \phi(n) d=e1(modϕ)(n)
  • ne为公钥,d为私钥。

加解密

  • 加密
    c = m e ( m o d n ) c=m^e \pmod n c=me(modn)
  • 解密
    m = c d ( m o d n ) m=c^d \pmod n m=cd(modn)
  • 解密正确性
    c d ( m o d n ) ≡ m e d ( m o d n ) ≡ m k ϕ ( n ) + 1 ( m o d n ) c^d \pmod n \equiv m^{ed} \pmod n \equiv m^{k\phi(n)+1}\pmod{n} cd(modn)med(modn)mkϕ(n)+1(modn)
    1.mn互素,由欧拉定理得:
    m ϕ ( n ) ≡ 1 ( m o d n ) m k ϕ ( n ) ≡ 1 ( m o d n ) m k ϕ ( n ) + 1 ≡ m ( m o d n ) ∴ c d ( m o d n ) ≡ m m^{\phi(n)}\equiv 1 \pmod{n}\\ m^{k\phi(n)}\equiv 1 \pmod{n}\\ m^{k\phi(n)+1}\equiv m \pmod{n}\\ \therefore c^d \pmod{n} \equiv m mϕ(n)1(modn)mkϕ(n)1(modn)mkϕ(n)+1m(modn)cd(modn)m
    2.mn不互素:
    L e t   m = c p , 1 ≤ m ≤ n , 1 ≤ c ≤ q ∵ g c d ( m , q ) = 1   a n d   E u l e r   t h e o r e m m ϕ ( q ) ≡ 1 ( m o d q ) [ m k ϕ ( q ) ] ϕ ( p ) ≡ ( m o d q ) m k ϕ ( n ) ≡ 1 ( m o d q ) T h e r e   i s   a n   i n t e g e r   r , l e t   m k ϕ ( n ) = 1 + r q M u l t i p l y   b o t h   s i d e s   b y   m = c p m k ϕ ( n ) + 1 = m + r c p q = m + r c n m k ϕ ( n ) + 1 = m ( m o d n ) ∴ c d ( m o d n ) ≡ m Let\ m=cp,1\leq m \leq n,1 \leq c \leq q\\ \because gcd(m,q)=1\ and\ Euler\ theorem\\ m^{\phi(q)}\equiv 1\pmod q\\ [m^{k\phi(q)}]^{\phi(p)}\equiv \pmod q\\ m^{k\phi(n)}\equiv 1\pmod q\\ There\ is\ an\ integer\ r,let\ m^{k\phi(n)}=1+rq\\ Multiply\ both\ sides\ by\ m = cp\\ m^{k\phi(n)+1}=m+rcpq=m+rcn\\ m^{k\phi(n)+1}=m\pmod n\\ \therefore c^d \pmod n\equiv m Let m=cp1mn1cqgcd(m,q)=1 and Euler theoremmϕ(q)1(modq)[mkϕ(q)]ϕ(p)(modq)mkϕ(n)1(modq)There is an integer rlet mkϕ(n)=1+rqMultiply both sides by m=cpmkϕ(n)+1=m+rcpq=m+rcnmkϕ(n)+1=m(modn)cd(modn)m

安全性

  1. |p-q|要足够
  2. pq长度应该差不多。
  3. p-1q-1应有大素因子
  4. gcd(p-1,q-1)应该很

攻击

  • 共模攻击
    • 设两个用户公钥为e1e2,且它俩互素
    • 敌手截获密文之后,利用扩展欧几里得算法求出满足re1+se2=1的整数rs(其中r为负数)。
      c 1 = m e 1 ( m o d n ) c 2 = m e 2 ( m o d n ) c 1 r c 2 s = ( c 1 − 1 ) − r c 2 s ≡ m ( m o d n ) c_1=m^{e_1}\pmod n\\ c_2=m^{e_2}\pmod n\\ c^r_1c^s_2=(c_1^{-1})^{-r}c_2^s\equiv m \pmod n c1=me1(modn)c2=me2(modn)c1rc2s=(c11)rc2sm(modn)
  • 低指数攻击
    • 每个用户的加密指数很小,且两两互素;
    • 利用中国剩余定理可以求出m^3(mod n1n2n3)
      c 1 ≡ m 3 ( m o d n 1 ) c 2 ≡ m 3 ( m o d n 2 ) c 3 ≡ m 3 ( m o d n 3 ) c_1\equiv m^3\pmod{n_1}\\ c_2\equiv m^3\pmod {n_2}\\ c_3\equiv m^3\pmod {n_3} c1m3(modn1)c2m3(modn2)c3m3(modn3)
  • 选择密文攻击
    • RSA确定性的加密算法,不能抵御*选择密文攻击。
      G e t : c 1 = m 1 e ( m o d n ) M a k e : c 2 = c 1 m e ( m o d n ) S o l v e : c 2 = m 2 e ( m o d n ) C a l c u l a t e : m 1 = m 2 m − 1 ( m o d n ) Get:c_1=m_1^e\pmod n\\ Make:c_2=c_1m^e\pmod n\\ Solve:c_2=m_2^e\pmod n\\ Calculate:m_1=m_2m^{-1}\pmod n Getc1=m1e(modn)Makec2=c1me(modn)Solvec2=m2e(modn)Calculatem1=m2m1(modn)

ElGamal

密钥生成

  • 选择一素数p以及小于p的随机数x
  • gp的原根,计算:
    y ≡ g x ( m o d p ) y\equiv g^x\pmod p ygx(modp)

(y,g,p)为公钥,x为私钥。

加解密

  • 加密
    • 随机选取一个整数k<p-1,计算:
      c 1 ≡ g k ( m o d p ) c 2 ≡ y k M ( m o d p ) c_1\equiv g^k\pmod p\\ c_2\equiv y^kM\pmod p c1gk(modp)c2ykM(modp)
  • 解密
    M = c 2 ( c 1 x ) − 1 ( m o d n ) M=c_2(c_1^x)^{-1}\pmod n M=c2(c1x)1(modn)

特点

  1. 安全性基于有限域上的离散对数的难解性
  2. 加密算法是概率算法
  3. 不能抵御选择密文攻击
  4. 存在密文扩张

安全性

  • 参数要求
    • p应为150位以上的十进制数/500位以上的二进制数,p-1应该有大素因子
  • 密钥要求
    • 密钥必须保密,且一次性
  • 选择密文攻击
    F o r   p l a i n t e x t   m , g o t   C = ( c 1 , c 2 ) S e l e c t   m   a n d   c a l c u l a t e   c ’ = ( c 1 , m c 2 ) D e c r y p t   c ’ , g o t   M ’ = m M C a c u l a t e   M = M ’ / m For\ plaintext\ m, got\ C=(c_1,c_2)\\ Select\ m\ and\ calculate\ c’=(c_1,mc_2)\\ Decrypt\ c’,got\ M’=mM\\ Caculate\ M=M’/m For plaintext m,got C=(c1,c2)Select m and calculate c=(c1,mc2)Decrypt cgot M=mMCaculate M=M/m

ECC

算法概述

  • 采用有限域上的椭圆曲线,即所有系数都是某一有限域GF(p)中的元素。
  • 方程Ep(a,b)
    y 2 ≡ x 3 + a x + b ( m o d p ) a , b ∈ G F ( p ) , 4 a 3 + 27 b 2 ≠ 0 ( m o d p ) y^2\equiv x^3+ax+b\pmod{p}\\ a,b\in GF(p),4a^3+27b^2\neq 0\pmod{p} y2x3+ax+b(modp)a,bGF(p),4a3+27b2=0(modp)

加法运算

P = ( x 1 , y 1 ) , Q = ( x 2 , y 2 ) , P ≠ − Q , P + Q = ( x 3 , y 3 ) x 3 = λ 2 − x 1 − x 2 y 3 = λ ( x 1 − x 3 ) − y 1 λ = { y 2 − y 1 x 2 − x 1 , P ≠ Q 3 x 1 2 + a 2 y 1 , P = Q P=(x_1,y_1),Q=(x_2,y_2),P\neq -Q,P+Q=(x_3,y_3)\\ x_3=\lambda^2-x_1-x_2\\ y_3=\lambda(x_1-x_3)-y_1\\ \lambda = \left \{ \begin{aligned} \frac{y_2-y_1}{x_2-x_1},P\neq Q \\ \frac{3x_1^2+a}{2y_1},P=Q \end{aligned} \right. P=(x1,y1),Q=(x2,y2),P=Q,P+Q=(x3,y3)x3=λ2x1x2y3=λ(x1x3)y1λ=x2x1y2y1,P=Q2y13x12+a,P=Q

椭圆曲线上的离散对数问题

P ∈ E p ( a , b ) Q = k P P\in E_p(a,b)\\ Q=kP PEp(a,b)Q=kP

  • P的阶n是一个大素数

P的阶是满足nP=O的最小正整数。

  1. 已知kPQ容易。
  2. 已知PQk是困难的。

Diffie-Hellman密钥交换和ElGamal密码体制可推广到椭圆曲线来实现。

SM2

基本参数

  • SM2基于素数域Fp,其特征为m比特长(通常为160比特)的素数p
  • 长度不小于192比特的比特串SEED
  • Fp上的2个元素ab,满足:
    4 a 3 + 27 b 2 ≠ 0 E ( F p ) : y 2 = x 3 + a x + b ( m o d p ) 4a^3+27b^2\neq 0\\ E(F_p):y^2=x^3+ax+b\pmod p 4a3+27b2=0E(Fp):y2=x3+ax+b(modp)
  • 基点G
    G = ( x G , y G ) ∈ E ( F p ) , G ≠ O G=(x_G,y_G)\in E(F_p),G\neq O G=(xG,yG)E(Fp),G=O
  • G的阶nm长比特的素数,且满足:
    n > 2 191 且 n > 4 p n>2^{191}且n>4\sqrt{p} n>2191n>4p
  • 余因子
    h = ∣ E ( F p ) ∣ n ∣ E ( F p ) ∣ 是 曲 线 E ( F p ) 上 点 的 个 数 h=\frac{|E(F_p)|}{n}\\ |E(F_p)|是曲线E(F_p)上点的个数 h=nE(Fp)E(Fp)线E(Fp)

加密算法

R a n d o m   n u m b e r   k C 1 = k G = ( x 1 , y 1 ) S = k P B , P B   i s   p u b l i c   k e y   o f   B ( x 2 , y 2 ) = k P B t = K D F ( x 2 ∣ ∣ y 2 , l ) , l   i s   t h e   l e n g t h   o f   t h e   p l a i n t e x t   m   t o   s e n d C 2 = M ⊕ t C 3 = H a s h ( x 2 ∣ ∣ M ∣ ∣ y 2 ) O u t p u t   C = ( C 1 , C 2 , C 3 ) Random\ number\ k\\ C_1=kG=(x_1,y_1)\\ S=kP_B,P_B\ is\ public\ key\ of\ B\\ (x_2,y_2)=kP_B\\ t=KDF(x_2||y_2,l),l\ is\ the\ length\ of\ the\ plaintext\ m\ to\ send\\ C_2=M\oplus t\\ C_3=Hash(x_2||M||y_2)\\ Output\ C=(C_1,C_2,C_3) Random number kC1=kG=(x1,y1)S=kPB,PB is public key of B(x2,y2)=kPBt=KDF(x2y2,l)l is the length of the plaintext m to sendC2=MtC3=Hash(x2My2)Output C=(C1,C2,C3)

SM2用到的哈希函数都是SM3

解密算法

V a l i d a t i o n   C 1   w h e t h e r   t h e   e l l i p t i c   c u r v e e q u a t i o n   i s   s a t i s f i e d ,   o t h e r w i s e   e x i t S = h C 1 d B C 1 = ( x 2 , y 2 ) , d B   i s   p r i v a t e   k e y   o f   B t = K D F ( x 2 ∣ ∣ y 2 , l ) M ’ = C 2 ⊕ t u = H a s h ( x 2 ∣ ∣ M ’ ∣ ∣ y 2 ) I f   u = = C 3 , t h e n   M ’ = M Validation\ C_1\ whether\ the\ elliptic\ curve\\ equation\ is\ satisfied,\ otherwise\ exit\\ S=hC_1\\ d_BC_1=(x_2,y_2),d_B\ is\ private\ key\ of\ B\\ t=KDF(x_2||y_2,l)\\ M’=C_2\oplus t\\ u=Hash(x_2||M’||y_2)\\ If\ u==C_3,then\ M’=M Validation C1 whether the elliptic curveequation is satisfied, otherwise exitS=hC1dBC1=(x2,y2),dB is private key of Bt=KDF(x2y2,l)M=C2tu=Hash(x2My2)If u==C3then M=M

  • 正确性
    P B = d B G , C 1 = k G = ( x 2 , y 2 ) d B C 1 = d B k G = k ( d B G ) = k P B = ( x 2 , y 2 ) P_B=d_BG,C_1=kG=(x_2,y_2)\\ d_BC_1=d_BkG=k(d_BG)=kP_B=(x_2,y_2) PB=dBGC1=kG=(x2,y2)dBC1=dBkG=k(dBG)=kPB=(x2,y2)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值