赞
踩
AEAD(authenticated encryption with associated data):关联数据的认证加密,顾名思义,除可提供对密文数据的隐私、完整性和真实性保证外,还可提供对未加密的关联数据的完整性保证。常用的关联数据通常包括消息的长度和消息的编码方式。
AEAD为AE的变种,可让receiver验证所收到消息中已加密和未加密信息的完整性。任何企图将有效加密信息与不同上下文结合的篡改都可通过AEAD发现。
AEAD的实现步骤为:
Aead实现方案:
先加密,然后对密文进行 MAC 运算(一般用各种 HMAC),把二者拼接起来,发给接收方。
接收方先验证 MAC,如果验证通过,则证明密钥是正确的,然后执行解密运算。
同时对原始数据执行加密和 MAC 运算,把二者拼接起来,发给接收方。
接收方先进行解密,然后对解密结果执行 MAC 运算,比对发来的 MAC,验证正确性。
与 EtM 相反,先对原始数据执行 MAC 运算,与原始数据拼接后,执行加密算法,将密文发送给接收方。
接受方先进行解密,然后执行 MAC 运算,验证解密结果是否正确。
常见的Aead算法:
1.AES-128-GCM
2.AES-192-GCM
3.AES-256-GCM
4.ChaCha20-IETF-Poly1305
5.XChaCha20-IETF-Poly1305
GCM(Galois/Counter Mode)
GCM中的G就是指GMAC,C就是指CTR。
GCM可以提供对消息的加密和完整性校验,另外,它还可以提供附加消息的完整性校验。在实际应用场景中,有些信息是我们不需要保密,但信息的接收者需要确认它的真实性的,例如源IP,源端口,目的IP,IV,等等。因此,我们可以将这一部分作为附加消息加入到MAC值的计算当中。下图的Ek表示用对称秘钥k对输入做AES运算。最后,密文接收者会收到密文、IV(计数器CTR的初始值)、MAC值。
gcm流程示意图:
GCM模式使用两个函数:带密钥的Hash函数GHASH,以及计数器每次增1 的CTR模式的GCTR。
1.GHASH
GHASHH(X)函数将Hash密钥H和位串X作为输入,经过转化函数可表示成:
GHASHH(X) = (X1•Hm)⊕(X2•Hm-1)⊕…⊕(Xm-1•H2)⊕(Xm•H)
该式非常适合快速实现,如果使用相同的Hash密钥认证多个消息,那么H2,H3,…能够通过一次预计算来对所有消息进行认证,并且待认证的数据分组(X1,X2,…,Xm)能够并行处理,因为每组计算都相互独立。
2.GCRT
inc32(S)函数对S的最右32位增1并取模232,其余位不变。
最后一次加密生成MSB,根据Xn’的长度截取后再与Xn’异或产生Yn’
3.流程
CCM是Cipher Block Chaining Message Authentication Code (CBC-MAC)和Counter模式(CTR)的组合。可以同时生存认证信息和对数据加密。CCM广泛用于互联网和物联网中对传输数据进行保护。而且很多MCU中都实现了对CCM的硬件支持,使用也比较方便。
在数据通信中,传输中的数据包由两部分构成:数据包头和用户数据(payload)。用户数据一般需要加密以防止窃听。但传输路上的设备(路由器、交换机等)往往需要参照数据包头以保证把数据包能正确地送到目的地,因此数据包头不能加密。网络通信中的风险除了窃听,还有恶意篡改、伪造等其他行为。因此为了保证收到的数据包没有被篡改,需要对整个数据、包括包头进行认证。
CCM加密过程的输入由三部分构成:
数据认证参数
认证过程还需要的参数
数据加密
需要进行加密计算的Counter域A_i根据以下方式生成:
Octet Number | Contents |
---|---|
0 | Flags |
1 … 15-L | Nonce N |
16-L … 15 | Counter i |
其中的Counter i域以most-significant-byte first order形式编码。第一个字节的Flags域由以下bit构成:
Bit Number | Contents |
---|---|
7 | Reserved (always zero) |
6 | Reserved (always zero) |
5…3 | Zero |
2…0 | L’=L-1,(L:长度域长度,L=1为保留值,禁止使用) |
加密计算后的结果表示为S_i:\
S_i := E( K, A_i ) for i=0, 1, 2, …
将上述加密后的结果S_1, S_2, S_3 … .组合成数据串,并取前l(m)个字节与明文数据m进行XOR操作,得到密文。注意:S_0不用于XOR操作。
最终的认证串的值U则利用S_0计算得到,如下所示:
U := T XOR first-M-bytes( S_0 )
以上为今天的算法分享,感谢阅读点赞。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。