使用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作为IV 对此 ARRAY 进行加密,让我们致电 ARRAY_ENC
- 发送 ARRAY_ENC 以继续身份验证过程: 90 AF 00 00 20 + ARRAY_ENC + 00
- 现在有16字节移位并已加密的 RANDOM_A 卡响应,我们需要将其解密并与我们先前创建的 RANDOM_A 进行比较
这是我的问题:在解密收到的RANDOM_A(最后一步)时,我必须使用哪个IV阵列?
在那之后,我该如何从选定并经过身份验证的应用程序中的文件中读取数据?此数据也被加密了吗?如果可以,我将使用什么作为IV阵列进行解密?
谢谢