- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当使用 Desfire 原生包装的 APDU 与卡通信时,必须使用命令和响应的哪些部分来计算 CMAC?
身份验证成功后,我有以下 session key :
Session Key: 7CCEBF73356F21C9191E87472F9D0EA2
然后当我发送 GetKeyVersion 命令时,卡返回我正在尝试验证的以下 CMAC:
<< 90 64 00 00 01 00 00
>> 00 3376289145DA8C27 9100
我已经根据“NIST special publication 800-38B”实现了 CMAC 算法并确保它是正确的。但我不知道必须使用命令和响应 APDU 的哪些部分来计算 CMAC。
我用的是TDES,所以MAC是8字节。
最佳答案
过去几天我一直在研究完全相同的问题,我想我至少可以给你一些建议。让一切“就这样”需要一些时间,而且在某些情况下,NXP 的文档(假设您有权访问)有点难以解释。
因此,正如您可能知道的那样,您需要在传输和接收时计算 CMAC(并更新您的 init vec)。每次计算时都需要保存CMAC作为下一次加密操作(无论是CMAC还是加密等)的init vec。
为您的示例计算 CMAC 时,输入 CMAC 算法的数据是 INS 字节 (0x64
) 和命令数据 (0x00
)。当然,这将按照 CMAC 的规定进行填充等。但是请注意,您不计算整个 APDU 包装(即 90 64 00 00 01 00 00
)的 CMAC,仅使用 INS 字节和数据负载。
在接收时,您需要获取数据 (0x00
) 和第二个状态字节(也是 0x00
)并计算其上的 CMAC。在这个例子中它并不重要,但这里的顺序很重要。您使用响应主体(不包括 CMAC),然后使用 SW2。
请注意,实际上仅发送了一半的 CMAC - CMAC 应产生 16 个字节,卡发送前 8 个字节。
还有其他一些事情阻碍了我,包括:
我仍在努力正确计算写入数据命令的响应。命令成功,但我无法验证 CMAC。我确实知道写入数据没有用 CMAC 填充填充,而只是用零填充 - 还不确定我还错过了什么。
最后,这是一个与我的日志中的卡片通信的真实示例:
身份验证完成 (AES), session key 确定为 F92E48F9A6C34722A90EA29CFA0C3D12
; init vec 为零
我将发送 Get Key Version 命令(如您的示例所示),因此我计算 6400
的 CMAC 并获得 1200551CA7E2F49514A1324B7E3428F1
(现在我的 init vec 用于下一次计算)
发送90640000010000
到卡片,收到00C929939C467434A8
(状态为9100)。
在 00 00
上计算 CMAC 并得到 C929939C467434A8A29AB2C40B977B83
(并为下一次计算更新 init vec)
我们第 4 步中的 CMAC 的前半部分与第 3 步中从卡接收到的 8 个字节相匹配
关于Mifare Desfire 包裹模式 : How to calculate CMAC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40583676/
是否有在 Java 卡中进行 AES CMAC 加密的正确方法? 经过研究,我遇到了一个障碍,我找不到任何具有 AES CMAC 加密的 Java 卡示例或样本。有没有办法或者至少可以在 Java 卡
我需要在 中尽可能快地实现 16 字节数组的左位移位JavaCard . 我试过这个代码: private static final void rotateLeft(final byte[] outp
我有以下函数,该函数应该根据派生数据“L”的长度返回 8 字节主机密码,但我得到了 16 字节数据。虽然 key 是128位,但我期望BC AESCMAC函数将根据推导数据中的L值返回数据。如果不是这
当使用 Desfire 原生包装的 APDU 与卡通信时,必须使用命令和响应的哪些部分来计算 CMAC? 身份验证成功后,我有以下 session key : Session Key: 7CCEBF7
我正在将 Android 应用程序转换为 iOS。 Android 版本使用 CMAC-AES 加密,但我找不到适用于 iOS 的 CMAC。有谁知道图书馆或可以给小费吗?我对密码学不熟悉,所以有点乱
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我正在使用以下代码和类从 AES_CMAC 生成多样化 key 。doFinal 方法每次返回不同的 key ,因为输入和 masterKey 是常量。 public byte[] calculat
我正在尝试使用 Stanford Javascript Crypto Library为 OAuth 2.0 断言生成 CMAC-AES token ,但我远不是密码学专家。有人可以举一个使用 sjcl
我正在寻找一种可以计算 AES128 CMAC 作为命令行的工具。 Openssl 似乎没有通过命令行提供此功能。我是不是漏掉了什么,或者您知道可以执行此计算的命令行工具吗? 最佳答案 使用较新的 O
是否有处理 AES-CMAC ( RFC 4493 ) 的 Node.js 模块? 我一直在 NPM、Google 等搜索,但没有找到。我公司内的某人制作了一个包装 Crypto++作为 Node.j
我们的 API 平台使用 CMAC-AES 哈希作为请求的签名。我们有可用于在 Java 和 .NET 中创建此散列的库,但也需要为 PHP 找到解决方案。问题是我找不到任何似乎能够可靠地生成与在我们
有什么方法可以用OpenSSL/libcrypto 计算AES CMAC? 最好以利用 AES-NI(或任何其他硬件加速)的方式进行。 另请参阅 CMAC Key generation with Op
谁能帮我指导一下 Mifare Desfire 的 MAC(4bytes) 和 CMAC(8bytes) 的计算?我得到了意想不到的结果。 Deskey = 00000000000000
我需要使用 Node.JS 生成十六进制编码的 CMAC-AES 摘要。我找到了 library from GitHub 。我想知道怎么称呼? This 是我想在node.js 中完成的部分。我想传递
我正在尝试生成用于使用 OpenSSL 计算 CMAC 的 key 。 但是,这些似乎失败并出现下面复制的错误消息。有人能指出问题出在哪里吗?有人通过 EVP_DigestSign* 调用完成了 CM
我尝试使用 mbedTLS 实现 AES-CMAC。我收到一些错误: undefined reference to mbedtls_cipher_cmac_starts, undefined refe
我是一名优秀的程序员,十分优秀!