对于“公钥加密,私钥解密”有在 ssh 的 authorized_keys 这种常见的应用场景,那么“私钥签名,公钥验证”有什么常见的应用场景?

11 小时 46 分钟前
 amiwrong123
个人目的只是想从 应用使用的角度来理解,非对称加密、公钥私钥这些概念。

对于 ssh 的`authorized_keys`的应用使用过程为:
● 服务器检查 `authorized_keys` 文件,找到与客户端提供的公钥匹配的条目。
● 服务器生成一个随机数,并使用公钥对其进行加密,然后将加密后的消息发送给客户端。
● 客户端使用私钥解密该消息,并将解密后的随机数返回给服务器。
● 服务器验证返回的随机数是否正确。如果正确,服务器接受客户端的连接请求。
从这个过程,理解了"正因为客户端使用了私钥来解密,所以才能证明客户端的身份。",而且反过来,“私钥加密,公钥解密”是无法证明身份的。
自己也去 ssh 连接了多个服务器,查看了`authorized_keys`的内容。也看了客户端自己`~/.ssh/id_rsa.pub`。


那对于“私钥签名,公钥验证”,有什么应用场景是平时接触得到的?
- 而且最好有实物可以查看,帮助理解。
- 而且要是能有一个和我上面差不多的简单分析,就更好了。
2176 次点击
所在节点    程序员
40 条回复
xmumiffy
11 小时 42 分钟前
https 证书就是
imdong
11 小时 40 分钟前
你怎么证明这句话是你说的?
kera0a
11 小时 37 分钟前
私钥加密,公钥解密 恰恰就能证明身份啊,在说什么啊兄弟
R18
11 小时 37 分钟前
公钥加密->私钥解密 别人发给你信息,确保这个信息只有你能解密
私钥签名->公钥验证 你发一条信息出去,任何知道你公钥的人都能验证这条信息是来自于你
kaichen
11 小时 36 分钟前
区块链,证明我持有这把公钥对应的私钥

1. 用私钥签名一段数据哈希(如转账)
2. 网络节点还原哈希对应的公钥(椭圆曲线)验证公钥所有者,以及检查公钥所有者记账的金额余额

区块链上的账目实际上是记录在公钥上,即某个公钥持有对应资产数量
maichael
11 小时 35 分钟前
几乎所有的区块链/数字货币
NessajCN
11 小时 31 分钟前
这个顾名思义就知道了啊
签名的作用就是让别人知道某段信息是只有我能发出的
譬如我是某机构,我要发一篇公告,我把公钥公开出去,再用私钥加密这篇公告的内容发出去,
别人用公钥解密成功的文本就说明是本机构发出的,任何其他人都伪造不了
应用场景么像是软件分发时候在 manifesto 里加上私钥信息表明分发源可靠之类
公钥加密的作用是对密文本身保密,私钥签名对密文本身是不保密的,仅仅是证明密文发出者的身份可靠
crackidz
11 小时 29 分钟前
GPG 你提到两部分包含两部分:

公钥持有者使用接受者公钥加密,只有指定的接受者才能解密查看邮件内容。
同时,发送者使用私钥进行签名,接受者使用发送者的公钥验证邮件是由真实的发送者发送。

这就是双向验证。
jinliming2
11 小时 22 分钟前
软件的数字签名,开发者用私钥签名,用户使用公钥验证软件来源且未被篡改。
amiwrong123
11 小时 19 分钟前
@NessajCN #7
等等。
首先,“私钥签名->公钥验证”,你发一条信息出去,任何知道你公钥的人都能验证这条信息是来自于你。

然后,你说的,“私钥加密公告->别人用公钥解密”,也能达到这个目的“你发一条信息出去,任何知道你公钥的人都能验证这条信息是来自于你”呗。
- 因为公钥是公开的,所以其实谁都可以解密。
- 但至少可以证明 信息发送者的身份。

神奇,这两种方式都可以达到这目的。😮
NessajCN
11 小时 15 分钟前
@amiwrong123 ?? 你这个 首先 , 然后 说得不是同一个操作吗
啥叫两种方式
amiwrong123
11 小时 15 分钟前
@NessajCN #7
而且我开始以为“私钥加密,公钥解密”这种没有用呢,差点被自己误导了。

也就是说,
“公钥加密,私钥解密”
“私钥加密,公钥解密”——软件的数字签名
“私钥签名,公钥验证”——httts 证书
都有应用场景。
只是最后两种应用场景的目的,都是一样的目的。
LaTero
11 小时 14 分钟前
@amiwrong123
“私钥加密,公钥解密”——软件的数字签名
“私钥签名,公钥验证”——httts 证书
就是同一个东西
amiwrong123
11 小时 13 分钟前
@NessajCN #11
啊?我理解错了吗。。
加密是:原 content -> 加密的 content
签名是:原 content -> 原 content+一个签名值
这不是两种操作吗
NessajCN
11 小时 12 分钟前
@amiwrong123
哦我知道了,你是不是一直误解了“签名”的意思?
以为是把分发者的个人信息用私钥加密一下叫签名?
不是的,这里的签名其实是一个操作,用私钥把真实内容加密,因为加密后的密文其实不保密,所以就把这个加密操作改叫签名
amiwrong123
11 小时 4 分钟前
@NessajCN #15
我好像懂 你意思了,我之前一直误解了。。

假设有一个文件 data.txt ,我们分别对其进行加密和签名:
加密:
发送方使用接收方的公钥对 data.txt 进行加密,生成 data_encrypted.txt 。
接收方使用自己的私钥对 data_encrypted.txt 进行解密,恢复 data.txt 。
签名:
发送方计算 data.txt 的哈希值,然后使用自己的私钥对哈希值进行签名,生成 signature.txt 。
接收方使用发送方的公钥验证 signature.txt ,确保 data.txt 未被篡改且来自预期的发送方。

上面这段是大模型的回答,所以“用自己的私钥对哈希值进行签名”就是指,用私钥加密呗。
churchmice
11 小时 3 分钟前
没有私钥加密,公钥解密这种说法
签名操作不是个加密,对于 rsa 这两操作看着像但是不能混成一谈
NessajCN
11 小时 1 分钟前
@amiwrong123
还是有误解,私钥签名==私钥加密
所以你说的“用自己的私钥对哈希值进行签名” 等价的说法并非“对 dtata.txt 签名” 而是“对 data.txt 的哈希值进行签名”
对 data.txt 签名指的是用私钥对 data.txt 全文加密
amiwrong123
10 小时 57 分钟前
@NessajCN #18
OK ,感谢回答,理解了。这中间会有一步算哈希的步骤。

签名:
发送方计算 data.txt 的哈希值,然后使用自己的私钥对哈希值进行签名,生成 signature.txt 。
接收方使用发送方的公钥验证 signature.txt ,确保 data.txt 未被篡改且来自预期的发送方。

-------------------------

问一个比较笨的问题,把上面的过程改成:
用私钥对 data.txt 全文加密。这种方式不常用吗?或者本身这种有什么弊端?

主流的,应该还是,发送方先算出哈希值,再对哈希值进行加密吧。
NessajCN
10 小时 53 分钟前
@amiwrong123 这两种方法本质没区别啊,你思考一下就知道了

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

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

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

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

© 2021 V2EX