hxndg Blog

Thinking will not overcome fear but action will.

OPENSSL源码阅读(7)

非复用状态下的发送Finished报文

OPENSSL源码阅读(7) 前言 上一回说了非复用状态/完整握手状态下发送CertificateVerify消息时自动机的变化,这次我们来说说完整握手情况下发送Finished时发生了什么 从CertificateVerify发送完毕说起 我们上次讲了,发送CertificateVerify之后post_work啥都没干。这次就要发送Finished消息了,此时状态是服务端写Certif...

OPENSSL源码阅读(6)

非复用状态下的发送CertificateVerify

OPENSSL源码阅读(6) 前言 上一回说了非复用状态/完整握手状态下发送EncryptedExtension消息时自动机的变化,这次我们来说说完整握手情况下发送CertificateVerify时发生了什么,这里我们跳过了证书消息发送阶段。 从EncryptedExtension发送完毕说起 我们上次讲了,发送EncryptedExtension之后post_work啥都没干,然后C...

OPENSSL源码阅读(5)

非复用状态下的发送EncryptedExtension

OPENSSL源码阅读(5) 前言 上一回说了非复用状态/完整握手状态下发送ChangeCipherSpec消息时自动机的变化,这次我们来说说完整握手情况下发送EncrypotedExtension时发生了什么。 从ChangeCipherSpec发送完毕说起 我们上次讲了,发送ChangeCipherSpec之后post_work函数时计算完毕写ctx和读ctx的流程,这次就要发送En...

OPENSSL源码阅读(4)

非复用状态下的发送Change_Cipher_Spec

OPENSSL源码阅读(4) 前言 从这里开始,最好对于TLS1.3的密钥衍生流程比较熟悉,很多名词都是密钥衍生流程图里的,至少得清楚一些名词的含义。 源码阅读(3)里,我们说到了自动机处理完了CLIENTHELLO,发送了SERVERHELLO报文,这次我们来聊聊接下来的流程,我们首先假设这次没有接受客户端的PSK,走一次完整的ECDHE握手,处于方便考虑,我们假设没有双向认证,也不吧N...

ECDSA算法

原理和流程

ECDSA算法 前言 我今天简单查了查ECDSA的流程,发现一大堆人瞎写,私钥写成公钥,随机数k写成d,真是令人尴尬。所以写个这个,额,差不多可以说是维基百科的翻译版。 ECDSA算法的讲解 场景假设还是经典的Alice,Bob场景,他们一开始只协商好了椭圆曲线ID,基点G,和基点G的阶n(multiplicative order)。 基本参数定义 场景假设还是经典的ALICE,BOB...

OPENSSL源码阅读(3)

Clienthello读取和Serverhello发送

OPENSSL源码阅读(3) 前言 今天来分析分析自动机,自动机这东西基本只要是服务器都得用,上学那会看别人写的http自动机,现在工作了自己写tls自动机,如果对自动机有疑问可以看看字符串匹配的几个算法。本质上没啥变化。但是在TLS1.3中有个很大的问题:传统的自动机驱动是由数据驱动的,在TLS1.3当中由于存在early_data存在了一个early_data驱动和缓存的问题;对于客户...

OPENSSL源码阅读(2)

SV_BODY

OPENSSL源码阅读(2) 前言 SV_BODY本身就是一个包裹的层面,我不喜欢这块的函数就是本身应该上来是握手,然后根据握手包决定是不是接受early_data。但openssl的代码就是上来就写SSL_read_early_data,明明是握手却搞得好像early_data读取一样,令人贼尴尬。 SV_BODY的解析 我们这里直接分析允许early_data的情况,首先调用SSL...

OPENSSL源码阅读

从S_SERVER说起

OPENSSL源码阅读 前言 我最近有点烦,想找点副业不知道干啥,化悲愤为思考,写点文章吧。一般人阅读OPENSSL的源码是先说有几个文件,每个文件干啥。我打算从S_SERVER文件说起,因为做实验的时候一般都是自己搭建TLS 服务器。这次不会细致到每个点都扣,不值得也没有必要,读书不求甚解,至于精微之处则慢慢品味。 从S_SERVER说起 openssl自带一个s_server服务器,...

TLS1.3TicketIdentity设计

TLS1.3中的基础知识

TLS1.3 Ticket Identity设计 前言 很多时候设计数据结构是个令人尴尬的事情,用户量小/只有自己使用,那随便写。但是如果用户量变大了/出现了内存写坏的情况,那DEBUG可以说是要死人了。所以打好一个框架可以说是非常重要的。不过讲道理设计Identity的时候我是参照RFC5077做的,然后吴哥设计的时候也是照5077做的,抄就完事了,就是最后实现identity和原本se...

TLS1.3复用验证流程

0-RTT以后单独写

TLS1.3 复用验证流程 前言 在我司写TLS1.3自动机的时候我负责的就是复用(reuse)和0-RTT的流程,这两个流程的功能介绍实质上是非常简单的,一些中间的运算可能稍微复杂,我当时是对着cavium卡和openssl 1.1.1d的代码做的研究。以后再写点openssl代码的东西吧 复用流程 复用的流程看起来是非常简单的,见下: 简单说说,我们针对复杂一些的复用过程(PSK...