RSA 算法是一种非对称加密算法。加密密钥(即公开密钥)PK 是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。而加密算法 E 和解密算法 D 也都是公开的。虽然解密密钥 SK 是由公开密钥 PK 决定的,但却不能根据 PK 计算出 SK 。 根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥称作公钥。如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。 #### 数学知识 > **公因子** > 一个数学概念,指的是能同时整除几个整数的整数,可以用辗转相除法算出。 **质数(素数)** >一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。 **互质关系** >  如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,15和32没有公因子,所以它们是互质关系。 两个合数存在互质关系吗?例如 15,44 也没有公因子,这说明不是质数也可以构成互质关系。 **互质关系结论** _1. 任意两个质数构成互质关系,比如 13 和 61。_ _2. 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10。_ _3. 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和57。_ _4. 1和任意一个自然数是都是互质关系,比如1和99。_ _5. p是大于1的整数,则 p和 p-1 构成互质关系,比如57和56。_ _6. p是大于1的奇数,则 p和 p-2 构成互质关系,比如17和15。_ **欧拉函数** 请思考以下问题: >任意给定正整数n,请问在小于等于 n 的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成互质关系?) 计算这个值的方法就叫做[欧拉函数](https://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E5%87%BD%E6%95%B0),以φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以 φ(n) = 4。 φ(n) 的计算方法并不复杂,但是为了得到最后那个公式,需要一步步讨论。 **第一种情况** 如果n=1,则 φ(1) = 1 。因为1与任何数(包括自身)都构成互质关系。 **第二种情况** 如果n是质数,则 φ(n)=n-1 。因为质数与小于它的每一个数,都构成互质关系。比如5与1、2、3、4都构成互质关系。 **第三种情况** 如果n是质数的某一个次方,即 n = p^k (p为质数,k为大于等于1的整数),则 $$ \phi (\sideset{}{^k}p)=\sideset{}{^k}p-\sideset{}{^{k-1}}p $$ 比如 φ(8) = φ(2^3) =2^3 - 2^2 = 8 - 4 = 4。 这是因为只有当一个数不包含质数p,才可能与n互质。而包含质数p的数一共有p^(k-1)个,即1×p、2×p、3×p、...、p^(k-1)×p,把它们去除,剩下的就是与n互质的数。 上面的式子还可以写成下面的形式: $$ \phi (\sideset{}{^k}p)=\sideset{}{^k}p-\sideset{}{^{k-1}}p = \sideset{}{^k}p(1-\frac{1}{p} )$$ **第四种情况** 如果n可以分解成两个互质的整数之积, >   n = p1 × p2 则 >   φ(n) = φ(p1p2) = φ(p1)φ(p2) 即积的欧拉函数等于各个因子的欧拉函数之积。比如,φ(56)=φ(8×7)=φ(8)×φ(7)=4×6=24。 这一条的证明要用到["中国剩余定理"](https://en.wikipedia.org/wiki/Chinese_remainder_theorem),思路:如果a与p1互质(a 随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。