HTTPS连接-如何管理密钥对

时间:2018-11-20 19:13:44

标签: android encryption https cryptography operating-system

在HTTPS连接中,客户端和服务器交换公共密钥,并使用这些密钥通过算法(例如RSA)(非对称加密)对消息进行加密。有趣的是,对于Web上的HTTPS连接,在双方都确保它们具有安全的通道之后,它们将传输密钥以发送进一步的消息,该消息将通过其他算法(对称加密)进行加密。使用对称加密是因为非对称加密的计算量很大。在他们同意单个秘密加密密钥之后,服务器和客户端可以轻松地传输消息(文本,图像,重视频等)。

现在,我的问题是:如何管理用于https连接的密钥对?操作系统管理它们还是浏览器?它们存储在哪里?可以更改它们吗?客户端建立的每个https连接都会生成一个(新的)密钥对吗?

从逻辑上讲,单个密钥对将为客户端提供终生服务。因此,每个操作系统都需要为每个算法生成一堆不同长度的密钥。

特别是,我很好奇它在android中是如何完成的。我试图决定如何在我的应用程序中管理https连接,但是我找不到任何允许我使用特定密钥对进行连接的库,这让我开始思考所有这些东西。

1 个答案:

答案 0 :(得分:0)

  

在HTTPS连接中,客户端和服务器交换公共密钥,并使用这些密钥通过算法(例如RSA)(非对称加密)对消息进行加密

这不是事实。密钥对用于建立预先掌握的机密,从该机密导出对称密钥。这可以通过在TLS 1.3(含TLS 1.3以下)中使用密钥协议(DH / DHE / ECDH / ECDHE密码套件)来完成。在该标准的早期版本中,也可以仅使用服务器的密钥对使用RSA加密来加密由客户端生成的机密。

  

有趣的是,对于Web上的HTTPS连接,在双方都确保它们具有安全的通道之后,它们将传输密钥,以发送进一步的消息,该消息通过另一种算法(对称加密)进行加密。

否,使用预主密钥生成主密钥,然后使用密钥派生函数将主密钥用于派生会话密钥,在TLS标准中,密钥派生函数通常称为PRF(最高1.3)。

  

使用对称加密是因为非对称加密的计算量很大。

与非对称加密相比,它还能以更大的数量扩展密文。这是一个误解,认为 just 取决于计算量大。否则,这是正确的。

  

在他们同意单个秘密加密密钥之后,服务器和客户端可以轻松地传输消息(文本,图像,重视频等)。

不。首先,需要对先前的消息进行身份验证。否则,攻击者可能会插入信息来攻击该方案。此外,使用两到四个密钥来加密数据帧。如果需要带有身份验证的密码,则可以使用一个密钥在任一方向上创建消息。如果使用未经身份验证的密码,则每个方向都需要另一个密钥,以通过计算MAC(通常为HMAC)来提供完整性和真实性。

  

现在,我的问题是:如何管理用于https连接的密钥对?

这取决于密钥对和实现。

  

操作系统是管理它们还是浏览器?

这也取决于。 Firefox当然可以管理自己的密钥和证书。但是,IE和Edge通常使用SChannel,这是Windows中使用Windows证书/密钥存储区的TLS实现。

  

它们存储在哪里?

临时(临时)密钥对通常保存在内存中。静态密钥对通常保存在永久性存储中,或者甚至可以受硬件保护。

  

可以更改它们吗?

不,您可以生成新的,但是如果您更改它们,那么它们将不再有效。

  

客户端是否为每个https连接生成(新的)密钥对?

基于DHE和ECDHE的密码套件中的E表示短暂的。对于-稀疏使用的DH和ECDH方案,一个密钥对是静态的,而另一个则是短暂的。否则,密钥对是静态的,答案是否定的。静态密钥对的公钥通常在X.509 证书中。要使用静态密钥对,在公共密钥中建立 trust 至关重要。

  

从逻辑上讲,单个密钥对将为客户端提供终生服务。因此,每个操作系统都需要为每个算法生成一堆不同长度的密钥。

那是完整的,完全是胡说八道。客户通常甚至没有密钥对。所有证书都有其使用期限。客户通常甚至没有证书。密钥需要更新。临时密钥对是动态生成的。

  

特别是,我很好奇它在android中是如何完成的。我试图决定如何在我的应用程序中管理https连接,但是我找不到任何允许我使用特定密钥对进行连接的库,这让我开始思考所有这些东西。

您不应该在想,因为您在上面写的任何东西都是错误的(好吧,除了那句话,它只是不完整的)。您应该正在阅读-适用于初学者的TLS RFC。在您建立了足够的知识基础之后,才会进行思考。

如果您现在有任何有趣的想法:写下来,学习一下,然后检查它们是否值得保留。