为什么都是私钥签名公钥验签,而不是直接私钥加密公钥解密?

2018-12-21 09:39:51 +08:00
 zjsxwc

为什么都是私钥签名公钥验签,而不是直接私钥加密公钥解密?

是处于什么考虑这么做?性能考虑吗?

9032 次点击
所在节点    程序员
48 条回复
tony1016
2018-12-21 09:41:41 +08:00
所谓公钥,就是你有我有,大家都有,那还加个啥密??
tony1016
2018-12-21 09:43:03 +08:00
当然,原理上不是不可了,还有一个很重要的原因是非对称加解密的效率很低
augcat
2018-12-21 09:43:24 +08:00
签名不就是为了证明是你本人写的消息吗
tinybaby365
2018-12-21 09:51:31 +08:00
是可以。但一般不这么做,https 协议中,浏览器用证书的公钥加密保护一个对称加密算法的 key,给服务端解密,以后都是对称加密通讯。https 的证书中,也只是用公钥验证签名。所以不少加密库没有类似于 RSA public decrypt 的方法。因为现实中几乎遇不到这种场景。
AlphaTr
2018-12-21 09:51:45 +08:00
签名和加密的作用不一样的,签名并不是为了保密;而公钥加密由于性能的原因,一般都换用密钥交换算法+对称加密
zoudm
2018-12-21 09:53:34 +08:00
我猜楼主的意思是,现在的做法:text + privkey(hash(text)),为什么不用:privkey(text) 来证明是自己写的。

可能是因为,明文 text 更方便别人阅读(不需要解密的步骤),当有需要验证来源时,再做额外的验证工作。
feather12315
2018-12-21 10:00:01 +08:00
私钥可以推导出公钥,反向不成立。
zarte
2018-12-21 10:14:00 +08:00
主要是效率问题。
Aixtuz
2018-12-21 10:16:10 +08:00
知道加密不知道签名,然后去搜了一下,大概明白了。
- A 要给 B 发信息要用 B 的公钥加密,B 用自己的私钥解密。
- A 发布了一篇文章,说这是我发的,我用自己的私钥签名了。由于之前 A 已经发布了他的公钥,所以其它人可以用这个公钥去验证。因为知道 A 私钥的只可能是 A 自己。

这样的话:加密是保护数据,签名是核对身份,解决的是不同需求。
那么我的理解:不应该是需要解决什么问题就用什么吗?
不希望第三方收到内容就加密,不希望第三方冒充发布就签名,或者同时使用。

比如:
在论坛以 ID 隐匿真名,发个帖子抽奖,显然奖品由当前这个 ID 提供,“证明他是他”也没什么必要,我就选不签名;
若是代表某人 A 发布抽奖,我想确认他是否是 A 指定的发布者,自然就选择用 A 提供的公钥去验证发布者身份;
然后,如果论坛没有私信功能,需要发帖通知中奖者领取某个序列号,自然不能被其他人知道,所以就跟中奖者索要一下公钥来加密。


以上就是我搜完以后的理解,如果有错的地方,欢迎纠正。
crab
2018-12-21 10:44:52 +08:00
直接加密得考虑内容长度,签名只要加密内容的 hash,验证身份即可。
Yanni0507
2018-12-21 10:53:25 +08:00
题主你说的,直接私钥加密,公钥解密。可是公钥是公开的,可以认为能够随意获得,那你这个加密还有什么意义呢?
momocraft
2018-12-21 10:57:06 +08:00
签名和加密是两个不同的需求,虽然都在“密码学”
likuku
2018-12-21 11:01:35 +08:00
你非要质疑如今那些久经理论和实践考验的几个著名实现用的路子( pgp/gnupg/https/ssh-keys ),那真没人拦得住。
weifengzi2009
2018-12-21 11:13:40 +08:00
公钥私钥有两个用处。。

1. 用私钥“加密”的信息,可以用公钥来判断来源是否是私钥持有人,也就是检查信息来源
2. 用公钥加密私钥解密才是真加密,因为只有私钥持有人能解密,也就是确保信息去向
luwies
2018-12-21 11:18:33 +08:00
私钥加密公钥解密 这种情况就是验证签名的时候用的吧
c4f36e5766583218
2018-12-21 11:28:53 +08:00
“你只要想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。” --- https://www.zhihu.com/question/25912483/answer/46649199
gamexg
2018-12-21 11:33:11 +08:00
安全方面不知道,但是应该和性能有关系。
记得看过私钥加密速度慢。
wd
2018-12-21 11:34:04 +08:00
@zoudm #6 因为 text 可能很大
tusj
2018-12-21 11:47:10 +08:00
如果私钥加密,公钥解密
那岂不是向全天下公开你的信息,还加个啥密?
leavic
2018-12-21 11:56:57 +08:00
如果这是一个 10GB 的视频文件,你准备加密这个视频,还是加密这个视频的 hash 值?

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

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

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

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

© 2021 V2EX