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

2015-06-25 10:12:51 +08:00
 aiqier

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

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

4034 次点击
所在节点    信息安全
9 条回复
sneezry
2015-06-25 10:17:19 +08:00
公钥可由私钥算出来呀~
wy315700
2015-06-25 10:22:30 +08:00
一楼正解,理论上公钥加密里公钥和私钥可以对称使用,但是在实际上各个算法都不一样的

RSA里有几个参数 P,Q,N,E,D
其中 P,Q是素数,N是大整数,E一般65537,D是对应的数

理论上 N和D是私钥,N和E是公钥,但是实际操作到时候Q,P一般会存储到私钥里。
finab
2015-06-25 10:23:22 +08:00
当你把私钥公开,公钥保留,那么公钥就变成了“私钥”呗
你保留的那个就是你的“私钥”

公钥加密/签名 私钥解密/验签,反着来也行

但要注意 在iOS中,为了安全性考虑,只能公钥加密 私钥解密, 私钥签名 公钥验签
如果你的加密解密有iOS参与,那么最好按照上面那种情况 公开公钥

否则就需要集成一个庞大的openssl库 来处理加密解密了
echo1937
2015-06-25 10:24:43 +08:00
@sneezry 私钥是推倒不出公钥的吧,你在openssl私钥导公钥的时候,是因为p,q还没有丢掉。
amaranthf
2015-06-25 11:34:52 +08:00
从数学上来说,公钥私钥是完全对称的,但是实际使用中,如同2L所说,公钥一般采用更容易运算的数,所以如果你采用默认的生成算法生成密钥对,攻击者有了私钥是比较好猜到公钥的。自己去实现的话可以避免此问题。
aiqier
2015-06-26 10:07:10 +08:00
@wy315700 那么在时间上,是不是公钥加密和解密的速度,也要比私钥加密和解密的速度快?
wy315700
2015-06-26 10:12:37 +08:00
@aiqier
因为公钥通常很短,所以公钥计算的时间远远小于私钥计算的时间。

另外,一个术语问题,公钥可以加密,私钥只能签名。
任何情况下,不公开的叫私钥,公开的叫公钥,你把两个密钥换一换,那他们的名字也要换一换。
aiqier
2015-06-26 10:15:01 +08:00
@wy315700 貌似很多书或者博客都会把私钥签名也称作私钥加密,我一直不知道是真的可以这样叫,还是他们叫错了。
wy315700
2015-06-26 10:20:46 +08:00
@aiqier
肯定是叫错了,上次我和老师说私钥加密,然后被老师骂了一顿,说私钥不能加密,只能签名。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/200992

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX