2014-03-03 28 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是消息塊,現在這一切都合情合理!