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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX