我尝试进入密码、相互身份验证等,并认为看看市场上“有什么”可能会很好。现在,cipurse 在其规范中声明了这样一个术语来生成会话密钥:
k0 = AES (key = PAD2 (kP) XOR PAD (rT), kID) XOR kID
其中 k0 是会话密钥,kP 是卡上计算的密钥,rT 是来自终端的响应。PAD 代表填充(前导零),PAD 2 代表双填充(前导零),kID 是卡的密钥。
现在据我所知,我以这种方式创建了一个密钥:
AESKey k0_pre = (AESKey) KeyBuilder.buildKey(KeyBuilder.TYPE_AES_TRANSIENT_DESELECT, KeyBuilder.LENGTH_AES_128, false);
k0_pre.clearKey();
k0_pre.setKey(key, (short) 0);
现在我的一个问题是关于一个小逗号,即
键 = PAD2 (kP) XOR PAD (rT) , kID
setKey 需要一个byte[]
和一个偏移量,kID 不是一个偏移量 cleary - 这个逗号应该是和“AND”还是应该将这两个表达式连接起来还是完全不同的东西?
指南中的示例 kID 是
53 45 43 5f 4d 45 4d 4f 52 59 20 4b 45 59 20 31
for 之后的结果PAD2 (kP) XOR PAD (rT)
是
00 00 00 00 b7 a0 d2 cb 01 15 25 3f c4 0d 43 8f
然后 k0_pre 将是:
72 4b e3 3e 05 47 b5 99 9c 78 13 9d 8b 25 94 e6
我只是不知道这个 AES 密钥是如何从“2”输入密钥生成的