双向非对称加密如何工作?

时间:2010-03-02 16:08:08

标签: public-key-encryption

说我们有爱丽丝和鲍勃。

Alice向Bob发送了一条她用Bob的公钥加密的消息。 Bob是唯一可以使用他的私钥解密它的人。但他怎么能确定消息来自爱丽丝?

假设他回复,使用Alice的公钥加密他的消息。只有Alice可以解密该消息。但她怎么能确定它是由鲍勃发送的?

爱丽丝是否必须在她的消息中添加某种公共哈希值,以便鲍勃可以说“这绝对来自爱丽丝?”

4 个答案:

答案 0 :(得分:9)

您描述的方案确实无法提供真实性。所以爱丽丝和鲍勃都不能确定他们是在互相交谈。该方案仅提供机密性,因此也不保密。

鲍勃必须亲自与Alice确认他认为公钥是Alice的公钥确实是她的(通过打电话给她并读出它并通过她的声音确认它是Alice)。

此问题通常通过可信第三方(例如证书颁发机构,如VeriSign)解决,该第三方发出证明该问题的证书。 Alice确实是这个特定公钥的所有者。这是在现代浏览器中解决的方式,这是所有SSL会话(与您选择的银行)一起工作的方式。证书颁发机构从您的银行签署证书(说明您的银行确实是证书所包含的公钥的所有者),并且您的浏览器具有来自证书颁发机构的已内置证书(构建可以验证的证书链) )。

您描述的场景容易受到所谓的MITM(中间人)攻击,而且不能完全用公钥加密解决。

答案 1 :(得分:5)

Bob也有Alice的公钥,Alice用她的私钥签名。 Bob使用Alice的公钥来验证签名。

反过来让Alice确保邮件来自Bob。

现在你所要做的就是确保鲍勃拥有爱丽丝真正的公钥,而不是中间人注入的公钥。

答案 2 :(得分:1)

你所谈论的内容非常松散,看起来像.Net框架中的非对称加密算法的另一种实现。

.Net使用两个分支进行非对称加密!!!

  1. RSA ** Grand Mac daddy用于所有不对称的目的。
  2. DSA **与使用和创建数字签名以验证作者更相关。
  3. 两者都是摘要

    两者关于它们如何工作以及开发人员如何实现它们彼此非常相似,但在下面我已经读过两种截然不同的算法。

    你说的是选项2。

    .Net提供了一个名为DSACryptoServiceProvider的类,它允许您使用通常称为签名的值标记数据。

    根据MS官方课程教科书大致说明它是如何运作的。

    数据>>> Hash Alg>>>哈希值>>>>>>>>>> Asymm'Alg>>>>签名                       发件人的PVT.KEY>>>

    下面显示了Bob如何检查Alice是否确实是发件人。

    数据>>> Hash Alg>>>哈希值||解密签名<<< Asymm'Alg<<<签名                                                                        <<<发件人的PUB.KEY                           ? ==?

    正如您所见,Bob必须比较生成的Hash和Decrypted Signature 为了验证Alice是发件人。 DSACrypto'类有4种方法 可以在这里使用,但只有两个在上下文中有效。在这个时间点,这是鲍勃可以做的全部,如果他的公钥不是爱丽丝的公钥,那么基本上软件应用程序应该阻止鲍勃死在他的轨道上继续进行,因为鲍勃试图使用伪造的公钥时试图与爱丽丝沟通。这是强加的关系,并强调了公钥的重要性。签名允许您验证公钥所有者。

    这是为什么? ::

    如果Bob拥有Alice的公钥,那么他可以再次使用相同的算法来使用.VerifyHash或VerifyData方法解密加密数据。应该直截了当地给出了这样的背景。这都是使用Alice的公钥完成的。只有Alice可以使用SignHash和SignData方法,因为它们需要Alice的私钥。

    正如您在上面所看到的,DSA和RSA CryptoServiceProvider类中已经封装了一定级别的功能。它归结为您实现它们以及每次验证Alice作为发送方的程度,因为DSA算法允许您通过匹配生成的输出来验证发送方。某个签名和哈希应该匹配,如果他们这样做,那么DSA已经授予你Bob和Alice之间一定程度的机密性。

答案 3 :(得分:-1)

因为您假设私钥真的是“私有” - 即alice和bob在离开工作时不要将他们的USB密钥插入他们的机器。