【数字_ID】公钥密码体制简介

公钥密码体制简介


  • 制作:数字_ID
  • 时间:2018年05月28日

1. 公钥密码体制概述

  • 公钥之前,所有的密码都是基于代换置换
  • 公钥密码算法的基本工具是数学函数
  • 非对称的形式使用两个密钥,对保密性密钥分配认证等都有着深刻的意义
  • 在产生公钥密码体制之前,先来谈谈对称密码的局限性

对称密码的局限性

  • 密钥分发问题:必须保证传输密钥的信道足够安全
  • 密钥量问题:每两人都需要一对密钥,密钥量太大
  • 数字签名问题:接收方可以伪造签名,发送方可以否认发送过的消息
  • 无法解决陌生人之间的身份认证和交易信息认证问题
  • 由于以上种种,我们的主角公钥密码就要登场了!

公钥密码提出

  • 1976年,W.Diffie和M.Hellman提出公钥密码体制
  • 公钥发放,私钥保留,公钥加密,私钥解密,私钥签名,公钥验证
    常见:公钥+对称组合使用

公钥密码体制的应用

  • 加密、解密
  • 数字签名
  • 密钥交换:两方合作以便交换会话密钥

公钥密码体制的特点

  • 密钥分发简单:公钥不需保密分发
  • 密钥量大大减少:n个用户只需n对密钥
  • 可以实现数字签名/身份认证
  • 可满足不相识的人之间的保密通信

公钥密码算法应满足的要求

  • 计算容易
  • 分析不可行
  • 加密变换和解密变换可以互换顺序: D ( E ( m ) ) = E ( D ( m ) )

公钥密码算法的设计思想

  • 单向陷门函数

    f 是一个函数, t f 有关的一个参数,对于任意给定的 x ,计算 y ,使得 y = f ( x ) 是容易的。当不知道参数 t 时,计算 f 的逆向函数是难解的,当知道 t 时,则是容易的,参数 t 称为陷门

  • 在公钥加密算法中,加密变换就是一个单项陷门函数

公钥密码算法的分类

  • 基于大整数因子分解的公钥密码(RSA)
  • 基于有限域乘法群上的离散对数问题的公钥密码(ElGamal)
  • 基于椭圆曲线上的离散对数问题的公钥密码(ECC)

  • 以上三个是本篇博客主要介绍的三种公钥密码体制,当然还有很多,比如:
  • 基于背包问题的公钥密码
  • 基于概率的平方剩余问题的公钥密码
  • 基于格的短向量问题的公钥密码
  • 基于余代数编码中的线性编码问题的公钥密码
  • ……

2. 若干数论问题

  • 公钥密码体制的数学原理和数论有密切关系,可以说数论是基础,不是一篇文章能讲得清的,在这里先讲两个会用到的数学难题

离散对数问题

  • 令素数 p 满足 p 1 含有另一大质数 q q 整除 p 1 ),及一整数g, 1 < g < p 1
  • 若给定整数 x ,求 y = g x   m o d   p 是简单的
  • 若给定 p , g , y ,求 x ,则为DLP问题,是困难的

因数分解问题

  • 给定大素数 p , q ,求 n = p × q ,只要一次乘法
  • 对于给定 n ,求 p q ,即为因数分解问题FAC,是困难的

接下来开始主要介绍三个公钥密码体制

3. RSA公钥密码

  • RSA算法是1978年由Rivest,Shamir和Adieman提出

RSA算法描述

  1. 公钥:选择两个互异的大素数 p q ,使 n = p × q φ ( n ) = ( p 1 ) ( q 1 ) φ ( n ) 是欧拉函数,选择一个正数 e ,使其满足 g c d ( e , φ ( n ) ) = 1 φ ( n ) > 1 ,则将 K U = ( n , e ) 作为公钥
  2. 私钥:求出正整数 d ,使其满足 e d 1   m o d   φ ( n ) , φ ( n ) > 1 ,则将 K R = ( d , p , q ) 作为私钥
  3. 加密变换
    C = E K U ( M ) = M e   m o d   n
  4. 解密变换
    M = D K R ( C ) = C d   m o d   n

RSA解密证明过程

  • 关于解密,将 d 代入易证,单要注意证明过程中的两种情况, g c d ( M , n ) = 1 g c d ( M , n ) 1 ,具体过程略

RSA算法的安全性

  • 如果 n 被成功分解,则私钥可以被计算出来
  • 攻击RSA算法可能方法
    1. 穷举:由于计算复杂度,所以穷举太慢而不现实
    2. 数学攻击:目前大因数分解是难题,太慢而不显示
    3. 定时攻击:通过观察运行时间来猜测密码。可以加入随机延时,或者幂运算前加随机数
    4. 可能字攻击
    5. 选择密文攻击
    6. 共模攻击:不能让一群用户使用相同的n
    7. 低指数攻击:过小的e容易收到攻击

防范措施

  • 使用1024位以上的密钥
  • p和q的长度不能相差太大
  • p和q的差值不能太小
  • gcd(p-1,q-1)应该尽可能的小
  • p-1和q-1都应有大的素因子
  • e不能选取太小的数

  • 在RSA算法中,如果d泄露,在更换新的密钥时请也更换模数n

3. ElGamal公钥密码

  • 基于有限域上离散对数问题
  • 1985年T.ElGamal提出
  • 可签名可加密,最有代表性的公钥密码体制之一
  • 同一明文在不同时刻会生成不同的密文
  • 数字签名标准(DSS)就是ElGamal签名方案的一种变形

ElGamal密钥对生成

  • 随机选择一个满足安全要求的大素数 p ,且要求 p 1 有大素数因子, g Z p Z p 是一个有 p 个元素的有限域, Z p Z p 中的非零元构成的乘法群)是一个本原元
  • 选一个随机数 x ( 1 < x < p 1 ),计算 y g x   m o d   p ,则公钥为 ( y , g , p ) ,私钥为 x

ElGamal加密过程

  • 得到接收方的公钥 ( y , g , p )
  • 把消息 m 分组位长度 L ( L < l o g 2 p )的消息分组, m = m 1 m 2 . . . m t
  • 随机选择整数 r i , 1 < r i < p 1 ( 1 i t )
  • 计算 c i g r i   m o d   p , c i m i y r i m o d   p ( 1 i t )
  • 将密文 C = ( c 1 , c 1 ) , ( c 2 , c 2 ) , . . . , ( c t , c t ) 发送给接收方

ElGamal解密过程

  • 接收方收到 C = ( c 1 , c 1 ) , ( c 2 , c 2 ) , . . . , ( c t , c t )
  • 使用私钥 x 和解密算法 m i = ( c i / c i x ) m o d   p ( 1 i t ) 进行计算
  • 得明文 m = m 1 m 2 . . . m t

ElGamal总结

  • 密文依赖于明文,又依赖于选择的随机数,对于同一个明文,不同时刻生成的密文不同
  • 密文的长度是对应明文长度的两倍

4. 椭圆曲线公钥密码ECC

  • 椭圆曲线密码系统可以达到和RSA同样的安全程度,但位数要少的多
  • 1985年,Koblitz和Miller提出,基于椭圆曲线的离散密码体制
  • 椭圆曲线上离散对数问题,公认要比整数分解问题 p 离散对数问题难解得多

椭圆曲线

  • 威尔斯特拉方程所确定的平面曲线
    E : y 2 + a x y + b y = x 3 + c x 2 + d x + e
  • 满足上述方程的数对 ( x , y ) 称为椭圆曲线E上的点
  • 定义无穷点零点 O

实数域上的椭圆曲线

  • 密码学中,常采用下列形式的椭圆曲线
    y 2 = x 3 + a x + b
  • x 3 + a x + b 没有重根的条件:
    4 a 3 + 27 b 2 0

有限域上的椭圆曲线

  • 可以将椭圆曲线定义于有限域 G F ( p ) 上:
    y 2 x 3 + a x + b   m o d   p
  • p 是大素数
  • a , b , x , y { 0 , 1 , . . . , p 1 } 上取值,满足 4 a 3 + 27 b 2 0
  • 通常用 E p ( a , b ) 表示
  • 该曲线只有有限个点数 N N 越大,安全性越高

椭圆曲线在模 p 下的Abel群

加法规则

  • P = ( x 1 , y 1 ) E p ( a , b ) , Q = ( x 2 , y 2 ) E p ( a , b ) ,则
    P + Q = R = ( 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 Q 满足加法交换律和加法结合律

椭圆曲线构造密码体制的数学问题

  • 用于密码学的椭圆曲线可以分为奇偶两大类,分别对应 G F ( p ) 多项式(适合于软件实现)和 G F ( 2 m ) 多项式(适合于硬件实现),它们都是离散的
  • 椭圆曲线上所有的点都落在某一个区域内,组成一个Abel群,与密钥长度相对应
  • 密钥长度越长,区域越大,安全层次越高,但计算速度慢

  • 在椭圆曲线构成的Abel群上考虑方程 P = k G
  • 其中 G E p ( a , b ) 且为生成元, P G 的倍点,即存在正整数 k (小于 p
  • k G 易求 P ,但由 G P k 是困难的,这就是椭圆曲线上的离散对数问题!

ECC密钥对生成

  • 用椭圆曲线生成用户B的公私钥对

  1. 选择一个椭圆曲线 E ,构造一个椭圆群 E p ( a , b )
  2. E p ( a , b ) 中挑选生成元点 G = ( x 0 , y 0 ) , G 应使得满足 n G = O 的最小的 n 是一个非常大的素数( N 表示椭圆曲线的元素个数, n N 的素因子
  3. 选择一个小于 n 的整数 n B 作为其私钥,然后产生其公钥 P B = n B G ,则B的公钥为 ( E , n , G , P B ) ,私钥为 n B

ECC加密过程

  1. A将明文编码成一个数 m < p ,并在 E p ( a , b ) 中选择一个点 P t = ( x t , y t )
  2. 在区间[1,n-1]内,A选取一个随机数 k ,并计算 P 1 = ( x 1 , y 1 ) = k G
  3. A计算 P 2 = k P B
  4. 计算密文 C = m x t + y t
  5. A将 C m = { k G , P t + k P B , C } 发送给接收方B

ECC解密过程

  1. 接收方B收到 C m = { k G , P t + k P B , C }
  2. 接收方B使用自己的私钥 n B ,作如下计算
    P t + k P B n B ( k G ) = P t + k ( n B G ) n B ( k G ) = P t = ( x t , y t )
  3. B计算 ( C y t ) / x t = m ,得出明文 m
  4. A选择的随机数 k 和椭圆曲线点 P t 是保密的!!

  • 攻击者若想由密文 C 得到明文 m ,就必须知道 k n B
  • 都必须去解决椭圆曲线上的离散对数问题,其加解密过程是安全的

ECC的安全性

  • p 越大越安全,但计算速度会变慢,160位可以满足安全要求
  • n 应该尽可能的大
  • 为了防止MOV规约法和Smart法,不能选取超奇异椭圆曲线和异常椭圆曲线等两类特殊曲线

与前两种相比,ECC优势

  • 资源丰富,同一个有限域存在着大量椭圆曲线
  • 密钥小得多,计算量小,处理速度快,在移动通信、无线设备上应用前景很好
  • 安全性较高

对比

对比

ECC应用

  • SET
  • 智能卡、PDA
  • 密码算法速度很快。16位微处理器上的ECDSA数字签名不足500ms

5. 其他公钥密码体制

  • MH背包公钥密码算法:基于背包问题。大多数背包密码算法不适合数字签名
  • Rabin公钥密码:基于合数模下求解平方根的困难性(等价于大整数分解)。同一密文可能有多个明文。
  • Goldwasser-Micali概率公钥密码:基于平方剩余问题。引用了随机操作或随机数,即使明文和密钥相同,两次加密结果也不同。运算量大,速度慢
  • NTRU公钥密码:基于数论中在一个非常大的维数格中寻找最短向量的数学难题。应用:智能卡,无线通信等中的数字签名
  • ……

猜你喜欢

转载自blog.csdn.net/qq975678774/article/details/80487167
今日推荐