CCM模式下的消息加密,应该按照以下顺序进行(密钥已经载入)。
1)信息鉴别阶段
(1)软件将0载入IV。
(2)软件创建数据块B0。数据块B0是CCM模式中第一个验证的数据块,其结构如表7-1所示。
表7-1 信息验证数据块B0
其中,NONCE的值没有限制,L-M是以字节为单位的消息长度。
对于IEEE 802.15.4,NONCE有13个字节,而L-M有2个字节。
验证标志字节的内容描述在表7-2中。
在这个实例中,L设置为6,因此L-1为5。M和A-Data可以设置为任意值。
表7-2 验证标志字节
(3)如果需要(即A-Data=1)某些添加的验证数据(下文用a表示),则软件就会创建A-Data的长度域,称为L(a):
①如果L(a)=0(即A-Data=0)时,那么L(a)是一个空子符串。注意L(a)是用字节表示的。
②如果0<L(a)<216-28,则L(a)是2个L(a)编码的8位字节。
添加的验证数据附加到A-Data的长度域L(a)。附加的验证数据块不足部分用0来填充,直到最后一个附加的验证数据块填满。该字符串的长度没有限制。即
(4)当该信息的长度不是128的整数倍时,最后一个信息数据块用0填满。
(5)软件将B0数据块、附加的验证数据块(如果有)和信息连接起来。即
(6)一旦由CBC-MAC输入信息验证结束,软件将脱离上传的缓冲器。该缓冲器的内容保持不变(M=16),或者保持缓冲器的高位M字节不变。与此同时,设置低位为0(M≠16)。
这一阶段的结果称为T。
2)信息加密阶段
(1)软件创建密钥数据块A0。在当前有CTR产生的例子中,L=6。数据块A0的结构如表7-3所示。(www.xing528.com)
表7-3 信息加密数据块
注意:在OFB模式中,当由加密验证数据T产生U时,CTR值必须是0。当使用CTR模式加密信息块时,除了0之外,所有的数值都可以用于CTR值。
加密标志字节的内容如表7-4所示。
表7-4 加密标志字节
(2)软件通过选择IV/Nonce命令加载A0。只有在选择载入IV/Nonce命令时,设置模式为CFB或OFB才能完成这个操作。
(3)软件在验证数据T中,调用CFB或OFB模式加密。上传缓冲内容保持不变(M=16),至少M的首字节不变,其余字节设置为0(M-16)。这时的结果为U,后面将会用到。
(4)软件立刻调用CTR模式,为刚填充完毕的消息块加密。当CTR值不是0时必须重新载入IV。
(5)加密验证数据U附加到加密消息之中,这样给出最后结果C:C=加密消息(M)+U。
3)信息解密阶段
在协处理器中,CTR的自动生成需要32位空间,因此最大的消息长度为128×232位,即236字节。其幂指数可以写入一个6位的字中,因而数值L设置为6。要解密一个CCM模式已处理好的消息,必须按照下列顺序进行(密码已经载入):
(1)软件通过分开M的最右面的8位组(命名为U,剩余的其他8位字节称为字符串C)来分解消息。
(2)C用0来填充,直到能够充满一个整数值的128位数据块。
(3)U用0来填充,直到能够充满一个128位的数据块。
(4)软件创建密钥数据块A0。所用的方法和CCM加密一样。
(5)软件通过选择IV/Nonce命令载入A0,只有在选择载入IV/Nonce命令时,模式设置为CFB或OFB才能完成这个操作。
(6)软件调用CFB或OFB模式加密验证数据U。上传的缓冲器的内容保持不变(M=16),至少这些内容的前M个字节保持不变。其余的内容设置为0(M≠16),此时的结果为T。
(7)软件立刻调用CTR模式解密已经加密的消息数据块C,而不必重新载入IV/CTR。
4)参考验证标签生成阶级
这个阶段与CCM加密的验证阶段相同。唯一不同的是,此时的结果是MACTag,而不是T。
5)信息验证校核阶段
该阶段中,利用软件来比较T和MACTag。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。