A public-key cryptosystem is based on the big integer factorization problem of number theory which will be discussed as follows. In such a system, a message, M, is encrypted to a publicly specified power, e, and divided by the publicly specified product of two large secret prime numbers p and q. Decryption is similar too. The security of this system heavily relies on the mathematical difficulty of factoring the published divisor, pq.
Q1: 基于整数分解(Integer Factorization)的公钥算法啥样?
整数分解是一个数论上经典的难问题,基于这个问题进行构建的公钥算法有很多,这里以经典的RSA为例:
a. 获取两个大质数p和q
b. 产生私钥Pr和公钥Pu
c. 采用Pr加密,采用Pu解密
Q2: 怎么从p和q得到Pr和Pu呢?
一种方法是:在与欧拉函数互质的数中选取一个候选者,
使之满足:
然后,根据Pr选取Pu,
使二者互逆:
Q3: 为什么要采用欧拉函数?欧拉函数是什么鬼?
采用欧拉函数的原因是与本方法的前提(采用质数分解)贴切的,表示于pq互质的数的个数,欧拉函数有非常好的相关性质可以有效地利用计算效率:
性质一:若整数n,m互质,则
性质二:若整数n为质数,则
根据欧拉函数的性质一和性质二,有:
Q4: 怎么在公钥系统中使用Pr和Pu呢?
假设明文M,主方A,拥有私钥Pr;客方B,拥有公钥Pu。
,以及公钥Pu
B成功解密出明文M
Q5: 算法的安全性由谁保证?
我们知道,A,B交互过程中被传输的数据是:pq的乘积,以及Pu。一旦我们能够破解Pr,即意味着算法不安全。那么,我们能通过pq乘积,Pu获取Pr么?答案是时间复杂度,空间复杂度非常高,因为数论上大整数分解属于NP难问题。而且加密函数具有跟哈希函数类似的单向性,即一个输入对应一个输出,很难有两个不同输入对应同一个输出的,这会导致哈希值冲突——说白了:如果你没办法解决大整数分解成两个质素的难问题,即从pq乘积分解出大整数p和q,那么,你就很难获得Pr。
Q6:密钥空间?
可能会问,暴力破解Pr怎么样?如果pq的二进制长度为d,那么,你需要暴力破解次,换句话说,密钥空间的大小为
,通常d取2048 bits,3078 bits等,如此大的计算量通常小型计算机很难快速地破解,通常需要花费几个月的时间的破解代价。
欢迎关注“Aha实验室”微信公众号
Reference
[1] Rivest R L, Shamir A, Adleman L. A method for obtaining digital signatures and public-key cryptosystems[J]. Communications of the Acm, 1983, 26(2):96-99.
[2] https://en.wikipedia.org/wiki/Euler%27s_theorem