【发布时间】:2014-03-03 16:56:19
【问题描述】:
我尝试进入密码、相互身份验证等领域,并认为看看市场上“有什么”可能会很好。现在,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 不是一个偏移量 cleary - 这个逗号应该是和“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”个输入密钥中生成的
【问题讨论】:
-
该开放标准仅供会员使用。一定是我不知道的开放的新定义。再说一次,上面似乎是一个我也不知道的密钥派生机制。
-
仅阅读规格的会员资格至少是免费的,但我同意!我可以通过其他方式向您发送密码规范吗?
标签: aes javacard mutual-authentication