使用RSA密码系统时,如果改为使用私钥加密并使用公钥解密,它仍然可以工作吗?如果使用RSA进行发件人身份验证怎么办?

评论

它可以工作,但是并不安全。别做。

@PaŭloEbermann谢谢您,但是我的意思是,RSA中的私钥加密是否专门应用于发件人身份验证?因为RSA是公共密钥加密,并且加密是使用公共密钥而不是私有密钥进行的。

使用私钥加密是RSA签名的一部分。但是就像我们不使用普通RSA进行加密一样,我们也不使用普通RSA进行签名。实际的签名方案使用填充和哈希。

@HumamShbib:您的问题太含糊,无法回答。但是,计算$ {\ tilde m} ^ d \ bmod n $(其中$ \ tilde m $是消息$ m $的填充表示,$ d $是私有指数,而$ n $是公共模数)是使用了消息$ m $的RSA签名的一部分,包括某个时候用于发送者身份验证。有关正确的签名方案,请参阅PKCS#1或ISO / IEC 9796-2。

到目前为止,没有人提到:根据加密方案的定义,模量$ n $是公钥的一部分。如果只有$ d $而没有$ n $,则不能“加密”。关于可互换的$ e $和$ d $:是的,它可以工作,但是通常选择$ e $较小。没关系容易猜到的$ d $不是。

#1 楼

从数学上讲,它工作正常。使用私钥“加密”,使用公钥“解密”。但是,通常,我们说用私钥签名,然后用公钥验证。

如评论中所述,这不仅仅是消息$ m $的直接签名。通常,涉及哈希函数和填充。同样,通常一个人具有单独的密钥对进行签名。

如您所见,有很多警告,但总的来说您是对的,它用于发送方身份验证。

评论


$ \ begingroup $
我可能正在分裂头发,但是“使用私钥加密”不是有效的加密操作。通常会将其转换为带有恢复的签名方案(或表明这就是OP想要的)。
$ \ endgroup $
–user10496
2015年2月28日在19:26



#2 楼

非对称加密和签名是完全不同的概念。安全性和构造要求完全不同。 (例如,加密必须是注入,而签名验证需要是对已验证消息空间的排斥。作为进一步暗示它们本质上不同的提示,请注意,在进行基于ID的加密之前,它持续了相当长的时间可以设计,但从一开始就存在基于ID的签名。)简单来说:“用私钥加密”一词没有任何意义(理解定义)。你会怎么做?

以ElGamal加密方案为例:$ s $是您的私钥,$ g ^ s $是您的公钥。要加密$ m $,您需要绘制随机$ r $并计算密文$(g ^ r,m * g ^ {r * s})$。现在,让我们开始实践:您已经有了实现ElGamal的这个不错的库。用于加密的API表示该函数采用两个参数:一条消息和一个公共密钥,这是一个用于某些秘密数字$ s $的组元素$ g ^ s $和某个组生成器$ g $。现在,您如何“用私钥加密” $ s $?您用$ m $和$ s $提供函数?它不符合API,甚至可能崩溃。
然后让我们从理论上讲:您如何使用ElGamal加密进行签名? RSA的基础数学结构(具有签名和加密变体,并且相同形式的私钥可用于解密或签名,而相应的公钥用于签名验证的加密)。但是即使在那儿,符合标准的实现也不允许您“使用公钥解密”。由于确实存在填充,因此无法成功解密。有关RSA的特殊情况,另请参见。

因此,如果需要签名,请使用带有私钥的签名方案的签名功能。
并且,如果需要加密,请使用带有公钥的加密方案的加密功能。毕竟,这就是他们的设计目标。

评论


$ \ begingroup $
为什么签名需要是一个替代词?这是否意味着给定长度的每个字节字符串都应该是某物的有效签名?
$ \ endgroup $
–PaŭloEbermann
2012年10月13日上午10:45

$ \ begingroup $
我的意思是,加密方案中的公共功能基本上必须是注入(以便人们可以始终解密),而签名方案中的公共功能基本上必须是注入(以便人们始终可以签名)。
$ \ endgroup $
– bob
2012年10月13日上午11:16

#3 楼

RSA密钥对中的两个密钥$(e,m)$和$(d,m)$完全等效,因为$ e $和$ d $可以是任意选择的整数(区间$ 0..m- 1 $),只要它们满足众所周知的等价$ ed \ equiv 1 \ mod \ phi(m)$。您可以交换它们,并且什么都不会改变。

一旦您(作为密钥生成者)决定公开此密钥(可能也向攻击者公开),密钥就会变成public。因此,您决定不公开的密钥将成为private密钥。

出于保密目的使用密钥对时,通常希望每个人都能够将机密消息发送给接收者,以便只有这样的接收者才能解释它们。在这种情况下,每个人都共享一个密钥(根据上面的定义,它将是public的一个,用于加密),而接收者得到了一个与其他人不共享的密钥(必须是private的密钥,用于解密)。

使用public密钥进行解密的想法破坏了采用上述定义的机密性计划的目的。如果有人(包括攻击者)可以撤消加密,为什么还要进行加密呢?

如果您正在考虑“也许我可以仅将公钥安全地分发给预定的接收者”,那么您就没有了。根本不公开任何密钥,并且publicprivate的定义不再成立:您将RSA用作AES等秘密密钥密码。另一方面,当您使用密钥对时为了进行身份验证,您通常希望每个人(包括任何伪造者)都能够确定地确定消息确实来自某个发起者,而不是来自任何其他人。在这种情况下,每个人都共享一个密钥(又是用于验证的public密钥),而原始发​​件人得到了一个未透露给其他人的密钥(必须是用于签名的private密钥)。

与以前一样,使用public密钥进行签名是矛盾的。

最后,应该注意,public密钥(在任何一种情况下)都采用特殊形式(365537等) 。那纯粹是出于效率目的(因为无论如何密钥都必须是public,为什么我们不选择在计算上易于处理的密钥?),并且它与安全性无关。