80 50 00 00 08 00 00 00 00 00 00 00 00
[ INITILIZE UPDATE Command] を opensc-tool 経由で Java カードに送信し、カードからの応答として00 00 11 60 01 00 8A 79 0A F9 FF 02 00 11 79 11 36 5D 71 00 A5 A5 EC 63 BB DC 05 CC
[ Init Response ] を受け取りました。
ご覧のとおり:
コマンドでは、ホスト チャレンジ00 00 00 00 00 00 00 00
として送信し、応答では次のように送信します。
00 00 11 60 01 00 8A 79 0A F9
=主な多様化データ
FF 02
=キー情報
00 11 79 11 36 5D 71 00
=カードチャレンジ
A5 A5 EC 63 BB DC 05 CC
=カード暗号
ここで、カードの暗号が正しいかどうかを自分で確認したいと思います。どうすればそれができますか?たとえば00 00 00 00 00 00 00 00
、このサイトでは 3DES 暗号化アルゴリズム [カードのキー = を使用4041...4F
] で暗号化していますが、出力は上で書いたカード暗号化と等しくありません。なんで?
次の質問は、カードにEXTERNAL AUTHENTICATIONコマンドを送信したい場合、そのデータ フィールド (上記の INITILIZE UPDATE の後) は何ですか?
アップデート:
これは GPJ 出力です:
C:\Users\ghasemi\Desktop\gpj-20120310>GPJ
C:\Users\ghasemi\Desktop\gpj-20120310>java -jar gpj.jar
Found terminals: [PC/SC terminal ACS CCID USB Reader 0]
Found card in terminal: ACS CCID USB Reader 0
ATR: 3B 68 00 00 00 73 C8 40 12 00 90 00
.
.
.
DEBUG: Command APDU: 00 A4 04 00 08 A0 00 00 00 03 00 00 00
DEBUG: Response APDU: 6F 10 84 08 A0 00 00 00 03 00 00 00 A5 04 9F 65 01 FF 90 00
Successfully selected Security Domain OP201a A0 00 00 00 03 00 00 00
DEBUG: Command APDU: 80 50 00 00 08 7F 41 A9 E7 19 37 83 FA
DEBUG: Response APDU: 00 00 11 60 01 00 8A 79 0A F9 FF 02 00 1B 9B 95 B9 5E 5E BC BA 51 34 84 D9 C1 B9 6E 90 00
DEBUG: Command APDU: 84 82 00 00 10 13 3B 4E C5 2C 9E D8 24 50 71 83 3A 78 AE 75 23
DEBUG: Response APDU: 90 00
DEBUG: Command APDU: 84 82 00 00 08 13 3B 4E C5 2C 9E D8 24
DEBUG: Response APDU: 90 00
C:\Users\ghasemi\Desktop\gpj-20120310>
そう :
Host_Challenge :: 7F41A9E7193783FA
Diversification_Data :: 0000116001008A790AF9
Key_Information :: FF02
Sequence_Counter :: 001B
Card_Challenge :: 9B95B95E5EBC
Card_Cryptogram :: BA513484D9C1B96E
Host_Cryptogram[16,24] = 13 3B 4E C5 2C 9E D8 24
それでは、Host_Cryptogram を手動で作成しましょう。
Derivation_data=derivation_const_ENC|sequence_counter|0000 0000 0000 0000 0000 0000
Derivation_Data = 0182001B000000000000000000000000
k_ENC :: 404142434445464748494A4B4C4D4E4F
IV = 00 00 00 00 00 00 00 00
S_ENC = encrypt(TDES_CBC, K_ENC, IV, derivation_data)
そう :
http://tripledes.online-domain-tools.com/を使用し、上記の値の出力は次のとおりです。
S_ENC = 448b0a5967ca246d058703ff0c694f15
と :
Padding_DES = 80 00 00 00 00 00 00 00
Host_auth_data = sequence_counter | card_challenge | host_challenge | padding_DES
IV = Card_Cryptogram :: BA513484D9C1B96E
host_cryptogram = encrypt(TDES_CBC, S_ENC, IV, host_auth_data)
そう :
Host_Authentication_Data : 001B9B95B95E5EBC7F41A9E7193783FA8000000000000000
繰り返しますが、私はhttp://tripledes.online-domain-tools.com/を使用しました
と :
Host_Cryptogram : 3587b531db71ac52392493c08cff189ce7b9061029c63b62
そう :
Host_Cryptogram[16,24] = e7b9061029c63b62
これらの双方向 [手動および GPJ 出力] で 2 つのホスト暗号が得られるのはなぜですか?