这篇blog是关于tls1.2协议handshake部分的介绍和分析,主要内容来自于对rfc5246的梳理。
TLS握手协议作用主要有以下几点:
一个完整的TLS握手过程如下图所示:
密码学可以说是所有计算机学科中科学和工程结合的最紧密的学科之一,并且两者都极其重要。TLS协议作为现代互联网数据安全的基石,自1994年由Netscape首次推出以来(当时叫SSL)发展至今已经有快30年历史了,可以说汇集了现代密码学众多的理论研究成果和安全实践经验,学习TLS的设计一方面对了解现代密码学的应用具有很好的参考价值。另外一面,密码学领域内的轮子区别于其他领域内的轮子,作者需要具备严格的密码学学术训练和大量领域工程实践经验,代码本身也需要经过大量的同行审议,才能算作是可用,这个领域不提倡一言不合就自己造轮子,TLS协议这个有着多年发展迭代历史、经过大量研究人员审议,应该我们在绝大部分场景选择安全通信协议时候的不二选择。这篇blog将会深入TLS协议的细节,记录和学习TLS协议的设计和演进。需要说明的是想要深入学习TLS协议是有一定门槛的,读者需要具备一定的密码学背景知识。
前一篇blog HPACK explained in detail里,我试着分析了下HPACK的设计细节。其中HPACK对于string literal数据采用static Huffman coding来编码,这一篇blog将继续拓展这个话题,写写关于HPACK中static huffman decode/encode算法实现的内容,虽然HPACK里用的static huffman coding不涉及根据数据构造huffman树,但是想要实现一个高效的HPACK huffman encoder/decoder并不是一个很直观的事情,尤其是将huffman 高效decoder的实现。接下来的内容分为两个部分,分别以netty HPACK的实现为例,介绍下目前工业界常见huffman decoder/encoder的算法。