RSA密码体制和整数因子分解

RSA密码体制和整数因子分解

整理于2020年5月25日

大整数分解算法

Pollard p-1 算法

原理分析

设p为n的一个素因子,且 p − 1 = ∏ i = 1 s q α i p-1=\prod_{i=1}^{s}q^{\alpha_{i}} p1=i=1sqαi

⇒ ∃   B , ∀ q α i , B > q α i \Rightarrow \exist \,B,\forall q^{\alpha_{i}},B>q^{\alpha_{i}} B,qαi,B>qαi

a = 2 B ! m o d   n a=2^{B!}mod \,n a=2B!modn

⇒   a ≡ 2 B ! m o d   p \Rightarrow \, a\equiv 2^{B!}mod \, p a2B!modp

⇒   a ≡ 1   m o d   p , 即 a − 1 = 0   m o d   p \Rightarrow \, a\equiv 1\,mod \, p, 即a-1=0\,mod \, p a1modp,a1=0modp

KaTeX parse error: Undefined control sequence: \mbox at position 15: \Rightarrow \,\̲m̲b̲o̲x̲{可通过求}(a-1,n)\m…

关键是希望p-1的分解中最大的素因子不是很大,

使得B也可以不是很大,就能得出最后n的素因子

具体算法

举个栗子

Pollard ρ 算法

原理分析

x ≠ x ′ x\ne x' x=x x ≡ x ′ m o d   p x\equiv x' mod \,p xxmodp (在Zp中找碰撞,类似于生日悖论)

则可通过求 gcd(x-x’ , n)有一定概率求得n的素因子

我们通过 f ( x ) = x 2 + a f(x)=x^2+a f(x)=x2+a 产生一系列 x i x_i xi

x 1 ⊆ Z n , x i ≡ f ( x i − 1 )   m o d   n x_1\subseteq Z_n,x_i\equiv f(x_{i-1})\,mod \, n x1Zn,xif(xi1)modn

(若 x i ≡ x j   m o d   p ⇒   f ( x i ) ≡ f ( x j ) 即 x i + 1 ≡ x j + 1   m o d   p ⇒ 产 生 了 一 个 周 期 序 列 , 周 期 为 j − 1 x_i\equiv x_j\,mod\,p\Rightarrow\,f(x_i)\equiv f(x_j)即x_{i+1}\equiv x_{j+1}\,mod\,p\Rightarrow 产生了一个周期序列,周期为j-1 xixjmodpf(xi)f(xj)xi+1xj+1modpj1)

举个栗子

具体算法实现

因为一定 ∃   t ≥ i   且   t ≡   0   m o d   ( j − i ) \exist \, t\ge i \,且\, t\equiv\,0\,mod\,(j-i) tit0mod(ji) ,所 x t ≡ x 2 t   m o d   p x_t\equiv x_{2t}\,mod \,p xtx2tmodp

所以就有以下算法:

费马分解法

原理分析

若能找到 a 2 − b 2 ≡ 0   m o d   n a^2-b^2\equiv 0\,mod \, n a2b20modn 则可以通过求 g c d ( a ± b , n ) gcd(a\pm b,n) gcd(a±b,n)有一定概率求得n的素因子

算法具体实现

算法举例

#但是存在一个难点,如何求得平滑数呢?

使用二次筛法

求解离散对数算法

Shanks算法

Shanks算法采用大段小段法(是一种时间-存储折中的算法)

原理分析

算法实现 将计算规模降到了 n 1 2 n^{\frac{1}{2}} n21

举个栗子

Pollard ρ离散对数算法

和Pollard ρ大整数分解算法类似,也是通过函数迭代构造碰撞,从而求得离散对数,因而也是一个概率算法

算法分析

算法描述

举个栗子

Pohlig-Hellman算法

有待更新…

指数演算法(Index-Calculus算法)

算法分析

通过计算因子基的离散对数(预计算),来计算所需元素的离散对数,是最高效的一种算法,下面是具体说明:

举个栗子

公钥密码体制

对称密码的一些不足

第一个问题(最大的问题):密钥的交换
通信双方需要用同一个密钥进行加密和解密,因此就涉及到了密钥的交换,然而交换过程中需要的安全信道又很难保障。

第二个问题:密钥管理
N个用户之间相互通信,每人需要保存N-1个密钥,系统需要完成N×(N-1)/2次密钥的交换。
举个栗子:一个5000用户的网络,要保证每个用户能相互加密通信,总共需要完成12,497,500次密钥交换

第三个问题:抵赖
密钥协商和加密过程是双方行为,无法防止其中一方否认自己曾经发送过某条消息

公钥密码体制的一些介绍

单向陷门函数

如果存在一个单向函数,该函数在具有特定知识(称为陷门)后容易求逆。公钥密码体制就是在这样的单陷门函数下,私钥拥有者就是拥有这样的特定知识。这样的 单陷门函数一般是基于一些数学难题:大整数的分解、离散对数问题等等

一些用途

①用于加密

公钥加密、私钥解密,不需要交换密钥

②数字签名

私钥签名,公钥验证,可防抵赖

RSA算法

RSA算法的简要介绍

这里只做了简要介绍,具体数学原理不过多阐述。

加解密过程的快速实现

平方乘算法

算法分析

算法描述

举个栗子

Montgomery算法

算法分析

结合使用平方乘算法

使用中国剩余定理加速RSA解密

由于解密过程已知p q,所以可以大大降低复杂度

素性检测

简要介绍

由于RSA实现过程中需要用到p q两个素数,所以就需要素性检测算法

其实素性检测问题就是因式分解问题,不过目前不存在多项式时间内能完成的因式分解算法,所以目前使用的素性检测算法大多是概率算法。

理论部分
检测理论一
检测理论二
检测理论三
检测理论四
具体的算法
Solovay-Strassen算法

基于上文的理论二

Miller-Rabin算法

基于上文的理论三

AKS算法

基于上文的理论四

RSA算法的安全性
间接分解模数n
p或q不是大整数(Pollard p-1 算法)

因为RSA其实就是大整数分解问题,这也提醒我们在要使得p q也都是大整数

已知φ(n)

这就很容易求出p q

已知解密指数d
共模攻击

RSA实现是给群组中每个人相同的n,但指数ed不同的情况下,会出现的一些问题

小加密指数攻击

为了获得更快的速度,而使用较小的加密指数会导致的一些问题

OAEP:最优非对称加密填充(Optimal Asymmetric Encryption Padding)
小解密指数的Wiener攻击
理论基础

举个栗子

实践部分

举个栗子

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值