非对称加密

7
我明天要参加高级开发考试,但我卡在了加密这个话题上。我在http://support.microsoft.com/kb/246071上阅读了相关信息,但仍感到困惑。
如果使用非对称加密使用公钥加密消息,解密者如何知道用于解密的私钥?唯一的方法是公开私钥,但这违背了非对称加密的目的。
有人能否以非技术人员可以理解的方式解释一下这个问题?我只不理解非对称加密,对称加密我懂。先谢谢了。
问候,
Richard
编辑:所以总结一下,在Web应用程序的情况下(我需要了解此内容的特定用途):
1. 用户访问网站; 2. 用户被要求提供公钥; 3. 用户创建公钥和私钥对,保持私钥私有并将公钥发送回服务器; 4. 服务器使用公钥加密需要发送给用户的任何内容并将信息发送到用户; 5. 用户使用他/她的私钥解密来自服务器的响应; 6. 用户执行所需操作并使用私钥加密响应以发送回服务器; 7. 服务器使用公钥解密。
步骤4-7可能会多次继续进行,或者它们可能只发生一次,或者只有4和5可能发生。
这是否都正确?如果是的话,那么这应该是我考试所需要知道的全部内容。如果出现关于此主题的问题,我认为我不需要了解更多以获得最高40%的成绩,但会提到证书和签名的存在。
感谢所有的帮助。
问候,
Richard
编辑:好吧,我刚刚参加完考试,我认为还可以。但没有涉及加密学的问题,不过……还是非常感谢大家的帮助。
问候,
Richard

1
请返回翻译后的文本:http://zh.wikipedia.org/wiki/公钥密码学 - Rubens Farias
1
顺便说一句,如果你对密码学感兴趣,你应该看看Simon Singh的《密码编码图解》。 - Rubens Farias
感谢提供维基链接,但是a) 我们被告知永远不要使用维基(我仍然大多数情况下使用!)和b) 这里的解释比维基容易理解得多。然而,维基确实有一些关于实际应用的好章节。 - ClarkeyBoy
5个回答

13

私钥只应被合法用户知晓,不得分发。公钥则可以分发给任何人。

基于此,您可以进行4种操作:

  • 使用公钥加密
  • 使用私钥解密
  • 使用私钥签名
  • 使用公钥验证签名

接下来可能会遇到的问题是将身份绑定到公钥上(因为您不想使用冒名顶替者的公钥加密某些内容或信任其签名)。有各种公钥分发模型可供选择。通常可以选择以下几种:

  • 信任网,其中人们相互签署公钥和身份之间的关联:这通常是PGP模型。
  • 公钥基础设施(PKI),您可以让认证机构在一个类似树状层次结构中生成证书,通常包括中介证书。(PGP也可以使用此模型,但似乎较少见。)

7

Alice创建了她的私钥和公钥。她保持她的私钥私有。她使她的公钥公开。

Bob获取Alice的公钥(他应该首先验证,这确实是Alice的公钥!),并使用它来加密一条消息,然后发送给Alice。

Alice可以使用她的私钥解密这个消息。


据我所知,它也可以反过来运作 - Alice 可以使用她的私钥进行加密,然后 Bob 可以解密。这是一个很好的解释方式。谢谢。 - ClarkeyBoy
不行。在这种情况下,Bob必须使用公钥进行解密。但是其他任何人也知道公钥(它是公开的!)并且也可以解密。 - Jens
@Jens:这对于加密(保密方面)来说并不有用,但可以用于签名消息。注意:根据密码方案,使用不同的密钥进行签名和加密可能很重要(请参见例如http://security.stackexchange.com/q/1806)。 - Chris Lercher

5

其他人已经提供了“通用”的描述,我将更深入地探讨现实生活中的情况。

大多数现代非对称加密标准不是使用原始公钥和私钥,而是使用更复杂的包装器,例如X.509证书或OpenPGP密钥(这是今天最流行的两种非对称加密基础设施)。证书和OpenPGP密钥都包含额外的信息,使它们易于识别、搜索和管理。

现在,加密数据块通常包括用于加密的公共部分(即证书或公共OpenPGP密钥),或者至少包括该公共部分的ID(哈希值)。数据的接收者通常有(或应该有)公共和私有部分(私钥通常与证书或公共OpenPGP密钥一起保存)在手边。因此,当接收者接收到加密数据时,他知道需要在自己的私钥存储中查找具有给定ID的公共部分(或者查找包含在加密数据中的给定公共部分)。

存在没有包含任何信息的情况。然后接收者除了尝试所有可用的私钥进行解密之外别无选择。但这种情况很少发生,因为默认情况下加密数据块中都包含证书或密钥ID。


这是一个好的答案 - 你需要添加识别信息到加密块/数据块中,以便确定哪些密钥将解密它。(公钥的名称、指纹或哈希值) - Dominik Weber

2

公钥由“解密者”提供给“加密者”,因此,根据定义,“解密者”知道私钥(因为它是由“解密者”创建的密钥对的一部分)。


啊,你的意思是解密器使用私钥加密消息,以便加密器可以解密消息,然后发送一个使用公钥加密的消息回来,只有拥有原始私钥的用户才能解密?这很有道理,除非黑客获取了带有公钥的原始消息。或者我还是没明白? - ClarkeyBoy
1
不使用非对称加密,您只需要向其他人发送您的公钥。无论谁监听该消息,任何人都可以使用您的公钥加密信息并将其发送给您。如果有人在监听,那也没关系,因为只有您拥有私钥(永远不应传输)。 - Sebastian
那么,从这句话中我理解的意思是,在 web 应用程序中,客户端(用户)自己提供公钥给服务器,并保留私钥...? 如果是这样,那就很有道理了。谢谢。 - ClarkeyBoy

1
假设“解密器”= D,而“加密器”= E。
D之前向E发送了他的公钥,因此E可以加密消息。因为只有D知道自己的私钥,所以只有D才知道如何解密E刚刚发送给他的消息(记住:一个密钥用于加密,另一个用于解密)。通过这种方式,您可以获得隐私。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接