【问题标题】:Creating AES session key for Cipurse (Java Card)?为 Cipurse(Java 卡)创建 AES 会话密钥?
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 2012-08-05
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多