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

| 根据维基百科(和其他来源)的说法,非对称加密始终像这样工作: 甲方具有公钥和私钥 乙方使用A \的公钥加密内容 甲方使用其私钥解密内容 但是,我不希望甲方能够加密自己的数据,而只希望他们能够对其解密。使用非对称逻辑将导致: 甲方有私钥 乙方有一个私钥(这是甲方的公钥) 乙方使用其私钥加密内容 甲方使用其私钥解密内容 我们将使用它进行某种形式的许可证生成/检查。我们的客户可能不会生成许可证,但是许可证文件必须在客户端可读。 这仍然是非对称加密吗?还是应该考虑使用其他方法?     
已邀请:
您将私钥放在保险箱中,然后发布您的公钥。创建许可证时,可以使用私钥对其进行加密。客户端只能使用您的公共密钥对其进行解密。 如果要将许可证限制于客户端,请要求客户端生成其密钥对,然后将其公共密钥发送给您。然后,您可以使用其公钥对许可证进行加密,然后使用私钥对其进行签名(或再次对其进行加密)。 客户收到许可证后,他们将必须 1.验证(或解密)您发送给他们的许可证的签名 2.使用自己的私钥解密已验证的数据。 这样可以确保1.只有您可以将许可证发送给他们,以及2.只有他们可以解密许可证。     
甲方能够使用公钥加密消息绝对没有问题。 只有您可以(使用私钥)解密它们,并且由于您没有理由使用应用程序中嵌入的公钥加密某些内容,因此不会造成危害-用户只能解密一堆无用的数据,因为他无法解密。 对于许可,您只需使用私钥加密(或签名-足够,然后人们便可以读取许可文件中的限制等,但不能修改限制)等许可文件。然后,应用程序使用嵌入的公共密钥解密文件(或验证签名)。 提取公钥并用其签名自定义许可证文件的用户无法使用它,因为只有当您的私钥已嵌入应用程序中时,该文件才起作用(因为这是解密用公钥加密的内容所必需的密钥) 。 但是,他可以很好地用自定义密钥(也有私钥)替换您的公钥,然后使用其私钥对自己的许可证文件进行签名/加密。不过,这不是密码问题-您只需要添加一些反破解/修改措施,以使其更难以替换嵌入式公钥。例如,您可以进行一些校验和验证。     
您通常要做的是在您的身边生成许可证,并使用私钥对其进行加密。然后,您的客户可以使用您的公钥读取它。 (从广义上讲)这是证书方案(例如用于HTTPS的安全在线浏览中的证书方案)如何工作的方式。是的,那仍然绝对算作非对称加密。     
根据您所说的,非对称加密仍然是您想要的,只需要以不同于您惯常考虑的方式进行即可。 假设您为A生成了一个密钥对。您发送了一对A的一半:这并不重要,但是我们将其称为私有一半。您使用公共部分进行加密并将其发送给A。然后A可以对其进行解密。但是A无法加密似乎来自A公钥的消息,因为它们仅拥有私钥的一半,如果只有一半则无法弄清另一半无论您拥有哪一半。因此,A只能加密可以由您作为秘密保存的公共密钥解密的消息。 当然,正如其他发布者已经说过的那样,还有更好的方法来设置此协议。仅当您了解了非对称加密的细节并回顾了我们所谓的密钥半部分以及我们通常使用它们的方式后,才尝试解释为什么这并不是真正的问题。     
您可以看一下Rhino许可:http://hibernatingrhinos.com/open-source/rhino-licensing/introduction     
其他答案已经说明了如何做...这里只是说明(如果使用RSA,)您在问题中描述的方案是不安全的,如果它取决于B \'s密钥的保密性。 对于RSA,公钥和私钥实际上是不对称的,您不能简单地交换它们并期望具有相同的安全性。 如果您的乙方(Bob)使用相同的公用密钥加密多封邮件,则读取这些(密文)邮件的攻击者可以毫不费力地获取您的公用密钥。攻击者无法获取明文或私钥,但公钥始终会真正变成“公共”。 对于A(爱丽丝),甚至可以从私钥创建公钥,而无需使用公钥加密任何消息。 我想其他非对称密码系统也有类似的警告-始终仅在指定并证明它们后才使用它们。 在这种情况下,您将组合两个密钥对:B \的一对用于签名/验证消息(以确保消息是由B发送的)和A \的一对用于加密/解密消息(以确保只有A可以阅读)。     
是。您可以使用RSA进行此操作-进行类似Diffie-Hellman的交换,因为不仅1个关联对中的密钥会通勤,而且不同密钥对中的密钥也可能通勤。
alice -> bob: alice.pub
bob -> alice: bob.pub
alice: r = random.secret()
alice -> bob:  ( r * (alice.priv * bob.pub) )
bob: r = ( (r * (alice.priv * bob.pub)) * (bob.priv * alice.pub) )
请注意,我们在这里做了一些奇怪的事情。我们将来自不同密钥对的RSA操作混合在一个操作中。括号中的对象实际上是一个新的虚拟RSA密钥,并且这些密钥都不是公共的。如果我们尝试直接创建该RSA密钥,则alice或bob会知道该对密钥。该密钥对实际上是一个秘密密钥,您在其中写入一端,只有另一端可以解密它,但是您不能解密自己编写的内容,其他任何人都不能加密到另一端的消息。 我从未见过有人混合这样的密钥对,但是我通过编写代码进行了测试。我不得不做一些不寻常的事情,因为通常,将私钥应用于消息是为了“签名”。但是签名通常会散列秘密,并将私钥应用于它的散列。我们不想要的东西。因此,在我的代码中,一旦我将RSA组件(D,E,N)提取为任意精度数字...即:解密,加密,模数...我就做了:
   wormholeSend(me,you,msg) =
        (((me ^ {me_D}) \\% me_N) ^ {you_E}) \\% you_N
有点棘手的是,E(加密指数)实际上是一个可预测的值,但是模数N在公共密钥(E,N)中。 D对每一方都是私有的。我们在这里需要小心,因为您和我的模数N不同。 我之所以这样做,是因为我想要一个系统,该系统的程序被授权可以加密可由用户解密的密钥。这样做,用户无法加密密钥,并且程序无法解密密钥。     

要回复问题请先登录注册