2014-03-03 30 views
0

我试图进入密码,相互认证等,并认为它可能是很好的看到什么是“在市场上”。现在,cipurse国家在其规格这样的词来生成会话密钥:为Cipurse(Java Card)创建AES会话密钥?

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); 

现在我有一个问题是关于一点点逗号nameingly

键= PAD2(KP) XOR PAD(RT) KID

setkey的需要byte[]和偏移,小子是不是一个偏移克利 - 这个逗号应该是“AND”还是应该将这两个表达式连接起来或者完全不同?

在准则的例子小子

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 

我只是不”不知道如何从“2”输入键中生成AES密钥

+1

该开放标准仅适用于会员。必须是我没有意识到的开放式新定义。然后,上面似乎是我还没有意识到的关键推导机制。 –

+0

只有阅读规格的会员才是免费的,但我同意!我能以另一种方式向您发送密码术规范吗? – achiever

回答

0

我找到答案别的地方:

的使用一个128位的密钥k使用高级加密标准 AES被表示为128位的消息块M中的加密通过c := AES (key = k, m).

所以,对于我的问题,秘密密钥kID是消息块,现在这一切都合情合理!