Encryption 实现OSDP加密问题
我在Arduino上实现OSDP协议的加密部分时遇到问题。 我已经成功地完成了协商部分,通过解密数据并与明文进行比较,验证了RMAC-I响应。我一直关注的是数据包的加密。根据规范,我使用RMAC-I响应作为aes128 CBC的ICV,并使用S-MAC2密钥加密数据包。Encryption 实现OSDP加密问题,encryption,Encryption,我在Arduino上实现OSDP协议的加密部分时遇到问题。 我已经成功地完成了协商部分,通过解密数据并与明文进行比较,验证了RMAC-I响应。我一直关注的是数据包的加密。根据规范,我使用RMAC-I响应作为aes128 CBC的ICV,并使用S-MAC2密钥加密数据包。 我的投票数据包(十六进制)如下: 53 01 0e 00 0c 02 15 60 这会被填充 53 01 0e 00 0c 02 15 60 80 00 00 这将使用ICV进行异或,然后使用S-MAC2作为密钥进行加密。 结
我的投票数据包(十六进制)如下:
53 01 0e 00 0c 02 15 60
这会被填充
53 01 0e 00 0c 02 15 60 80 00 00
这将使用ICV进行异或,然后使用S-MAC2作为密钥进行加密。
结果的前4个字节存储在数据包中并发送
53 01 0e 00 0c 02 15 60 91 86 b9 3d 4a 29
不幸的是,读取器使用NAK 06拒绝轮询命令
我假设我的MAC值没有正确计算,因为我已经将我的数据包与HID DTK工具进行了比较(显然MAC和CRC值是唯一的区别)。有人能验证我的流程吗?似乎我的流程是正确的,但由于实施(一个错误)而失败。似乎我的流程是正确的,但由于实施(一个错误)而失败。2.1.7是当前的SIA规范。IEC 60839-11-5应该很快就会发布。(IEC标准版本)
您描述的处理是针对MAC后缀,而不是有效负载加密。MAC2,因为它只有一个数据块长(否则您将使用MAC1和MAC2)。OSDP使用AES加密整个消息的一次性副本,然后使用最后一个密码块的一些字节作为传输的MAC。OSDP加密有效负载(如果有)。在现代AES实现中,您传入一个IV、一个密钥和一个缓冲区,这样人们就不会将其视为将IV与明文异或。2.1.7是当前的SIA规范。IEC 60839-11-5不久将推出。(IEC标准版本) 您描述的处理是针对MAC后缀,而不是有效负载加密。MAC2,因为它只有一个数据块长(否则您将使用MAC1和MAC2)。OSDP使用AES加密整个消息的一次性副本,然后使用最后一个密码块的一些字节作为传输的MAC。OSDP加密有效负载(如果有)。在现代AES实现中,您传入一个IV、一个密钥和一个缓冲区,这样就不会将其视为使用明文对IV进行xoring