RSA中如果将公钥私钥交换使用会怎样?

对于RSA而言,私钥加密公钥解密用来签名验证,公钥加密私钥解密则用来加密数据,那么现在如果我在生成两把钥匙的时候,把私钥公开,把公钥自己留着,是否可以把私钥当公钥使用,公钥当私钥使用?

目前我只知道,私钥要比公钥长,而且它们都有上下类似--public--的文字环绕,除了这些,它们是否有真正的本质区别?

阅读 21.2k
6 个回答

原理上应该是可以的,实现上就不知道了。
公钥 (n, e)
私钥 (n, d)
只要 ed = kφ(n)+1 就行,随机生成 e 和 d 中的一个,算出另一个。反过来用也一样。

从算法角度来看是没区别的,公钥和私钥可以互换,一开始公开的那个就是公钥,一旦你公开了就没办法回收了对不?
从这个角度来看,你没法公开“私钥”保留“公钥”。

如果你自己实现了算法,当然没问题。
但是如果你是用Openssl之类的就不行。因为Openssl把生成公、私钥用的东西和私钥全部存在私钥pem里了。并且openssl的公钥e固定为65537。

> ~ > openssl genrsa
Generating RSA private key, 2048 bit long modulus
............................................................................................................................................................................................................+++
...........................................................+++
e is 65537 (0x10001)
-----BEGIN RSA PRIVATE KEY-----
......

理论上,KeyGen得到的是(e,d,n),(e,d)哪个作为公钥都是可以的,你公开的那个就是公钥,保留的那个就是私钥。
但实现中出于性能考虑,e是选好的e=65537(一开始是e=3,但是有小指数攻击的问题),这样e就只能作为公钥了。

用的是openssl的话,在知道私钥的情况下,直接用下面命令就能生成公钥了:


    rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

所以,你公开了私钥的话,相当于把公钥也告诉他们了

私钥公开这个加密就没什么意义了啊,你这等于把公钥也公开了,公钥就是通过私钥生成的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏