クマは森で用を足しますか?

アウトプットは重要です。

デフォルトのGPキーではないんですか?

Java Cardアプレットを実行できそうなテストカードを調達できましたので、当面のところはいろいろと試してみる作業が続くことになると思います。

cheerio-the-bear.hatenablog.com

アプレットのリスト表示を試みる

GlobalPlatformProの list (-l) オプションを使ってみた結果が、これです。GPのデフォルトキー40..4Fが使えるといいなと思ってテストカードを購入したわけですが、どうやら固有のキーを持っているようです。

C:\Tools\gp>gp -l
Warning: no keys given, using default test key 404142434445464748494A4B4C4D4E4F
Read more from https://github.com/martinpaljak/GlobalPlatformPro/wiki/Keys
STRICT WARNING: Card cryptogram invalid!
Card: 9F9F8C491040E2B3
Host: 68D7E35DE9850749
!!! DO NOT RE-TRY THE SAME COMMAND/KEYS OR YOU MAY BRICK YOUR CARD !!!

何度もやると壊れるかもよなんて怖いことを言われていますが、-debug を付けてAPDUコマンドのやり取りも出力してみました。

C:\Tools\gp>gp -debug -list
GlobalPlatformPro 18.09.14-0-gb439b52
Running on Windows 10 10.0 amd64, Java 10.0.2 by Oracle Corporation
# Detected readers from JNA2PCSC
[*] Gemalto USB SmartCard Reader 0
SCardConnect("Gemalto USB SmartCard Reader 0", T=*) -> T=0, 3B9F96801FC78031A073BE21136743200718000001A5
SCardBeginTransaction("Gemalto USB SmartCard Reader 0")
A>> T=0 (4+0000) 00A40400 00
A<< (0071+2) (188ms) 6F458408A000000003000000A539732F06072A864886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B0402159F6E01079F6501FE 9000
[TRACE] GPData -      [6F]
[TRACE] GPData -          [84] A000000003000000
[TRACE] GPData -          [A5]
[TRACE] GPData -              [73]
[TRACE] GPData -                  [06] 2A864886FC6B01
[TRACE] GPData -                  [60]
[TRACE] GPData -                      [06] 2A864886FC6B02020101
[TRACE] GPData -                  [63]
[TRACE] GPData -                      [06] 2A864886FC6B03
[TRACE] GPData -                  [64]
[TRACE] GPData -                      [06] 2A864886FC6B040215
[TRACE] GPData -              [9F6E] 07
[TRACE] GPData -              [9F65] FE
[DEBUG] GlobalPlatform - Auto-detected ISD: A000000003000000
Warning: no keys given, using default test key 404142434445464748494A4B4C4D4E4F
[TRACE] GlobalPlatform - Generated host challenge: E7019AFCA7DAD4A1
A>> T=0 (4+0008) 80500000 08 E7019AFCA7DAD4A1 00
A<< (0028+2) (14ms) 0A0AF0F1F0F2F0F0FFFF01020000B8542D3CBEC3D80690C6E76CC64F 9000
[DEBUG] GlobalPlatform - Host challenge: E7019AFCA7DAD4A1
[DEBUG] GlobalPlatform - Card challenge: 0000B8542D3CBEC3
[DEBUG] GlobalPlatform - Card reports SCP02 with key version 1 (0x01)
[DEBUG] GlobalPlatform - Will do SCP02 (8)
[DEBUG] PlaintextKeys - Card keys: {DEK=type=RAW bytes=404142434445464748494A4B4C4D4E4F, ENC=type=RAW bytes=404142434445464748494A4B4C4D4E4F, MAC=type=RAW bytes=404142434445464748494A4B4C4D4E4F}
[TRACE] PlaintextKeys - Session keys: {DEK=type=DES3 bytes=E11987EE331B417A5D67D760692F89D4 kcv=85272E, ENC=type=DES3 bytes=010B0371D78377B801F2D62AFC671D95 kcv=F2DCDD, MAC=type=DES3 bytes=D1C28C601652A4770D67AD82D2D2E1C4 kcv=5FCC69}
Read more from https://github.com/martinpaljak/GlobalPlatformPro/wiki/Keys
STRICT WARNING: Card cryptogram invalid!
Card: D80690C6E76CC64F
Host: 1CEFEDE46C2E6158
!!! DO NOT RE-TRY THE SAME COMMAND/KEYS OR YOU MAY BRICK YOUR CARD !!!

ATR を受け取った後に送信しているのが、SELECT by DF nameコマンドです。

Code Value
CLA 00
INS A4 (SELECT)
P1 04 (SELECT by DF name)
P2 00
Lc 00 (no AID)

Global Platform Card Specificationの6.3 Command Dispatchに書かれて(下記)いるように、AIDを指定せずにSELECT by DF nameを送ることで、ISDを選択しています。

As another option for making the Issuer Security Domain the selected Application, the SELECT command could contain no data in which case the AID of the Issuer Security Domain would be discovered by the off-card entity in the response to the SELECT command.

INITIALIZE UPDATEコマンドのやり取りが続き、それもSW 9000で終わっていますが、Global Platform Card SpecificationのFigure E-1 ”Explicit Secure Channel Initiation Flow"に描かれているようにEXTERNAL AUTHENTICATEコマンドの送出には至りません。とりあえずのところは、致し方ありませんね。

Code Value
CLA 80
INS 50 (INITIALIZE UPDATE)
P1 00
P2 00
Lc 08
Data E7019AFCA7DAD4A1
Le 00

カードの情報も出力しておく

ついでなので、-info オプションの実行結果も載せておきます。後半はまだじっくり読んでいませんが、後で気になることがあるかもしれません。

C:\Tools\gp>gp -debug -info
GlobalPlatformPro 18.09.14-0-gb439b52
Running on Windows 10 10.0 amd64, Java 10.0.2 by Oracle Corporation
# Detected readers from JNA2PCSC
[*] Gemalto USB SmartCard Reader 0
SCardConnect("Gemalto USB SmartCard Reader 0", T=*) -> T=0, 3B9F96801FC78031A073BE21136743200718000001A5
SCardBeginTransaction("Gemalto USB SmartCard Reader 0")
Reader: Gemalto USB SmartCard Reader 0
ATR: 3B9F96801FC78031A073BE21136743200718000001A5
More information about your card:
    http://smartcard-atr.appspot.com/parse?ATR=3B9F96801FC78031A073BE21136743200718000001A5

A>> T=0 (4+0000) 00A40400 00
A<< (0071+2) (182ms) 6F458408A000000003000000A539732F06072A864886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B0402159F6E01079F6501FE 9000
[TRACE] GPData -      [6F]
[TRACE] GPData -          [84] A000000003000000
[TRACE] GPData -          [A5]
[TRACE] GPData -              [73]
[TRACE] GPData -                  [06] 2A864886FC6B01
[TRACE] GPData -                  [60]
[TRACE] GPData -                      [06] 2A864886FC6B02020101
[TRACE] GPData -                  [63]
[TRACE] GPData -                      [06] 2A864886FC6B03
[TRACE] GPData -                  [64]
[TRACE] GPData -                      [06] 2A864886FC6B040215
[TRACE] GPData -              [9F6E] 07
[TRACE] GPData -              [9F65] FE
[DEBUG] GlobalPlatform - Auto-detected ISD: A000000003000000
[TRACE] GPData - GET DATA(CPLC)
A>> T=0 (4+0000) 80CA9F7F 00
A<< (0045+2) (10ms) 9F7F2AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 9000
[WARN] GPData - Invalid CPLC date: FFFF
[WARN] GPData - Invalid CPLC date: FFFF
[WARN] GPData - Invalid CPLC date: FFFF
[WARN] GPData - Invalid CPLC date: FFFF
[WARN] GPData - Invalid CPLC date: FFFF
[WARN] GPData - Invalid CPLC date: FFFF
CPLC: ICFabricator=FFFF
      ICType=FFFF
      OperatingSystemID=FFFF
      OperatingSystemReleaseDate=FFFF (invalid date format)
      OperatingSystemReleaseLevel=FFFF
      ICFabricationDate=FFFF (invalid date format)
      ICSerialNumber=FFFFFFFF
      ICBatchIdentifier=FFFF
      ICModuleFabricator=FFFF
      ICModulePackagingDate=FFFF (invalid date format)
      ICCManufacturer=FFFF
      ICEmbeddingDate=FFFF (invalid date format)
      ICPrePersonalizer=FFFF
      ICPrePersonalizationEquipmentDate=FFFF (invalid date format)
      ICPrePersonalizationEquipmentID=FFFFFFFF
      ICPersonalizer=FFFF
      ICPersonalizationDate=FFFF (invalid date format)
      ICPersonalizationEquipmentID=FFFFFFFF

[TRACE] GPData - GET DATA(IIN)
A>> T=0 (4+0000) 80CA0042 00
A<< (0004+2) (11ms) 42020102 9000
IIN: 42020102
[TRACE] GPData - GET DATA(CIN)
A>> T=0 (4+0000) 80CA0045 00
A<< (0004+2) (18ms) 45020506 9000
CIN: 45020506
Card Data:
[TRACE] GPData - GET DATA(Card Data)
A>> T=0 (4+0000) 80CA0066 00
A<< (0051+2) (14ms) 6631732F06072A864886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B040215 9000
[TRACE] GPData -      [66]
[TRACE] GPData -          [73]
[TRACE] GPData -              [06] 2A864886FC6B01
[TRACE] GPData -              [60]
[TRACE] GPData -                  [06] 2A864886FC6B02020101
[TRACE] GPData -              [63]
[TRACE] GPData -                  [06] 2A864886FC6B03
[TRACE] GPData -              [64]
[TRACE] GPData -                  [06] 2A864886FC6B040215
Tag 6: 1.2.840.114283.1
-> Global Platform card
Tag 60: 1.2.840.114283.2.2.1.1
-> GP Version: 2.1.1
Tag 63: 1.2.840.114283.3
Tag 64: 1.2.840.114283.4.2.21
-> GP SCP02 i=15
Card Capabilities:
[TRACE] GPData - GET DATA(Card Capabilities)
A>> T=0 (4+0000) 80CA0067 00
A<< (0000+2) (12ms) 6A88
[DEBUG] GPData - GET DATA(Card Capabilities): N/A
[TRACE] GPData - GET DATA(Key Info Template)
A>> T=0 (4+0000) 80CA00E0 00
A<< (0056+2) (15ms) E036C00401018010C00402018010C00403018010C00401028010C00402028010C00403028010C00401038010C00402038010C00403038010 9000
[TRACE] GPData -      [E0]
[TRACE] GPData -          [C0] 01018010
[TRACE] GPData -          [C0] 02018010
[TRACE] GPData -          [C0] 03018010
[TRACE] GPData -          [C0] 01028010
[TRACE] GPData -          [C0] 02028010
[TRACE] GPData -          [C0] 03028010
[TRACE] GPData -          [C0] 01038010
[TRACE] GPData -          [C0] 02038010
[TRACE] GPData -          [C0] 03038010
Version:   1 (0x01) ID:   1 (0x01) type: DES3 length:  16
Version:   1 (0x01) ID:   2 (0x02) type: DES3 length:  16
Version:   1 (0x01) ID:   3 (0x03) type: DES3 length:  16
Version:   2 (0x02) ID:   1 (0x01) type: DES3 length:  16
Version:   2 (0x02) ID:   2 (0x02) type: DES3 length:  16
Version:   2 (0x02) ID:   3 (0x03) type: DES3 length:  16
Version:   3 (0x03) ID:   1 (0x01) type: DES3 length:  16
Version:   3 (0x03) ID:   2 (0x02) type: DES3 length:  16
Version:   3 (0x03) ID:   3 (0x03) type: DES3 length:  16
SCardEndTransaction(Gemalto USB SmartCard Reader 0)
SCardDisconnect("Gemalto USB SmartCard Reader 0", true)