实施OSDP加密问题

时间:2015-08-24 07:01:45

标签: encryption

我在Arduino上实现OSDP协议的加密部分时遇到了麻烦。 http://www.siaonline.org/SiteAssets/SIAStore/Standards/OSDP_V2%201_5_2014.pdf

我已经成功完成了谈判部分,并通过解密数据并与明文进行比较来验证RMAC-I响应。我坚持的部分是数据包的加密。根据规范,我使用RMAC-I响应作为aes128 CBC的ICV,并使用S-MAC2密钥加密数据包。
我的POLL数据包(十六进制)如下:
53 01 0e 00 0c 02 15 60
这得到了填充 53 01 0e 00 0c 02 15 60 80 00 00 00 00 00 00 00
这将与ICV相连,然后用S-MAC2作为密钥加密 结果的前4个字节存储在数据包中并发送
53 01 0e 00 0c 02 15 60 91 86 b9 3d 4a 29
不幸的是,读者拒绝使用NAK 06的poll命令 我假设我的MAC值没有正确计算,因为我将我的数据包与HID DTK工具进行了比较(显然MAC和CRC值是唯一的区别)。有人可以验证我的流程吗?

1 个答案:

答案 0 :(得分:0)

2.1.7是当前的SIA规范。 IEC 60839-11-5应该很快退出。 (IEC标准版本。)

您描述的处理是针对MAC后缀而不是有效负载加密的。 MAC2,因为它只有一个块长(否则,您将使用MAC1然后再使用MAC2。)OSDP使用AES加密整个消息的一次性副本,然后使用最后一个密码块的某些字节作为传输的MAC。如果存在有效负载,则OSDP会对有效负载进行加密。在现代AES实现中,您传递了IV,密钥和缓冲区,因此不会将其视为将IV与明文进行异或。