TI中文支持网
TI专业的中文技术问题搜集分享网站

AES CBC 加密

各位好:
MCU:2642RF

协议栈版本:simplelink_cc13x2_26x2_sdk_3_10_00_53
我们调用AES加密中CBC这种加密模式时发现一个问题。根据例程上的参考代码来进行加密是没有问题的,但是当我们使用自己的数据进行加解密时发现,当我的数据是16byte时,加密后的数据是没有问题的,但是当我的数据是大于16byte时,加密后的数据就是错误的。(我们已经将数据手动padding到16的整倍数了)所以想问一下,调用AESCBC_oneStepEncrypt函数进行加密大于16byte的数据为什么得到的数据是错误的?

Alvin Chen:

CBC operates on entire blocks of ciphertext and plaintext at a time. This means that message lengths must be a multiple of the block cipher block size. AES has a block size of 16 bytes no matter the key size. Since messages do not necessarily always have a length that is a multiple of 16 bytes, it may be necessary to pad the message to a 16-byte boundary. Padding requires the sender and receiver to implicitly agree on the padding convention. Improperly designed or implemented padding schemes may leak information to an attacker through a padding oracle attack for example

user4879901:

回复 Alvin Chen:

这个问题跟这个帖子里的类似:https://e2echina.ti.com/question_answer/wireless_connectivity/bluetooth/f/103/t/132740

实发现cc2642的AES CBC加密对于明文长度超过16个就不对了,能否确认下此问题谢谢。

user6074090:

回复 Alvin Chen:

hi:Alvin Chen我们也看到了有关CBC的这段介绍,但是按照介绍上说的,我们的操作是没有问题的。因为在2642上提供的函数接口并没有告知是以什么样的方式来进行padding的,所以我们就自己使用了一种padding的方式(差多少byte就补多少byte的几)来进行补齐,确保传进接口函数的明文部分就是16byte整倍数。但是这样16byte之后的数据加密出来就是错误的。关于AESECB_oneStepEncrypt这个函数内部是如何实现的,我们是看不到的,所以想问是不是函数内部的加密机制出现的什么问题。现在只能加密16byte的数据,大于16byte加密出来的就是错误的。另外关于IV偏移量有没有什么特别说明(iv我们现在也是使用的16byte)。https://e2echina.ti.com/question_answer/wireless_connectivity/bluetooth/f/103/t/132740,刚刚也看到了一篇帖子是关于CBC加密错误的,帖子上使用的是2640,这篇帖子出现问题貌似就是因为偏移量没有加导致加密有问题。

所以麻烦这边帮忙看下具体是那边出现的问题,谢谢!

Alvin Chen:

回复 user6074090:

能否提供你的完整测试程序。

赞(0)
未经允许不得转载:TI中文支持网 » AES CBC 加密
分享到: 更多 (0)