1

我尝试进入密码、相互身份验证等,并认为看看市场上“有什么”可能会很好。现在,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”输入密钥生成的

4

1 回答 1

1

我在其他地方找到了答案:

使用 128 位密钥 k 使用高级加密标准 AES 对 128 位消息块 m 进行加密表示为 c := AES (key = k, m).

所以,对于我的问题,密钥 kID 是消息块,现在一切都说得通了!

于 2014-03-04T14:47:12.967 回答