【深入浅出密码学】RSA

RSA密码体制

引言:

RSA加密的本意并不是为了取代对称密码,而且它比诸如AES的密码要慢很多,因为RSA当中涉及许多数学计算,RSA通常和类似AES的对称密码一起使用,真正用来加密大量数据的是对称密码。而RSA主要保护对称密码的密钥。

数学困难问题:RSA基于大整数分解难题

加密解密

RSA的加密和解密都是在整数环ZnZ_nZn内完成的。假设RSA加密明文xxx,而表示xxx的位字符串则是Zn={0,1,...,n−1}Z_n=\{0,1,...,n-1\}Zn={0,1,...,n1}内的元素,所以明文xxx表示的二进制必然小于nnn

在这里插入图片描述

x,y,n,dx,y,n,dx,y,n,d都是非常长的数字,通常为1024位或更长。值eee有时称为加密指数或公开指数,私钥ddd有时称为解密指数或保密指数。如果Alice想将一个加密后的消息传送给Bob,她需要拥有Bob的公钥(n,e)(n,e)(n,e),而Bob将用他自己的私钥ddd进行解密。

密钥生成与正确性检验

注:我们限定了gcd(e,phin)=1gcd(e,phi_n)=1gcd(e,phin)=1那么私钥ddd,一定存在

这里我们可以借助扩展欧几里得算法求解私钥ddd
gcd(phin,e)=1=s∗phin+t∗e gcd(phi_n,e)=1=s*phi_n+t*e gcd(phin,e)=1=sphin+te
此时,我们的参数ttt就是我们求解的私钥ddd.

d=t mod (phin)d=t\ mod\ (phi_n)d=t mod (phin)

正确性证明
在这里插入图片描述在这里插入图片描述

快速指数运算

int qpow(int a, int n){
    int ans = 1;
    while(n){
        if(n&1)        //如果n的当前末位为1
            ans *= a;  //ans乘上当前的a
        a *= a;        //a自乘
        n >>= 1;       //n往右移一位
    }
    return ans;
}

借助CRT加速加解密

对于任意的(m1,m2)(m_1,m_2)(m1,m2)必然存在一个唯一的mmm,使得
m1=m mod (p)m2=m mod (q) m_1=m\ mod\ (p) \\ m_2=m\ mod\ (q) m1=m mod (p)m2=m mod (q)
此时,可以把求解cd mod nc^d\ mod\ ncd mod n的计算,转换成求解这个方程组。但是此时的ddd还是比较大,计算比较困难。

d=k∗(p−1)+rd=k*(p-1)+rd=k(p1)+r,则cd mod p=cr∗ck∗(p−1) mod p=crmod  pc^d\ mod\ p=c^r*c^{k*(p-1)}\ mod\ p=c^r \mod pcd mod p=crck(p1) mod p=crmodp

其中r=d mod (p−1)r=d\ mod\ (p-1)r=d mod (p1),因此,(cdmod   p)(c^d \mod\ p)(cdmod p)可以降解为c(d mod p−1) mod pc^{(d\ mod\ p-1)}\ mod\ pc(d mod p1) mod p

(cdmod   q)(c^d \mod\ q)(cdmod q)可以降解为c(d mod q−1) mod qc^{(d\ mod\ q-1)}\ mod\ qc(d mod q1) mod q

在这里插入图片描述

素数检测

在这里插入图片描述

费马定理对于所有的素数成立如果ppp时一个素数,那么对于任意的aaa,都有ap−1=1 mod pa^{p-1}=1\ mod\ pap1=1 mod p

如果,运算时ap−1 mod p≠1a^{p-1}\ mod\ p \neq 1ap1 mod p=1,那么可以直接判断ppp是合数直接退出。

如果,满足ap−1=1 mod pa^{p-1}=1\ mod\ pap1=1 mod p还需要不断变化aaa,多次检验

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值