使用接收方公钥签名为何不可取?技术原理问询
首先得明确:你说的这种操作本质不是签名,而是对消息的加密,完全混淆了签名和加密的核心目标,会带来以下关键问题:
无法证明消息来源
正常签名用发送方私钥,接收方(甚至任何第三方)用发送方公钥就能验证消息确实来自该发送方——因为私钥只有发送方持有。但如果用接收方公钥“签名”,本质是把消息加密成只有接收方能解密的内容,任何持有接收方公钥的人都能做这个操作。比如第三方伪造一条消息,用接收方公钥加密后发给接收方,接收方解密后根本没法分辨这条消息到底是你发的还是第三方伪造的。失去不可否认性
签名的核心价值之一是“不可否认”:发送方没法抵赖自己发过这条消息,因为只有他有对应的私钥。但用接收方公钥操作的话,发送方完全可以说“这条消息不是我发的,任何人都能用接收方的公钥加密内容”,接收方拿不出任何证据证明消息确实来自你,根本没法追责。无法进行公开验证
正常签名支持公开验证:比如你给甲发了签名消息,乙拿到消息和签名后,用你的公钥就能验证消息的真实性和来源。但用接收方公钥“签名”的话,只有接收方的私钥能解密消息,第三方连消息内容都看不到,更别说验证来源了,彻底失去了签名的公开验证能力。混淆了加密与签名的核心逻辑
加密的目标是保密:让只有指定接收方能看懂消息内容;而签名的目标是可信:证明消息来自特定发送方且未被篡改。把接收方公钥用于“签名”,相当于用保密手段去实现可信需求,完全南辕北辙,根本达不到你想要的“签名”效果。
举个直白的例子:你要给合作方发一份报价单,正常用你的私钥签名,合作方用你的公钥验证后,能确定这份报价单确实是你公司发的,且中途没被篡改;但如果用合作方的公钥“签名”,合作方解密后看到报价单,但没法证明这是你公司发的——万一竞争对手伪造一份低价报价单用合作方公钥加密发过去,合作方根本分不清真假,反而会造成混乱。
内容的提问来源于stack exchange,提问作者lives

