用某人的公钥加密的消息怎么可能只能用该人的私钥解密? />
我不容易理解这种非对称加密的概念。简而言之,我希望使用公共密钥加密的过程应该是唯一的,因此可以使用相同的密钥进行还原。
什么密钥操作可以确保避免这种情况?
#1 楼
基本的解释是,您需要两个密钥来完成一个完整的加密/解密周期。基本上,加密工作是采用模运算的,因此, \ mod n $$
和
$$ m = c ^ b \ mod n $$
其中$ a $和$ b $是算法的公钥和私钥。 $ m $是纯文本消息,$ c $是密文。
关于公式最重要的是
$$ m =(m ^ a)^ b \\ mod n =(m ^ b)^ a \\ mod n $$
要使此功能有效$ a $,$ b $和$ n $必须遵循某些限制。
这是RSA和其他不对称加密系统背后的基本思想,而您可以使操作更加复杂/不同,但是要使用两个不同的密钥来完成加密/解密周期。
评论
$ \ begingroup $
感谢Uwe,这非常有帮助! (我认为您公式中的p绝对是n = pq中的n。)因此,如果我们要解密密文,但只有公钥,我们将需要计算私钥,如第二个公式所示。要计算私钥,我们需要确定n = pq中的质数。然后我们使用以下方法得到d:d =(1 mod((p-1)(q-1))/ e为了找到质数p和q,用蛮力计算非常昂贵。就是这样,对吗?:)
$ \ endgroup $
– king_julien
2013年7月29日7:00
$ \ begingroup $
@king_julien就是这样。暴力破解部件的困难是此类算法的基本安全性。 $ m ^ a \ mod p $也没有逆,这使得难以蛮力地算法。
$ \ endgroup $
– Uwe Plonus
13年7月29日在7:06
$ \ begingroup $
您说:“其中$ a $和$ b $是算法的公钥和私钥。m是纯文本消息,而$$ c是密文。”什么是$ n $?
$ \ endgroup $
–rubo77
2014年8月14日9:27
$ \ begingroup $
@ rubo77 n是任意选择的值。该值的具体限制取决于所使用的算法。
$ \ endgroup $
– Uwe Plonus
2014年9月8日在8:48
$ \ begingroup $
“其中$ a $和$ b $是公钥和私钥”表示$ a $是公钥,而$ b $是私钥。但是我认为这是另一种方式,因此它应该显示为“其中$ a $和$ b $是私钥和公钥”。
$ \ endgroup $
–RenéNyffenegger
16年1月22日在6:13
#2 楼
由于您的问题似乎出在公共密钥加密的原理上,而不是数学本身,因此在这里可以与一个物理对象进行类比,这可能会有所帮助。 />要关闭挂锁,您不需要钥匙,只需要挂锁本身即可。要打开,请使用钥匙。
现在,如果Bob拥有Alice的挂锁的副本,则可以通过将其放在盒子中并应用挂锁的方式秘密地向她发送消息。爱丽丝使用密钥来恢复消息。
要将此类比转换为公钥加密,只需考虑系统的公钥是打开挂锁(的副本),而私钥是挂锁的密钥。
当然,这种类比并不完美,但它可以帮助您超越公钥加密的明显悖论。
评论
$ \ begingroup $
谢谢,这是一个很好的类比,我以后应该使用!我个人需要一个数学解释。
$ \ endgroup $
– king_julien
13年7月29日在8:52
#3 楼
魔法!看看PGP文章中的Wikipedia图像。整个过程背后的魔术是通过RSA算法。
比方说,爱丽丝(Alice)想向鲍勃(Bob)发送加密的消息。鲍勃生成一个公钥和私钥对。密钥生成过程的工作原理是通过一整套数学方法。
本质上,这就是RSA的工作原理。
选择两个大且不同的素数,$ p $和$ q $。
计算$ n = pq $
选择公共指数$ e $。按照传统,这是$ 65537 $。
计算$ \ varphi(n)= \ varphi(p)\ varphi(q)=(p − 1)(q − 1)$,其中$ \ varphi $是欧拉的总和函数。
计算$ d $,使$ d $是$ e $的乘法逆(模$ \ varphi(n)$)。
公钥由$ n $组成和$ e $,而私钥则由$ n $和$ d $组成。由于素数分解是一个困难的问题,因此很难从公钥派生私钥。
使用对称密码和完全随机的密钥对数据进行实际加密。然后,爱丽丝使用属于鲍勃的RSA公钥对随机密钥进行加密,并将加密的密钥以及加密的数据发送到鲍勃。
鲍勃使用其私钥解密加密的密钥,然后解密带有解密密钥的加密消息。
爱丽丝如何确信自己正在使用属于鲍勃的公钥,这是一个完全不同的问题,涉及诸如信任网络之类的复杂问题。
评论
$ \ begingroup $
谢谢您的回答!尽管插图很好,但仍然存在一个问题,即如何仅使用私钥才能解密在加密密钥上使用RSA。第一点是RSA使用单向功能,这是其非对称加密的基本特征。具体来说,数学整数分解是此处使用的单向函数。
$ \ endgroup $
– king_julien
13年7月28日在19:05
$ \ begingroup $
只能使用私钥(即使用两个密钥)进行解密,因为RSA要求您知道计算中使用的两个素数。只有同时拥有两个密钥,才能计算RSA加密中使用的素数。但是,加密也应如此,对吗?当然不是很明显,但是我看不到...因此,我要问的问题是:在图示的哪儿,RSA加密过程中有私钥?
$ \ endgroup $
– king_julien
13年7月28日在19:05
$ \ begingroup $
关键是事实并非如此。 $ \:$无处。 $ \; \; \; $
$ \ endgroup $
–user991
13年7月28日在22:01
$ \ begingroup $
@RickyDemer很抱歉,这个答案对我来说不是那么明显。这个答案大部分集中在解释PGP上,但我的问题的关键是RSA加密如何工作。我希望对该部分进行更详细的解释,以便我也能理解。
$ \ endgroup $
– king_julien
13年7月29日在6:08
#4 楼
我猜想公钥加密的规范是RSA。RSA是一种称为Euler定理的数论的结果,它说:
$ a ^ {\ varphi (n)} \ equiv 1 \ mod n $
其中$ \ phi(n)$是Euler的totient函数。您可以查看Wikipedia文章以获取更多信息,但是有关RSA的重要内容是,如果$ n = pq $,则$ \ varphi(n)=(p-1)(q-1)$。
RSA密码系统包含3个值:
公共指数$ e $
私有指数$ d $
公共模数$ n = pq $其中$ p $和$ q $是质数
要使用RSA进行加密,我们计算:
$ C = M ^ e \ mod n $
要解密,我们需要计算:
$ M = C ^ d \ mod n $
即$ M = C ^ d =(M ^ e)^ d \ mod n $
要了解其工作原理,我们需要查看$ e $,$ d $和$ n $之间的关系。
我们选择$ e $和$ d $使得:
$ ed \ equiv 1 \ mod \ varphi(n)$
$ e $和$ d $是乘法倒数$ \ mod \ varphi(n)$。
也就是说,$ ed $是$ \ varphi(n)$的倍数,再加上$ 1 $。
我们真的是这样做是利用Euler定理:
if
$ a ^ {\ varphi(n)} = 1 \ mod n $
然后
$ a ^ {k \ varphi(n) } = 1 \ mod n $
$ a ^ {k \ varphi(n)+1} \ equiv a \ mod n $
$ ed = k \ varphi( n)+ 1 \ mod \ varphi(n)$
$ ed \ equiv 1 \ mod \ varphi(n)$
给出$ M ^ e \ mod n $很难计算$ M $。这被称为RSA问题,没有已知的有效解决方案。
给出$ n $和$ e $,很难计算$ d $。这是因为要计算$ d $,我们需要知道$ \ varphi(n)$。在不知道$ n $因子的情况下,我们无法计算$ \ varphi(n)$。
解决这些问题的最有效方法是整数分解。这就是RSA获得安全保护的地方。
#5 楼
简单地理解RSA是一种替代算法。而不是26个字母的字母,而是$ N $字母的字母。由于$ e $,公共指数$ e $的性质创建了$ M $到$ C $的双射映射,而私有指数$ d $创建了$ C $到$ M $的反双射映射。 $ d $对为每个$ N $创建一个RSA身份。如果随机的$ d $不是$ e $的模乘逆数,则不会创建RSA身份。此外,它可能会或可能不会创建双射映射,但不会创建解密消息所需的反双射映射。
请注意,有多个私有指数$ d'$与$ e $还会创建一个RSA身份,因此将对消息进行解密,尽管它们与$ d $一样难找。
评论
是的,您真不错,约翰娜丹。如您所知,这是单向功能。在正常时间几乎找不到她的反相功能。对于真正的Rsa,请使用具有100位数字的数字。因此,他们的产品将有大约200位数字。这样,蛮力就没有用了。我建议您从数学的角度读一点以理解它。实际上,对于每个模数-公共指数对,都有多个私有指数,它们都可以解密使用公共密钥加密的消息。其中一些会比其他人花费更长的时间。