4

ここに画像の説明を入力

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 つのホスト暗号が得られるのはなぜですか?

4

1 に答える 1

8

送信した INITIALIZE UPDATE コマンドから、

host_challenge = 00 00 00 00 00 00 00 00

INITIALIZE UPDATE コマンドに応答して、

diversification_data = 00 00 11 60 01 00 8A 79 0A F9
key_information = FF 02
sequence_counter = 00 11
card_challenge = 79 11 36 5D 71 00
card_cryptogram = A5 A5 EC 63 BB DC 05 CC

キー情報は SCP02 ( 02) を示します。鍵多様化データは、カード固有の K_ENC を導出するために使用できます。このような K_ENC があると仮定しましょう

K_ENC = 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

次に、このようにセッション暗号化キーを導出できます

derivation_const_ENC = 01 82
derivation_data = derivation_const_ENC | sequence_counter |  00 00 00 00 00 00 00 00 00 00 00 00

IV = 00 00 00 00 00 00 00 00
S_ENC = encrypt(TDES_CBC, K_ENC, IV, derivation_data)

次に、ホスト暗号文の計算に使用される認証データを組み立てます。

padding_DES = 80 00 00 00 00 00 00 00
host_auth_data = sequence_counter | card_challenge | host_challenge | padding_DES

次に、セッション暗号化キーを使用して認証データを暗号化できます。

IV = 00 00 00 00 00 00 00 00
host_cryptogram = encrypt(TDES_CBC, S_ENC, IV, host_auth_data)

暗号化された認証データの最後の 8 バイトは、カードに送信する実際のホスト クリプトグラムです。

EXTERNAL_AUTHENTICATE_data = host_cryptogram[16, 24]

これで、EXTERNAL AUTHENTICATE コマンドを組み立てることができます。

EXTERNAL_AUTHENTICATE = 84 82 03 00 08 | EXTERNAL_AUTHENTICATE_data

次に、S_MAC キー (上記の S_ENC を取得するのと同様) とそのコマンドの MAC を計算し、それをコマンド データに追加して、カードに送信できる完全な EXTERNAL AUTHENTICATE コマンドを取得できます。

EXTERNAL_AUTHENTICATE = 84 82 03 00 10 | EXTERNAL_AUTHENTICATE_data | MAC

アップデート

http://tripledes.online-domain-tools.com/を使用して GPJ の結果を再現する

あなたの K_ENC は404142434445464748494A4B4C4D4E4Fです。オンライン ツールは 2-key-3DES を適切にサポートしていないため、最初にキーを 3-key 形式に変換する必要があります。

K_ENC = 404142434445464748494A4B4C4D4E4F4041424344454647

このキーとゼロ IV を使用して、派生データを暗号化します ( 0182001B000000000000000000000000)。あなたが得る

S_ENC = fb063cc2e17b979b10e22f82110234b4

3 鍵表記では、これは

S_ENC = fb063cc2e17b979b10e22f82110234b4fb063cc2e17b979b

このキーとゼロ IV を使用して、ホスト認証データを暗号化します ( 001b9b95b95e5ebc7f41a9e7193783fa8000000000000000):

HOST_CRYPTOGRAM = 773e790c91acce3167d99f92c60e2afd133b4ec52c9ed824
于 2014-06-07T08:57:23.443 に答える