【深入浅出密码学】RSA

RSA密码体制

引言:

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

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

加密解密

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

【深入浅出密码学】RSA_第1张图片

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

密钥生成与正确性检验

注:我们限定了 g c d ( e , p h i n ) = 1 gcd(e,phi_n)=1 gcd(e,phin)=1那么私钥 d d d,一定存在

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

d = t   m o d   ( p h i n ) d=t\ mod\ (phi_n) d=t mod (phin)

正确性证明
【深入浅出密码学】RSA_第2张图片【深入浅出密码学】RSA_第3张图片

快速指数运算

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加速加解密

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

d = k ∗ ( p − 1 ) + r d=k*(p-1)+r d=k(p1)+r,则 c d   m o d   p = c r ∗ c k ∗ ( p − 1 )   m o d   p = c r m o d    p c^d\ mod\ p=c^r*c^{k*(p-1)}\ mod\ p=c^r \mod p cd mod p=crck(p1) mod p=crmodp

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

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

【深入浅出密码学】RSA_第4张图片

素数检测

【深入浅出密码学】RSA_第5张图片

费马定理对于所有的素数成立如果 p p p时一个素数,那么对于任意的 a a a,都有 a p − 1 = 1   m o d   p a^{p-1}=1\ mod\ p ap1=1 mod p

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

如果,满足 a p − 1 = 1   m o d   p a^{p-1}=1\ mod\ p ap1=1 mod p还需要不断变化 a a a,多次检验

【深入浅出密码学】RSA_第6张图片

你可能感兴趣的:(密码学)