zoukankan      html  css  js  c++  java
  • 第七章 公钥密钥体制

    转https://www.cnblogs.com/WittPeng/p/8978737.html

    第七章 公钥密钥体制

    公钥密码体制概述

    • 对称密码体制的局限性:
      • 密钥分发问题
      • 密钥管理问题
      • 数字签名问题
    • 公钥加密体制的思想
      • 公钥和私钥
      • 基于陷门单向函数的困难问题
    • 公钥密码体制的分类

    公钥加密体制介绍

    ElGamal    应用 1.加密;2.数字签名
    密钥生成
    1. 随机选择一个满足安全要求的1024位的大素数p,并生成有限域Zp的一个生成元g∈Zp*
    2. 选择一个随机数x(1<x<p-1),计算y≡gx(mod p),则公钥为(y,g,p),私钥为Sk=x。

                              (随机数的选取可以使同一明文在不同时间加密成不同密文)

    加解密算法
    1. 加密过程:将明文分组比特串分组,是分组长度小于log2p,,然后对每个明文分组分别加密
      1. 得到公钥Pk(y,g,p);
      2. 消息m分组m1m2m3m4······
      3. 对第i块消息随机选择整数ri(1<ri<p-1);
      4. 计算ci≡gri(mod p),ci'≡miyri(mod p)(1≤i≤t)
      5. 将密文C=(c1,c1')()()()····发送给接收方  (可知,密文是明文长度的2倍)
    2. 解密过程
      1. 接收方接收密文C
      2. 使用密钥x和解密算法mi≡(ci'/cix)(mod p)(1≤i≤t)进行计算
      3. 得到明文
    3. 正确性

      

    安全性分析
    1. 穷举法和列表法(二分查找算法) O(p)
    2. 小步大步算法

    来源于生日攻击的思想,

    小步为 序列1:g1,···,gj,···,gm(1≤j≤m)

    大步为 序列2:y,y*g-m,···,y*g-im

    找到gj≡y*g-im(mod p),即找到y=gj+im(mod p),即x=j+im私钥被找到

    时间复杂度:O(p1/2)

    3.指数积分法

    1.  选取因子基S
    2. 建构同余方程组:对若干随机整数k(0≤k≤p),计算gk,尝试将gk写成S中的元素幂次的乘积,即gk=∏piei(mod p),式子两边取离散对数k≡∑eilogg(pi)(mod (p-1)),重复这个过程,直到有超过m个方程
    3. 求logg(pi)
    4. 计算x:随机取整数r,计算ygrmod p,使得其值可表示为S中元素幂次的乘积,即ygr=∏pidi(mod p),取离散对数可得x≡logg(y)≡-r+∑dilogg(pi)(mod (p-1)),如果成功,即求得此解x。
     MH背包公钥加密体制      难题来源

     背包问题:∑aixi=b,这是一个NP完全类问题

    特例:超递增序列(每一个元素都比先前的元素和大) 可将背包问题转化为P类问题

     公私钥对的生成
    1. 选取素数p 和u,且bi为超递增序列
    2. 利用uv=1(mod p)可求得v
    3. a=ubk(mod p)
    4. {ai}和p作为公钥,{bi}和v作为私钥
     加密和解密
    1.  明文消息分组
    2. 密文c=a1m1+···+anmn
      1. 利用{bi}求v c的解,可得消息m  
     安全性分析
    1.  NP类问题,至今没有好的求解方法,能经受住穷举攻击
    2. 隐蔽性不够,此公钥密码是不安全的
     地位 第一个公钥算法 
     RSA公钥密码    理论基础

     数论中的欧拉定理,安全性依赖于大整数的素因子分解的困难性

    欧拉定理:若a和n互素,则aΦ(n)≡1(mod n)

    密钥生成算法

    加密和解密

    (1)生成公私密钥

    • 选取两个大素数p和q,至少要1024位
    • 计算n=p*q
    • 随机选取整数e在(1≤e≤Φ(n))作为公钥,要求满足gcd(e,Φ(n))=1
    • 用Euclid扩展算法计算私钥d,满足d*e≡1(mod Φ(n)),则e和n是公钥,d是私钥

    (3)明文加密 
     c=E(m)=me(mod n)
    4)密文解密。
       m=D(c)=cd(mod n)

     安全性

     1.算法正确性的证明

    2.攻击

    1. 针对n分解的攻击
      1. 试除法
      2. 因子分解分析法:二次筛因子分析法
      3. 侧信道攻击

               2.针对算法参数的攻击

                           1.对素数p和q选取时的限制;p和q长度相差不大,大小相差要大,否则难以抵御除法的攻击;p-1和q-1都应有大的素因子。

                           2.共模攻击(因此不同用户不用使用相同的p和q)

                           3.低指数攻击

     椭圆曲线公钥加密体制          椭圆曲线

    韦尔斯特拉方程 :E:y²+axy+by=x³+cx²+dx+e。密码学中,常采用的椭圆曲线为: E:y²=x³+ax+b,并要求4a³+27b²≠0

    Hasse定理:如果E是有限域GF(p)上的椭圆曲线,N是E上的点(x,y)(其中x,yξGF(p))的个数,则:|N-(p+1)|≤2(p)½

    椭圆曲线上的点集合Ep(a,b)对于如下定义的加法规则构成一个Abel群:

    1. O+O=O;(O是单位元)
    2. 椭圆上的点P,P+O=P;
    3. P的逆元是-P;
    4. 满足交换律

    5. 满足结合律

    点乘规则:

    • 如果k为整数,kP=P+···+P    (k个P相加)
    • 如果s和t为整数,(s+t)P=sP+tP,s(tP)=t(sP)

    椭圆曲线点的计算:

                                             

     ECC密钥生成算法
    1. 选择一个椭圆曲线E,构造一个椭圆群Ep(a,b)。 
    2. 在椭圆群中挑选生成元点G=(x0,y0),需满足nG=O的最小的n是一个非常大的素数。
    3. 选择一个小于n的整数nB作为私钥,然后利用PB=nBG算出PB。

           公钥为(E,n,G,PB),私钥为nB。

     加密过程
    1.  A将明文消息编码成一个数m<p,并在椭圆群Ep(a,b)中任选一点Pt=(xt,yt);
    2. 在区间[1,n-1]内,A选取一个随机数k,计算P1:P1=(x1,y1)=kG;
    3. 依据接收方B的公钥PB,A计算点P2:P2=(x2,y2)=kPB
    4. A计算密文C=mxt+yt;
    5. A传送加密数据Cm={kG,Pt+kPB,C}给接收方B。
     解密过程
    1.  接收方B收到Cm;
    2. B使用私钥nB做运算:Pt+kPB-nB(kG)=Pt+k(nBG)-nB(kG)=Pt;
    3. B计算m=(C-yt)/xt,得明文m。
     安全性和优势      安全性基于椭圆曲线上的离散对数问题
    应用前景好,尤其是在移动通信和无线设备上的应用,计算量小,处理速度快,存储空间占用小,带宽要求低。 

     160位的ECC密钥和1024位的RSA和1024位的ElGamal的安全性等同。

    可用于加密、数字签名。 
    未申请专利 
             Rabin公钥加密体制  前言(学习意义)  具有很好的参考价值
     特点 

     不是以一一对应的陷门单向函数为基础,同一密文可能有多种明文;

     破译该体制等价于对大整数的因子分解。
     密钥生成算法

    随机选取两个大素数p和q,并且p≡q≡3mod4,将p和q作为私钥,n=pq作为公钥 

     加密算法 设明文块为m(m<n),运用公式c=m²modn 进行加密,c为密文。
     解密算法        

     

  • 相关阅读:
    java生成验证码
    springmvc笔记(来自慕课网)
    angularJs编写多指令的情况
    四年前端开发的迷茫.
    angularJs的ui-router总结
    grunt构建前端自动化的开发环境
    socket传送文件
    socket--粘包
    socket--接受大数据
    动态导入模块
  • 原文地址:https://www.cnblogs.com/69-year-old-comrade/p/15313736.html
Copyright © 2011-2022 走看看