在泰雷兹Payshield 9000 HSM上计算MAC时出错

在泰雷兹Payshield 9000 HSM上计算MAC时出错,hsm,Hsm,我发现HSM Payshield 9000 3.4C固件中的M6命令有一个奇怪的问题。对于某些leghts消息,我收到错误代码15-即使消息长度是8字节的倍数 在我发送的通话中: 1.模式标志:0 2.输入格式标志:0 3.MAC大小:1 4.MAC算法:3 5.填充方法:0(我也使用0、1、3进行了测试,但为了简化,让我们将重点放在填充模式0上。对于测试,我准备了字节数组进行mac,其大小是8的倍数,因此不需要填充)。 6.键类型:008 我创建了一个简单的测试,在这个测试中,我在一个循环中构

我发现HSM Payshield 9000 3.4C固件中的M6命令有一个奇怪的问题。对于某些leghts消息,我收到错误代码15-即使消息长度是8字节的倍数

在我发送的通话中: 1.模式标志:0
2.输入格式标志:0
3.MAC大小:1
4.MAC算法:3
5.填充方法:0(我也使用0、1、3进行了测试,但为了简化,让我们将重点放在填充模式0上。对于测试,我准备了字节数组进行mac,其大小是8的倍数,因此不需要填充)。
6.键类型:008

我创建了一个简单的测试,在这个测试中,我在一个循环中构建大小为8到1000的“1”字节数组和mac这样的数组。每个数组的长度都是8的倍数(8,16,24,…)

对于一些数组leght,我收到错误代码15无效输入数据(无效格式、无效字符或提供的数据不足)。下面您可以找到我收到此类错误的数组大小范围。(意味着我收到了长度为160(包括)到248(包括)的数组的错误,这是8(160,168,176,…248)的倍数)





对于该范围内的其他所有其他尺寸(例如256-408,是8的倍数),我接收到计算MAC的正确响应

对于长度为160的字节数组(返回错误),我在本测试中发送的示例命令是(十六进制格式):

返回正确响应的示例命令(用于152大小的数组):

00cb3f3f3f3f4d363030313330303038554432424146423635383543364230373533433436364539343442433842383735303039383131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131

这种行为的原因是什么?

我最终解决了它。问题在于消息长度标签。当以4位十六进制表示的消息长度包含字母时,它们应该以大写字母发送,即00A0而不是00A0

00cb3f3f3f3f4d363030313330303038554432424146423635383543364230373533433436364539343442433842383735303039383131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131