公钥加密

公钥加密

这是我理解公钥工作原理的方式...假设您在一个网站上,并且访问了页面的信用卡。然后您使用该站点的公钥加密数据包并将其发送给他们。然后该站点使用相应的私钥解码数据包。所以我理解了这一部分。

现在,当我访问经过身份验证的页面时,情况会怎样?假设我正在访问我的银行帐户页面。网站如何加密发给我的数据包。我如何打开它,如何知道沿途有人没有阅读它。

答案1

这是一个很大的问题 =) 以下是 HTTPS 的高层概述;如果有任何不清楚的地方请提出,我会补充更多细节。

当您使用 HTTPS 连接时,公钥加密仅在会话初始化期间使用。初始化的一部分是安全交换私有共享密钥,然后将其用于对称加密。原因是非对称(公钥)加密比对称密钥加密慢得多,因为涉及数学运算。

SSL 握手

从高层次来看,该协议大致如下:

  1. 客户端发送初始“HELLO”消息,其中包含它想要使用的 ssl 版本、一个伪随机字符串(我们称之为 B1)以及它支持的各种密码的列表。

  2. 服务器用自己的“HELLO”消息、另一个伪随机字符串(我们称之为 B2)、它选择的密码(通常是客户端发送的列表中服务器支持的最强密码)和包含其公钥的证书(我们称之为)。

  3. 然后,客户端使用证书来验证服务器(见下文)并创建“预主密钥” - 另一串伪随机位,我们称之为 S。

  4. 如果客户端对服务器身份验证的结果满意,它将使用服务器的公钥加密预主密钥 S,并将其发送到服务器(S本身是加密的,但连接仍然没有)。

  5. 此时,服务器和客户端共享三个位串 - B1、B2 和 S。B1 和 B2 以明文形式发送 - S 已加密,因此,假设服务器的私钥确实是私密的,只有客户端和服务器知道。

  6. 然后,客户端和服务器都使用这三个位串来构造会话密钥 - 只有他们知道的字符串,并且可以用作先前选择的对称密码中的密钥。

  7. 然后,客户端和服务器交换表明它们正在更改协议的消息,并且所有后续消息都经过加密(对称加密,使用上面计算的密钥)。

服务器身份验证

当客户端收到服务器 HELLO 消息时,它需要确保它正在与它认为的服务器进行通信。服务器证书和密钥用于建立这种信任。

数字证书就是第三方声称“该实体持有与该公钥相对应的私钥,该公钥嵌入在该证书中”。像 Verisign 这样的组织会做出这样的断言 - 需要付费。人们向 Verisign 和其他公司支付证书费用的原因是 Verisign 不遗余力地将其中间证书嵌入到大多数常见浏览器中。

所以,当客户端收到服务器的HELLO时,它会执行以下检查:

  • 今天的日期是否在证书的有效期内?
  • 证书的主题名称是否与我尝试连接的服务器的主题名称匹配?
  • 证书上的颁发者名称是否与我所知道的任何 CA 的公钥相匹配?
    • 如果是的话,我拥有的该 CA 的公钥是否可以验证该证书?

如果所有这些检查都通过,客户端就认为它可以相信服务器就是它所期待的那个人。然后它获取公钥(仍然),并使用它安全地将 S 传输到服务器。此时,想法是,您有某个第三方 (Verisign) 断言公钥属于服务器;因此只有服务器才能解密 E(S,),因此只有服务器可以生成用于对称密码的匹配密钥。

握手之后,您对数据包不能被第三方读取的信心应该等于您对正在使用的对称算法的信心。

(还有其他不错的改进 - 例如,使用三位字符串的原因是为了防止重放攻击。如果仅使用 S,攻击者可以记录整个会话并在闲暇时重放它 - 例如,一遍又一遍地重复汇款指令。通过让客户端和服务器生成额外的伪随机字符串,可以大大降低两个独立的 SSL 握手产生相同 S 的可能性。)

答案2

事实上,它比这更简单。

公钥是公开的。任何人都可以看到它们,任何人都可以使用它们……但它们只是单向的。用你的公钥加密的东西只能用你的私钥解密。

因此,在您的示例中,发生的事情是,您向银行发送使用属于银行的公钥加密的数据包,银行则发回使用您的公钥加密的数据包。只有您可以读取银行发送给您的内容,也只有银行可以读取您发送给银行的内容。即使使用他们的公钥加密,你就无法读取。你可以仅有的如果您有相应的私钥,请读取数据包。

假设私钥确实是私有的,那么没有人可以在不破解私钥的情况下读取您的数据包。

现在,需要注意的是“中间人”攻击。代理或中继站点会设在您和您认为正在交谈的人之间,并诱骗您接受他们的公钥,而不是您认为正在访问的站点的密钥。因此,您将使用他们的公钥加密的数据包发送给他们,然后他们读取这些数据包,并使用他们的公钥,然后转发到网站,网站随后向他们发送他们阅读的数据包,然后转发给您。

答案3

你的问题有点笼统。你到底在寻找什么?

  • 协议实现(如何打开加密数据包)
  • 数学细节(网站如何加密发给我的数据包)
  • 安全问题(“中间人”攻击)

您是否已阅读相关维基百科入口?

答案4

这里使用两种类型的密码。一种是公钥(非对称)类型,另一种是更常见的共享密钥(对称)类型。对称密码效率更高,因为设置公钥密码的方法并不多。

因此,您使用公钥进行联系。然后,您的浏览器可以使用站点的公钥加密共享密钥,并且只有该站点可以接收共享密钥。然后,您的浏览器和网站使用标准密码进行通信。密钥通常在会话结束时被丢弃。因此,只要一切顺利,您的通信就是安全的。

还有一个问题就是要确定你正在与谁交谈。为此,该网站有一个证书,这是来自证书颁发机构的证明,证明你正在与请求证书的人交谈。当你获得证书颁发机构时,它会加载到你的浏览器中,任何由其中一个颁发机构签名的证书都会被你的浏览器接受。一些颁发机构提供价格更高的证书,这些证书将在你的浏览器中显示为绿色,这些证书已经由相关证书颁发机构更仔细地验证过。

我并不是说这是最好的方法。例如,当您为同一个网站获得不同的证书时,我希望看到警告,这种警告通常用于其他公钥加密应用程序中。我认为 Firefox 对自签名证书的警告并不合适(这表明该网站使用公钥加密但没有购买证书),因为它使这些网站看起来比未加密的连接更不可信。

(我不会在这里讨论技术细节,但这是公钥密码和加密哈希的相当简单的应用。哈希是一种将文件或其他内容缩减为固定长度标识符的方法,因此两个文件不太可能具有相同的值。加密哈希是一种很难使两个文件具有相同哈希值的文件。)

相关内容