使用 Desfire EV1 卡的 AES-128 身份验证过程如下:
- 获取应用程序 ID:90 6A 00 00 00
- 选择应用程序:90 5A 00 00 03 10 00 00 00(AID:0x000010)
- 使用密钥开始身份验证:90 AA 00 00 01 02 00(密钥:0x02)
- 卡响应随机 16 字节数组,我们称之为 RANDOM_B
- 现在卡需要更多数据来继续验证,所以我们会这样做
- 使用KEY和空IV解密RANDOM_B,我们称之为RANDOM_B_DEC
- 左移 1 个字节 RANDOM_B_DEC,我们称之为 RANDOM_B_DEC_LS
- 创建一个 16 字节长的随机数组,我们称之为 RANDOM_A
- 将 RANDOM_A 和 RANDOM_B_DEC_LS 组合成一个 32 字节数组,我们称之为 ARRAY
- 使用 KEY 和 RANDOM_B 加密这个 ARRAY 作为 IV,我们称之为 ARRAY_ENC
- 发送 ARRAY_ENC 以继续身份验证过程: 90 AF 00 00 20 + ARRAY_ENC + 00
- 现在卡响应经过 16 个字节的移位和加密 RANDOM_A,我们需要解密并与我们之前创建的 RANDOM_A 进行比较
这是我的问题:在解密收到的 RANDOM_A (最后一步)时,我必须使用什么 IV 数组?
之后,如何从选定且经过身份验证的应用程序中的文件中读取数据?这些数据是否也被加密接收?如果是的话,我将使用什么作为 IV 数组来解密?
谢谢