面试时被问到了RSA的原理和一些基本的攻击手段,之前接触过,但是太久没用的话,只记得大概,大部分都不记得了,所以现在重新回顾一下做个记录。
基础知识
密码学和数论之间存在强相关性,了解RSA之前需要对数论有一些基础的了解。
1.素数
如果一个自然数(大于1)的因数有且仅有 1和它本身,那么这个数被成为素数。
2.模运算
模运算也称为求余运算,即求 一个数除以另一个数的余数
如果两个整数a,b 除以 正整数m 得到的余数相同,则称a和b关于m同余,写作:
$a \equiv b \space mod \space m$
3.互质
若两个正整数a,b 除了1以外,没有其他共因素,则称a和b互质。
4.欧拉函数
给定一个正整数n,求小于等于n的正整数中,与n互质的个数,记为φ(n)
- 如果n为质数, φ(n) = n-1
- 如果n为质数p的k次方,φ(n)=p^k - p^(k-1)
- 如果n可以分解为素数的乘积(例如n=abc),则φ(n)=φ(a)φ(b)φ(c)
5.欧拉定理
如果a和n互质,那么存在以下公式成立:
aφ(n) $ \equiv 1 \space mod \space n$
6.模反元素
如果a和n互质,一定可以找到正整数b,使得以下公式成立:
ab $\equiv 1 \space mod \space n$
RSA
对于RSA加密,步骤如下:
- 首先你需要生成一个大数n,n=p*q且p,q均为质数。
- 计算φ(n),$ φ(n)= φ(p)φ(q)=(p-1)(q-1)$
- 随机选择一个数e,满足 1 < e < φ(n) 且 e与φ(n) 互质
- 输入明文m,得到密文c,公式:me $\equiv c \space mod \space n$
- 需要求得e关于φ(n)的模反元素d,即 $ed \equiv 1 \space mod \space φ(n)$
- 解密时,使如公式:$ c^d = (m^e)^d =$ med = mφ(n)+1 = m
因此,在进行传输时,将(n,e)作为公钥,(n,d)作为私钥。
可以看出,RSA的安全性基于n=p*q的分解难度。如果n=p * q被成功分解,在知道n,p,q,e的情况下,可以得到φ(n),进而可以求出d,使得RSA被攻破。