QUIC协议(握手过程)简要介绍
这篇博客可能更多的偏向于密码学方面来进行介绍(csdn关于网络层)。
为什么需要QUIC协议
随着当前网络对性能要求的越来越高,有部分公司已经觉得原来的TCP和UDP协议的握手阶段太长。因此就致力于开发一些新的协议进行连接。于是Goole在2013年就提出了一种新的协议——QUIC协议。
网络层的QUIC
关于QUIC在网络层的介绍,csdn已经存在很多介绍了,这里就不再赘述,这篇博客我们主要从握手协议里用到的密码学技术来进行简要介绍。
密码学元件
Public Key Infrastructure(PKI)
简要来说就是找一个有公信力的第三方为公钥分配一个证书,主要作用就是证明某个公钥是属于某个人的。更详细的解释可以参照博客
https://blog.youkuaiyun.com/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
数字签名方案
一个数字签名方案包括三个函数SS=(Kg,Sign,Ver)SS = (Kg, Sign, Ver)SS=(Kg,Sign,Ver),
其中Kg是密钥生成函数(pk,sk)←Kg(λ)(pk, sk) \leftarrow Kg (\lambda)(pk,sk)←Kg(λ),其中λ\lambdaλ表示安全参数,pk表示公钥, sk表示私钥。
Sign是签名函数:σ←Sign(sk,m)\sigma \leftarrow Sign(sk, m)σ←Sign(sk,m), 其中sk表示用户的私钥,m是要签名的消息, σ\sigmaσ是签名之后的结果。
Ver是验证函数,b←Ver(pk,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是对其中一部分数据进行加密,但是对所有数据进行认证的一种技术。AEAD=(E,D)AEAD = (E,D)AEAD=(E,D).
E是加密函数c←E(k,IV,H,m)c \leftarrow E(k, IV, H, m)c←E(k,IV,H,m),其中k表示密钥, IV表示初始向量,一般是一个公开的随机数, H表示相关数据,即不需要加密的那一部分数据, m表示需要加密的消息。
D是解密函数m←D(k,IV,H,c)m \leftarrow D(k, IV, H, c)