为什么签名需要证书而不是只用私钥/公钥对?

3
新手问题:一些供应商提出的解决方案是生成动态证书,以允许没有经典证书的用户签署文件。但为什么不只生成私钥/公钥而不必麻烦地涉及证书格式呢?
3个回答

2
证书(公钥证书)的目的是将公钥与其主题(即与密钥对相关联的所有者/实体)的身份绑定在一起,并可能包含各种属性,告诉您可以使用证书做什么。(您可能会对 Security.SE 上的 这个问题 感兴趣。)
您始终使用私钥(而不是公钥或证书)签名,但通常将公钥或证书附加到签名文档中。
如果您有一个明确的公钥列表,可以独立地将其链接到用户,则不需要证书。
证书允许第三方(已签署证书的人)断言标识符和公钥之间的绑定。即使您未提前知道该身份,只要相信签署证书的实体,就可以将签名链接到签名者的身份。
动态生成的证书在这种情况下可能没有太大用处,除非您信任动态生成证书的方(我不确定您是否指工具本身或可能也了解的网站)。
通常,X.509证书仅用于附加到签名上,因为工具需要它,而您可能能够在验证签名的工具中直接将公钥与您已知的身份匹配。有时,这也是为了预见将来有用的情况而做的。
例如,如果您将自己的构件发布到中央Maven存储库,则需要使用您的PGP证书进行签名(通常仅称为PGP公钥)。然而,在整个过程中根本不进行证书的验证(仅具有其自签名的PGP证书就足够了)。在这种情况下,这使得这个过程相对无意义,但如果您能够稍后验证这些证书,那么就可以更加严格地选择要使用的构件。

他们使用Java API进行签名,所以可能是用于工具制作。 - user310291
1
你总是使用私钥(而不是公钥或证书)进行签名。虽然大多数情况下都是这样,但在某些情况下,您需要使用公钥进行签名,以确保1.消息仅由接收者阅读,2.消息来自您认为的人。因此,在发送消息之前,您使用自己的私钥进行签名,然后使用接收者的公钥进行签名。 - vimdude
@abdelsaid:我的意思是签名操作只涉及私钥。公钥用于验证签名,而不是签名。"1.消息只能由收件人阅读": 在这里,您使用收件人的公钥进行加密,而不是签名。 - Bruno

1

虽然是同样的过程,但您需要第三方的同意来确认私钥属于您认为的那个人。


1

签名首先证明了某个人对文档的创作(或批准)权。而仅有密钥是无法证明任何事情的。这就是证书的必要性 - 一些证书颁发机构签署用户的证书并证明密钥对应的人员(或法律实体)是该证书所颁发的人员。文档的读者可以通过验证证书并查看证书所有者的名称来确保签名有效,而不仅仅是计算签名本身。

我不太理解供应商如何动态地发放证书 - 这样发放证书的方式不是自签名的(在文档签名的上下文中,自签名的证书意义不大),需要将用于签署证书的私钥嵌入到这些供应商的软件中,因此也容易被滥用。


“需要将用于签署证书的私钥嵌入到那些供应商的软件中,因此也容易被误用。”:在这种情况下,证书只是被使用一次,我想这类似于OTP :) - user310291
1
@user310291,你看,当文档由最终实体证书签署时,必须使用某些“CA”证书对此证书进行签名,否则读者将无法验证它。那么问题是如何确保CA证书(其私钥应该内置在某些软件中)不被破解。最终实体证书可以是“一次性”的,但CA证书不行。 - Eugene Mayevski 'Callback

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接