面试官:HTTPS使用的是对称加密还是非对称加密?

80 阅读4分钟

答案是:都用了。

具体使用过程如下:

sequenceDiagram
    participant 用户浏览器
    participant 服务器
    participant CA

    用户浏览器->>+服务器: 发起HTTPS请求
    服务器->>+CA: 请求签名的证书
    CA-->>-服务器: 签名的证书
    服务器->>用户浏览器: 提供证书(含公钥)
    用户浏览器->>用户浏览器: 验证证书真实性
    用户浏览器->>用户浏览器: 生成对称会话密钥
    用户浏览器->>服务器: 使用公钥加密会话密钥
    服务器->>服务器: 使用私钥解密会话密钥
    Note over 用户浏览器,服务器: 非对称加密结束,对称加密开始
    用户浏览器->>服务器: 使用对称密钥加密数据
    服务器->>用户浏览器: 使用对称密钥加密数据

阶段1. 非对称加密:

  • 在 HTTPS 过程的开始,服务器会向客户端发送其 SSL/TLS 证书,该证书包含了服务器的公钥。
  • 客户端使用这个公钥来加密生成一个随机的会话密钥(对称密钥),然后发送回服务器。
  • 服务器使用自己的私钥来解密这个会话密钥。

阶段2. 对称加密:

  • 一旦服务器和客户端都有了会话密钥,它们就使用这个对称密钥来加密和解密传输的数据。
  • 对称加密用于实际数据传输,因为它比非对称加密更快,适合于大量数据的加密。

HTTPS 在建立连接时使用非对称加密来安全地交换对称密钥,然后在之后的会话中使用对称加密来保护数据的隐私和完整性。

这种方法结合了两种加密方法的优势:非对称加密的安全性和对称加密的效率。

下面分别介绍下对称加密和非对称加密

非对称加密:安全但是效率低

非对称加密使用一对密钥:公钥和私钥。
公钥可以公开分享,用于加密信息,而私钥保持私密,用于解密信息。
这种方法的关键优势在于,即使公钥是公开的,没有对应的私钥,也无法解密通过公钥加密的信息。

当用户的浏览器连接到一个安全网站时,网站服务器会发送一个包含公钥的数字证书给浏览器。
这个证书通常由第三方权威机构(CA)签发,确保了服务器身份的真实性。

浏览器接收到公钥后,会生成一个随机的对称会话密钥,用服务器的公钥加密它,然后发送回服务器。
服务器用自己的私钥解密这个消息,获得对称密钥。
至此,使用非对称加密成功地在客户端和服务器之间安全地交换了对称密钥。

以下是非对称加密的过程:

sequenceDiagram
    participant Alice
    participant Bob

    Note over Alice: 生成密钥对
    Alice->>+Alice: 生成公钥(PubA)和私钥(PrivA)
    Alice->>+Bob: 发送公钥(PubA)
    
    Note over Bob: 使用Alice的公钥加密消息
    Bob->>+Bob: 加密消息 "Hello, Bob!" 使用 PubA
    Bob->>-Alice: 发送加密的消息(EncryptedMessage)
    
    Note over Alice: 使用私钥解密消息
    Alice->>+Alice: 使用私钥(PrivA)解密消息
    Alice-->>-Alice: 显示解密的消息 "Hello, Bob!"

在这个过程中:

  1. Alice 生成了一对密钥,一个公钥(PubA)和一个私钥(PrivA)。
  2. Alice 将她的公钥(PubA)发送给 Bob。
  3. Bob 使用 Alice 的公钥(PubA)来加密他想要发送的消息 "Hello, Bob!"。加密后的消息表示为 EncryptedMessage。
  4. Bob 将加密后的消息(EncryptedMessage)发送给 Alice。
  5. Alice 使用她的私钥(PrivA)来解密 Bob 发送的加密消息。
  6. Alice 能够看到解密后的原始消息 "Hello, Bob!"。

对称加密:效率高但是安全性不足

对称加密使用同一个密钥进行加密和解密。

由于对称加密算法(如 AES)在计算上比非对称加密算法(如 RSA)更为高效,非常适合加密大量数据。

以下对对称加密的过程:

sequenceDiagram
    participant Alice
    participant Bob

    Note over Alice: 生成对称密钥
    Alice->>+Alice: 生成密钥(Key)
    Note over Alice,Bob: 安全共享密钥(Key) (例如,通过面对面会议或安全信道)

    Note over Alice: 使用对称密钥加密信息
    Alice->>+Alice: 加密信息 "Hello, Bob!" 使用 Key
    Alice->>-Bob: 发送加密的信息(EncryptedMessage)

    Note over Bob: 使用对称密钥解密信息
    Bob->>+Bob: 使用密钥(Key)解密信息
    Bob-->>-Bob: 显示解密的信息 "Hello, Bob!"

在这个过程中:

  1. Alice 生成了一个密钥(Key),这是一个对称密钥,意味着加密和解密都将使用同一个密钥。
  2. Alice 通过某种安全的方式将密钥(Key)共享给 Bob。这可能是通过直接交换、使用已经存在的安全通道,或者通过其他安全的密钥交换机制。
  3. Alice 使用这个密钥(Key)来加密她想要发送给 Bob 的信息 "Hello, Bob!"。加密后的信息表示为 EncryptedMessage。
  4. Alice 将加密后的信息(EncryptedMessage)发送给 Bob。
  5. Bob 使用同一个密钥(Key)来解密 Alice 发送的加密信息。
  6. Bob 能够看到解密后的原始信息 "Hello, Bob!"。