标签: AEAD

  • TLS1.3和QuicTLS中的密钥更新

    在IPSec中定期执行密钥更新是强制性的,比如华为防火墙上是每个小时或者每超过80GB流量就会更新一次SA。

    但是TLS中并没有对密钥更新进行硬性规定,可能因为TLS通常用于短连接,对之方面要求低。TLS1.2及以前可以通过重协商(重新握手)来更换密钥,但这可能造成连接中断。TLS1.3中提供了专门的key update所握手消息进行密钥更新,但并没有规定密钥更新周期。

    在RFC8446的5.5节提到对于一组密钥,AES-GCM可以对2400万个TLS记录进行安全的加密,一个TLS记录是16KB,也就是384GB的数据大小。看来日常环境中TLS并没有更新密钥的必要性,在nginx,firefox,chrome中我也没有发现有密钥更新的说明或相关配置。
    在OpenVPN上可以使用–reneg-bytes和reneg-sec配置更新密钥的数据量和时间周期。不过OpenVPN并没有使用TLS的密钥更新机掉,OpenVPN自己实现了密钥管理,密钥交换,密钥重协商等,需要注意的是,它并不使用SSL握手最终确定的那些密钥,OpenVPN使用SSL握手仅仅是完成了连接者身份认证以及为后续的密钥管理,密钥交换,密钥交换以及控制信道构建一个安全的加密通道,完全类似于IKE的第一阶段协商。

    另外在这个IETF提案中提到TLS1.3中自带的key update机制不是PFS(前向保密),所以重新定义了一个用于密钥更新的扩展,用于提供PFS的密钥更新。
    在OpenSSL中可以调用SSL_key_update()函数执行TLS1.3的key update握手。

    在QuicTLS(RFC9001)中对密钥更新做了更明确也更严格的要求,AES-123-GCM限制为2^23个数据包,1个数据包是1.5KB的话就是12GB的数据量。而且超过数据量后必须更新密钥或中断连接。Quic专门定义了一个key_updated事件,在密钥更新时会触发。QuicTLS并没有使用TLS1.3中的key update报文来更新密钥,而是使用Key Phase bit来进行密钥更新,而且QuicTLS要求两端同时进行密钥更新。在OpenSSL的ssl/quic/quic_record_util.c文件中定义了每种加密套件的AEAD用量限制,共定义了3种加客套件,分别由suite_aes128gcm,suite_aes256gcm,suite_chacha20poly1305这3个结构体表示。

    参考:
    https://datatracker.ietf.org/doc/draft-irtf-cfrg-aead-limits/
    https://datatracker.ietf.org/doc/html/rfc8446
    https://datatracker.ietf.org/doc/draft-ietf-tls-extended-key-update/
    http://shanks.link/blog/2022/07/01/openvpn%E5%8D%8F%E8%AE%AE%E8%A7%A3%E6%9E%90%E4%B9%8B%E7%BD%91%E7%BB%9C%E7%BB%93%E6%9E%84%E4%B9%8B%E5%A4%96/
    https://docs.openssl.org/master/man3/SSL_key_update/
    https://caddyserver.com/docs/json/apps/http/servers/tls_connection_policies/client_authentication/ca/http/tls/renegotiation/
    https://datatracker.ietf.org/doc/draft-ietf-quic-qlog-quic-events/
    https://autumnquiche.github.io/RFC9001_Chinese_Simplified/#6.6_Limits_on_AEAD_Usage
    https://dev.to/shouhua_57/http3zhi-key-update-nod

    Views: 9

  • AES的加密模式

    仅加密模式

    • AES-ECB 电码本模式
      是最基本的模式,就是一块一块的单独加密,除了安全性差其它全是优点,速度最快。
    • AES-CBC 密码分组链接模式
      链式加密,前面的密钥与后面的明文异或运算后再加密,依次进行,直到最后一块。安全性好,但速度慢,不支持并行运算,比带AEAD的GCM模式还要慢。
    • AES-CTR 计数器模式
      设一个累加的计数器,一个计数对应一个加密块,对计数进行加密然后与明文异或运算。安全性好,速度仅次于ECB模式,支持并行运算。但不支持随机访问(对任意一块进行加解决)。CTR实际上是流式加密,并且不需要填充。
    • AES-XTS 基于XEX的密文窃取算法的可调整密码本模式
      具体算法略复杂,特点是安全性好,速度快,可并行运算,速度仅次于CTR模式,最关键的是可随机访问,而其它大多数模式,像CBC,CTR仅支持从前往后顺序加解密,无法处理指定位置的块,速度略慢于CTR模式。主要用于存储设备加密,比如磁盘加密,内存加密。

    仅验证模式

    • AES-GMAC Galois消息认证码
      Galois消息认证码
    • AES-CMAC 基于密码的消息认证码
      基于密码的MAC

    AE/ADAD模式

    • AES-CCM 带有CBC-MAC 的CTR模式
      支持AE,先MAC后加密
    • AES-GCM 结合CTR模式和GMAC的分组加密模式
      支持AEAD,先加密后MAC

    AD/AEAD算法要慢于纯加密算法。

    Views: 3