QUIC协议(握手过程)简要介绍
这篇博客可能更多的偏向于密码学方面来进行介绍(csdn关于网络层)。
为什么需要QUIC协议
随着当前网络对性能要求的越来越高,有部分公司已经觉得原来的TCP和UDP协议的握手阶段太长。因此就致力于开发一些新的协议进行连接。于是Goole在2013年就提出了一种新的协议——QUIC协议。
网络层的QUIC
关于QUIC在网络层的介绍,csdn已经存在很多介绍了,这里就不再赘述,这篇博客我们主要从握手协议里用到的密码学技术来进行简要介绍。
密码学元件
Public Key Infrastructure(PKI)
简要来说就是找一个有公信力的第三方为公钥分配一个证书,主要作用就是证明某个公钥是属于某个人的。更详细的解释可以参照博客
https://blog.csdn.net/inthat/article/details/112955419?ops_request_misc=&request_id=&biz_id=102&utm_term=PKI&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-112955419.nonecase&spm=1018.2226.3001.4187
数字签名方案
一个数字签名方案包括三个函数 S S = ( K g , S i g n , V e r ) SS = (Kg, Sign, Ver) SS=(Kg,Sign,Ver),
其中Kg是密钥生成函数 ( p k , s k ) ← K g ( λ ) (pk, sk) \leftarrow Kg (\lambda) (pk,sk)←Kg(λ),其中 λ \lambda λ表示安全参数,pk表示公钥, sk表示私钥。
Sign是签名函数: σ ← S i g n ( s k , m ) \sigma \leftarrow Sign(sk, m) σ←Sign(sk,m), 其中sk表示用户的私钥,m是要签名的消息, σ \sigma σ是签名之后的结果。
Ver是验证函数, b ← V e r ( p k , m , σ ) b \leftarrow Ver(pk, m, \sigma) b←Ver(pk,m,σ).其中b是输出结果,为1或者0。1的话表示验证通过,0的话表示验证失败。
关联数据的认证加密方案AEAD
在介绍AEAD之前,先简要说一下(Authenticated Encryption)AE方案。
我们都知道,加密技术保证了机密性,消息认证码保证了完整性。然而,在很多情景下,我们既需要保证加密型,又需要保证完整性。因此就提出了认证加密方案(AE方案)。
其实我们还可能存在这样一种需求,就是我们并不是对所有的数据都需要保密性,但是我们又需要对所有数据的完整性进行校验。
比如说:在网络数据传输的时候,我们只需要加密我们传输的数据。但是我们知道网络传输的数据包不仅仅有数据,也有原IP,目的IP之类的额外信息。这些信息在路由的时候需要用到,因此就不能进行加密。这种需求就引出了AEAD,相关数据的认证加密技术。
AEAD是对其中一部分数据进行加密,但是对所有数据进行认证的一种技术。 A E A D = ( E , D ) AEAD = (E,D) AEAD=(E,D).
E是加密函数 c ← E ( k , I V , H , m ) c \leftarrow E(k, IV, H, m) c←E(k,IV,