Encryption 我可以使用两个私钥的非对称加密吗?

Encryption 我可以使用两个私钥的非对称加密吗?,encryption,cryptography,public-key-encryption,encryption-asymmetric,Encryption,Cryptography,Public Key Encryption,Encryption Asymmetric,根据维基百科(和其他来源),非对称加密的工作原理如下: 甲方拥有公钥和私钥 乙方使用甲方的公钥对物品进行加密 甲方用他们的私钥解密东西 然而,我不希望甲方能够加密他们自己的数据,只希望他们能够解密它。使用非对称逻辑,这将导致: 甲方有私钥 乙方拥有私钥(即甲方的公钥) 乙方用私钥对物品进行加密 甲方用他们的私钥解密东西 我们将使用它进行某种许可证生成/检查。我们的客户端可能不会生成许可证,但许可证文件必须在客户端可读 这仍然是非对称加密,还是我应该研究不同的方法?通常您会在自己的一方生成

根据维基百科(和其他来源),非对称加密的工作原理如下:

  • 甲方拥有公钥和私钥
  • 乙方使用甲方的公钥对物品进行加密
  • 甲方用他们的私钥解密东西
然而,我不希望甲方能够加密他们自己的数据,只希望他们能够解密它。使用非对称逻辑,这将导致:

  • 甲方有私钥
  • 乙方拥有私钥(即甲方的公钥)
  • 乙方用私钥对物品进行加密
  • 甲方用他们的私钥解密东西
我们将使用它进行某种许可证生成/检查。我们的客户端可能不会生成许可证,但许可证文件必须在客户端可读


这仍然是非对称加密,还是我应该研究不同的方法?

通常您会在自己的一方生成许可证,并使用私钥对其进行加密。然后您的客户机可以使用您的公钥读取它。这就是(非常广泛地说)证书方案(如用于使用HTTPS的安全在线浏览)的工作原理。是的,这仍然绝对算作非对称加密。

甲方能够使用公钥加密消息绝对没有问题

只有你可以解密它们(用你的私钥),而且因为你没有理由这么做,所以用嵌入在你的应用程序中的公钥加密不会造成伤害——只是用户拥有的一堆无用数据,因为他无法解密

对于许可,您只需使用私钥对许可文件进行加密(或签名-这就足够了,这样人们就可以读取许可文件中的限制等,但不能修改它们)。然后应用程序使用嵌入的公钥解密文件(或验证签名)

用户提取公钥并用它签署自定义许可证文件时无法使用它,因为它只有在应用程序中嵌入了您的私钥时才起作用(因为这是解密用公钥加密的内容所必需的密钥)


但是,他可以很好地将您的公钥替换为自定义密钥(他也拥有私钥),然后使用私钥对自己的许可证文件进行签名/加密。但这不是一个密码问题——您只需要添加一些反破解/修改措施,以使替换嵌入的公钥变得更加困难。例如,您可以执行一些校验和验证。

您的私钥在保险箱中,然后发布您的公钥。创建许可证时,使用私钥对其进行加密。客户端只能使用您的公钥对其进行解密

如果要将许可证限制为客户端,请要求客户端生成其密钥对,并将其公钥发送给您。然后用公钥加密许可证,然后用私钥签名(或再次加密)

当客户端收到许可证时,他们必须 1.验证您发送给他们的许可证的签名(或解密) 2.使用他们自己的私钥解密已验证的数据


这确保了1。只有您可以向他们发送许可证和2。只有他们才能解密。

根据你所说的,不对称加密仍然是你想要的,只是需要以一种不同于你习惯于思考的方式来完成

假设您为a生成了一个密钥对。您发送了密钥对的一半:这并不重要,但我们称之为私有密钥对。您使用public-half进行加密并将其发送到A。然后A可以对其进行解密。但是A将无法加密似乎来自A公钥的消息,因为他们只有密钥的私有一半,而如果您只有密钥的一半,则无论您拥有的是哪一半,您都无法找出密钥的另一半。因此,A只能加密可以由您作为机密保留的公钥解密的消息


当然,正如其他海报所说,有更好的方法来制定这一协议。一旦你了解了非对称加密的细节,并回顾了我们喜欢称之为密钥一半的东西以及我们通常如何使用它们,就试图解释为什么这不是一个真正的问题。

你可以看看Rhino许可:

其他答案已经说明了如何做。。。这里需要注意的是(至少对于RSA),您在问题中描述的方案是不安全的,如果它依赖于B的密钥保持秘密

对于RSA来说,公钥和私钥实际上是不对称的,您不能简单地交换它们并期望相同的安全属性

  • 如果您的乙方(Bob)使用相同的公钥加密多条消息,则读取这些(密文)消息的攻击者可以轻而易举地获取您的公钥。攻击者无法获得明文或私钥,但公钥将始终成为真正的“公共密钥”
  • 对于A(Alice),甚至可以从私钥创建公钥,而无需使用公钥加密任何消息
我想其他非对称密码系统也有类似的警告——总是只在指定和验证它们时才使用它们


在这种情况下,您将组合两个密钥对:一个用于签名/验证消息(确保消息是由B发送的),另一个用于加密/解密消息(确保只有A可以读取消息)。

是。您可以使用RSA进行类似Diffie-Hellman的交换,因为不仅来自1个关联对的密钥可以进行交换,而且来自不同密钥对的密钥也可以进行交换


爱丽丝->鲍勃:爱丽丝酒吧
鲍勃->爱丽丝:鲍勃酒吧
爱丽丝:r=random.secret()
爱丽丝->鲍勃:(r*(alice.priv*bob.pub))
bob:r=((r*(alice.priv*bob.pub))*(bob.priv*alice.pub))

通知t