文章目录
1. RSA加密算法介绍
RSA加密是一种非对称加密算法,由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年首次公开提出。RSA是他们三人姓氏的首字母组成的。
RSA算法基于一个数学上的事实:将两个大质数相乘很容易,但是想要将其乘积分解成原始的质数因子却非常困难。这就是所谓的“陷门函数TDF”的概念,是RSA加密安全性的基础。
2. RSA密钥生成
RSA密钥生成包括以下步骤:
算法描述 | 变量表示 |
---|---|
①选择两个大质数p和q | p, q |
②计算n=pq | n |
③欧拉公式φ(n)=(p-1)(q-1) | φ(n) |
④选择一个整数e,使得1<e<φ(n),且e和φ(n)互质 | e |
⑤计算e关于φ(n)的模逆元d,即ed≡1(mod φ(n)) | d |
此时就能得到公钥pk=(e, n)
,私钥sk=(d, n)
3. RSA加密和解密
给定明文M,加密过程如下:
- 计算C≡Me (mod n),得到的C就是密文。
给定密文C,解密过程如下:
- 计算M≡Cd (mod n),得到的M就是解密后的明文。
接下来通过一个例子进行说明
eg: 给定两个质数17,11, 对90进行加密
根据上面我们提到的加密步骤我们依次代入进行计算
- 令p=17,q=11 =>
n = 17*11 = 187
- 再根据欧拉公式求
φ(n) = (p-1)(q-1) = 16*10 = 160
- 此时找到一个正整数e,其中1< e < φ(n), 为了方便计算,我们取
e=7
- d是e对φ(n)的乘法逆元,也就有 de ≡ 1 (mod φ(n))=>
7d ≡ 1 (mod 160)
, 所以这里计算可以得到d = 23
- 此时就能得到公钥
pk=(187,7)
和私钥sk=(187,23)
- 对明文M=90加密,C=90emod n = 907 mod 187 =
95
基于上述步骤,我们得到了加密的密文为95,为了验证我们的加密是否正确,这个时候就需要对密文解密,看能否得到原来的值
M = Cd mod n = 9523 mod 187 = 90
这个时候获得了原来的值,这样我们就能确定计算是正确的了
4. RSA的安全性
RSA的安全性主要来自于大整数分解的难度。只要选择的质数p和q足够大,破解RSA就非常困难。然而,RSA并不完美,它有一些已知的攻击方式,如时序攻击、选择明文攻击等。因此,使用RSA时需要配合其他安全措施,如密钥管理和更新、使用安全的随机数生成器等。
5.涉及到的数论基础
5.1. 模的逆元
在数论中,如果我们有两个整数 a 和 m,存在一个整数 b,使得 ab ≡ 1 (mod m),那么我们称 b 是 a 关于模 m 的逆元。
eg: 考虑整数 a=7 和 m=12,我们可以找到 b=7,使得 7*7 ≡ 1 (mod 12),因此,7 是 7 对于模 12 的逆元。
这是最基本的模逆求法。最常用的计算逆元的方法是
5.1.1. 扩展欧几里得算法计算模逆元
扩展欧几里得算法是一种用于求解 ax + by = gcd(a, b)
形式的二元一次方程的算法,其中 x
和 y
是未知数,gcd(a, b)
是 a
和 b
的最大公约数。该算法除了可以求出最大公约数,还能求出 x
和 y
。
当我们要找的模逆元 b
存在的时候,即 gcd(a, m) = 1
,我们实际上是要求解 ax + my = 1
。在这个方程中,x
就是我们想要找的 a
关于模 m
的逆元。
例子:假设我们想要找到
a=7
关于模m=12
的逆元。我们需要求解的方程是7x + 12y = 1
。使用扩展欧几里得算法,我们可以找到x=7
和y=-4
,因此,7
是7
关于模12
的逆元。
5.1.2. 费马小定理计算模逆元
费马小定理是一个在数论中的重要定理,它表述为:如果 p
是质数,a
是任意一个不被 p
整除的整数,那么 ==a^(p-1)^ ≡ 1 (mod p)
。
我们可以利用费马小定理来计算模逆元。当 m
是质数时,根据费马小定理,我们有 a(m-1) ≡ 1 (mod m)。两边同时乘以 a
的模逆元 b
,我们得到 am ≡ a (mod m)。这意味着 ==a(m-2) 就是 a
关于模 m
的逆元。
例子:假设我们想要找到
a=7
关于模m=17
的逆元。我们可以计算 7(17-2) mod 17`,得到的结果 3 就是 7 关于模 17 的逆元。
5.2 欧拉函数
欧拉函数 φ(n) 是小于 n 并且与 n 互质的正整数的数量。在 RSA 算法中,φ(n) = (p-1)(q-1),其中 p 和 q 是两个大质数。
例子:给定正整数 n=10,小于10并且与10互质的正整数有1, 3, 7, 9,所以 φ(10) = 4。
5.3离散对数
离散对数问题是在密码学中经常遇到的一个问题,该问题是基于一个事实:对于一些特定的数学结构(例如模运算),求解对数问题是困难的。
**例子:**在模 p 的环中,考虑求解方程 3^x ≡ 2 (mod 7),其中 x 就是离散对数。这个方程的解是 x=3,因为 3^3 ≡ 2 (mod 7)。
离散对数问题
离散对数问题是密码学中的一个重要问题,它是许多公钥密码体制的安全性基础。在实数中,我们可以轻易地计算出对数,比如 x = logb(a),意味着 bx = a。然而,当我们将这个问题转移到有限域(如模运算)时,问题就变得困难了。
在离散对数问题中,给定一个质数 p
,一个整数 g
(我们称之为基数),以及一个模 p
的整数 h
,我们需要找到一个整数 x
,使得 gx ≡ h (mod p)。在这里,x
就是我们所说的离散对数。尽管在给定 g
,p
和 x
的情况下,计算 gx mod p 是相对容易的,但是在已知 g
,p
和 h
的情况下,寻找 x
则是非常困难的。这就是为什么我们称它为“离散”的原因。
例子:在模
7
的环中,考虑求解方程 3x ≡ 2 (mod 7),其中x
就是离散对数。这个方程的解是x=3
,因为 33 ≡ 2 (mod 7)。
6. RSA加密的安全性
RSA加密算法的安全性主要基于大数因数分解问题的困难性。具体来说,RSA公钥包含一个模数 n
,它是两个大质数 p
和 q
的乘积。而RSA的私钥则涉及到 p
和 q
的具体值。如果一个攻击者想要破解RSA加密,他就需要从 n
中提取出 p
和 q
。然而,尽管乘法(即计算 n = p * q
)是一个相对简单的操作,但是因数分解(即从 n
中恢复 p
和 q
)对于足够大的 n
来说却是极其困难的,这就使得RSA加密在实践中非常安全。
至今为止,还没有已知的有效的算法能够在短时间内解决大数因数分解问题和离散对数问题。因此,除非有重大的数学突破,或者量子计算机变得足够强大并且广泛可用(因为量子计算机有潜力在多项式时间内解决这些问题),否则RSA加密算法在可预见的未来都将是安全的。