说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创.
step | 说明 | 描述 | 备注 |
---|---|---|---|
1 | 找出质数 | P 、Q | - |
2 | 计算公共模数 | N = P * Q | - |
3 | 欧拉函数 | φ(N) = (P-1)(Q-1) | - |
4 | 计算公钥E | 1 < E < φ(N) | E的取值必须是整数 E 和 φ(N) 必须是互质数 |
5 | 计算私钥D | E * D % φ(N) = 1 | - |
6 | 加密 | C = ME mod N | C:密文 M:明文 |
7 | 解密 | M =CD mod N | C:密文 M:明文 |
step | decription | equation | note |
---|---|---|---|
1 | Find the prime pairs | P 、Q | - |
2 | Calculate the common module | N = P * Q | - |
3 | euler function | φ(N) = (P-1)(Q-1) | - |
4 | Calculate the public key - E | 1 < E < φ(N) | E must be an integer E and φ(N) are prime numbers |
5 | Calculate the private key - D | E * D % φ(N) = 1 | - |
6 | encryption | C = ME mod N | C:ciphertext ,M:plaintext |
7 | decryption | M =CD mod N | C:ciphertext ,M:plaintext |
支持 n e d都算出来了,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)
公钥能否推导出私钥,也就是n和e的情况下,推导出d
私钥能否推导出公钥,也就是n和d的情况下,推导出e
对于3233您可以进行因数分解(3233=61×53),那么对于下面一个这样很大的数字呢?
12301866845301177551304949
58384962720772853569595334
79219732245215172640050726
36575187452021997864693899
56474942774063845925192557
32630345373154826850791702
61221429134616704292143116
02221240479274737794080665
351419597459856902143413
它等价于:
33478071698956898786044169
84821269081770479498371376
85689124313889828837938780
02287614711652531743087737
814467999489
×
36746043666799590428244633
79962795263227915816434308
76426760322838157396665112
79233373417143396810270092
798736308917
公钥(e,n)对明文m进行加密 : c = m^e % n
私钥(d,n)对密文c进行解密 : m = c^d % n
其中e和d是对等的,一样的地位,可以互换的. 所以,公钥推出私钥比较困难,那么私钥推出公钥也是比较困难.
另外,在密码学中,我们一般不说通过公钥并不是完全不能推算出私钥, 而是表述为:通过公钥推算私钥在计算上是困难的。
那么为什么我们在平时使用时,感觉的是公钥不能推导私钥,但私钥可以推导公钥呢?
因为在PEM或DER的编码格式中,公钥包含了N和E,私钥包含了N E D P Q等信息,也就是私钥已经包含了公钥,故私钥是能推出公钥的。
另外在通常使用中,e一般就等于65535,所以无需推导.