公钥密码体制

概述

对称密码体制缺点:

  • 密钥管理困难(用户数量越多,所需密钥数量急剧增大)
  • 系统开放性问题(必须各方信任)
  • 难以提供数字签名功能(无法抗抵赖)

公钥密码体制又称非对称密码体制或双密钥密码体制,1976年由Diffie和Hellman提出,属于非对称密钥体制

image-20220601112533771.png

公钥密码基本思想

对公钥密码要求

  • 生成密钥对计算容易
  • 发送方使用接收方公钥生成密文在计算上容易
  • 接收方使用自己的私钥解密密文在计算上容易
  • 由公钥计算私钥在计算上不可行
  • 由公钥和密文还原明文在计算上不可行

单向陷门函数

  1. 给出f的定义域中的任何元素x,f(x)的计算是容易的
  2. 给出y=f(x)中的y要计算x时,若知道设计函数f时结合进去的某种信息(陷门)则容易计算;若不知道该信息,则难以计算

目前基于一下设计单向函数和公钥密码体制:

  • 大整数分解问题(RSA)
  • 有限域上离散对数问题(ElGamal)
  • 椭圆曲线上的离散对数问题(ECC)

公钥密码的应用

  • 机密性的实现:加解密消息
  • 数字签名
  • 密钥分发和协商:实现在公开信道上的大规模密钥分发和协商

和对称密码体制对比

image-20220601114940847.png

RSA公钥密码体制

数学基础:初等数论中的欧拉定理

安全性基础:大整数因子分解的困难性

RSA算法

  1. 生成密钥:

    • 选择两个大素数p、q(pq互素,需保密)
    • 计算$n=p\times q,\phi(n)=(p-1)\times(q-1)$
    • 选择整数e使得$(\phi(n),e)=1,1<e<\phi(n)$
    • 计算d,使得$d=e^{-1}mod\phi(n)$,得到公钥(e,n),私钥d
  2. 加密:密文$c=m^e(mod\,n)$
  3. 解密:对密文,$m=c^d(mod\,n)$

RSA基本性质

  • 加密解密运算具有可交换性
  • 加解密算法的有效性
  • 在计算上由公开的加密密钥不能求出解密密钥:当合数n足够大时,因子分解很困难

RSA的实现

快速求模n指数运算

法一:平方-乘法算法

94CF104A50E2A6EEA01A626BA5D7D940.png

法二:中国剩余定理(CRT)

2542C70558656EB7085291CD8F770B04.png

素数检测

Miller-Rabin素数概率检测法

二次探测定理:若p是一个奇素数,则方程$x^{2}=1\ mod\ p$的解只有x≡1或x≡-1

费马小定理:若不满足则p一定是合数

Wilson定理:$(p-1)!\equiv-1\ mod\ p$

52791AE47DC589736B87A4ACFF8110ED.png

RSA的安全性

基于分解大整数的困难性

现有的攻击手段:

  • 对RSA的选择密文攻击
  • 小加密指数e攻击

选取参数建议

  • p、q长度差不多
  • p-1和q-1都应该包含大的素因子
  • gcd(p-1,q-1)应该很小
  • $d<n^{\frac{1}{4}}$

RSA应用中的问题

  1. 用户之间不要共享模数n(存在公共模数攻击)
  2. 不同的用户选用的素数不能相同
  3. 一般不能直接应用RSA进行加解密

ElGamal公钥密码体制

算法描述:

选取参数

选取大素数p,α是p的一个本原元

加密

  1. 用户A先把明文M编码为一个在0到p-1之间的整数m作为传输的明文
  2. 用户A挑选一个秘密随机数k(2≤k≤p-2)

并计算:$c1=\alpha^k(mod\ p)$ 和 $c2=my_{B}^{k}(mod\ p)$($y_{B}$为用户B的公开密钥)

  1. 用户A把二元组(c1,c2)作为密文传送给B

解密

$m=c2(c1^{X_{B}})^{-1}$,$x_{B}$是用户B的秘密密钥

解密验证:$c2(c1^{X_{B}})^{-1}mod\ p=my^{k}(\alpha^{kx})^{-1}mod\ p=m\alpha^{kx}(\alpha^{kx})^{-1}mod\ p=m$

算法特点

  • 非确定性
  • 密文空间大于明文空间

算法安全性

  • 安全性基于计算Zp上离散对数的困难性
  • 要使用不同的随机数k来加密不同的信息
  • 随机数k不可预测

椭圆曲线密码体制(ECC)

安全性基于椭圆曲线离散对数问题的难解性,同有限域上的离散对数相比

  1. 密钥长度小
  2. 算法性能好

椭圆曲线

由二元三次方程定义image-20220601201723776.png

不同数域上的椭圆曲线的表示和运算是不同的

引入无穷远点O,使椭圆曲线上解点的集合构成一个交换群,定义如下加法规则

  • O称为加法单位元,对ECC上任意点有:P+O=P
  • 对点P(x,y),有点Q(x,-y)满足:P+Q=O,称Q为P的逆元,记为-P
  • 对不互逆的点P(x1,y1),Q(x2,y2)

image-20220601202404620.png

nP=O,n为最小正整数,则称n为点P的阶

椭圆曲线密码体制算法

  1. 密码系统参数的生成

选取有限域GF(q),和定义在GF(q)上的一条椭圆曲线E(a,b),和E(a,b)上一个阶为大素数n的点G(基点)——三者为公开参数

  1. 密钥生成:在[2,n-1]中随机选取一个整数dA,计算PA=dA*G(公钥PA,私钥dA)
  2. 加密:

    • 通过某种方式将明文消息m通过编码映射到E上的点Pm
    • 在区间[2,n-1]中随机选取一个整数k
    • 计算c1=kG,c2=Pm+kPA,传送Cm=(c1.c2)
  3. 解密:Pm=c2-dA*c1

攻击难点在于Q=kP,给定k、P容易计算Q,给定P、Q难以解出k

Menezes-Vanstone公钥密码体制

是在椭圆曲线上的一个有效实现,解决椭圆曲线明文必须编码映射到椭圆曲线上的点

用户B将源消息m变化成基域GF(p)上的二元组(m1,m2),并执行加密算法:

  • 在区间[2,n-1]中随机选取一个整数k
  • 计算(c1,c2,c3),c1=kG,Y=(y1,y2)=kPA,c2=y1m1(mod p),c3=y2m2(mod p)

PA=dAG为用户A的公开密钥

A收到密文后解密

  • Z=(z1,z2)=dAc1
  • 计算明文m=(m1,m2)=$(c_{2}z1^{-1}(mod\ p),c_{3}z2^{-1}(mod\ p))$
最后修改:2022 年 06 月 01 日
如果觉得我的文章对你有用,请随意赞赏