首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CBC-MAC 8八进制ICV可与16八进制块大小相匹配?

CBC-MAC 8八进制ICV可与16八进制块大小相匹配?
EN

Cryptography用户
提问于 2018-02-12 22:21:06
回答 1查看 307关注 0票数 0

我试图在CoAP的预共享密钥模式下使用DTLS,这需要使用CipherSuite TLS_PSK_WITH_AES_128_CCM_8

我正试着从CBC-MAC开始,但我不知道如何从它中得到一个8字节的ICV?

我是否只是截断输出,只使用前8个八位数呢?

我是否使用8八进制块大小,而不是我所使用的用于硬件加速的CBC函数的16?

代码语言:javascript
复制
const unsigned char k[16] ="lbsHgUDHKgeinLfU";//key 128bits                


const unsigned char message[16] = "Hello world!  ";//multiple of 16 bytes as required
unsigned int mLen = sizeof(message);//16

unsigned char zeroInit[16]= {0};


//CBC-MAC with 8byte ICV
//uint8_t mac[8];//8 octet ICV (hopefully)
uint8_t mac[16];

esp_aes_crypt_cbc( &c,ESP_AES_ENCRYPT,mLen,zeroInit, message, mac);

得到的输出是: ad ea 26 07 25 bb 43 8a 85 b5 ca 6c b6 b5 d3

数组大小为8的唯一不同之处是,我只看到前8个字节。

EN

回答 1

Cryptography用户

回答已采纳

发布于 2018-02-12 23:50:34

通常,身份验证标记大小实际上是通过使用第一个(在大多数字节数组表示中最左边)位来生成的。一般来说,Tlen --标记的长度--应该是8的倍数,因此标记大小为64位,就会产生最左边的8个字节。

您不能只更改块密码的块大小。AES只支持128位/ 16字节的块大小(尽管Rijndael支持128到256位之间的任何块大小,包括32位增量)。因此,改变密码的块大小通常是不可能的。

整个MAC输出中的第一个/最左边字节的使用非常广泛,以至于我编写的AEAD接口基于这个事实编写了方法签名。请注意,无论如何,MAC的输出与随机输出是无法区分的,因此原则上您可以使用结果的任何比特;然而,使用第一个/最左边的字节是常见的默认情况。

如果不确定:阅读标准,NIST SP-800 38C

设置$T=\operatorname{MSB}_{Tlen}(Y_r)$

$\operatorname{MSB}_s(X)$:由位字符串$X$的$s$ 最左边的位组成的位字符串。

票数 2
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/55586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档