kaspterio code as a hacker

  • DTLS1.2

  • 阅读前提:具备密码学基础,并了解TLS1.2的工作细节

    主要内容来源:RFC6347

    1. Overview of DTLS

    DTLS设计的目标是为了构建TLS over UDP,但是TLS 依赖传输层提供有序可靠性保证,因此不能直接运行在UDP之上,需要对协议本身依赖传输层有序可靠的地方做一定修改。DTLS旨在以最小的改动做到最大程度上匹配TLS。

    TLS依赖传输层有序的地方有:

    1. 首先在TLS握手阶段依赖消息有序可靠交换来进行密码学握手
    2. 在TLS握手完成后的数据加密保护传输阶段,block cipher中TLS依赖于双端内存中的seq_num来进行record的mac校验做到防止重放攻击,而seq_num在TLS是维护于双端内存中,依赖record交互来进行同步;stream cipher更是依赖于record的有序可靠交付进行加解密
    read more...
  • Using TLS to secure QUIC

  • Overview

    这篇blog是关于QUIC协议如何使用TLS1.3来建立安全的QUIC连接,以及QUIC层如何对packet进行加密认证保护的内容,主要内容来自于rfc9001,结合自己的理解做了一些内容上的调整。原RFC文档个人认为写的非常全面易读了(至少比QUIC本身的RFC9000要易读多了。。),有兴趣的最还是要去读一读原文。

    1 QUIC和tls1.3的关系

    +--------------+--------------+ +-------------+
    |     TLS      |     TLS      | |    QUIC     |
    |  Handshake   |    Alerts    | | Applications|
    |              |              | |  (h3, etc.) |
    +--------------+--------------+-+-------------+
    |                                             |
    |                QUIC Transport               |
    |   (streams, reliability, congestion, etc.)  |
    |                                             |
    +---------------------------------------------+
    |                                             |
    |            QUIC Packet Protection           |
    |                                             |
    +---------------------------------------------+
    

    和tls1.3 over tcp不一样,quic和tls1.3并非严格的上下层关系,而是quic连接的建立过程会复用tls1.3的handshake协议来进行密钥协商,tls1.3依赖quic transport提供的传输层可靠性保证。因此quic 和tls1.3的关系是同一个layer中的两个组件。

    read more...
  • tls1.3 handshake

  • Overview

    这篇blog是关于tls1.3协议handshake部分的介绍和分析,主要内容来自于rfc8446,这里主要侧重tls1.3区别于tls1.2的部分,并尝试搞清楚tls1.3这些变更的设计动机。

    tls1.3将握手概括为三个阶段

    • key exchange阶段:双方通过ClientHello和ServerHello进行所有必要的协议加密材料交换和密码学参数协商,此阶段后的所有消息都是经过加密的,这也是tls1.3和tls1.2握手过程一个很显著且重要的区别。
    • Server Parameters阶段: 该阶段Server通过EncryptedExtensions消息将server端一些非密码学参数扩展告诉client。此外还包括一个可选的CertificateRequest消息。和tls1.2一样,如果server端选择认证client,就需要此时发送这个消息给client。
    • Authentication阶段:该阶段包括client和sever双方相互认证的所有消息,首先server端会发送Certificate消息将自己的证书传给client,并随即发送一个CertificateVerify消息来证明自己持有该证书,然后server完成握手发送一个Finished消息。client端这边如果被要求提供证书来认证身份的话首先也需要通过Certificate、CertificateVerify来发送证书、证明持有证书,最后client发送Finished消息完成握手。
    read more...