在TLS/SSL中,从premaster secret到master secret再到加密密钥的目的是什么?

All*_*eng 3 encryption ssl

为什么客户端和服务器不直接使用公钥加密或DH密钥交换协议交换加密密钥?这背后的理由是什么或解决的问题是什么?

jww*_*jww 10

它有助于理解在现代SSL/TLS中如何派生密钥.早期SSL(如SSLv2)的情况有所不同.

master_secret是客户端和服务器共享的常见秘密.它用于派生会话特定的密钥.的master_secret衍生自其它参数(下面讨论).

每个秘密有6个来自master_secret:

  • 客户端加密密钥
  • 服务器加密密钥
  • 客户端MAC密钥
  • 服务器MAC密钥
  • 客户IV
  • 服务器IV

假设既不使用 eNULL也不aNULL使用,客户端和服务器都使用加密密钥进行机密性,使用HMAC密钥进行真实性.每个(客户端和服务器)都有自己的密钥.

虽然IV通常被认为是公共的,但SSL/TLS将它们视为秘密参数.

RFC 5246,master_secret派生为:

master_secret = PRF(pre_master_secret, "master secret",
                    ClientHello.random + ServerHello.random)
                    [0..47];
Run Code Online (Sandbox Code Playgroud)

pre_master_secret来自密钥协商或密钥传输.如果它来自密钥协议,则pre_master_secret是Diffie-Hellman密钥协议的结果.在协议方案中,双方都对派生的秘密作出贡献.

如果pre_master_secret来自密钥传输方案,则客户端在服务器的公钥下加密随机值.在此方案中,只有客户端提供密钥材料.当只有一方提供密钥时,它被称为密钥传输方案.


这背后的理由是什么或解决的问题是什么?

第一阶段,pre_master_secret使用它,为密钥协议或密钥传输提供"可插拔"架构.

master_secret派生的第二阶段确保客户端和服务器都对密钥材料做出贡献.

此外,还有一个标签 - "主密钥" - 有助于确保派生是唯一的,即使相同的参数用于其他内容(假设不同的派生使用不同的标签).SP800-56和SP800-57(以及其他地方)讨论了标签的使用.

master_secret派生的第二阶段中使用的散列执行两个功能.首先,它执行混合功能.其次,它将密钥交换或密钥协议使用的组中的元素映射到随机位模式.

最后阶段是从中推导出6个键master_secret.根据6.3.密钥计算,推导提供密钥独立性.它只是确保互操作性:

   To generate the key material, compute

      key_block = PRF(SecurityParameters.master_secret,
                      "key expansion",
                      SecurityParameters.server_random +
                      SecurityParameters.client_random);

   until enough output has been generated.  Then, the key_block is
   partitioned as follows:

      client_write_MAC_key[SecurityParameters.mac_key_length]
      server_write_MAC_key[SecurityParameters.mac_key_length]
      client_write_key[SecurityParameters.enc_key_length]
      server_write_key[SecurityParameters.enc_key_length]
      client_write_IV[SecurityParameters.fixed_iv_length]
      server_write_IV[SecurityParameters.fixed_iv_length]
Run Code Online (Sandbox Code Playgroud)

上面的步骤是一个坚实的设计.但是,当在SSL/TLS中使用时,会有很多恶魔在运行.例如,上面是足够的时候像重新协商功能被添加(三重握手攻击FTW!).