我试图进入密码,相互认证等等,并认为看到市场上的“上”可能会很好。现在,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);
现在我遇到的一个问题就是只是一个逗号
key = PAD2(kP)XOR PAD(rT), kID
setKey采用byte[]
和偏移量,kID不是偏移的清晰 - 如果这个逗号是和“AND”,还是这两个表达式应该连接还是完全不同?
指南中的示例kID是
53 45 43 5f 4d 45 4d 4f 52 59 20 4b 45 59 20 31
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”输入密钥生成的
答案 0 :(得分:0)
我找到了其他地方的答案:
使用高级加密标准使用128位密钥k对128位消息块m进行加密
AES由 c := AES (key = k, m).
所以,对于我的问题,密钥kID是消息块,现在一切都有意义了!