CCM模式是分组密码一种全新的操作模式,它同时提供了加密与鉴别服务,其中加密服务由计数模式(Counter Mode)提供,而鉴别服务由CBC-MAC(Cipher Block Chaining-Message Authentication Code)算法提供我们可以理解为CCM模式结合了计数模式与CBC模式两者各自的优点,下面我们就来说一说关于aes硬件加密原理?我们一起去了解并探讨一下这个问题吧!

aes硬件加密原理(低功耗蓝牙解密AES128引发的血案)

aes硬件加密原理

蓝牙加密-CCM加密

硬件算法逻辑

CCM模式是分组密码一种全新的操作模式,它同时提供了加密与鉴别服务,其中加密服务由计数模式(Counter Mode)提供,而鉴别服务由CBC-MAC(Cipher Block Chaining-Message Authentication Code)算法提供。我们可以理解为CCM模式结合了计数模式与CBC模式两者各自的优点。

使用CCM模式的基本条件:

发送方和接收方定义相同的分组密码算法(AES-128),密钥K,记数器发生函数(Counter Generation Function),格式化函数F()(Formatting Function)和鉴别标记长度Tlen。在CCM模式下,发送者的输入包括随机值Nonce、有效载荷和附加鉴别数据,分别记为 N、P、A。计算步骤如下:

Step 1. 计算格式化函数F(N, A, P),产生数据块序列 B0, B1, …, Br (每块为128bit)

Step 2. Y0= AES-128-Encrypt (B0)

Step 3. For i = 1 to r, do Yj = AES-128-Encrypt Bi⊕Yi-1)

Step 4. T=MSB-32(Yr)(取Yr的最高的32比特)

Step 5. 计算计数器发生函数,产生计数块A0, A1,…, Am, m = floor(Plen/128) 1

Step 6. For j = 0 to m, do Sj = AES-128-Encrypt(Aj)//Blockj

Step 7. S= S1 || S2 || …|| Sm(“||”表示连接运算,不是或运算)

Step 8. Return C=(P⊕MSBPlen(S)) || (T⊕MSBTlen(S0))

注意:

P:是明文

其中B0 B1是有特殊含义的,其他B2….是Message的分段,不足16补0

其中A0 A1…所有字段都是可变是counter

密文C其实没有经过AES128计算,S才是经过AES128计算

MIC = T 异或 S0(即AES128(A0))

Si = AES-128(Ai)

经过以上步骤后,最终产生发送方加密后发送的密文C 。一般来说,接受方得到N、A和C后,首先对密文C 进行解密恢复有效载荷和MAC值T;然后接受方再利用CBC-MAC算法对N、A和解密的有效载荷进行重新计算CBC-MAC值T1,并与从密文中恢复的MAC值T进行对比认证。如果认证通过,则接收方从密文中解密得到的有效载荷P是真实有效的。否则,将得到一个无效的有效载荷,这时就要求发送方重新加密发送该有效载荷。即使后一种情况真的发生,除了一个“错误”的T值以外接收方将不会泄漏任何其他的信息。

加密流程如下:

鉴权过程如下:

B和A分组的原理

B分组

第一步是计算认证区域T。这里使用CBC-MAC算法。首先定义一个块序列B_0,

B_1, ..., B_n,然后把该序列作为输入使用CBC-MAC进行计算。

第一个块B_0组织格式如下,其中l(m)使用大端表示:

Flags区域组织格式如下:

Adata表示附加认证数据的有无,1为有,0为无,mesh中总为0。

M表示认证区域(MIC SIZE)的大小,bit3-bit5,按(M-2)/2进行编码。

L表示length区域的大小,即l(m)所占大小,bit0-bit2,按L-1进行编码。

然后将消息切割成一个一个16字节的块,如果最后一个块不满16字节则填零,依次放到B_0之后,如下:

再将这些序列做CBC-MAC计算:

E()是块计算加密函数,mesh中就是aes-128计算。T是MAC值,取X_n 1的前M个字节。

A分组

加密使用计数模式(Counter Mode)。

定义一个key序列:

A_i定义如下,counter i使用大端表示:

Flags定义如下:

所以A_i中变的就只有i。

拿S_0的前M个字节和T值异或求出U值,U就是最后得到的MIC值:

拿S_1……S_i的前l(m)个字节依次和message做异或就得出密文。如下:

解密的实质

利用CTR算法,通过A分组进行加密;得到S1….Sn

利用CBC算法,通过B分组进行加密;得到Yi-Yr ,通过T= MSB-32(Yr)

通过异或得到密文:

C=(P⊕MSBPlen(S)) || (T⊕MSBTlen(S0))

密文 MIC(4个或8个)

注: P是明文

解密的误区

通过CTR算法计算S1…Sn,通过CBC算法得出Yi---Yr进而计算T,然后通过密文与S进行异或得到明文;

然后需要进行鉴别:T与S0进行异或得到MIC2,进而与数据包最后的MIC进行对比,如果相等,明文就是正确的。否则MIC-Error;

注:解密的实质就是加密过程,整个过程没有用到解密引擎

,