当前位置:   article > 正文

鸿蒙源码分析(二十二)_aes-256-gcm

aes-256-gcm


Aead算法、gcm、ccm介绍

一、Aead介绍

AEAD(authenticated encryption with associated data):关联数据的认证加密,顾名思义,除可提供对密文数据的隐私、完整性和真实性保证外,还可提供对未加密的关联数据的完整性保证。常用的关联数据通常包括消息的长度和消息的编码方式。
AEAD为AE的变种,可让receiver验证所收到消息中已加密和未加密信息的完整性。任何企图将有效加密信息与不同上下文结合的篡改都可通过AEAD发现。

AEAD的实现步骤为:

  • 通过密钥key对消息加密,通过增加随机数来保证隐私;
  • 计算一个认证标签,通过该认证标签可保证一条消息中加密和未加密的部分均未被篡改。

Aead实现方案:

  • EtM (Encryption then MAC)
    在这里插入图片描述

先加密,然后对密文进行 MAC 运算(一般用各种 HMAC),把二者拼接起来,发给接收方。
接收方先验证 MAC,如果验证通过,则证明密钥是正确的,然后执行解密运算。

  • E&M (Encryption and MAC)
    在这里插入图片描述

同时对原始数据执行加密和 MAC 运算,把二者拼接起来,发给接收方。
接收方先进行解密,然后对解密结果执行 MAC 运算,比对发来的 MAC,验证正确性。

  • MtE (MAC then Encryption)
    在这里插入图片描述

与 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介绍

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介绍

CCM是Cipher Block Chaining Message Authentication Code (CBC-MAC)和Counter模式(CTR)的组合。可以同时生存认证信息和对数据加密。CCM广泛用于互联网和物联网中对传输数据进行保护。而且很多MCU中都实现了对CCM的硬件支持,使用也比较方便。
在数据通信中,传输中的数据包由两部分构成:数据包头和用户数据(payload)。用户数据一般需要加密以防止窃听。但传输路上的设备(路由器、交换机等)往往需要参照数据包头以保证把数据包能正确地送到目的地,因此数据包头不能加密。网络通信中的风险除了窃听,还有恶意篡改、伪造等其他行为。因此为了保证收到的数据包没有被篡改,需要对整个数据、包括包头进行认证。

CCM加密过程的输入由三部分构成:

  • 1、将要被加密和认证的数据,即明文消息P数据块
  • 2、将要被认证,但是不需要加密的相关数据A,如协议头等。
  • 3、临时量N,作为负载和相关数据的补充,对每条消息N取值唯一,以防止重放攻击等。
    在这里插入图片描述
    在这里插入图片描述

数据认证参数

  • 认证域的长度M
  • 长度域的长度L

认证过程还需要的参数

  • 密钥K
  • Nonce N,长度为:15-L。Nonce在一个密钥的使用周期内必须确保唯一。
  • 明文信息m,其长度l(m)的范围为0≤l(m)<2^(8L),目的是其长度确保可以由L字节的长度域保存。
  • 额外认证数据a(一般为数据包的报头),其长度为l(a),大小范围为:0≤l(a)<2^(64)。这部分数据只认证(Authenticate),不加密。因此也不包含在该模式的输出中。主要是用于认证明文的报头、或影响消息解析的上下文信息。

数据加密
在这里插入图片描述
需要进行加密计算的Counter域A_i根据以下方式生成:

Octet NumberContents
0Flags
1 … 15-LNonce N
16-L … 15Counter i

其中的Counter i域以most-significant-byte first order形式编码。第一个字节的Flags域由以下bit构成:

Bit NumberContents
7Reserved (always zero)
6Reserved (always zero)
5…3Zero
2…0L’=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 )

四、相关知识点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上为今天的算法分享,感谢阅读点赞。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/700904
推荐阅读
相关标签
  

闽ICP备14008679号