エミュレーターでの Java Card 開発に成功した後、現在は実際の Java Card ( Gemalto IDCore 3010 )を扱っています。私はGlobal Platformで経験してきましたが、カード上のアプレットをリストする最も基本的なサンプル コードでも問題があります。
これは元のコードです:
mode_201
enable_trace
establish_context
card_connect
select -AID a0000000030000
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f // Open secure channel
get_status -element e0
card_disconnect
release_context
私はこれを変更しましたが、現在は次のようになっています。
//I changed this, because the Card Management & API is compliant with GP2.1.1.
mode_211
enable_trace
establish_context
//Switches are not necessary as I am using only one single-slot card reader
card_connect
//The auto-detected ISD AID of the card is: A000000018434D00
select -AID A000000018434D00
//This is the line where the command fails
open_sc -security 0 -keyind 0 -keyver 0 -keyDerivation none -key 47454d5850524553534f53414d504c45 // Open secure channel
//This would list applets and packages and security domains
get_status -element e0
card_disconnect
release_context
Global Platform ページで、これらがopen_scコマンドのスイッチであることがわかります。
open_sc -keyind x -keyver x -key xyz -mac_key xyz -enc_key xyz -kek_key xyz -security x -scp x -scpimpl x -keyDerivation x
Open secure channel
しかし残念なことに、これらのスイッチに関する十分な情報を見つけることができませんでした。
- keyind : 私が見つけた唯一の情報は、それがキー インデックスであるということです。
- keyver : 鍵セットのバージョン。同上。
- key : 鍵派生を使用するカードを持っている場合、-keyDerivation オプションで派生モードを有効にする必要があり、-key でマスター (マザー) キーを指定する必要があることを読みました。そこで、ここで母の鍵 (4F454D5850524553534F53414D504C45) を提供しました。
- mac_key : マスター キーから計算されるため、関係ありません。
- enc_key : マスター キーから計算されるため、関係ありません。
- kek_key : マスター キーから計算されるため、関係ありません。
- security : 私が見つけた情報は次のとおりです: 0: クリア、1: MAC、3: MAC+ENC。カードのデータシートにこのようなものが見つからなかったので、「0」を選択しました。
- scp : セキュア チャネル プロトコル (1 SCP01、2 SCP02、デフォルト未設定)。明示的に記載する必要はありません。私のカードは SCP01 と SCP02 の両方をサポートしています。
- scpimpl : セキュア チャネルの実装 (デフォルトでは未設定)。明示的に記載する必要はありません。
- keyDerivation : 可能な値は、「none」、「visa2」、または「emvcps11」です。また、データシートでこれに関する情報を見つけることができなかったので、「なし」にスタックします。
これは、変更されたコードで表示されるエラー メッセージです。
C:\JavaCard\GPShell-1.4.4>GPShell.exe list.txt
mode_211
enable_trace
establish_context
card_connect
select -AID A000000018434D00
Command --> 00A4040008A000000018434D00
Wrapped command --> 00A4040008A000000018434D00
Response <-- 6F198408A000000018434D00A50D9F6E061291518101009F6501FF9000
open_sc -security 0 -keyind 0 -keyver 0 -keyDerivation none -key 47454d585052455
3534f53414d504c45 // Open secure channel
Command --> 80CA006600
Wrapped command --> 80CA006600
Response <-- 6A88
GP211_get_secure_channel_protocol_details() returns 0x80206A88 (6A88: Referenced
data not found.)
何が問題なのか、open_scコマンドをパラメータ化して実行する方法を教えてもらえますか? どうもありがとうございました!
解決策:これは作業バージョンでした:
mode_201
enable_trace
establish_context
card_connect
select -AID A000000018434D00
open_sc -scp 1 -scpimpl 0x15 -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 -keyDerivation visa2
get_status -element e0
card_disconnect
release_context