
この記事は入門書であり概要であるため、最も単純な種類のスマートカードであるSIMカードと見なされます。これらのカードのほとんどは現在、地球上に存在していると思います。
今日の標準では、SIM標準は古風に見えますが、スマートカードの世界を初めて知っている人にとって理想的です。この標準の基礎となる原則を採用することで、トピックへのさらなる没入が促進されます。
あなたが「カードリーダー」である場合、棚に不明確な瞬間が置かれたり、著者が誤解したものを棚に置いたりしない限り、自分にとって何か新しいことを学ぶことはまずありません。 SIM!)。
スマートカードはハードウェアとソフトウェアの複合体であり、実際には少なくとも次のものを含む小型コンピューターです。
- プロセッサ
- ランダムアクセスメモリ。
- データストレージサブシステム。
- オペレーティングシステム。
常にではありませんが、多くの場合、Java VMがマップに含まれています。 そのため、OSはエンドユーザーには表示されません。
APDU
APIの役割は、いわゆるを介してカードとデータを交換することです
APDU多くの異なる
APDUはコマンドのセットであり、各コマンドは次の構造を持っています(
ISO7816-4に準拠 )。
アイテム | サイズ(バイト) | 説明 |
---|
CLA | 1 | チームクラス |
イン | 1 | 命令コード |
P1 | 1 | パラメータ番号1 |
P2 | 1 | パラメータ番号2 |
L | 1 | カードに送信されるデータの長さ。 |
データ | L | データ |
APDUは通常、次のような16進数のセットとして記述されます。
A0 A4 00 00 02 3F00
GSM SIMカードの場合、CLA =
A0
ます。
以下にいくつかの命令コードを示します。
取扱説明書 | 説明 |
---|
A4 | ファイルを選択 |
B0 | バイナリを読む |
B2 | レコードを読む |
C0 | 応答を得る |
20 | コードを確認する |
D6 | バイナリの更新 |
DC | レコードを更新 |
APDUに応答して
、カードは常に少なくとも2バイトを返します。 ステータスワード(SW)、
さらに、1番目と2番目のバイトは、それぞれSW1とSW2と呼ばれます。 SWによって、コマンドの実行ステータスを判断することができます。通常、SW1は基本情報を提供し、SW2は追加情報を提供します。 SIMカードの場合、ステータス90 00および9F xxは成功を意味します(ここでxxは16進数であり、追加情報の長さはそれより短い)。
SWカードに加えて、データを返すこともできます。 追加情報を取得できるコマンドもあります。
これを行うには、次のコマンドを使用します。
GET RESPONSE
この命令の「サービス」を使用するには、結果を要求するコマンドの
直後に呼び出す必要があることに注意する必要があります。 GET RESPONSE以外の命令が呼び出されると、前のコマンドのコンテキストは失われます。
呼び出し後にGET RESPONSEを使用できる命令がある場合、SW2では、GET RESPONSEコマンドが返すデータ量をバイト単位で返します。
GET RESPONSEの最も印象的なアプリケーションの1つは、SELECTコマンドの後に使用することです。これにより、選択したファイルシステムオブジェクトに関する有用な情報を取得できます。
データストレージサブシステム

ところで、今度はマップファイルシステムを思い出してください。 このシステムは階層構造であり、ルートフォルダー(マスターファイル、MF)、通常のフォルダー(専用ファイル、DF)、および実際にはファイル(基本ファイル、EF)があります。 各ファイルシステムオブジェクトには識別子(ファイルID、FID)があります。これは、最も単純な場合、4つの16進数で構成され、名前で置き換えられます。 たとえば、
MFの識別子は常に
3F00
です。 各カード標準には、予約済みファイル識別子の独自のリストがあります。たとえば、SIMアドレス帳ファイルには識別子6F3Aがあり、SMSストレージファイルには識別子6F3Cがあります。 標準ファイルには、上記のファイルの場合、次のような発音名もあります(単に人間の便宜のため、APIはそれらを使用しません)。
6F3A
EF ADN 。
6F3
EF SMS。
SIMカードの場合、標準の使用シナリオでは、ファイル構造の変更、つまり
EFまたは
DFを作成できません。
ファイルの内容を変更することのみが可能です。 もちろん、人生は非標準的なシナリオも決定しますが、今はそれらを考慮しません。
ファイルの種類
スマートカードAPIは、3種類のファイルの操作を提供します。
- 透明
任意のファイルシステムの通常のバイナリファイルの類似物。
そのようなファイルを操作するためのツールは、いくつかのREAD BINARY/UPDATE BINARY
です。
- 線形固定
すべてのレコードが同じ長さの固定数のレコードで構成されるファイル。ファイルの作成時にレコードの長さが指定されます。
レコードは255個を超えることはできません。各レコードは255バイトを超えることはできません。
作業ツールは、レコードの読み取りとレコードの更新のペアです。
絶対アドレス指定(レコード番号による)と相対アドレス指定(次/前、ただしサイクリングなし)の両方を使用できます。
使用例は、SIMカード上のノートブックです。
- サイクリック
一般的に-線形固定と同じですが、次の追加機能があります。
読み取り時:分離-相対アドレス指定を使用する場合、最後のレコードから次のレコードに移動すると、最初に移動し、最初のレコードから前のレコードに移動すると、最後に移動します。
記録時:相対アドレス指定のみが許可され、前のレコードのみが参照されます。 循環ファイル専用の特別なコマンドもあり、最も古いファイルレコードを更新します(その後、それが最新になります)-INCREASE。
最初のレコードには常に最新のデータが格納され、最後のレコードには常に最も古いデータが格納されます。
使用例は、以前にダイヤルした番号のリストです。 一般に、このタイプのファイルは、他のタイプのファイルよりもはるかに少ない頻度で使用されます。
APIには、それぞれ
MFまたは
DFのすべてのファイル/フォルダーのリストを要求する機能がありません。特定のパスにファイルが存在するかどうかを確認するには、SELECTコマンドでこのファイルを選択し、SWを分析する必要があります。
一般化されたファイル操作の種類をこの表に示します。
一般化された操作タイプ | コマンドの例 |
---|
読む | READ BINARY, READ RECORD |
更新する | UPDATE RECORD, UPDATE RECORD, INCREASE |
無効化 | INVALIDATE |
リハビリテーション | REHABILITATE |
最後の2つのコマンドについて簡単に説明します。
INVALIDATE
ファイルの状態を可逆的に変更して、次のようにします。
- 特別なフラグが設定されています。 ファイルが無効であることがわかります。
- 無効なファイルの設定によっては、読み取りおよび書き込み操作ができない場合があります。
REHABILITATE
以前に無効化されたファイルを通常の状態に戻しますが、無効化によって課される可能性のある制限は削除されます。
使用例-固定ダイヤルモードをアクティブにするメカニズム(特別な電話帳のサブスクライバーのみが呼び出すことができる場合)は、SIMカードのメイン電話帳ファイルの無効化に基づいています。 私はこのメカニズムの他のアプリケーションを知りません。
ファイル操作の一般的なタイプを決定したら、アクセス制御の原則に慣れることができます。
アクセス制御
これらの原則は、次の概念に基づいています。
- アクセス条件(AC)-特定のファイルに対して特定のタイプの操作が可能な、現在のセッション内のカードの状態。
- アクセス条件。最も有名なものはPINコードの提示です。
可能なアクセス条件:
アクセス条件 | 解説 |
---|
決して | 操作禁止 |
いつも | 常に許可された操作 |
PIN1( CHV 1とも呼ばれる) | 操作を実行するには、PIN1をカードに提示する必要があります |
PIN2( CHV 2) | 操作を実行するには、PIN2カードを提示する必要があります |
ADM | 操作を実行するには、管理コードをカードに提示する必要があります。 |
両方のPINコードは、VERIFY CODEコマンドでカードに提示されます。
ADMは 、プロプライエタリチーム(メーカーが使用していると考えるチームです。これは規格によって規制されていないためです)。
コードの提示はカードセッションの規模の操作です。PINまたは
ADMを一度提示すると、セッションが終了するまで適切なコードを必要とするすべてのファイルで操作を実行できます。
各ファイルおよび各操作について、マップはマッピングを保存します。一般化された操作はアクセス条件です。
たとえば
、カードの一意のシリアル番号を保存する
EF ICCIDファイルの場合(携帯電話の加入者の番号と混同しないように)、
ACは次のようになります。
読む | 更新する | 無効化/リハビリテーション |
---|
いつも | 決して | 決して |
メインの電話帳の場合:
読む | 更新する | 無効化/リハビリテーション |
---|
PIN1 | PIN1 | PIN2 |
オペレーターがPIN1でよく行うように、特定のコードの表示が無効になっている場合、このコードはカードセッションの最初から表示されると見なされます。
SELECT操作の場合、すべての
ACは常にです。 特定のファイルの
ACを見つけるには、それを選択(SELECT)してから、GET RESPONSEコマンドを実行する必要があります。
通常、
ACフォルダーはSIMカード(
MFおよび
DF )上のフォルダーには適用されません。
ACの観点から無効な操作(
EF ICCIDの更新を試みるなど)が実行されると、操作は拒否され、エラーコードがSWに提供されます。
もちろん、ここで説明したのは実際のファイルシステムではありません。原則として、この抽象化の背後にあるOSレベルでは、おなじみのFATは隠されています。
結論として、私は単にこのAPIを実際に使用する例を紹介しなければなりません。
このAPIを絶えず集中的に使用する最も有名で巨大なデバイスは、通常のモバイル端末であることを多くの人がすでに推測している(または知っている?)と思います。
PS:
次の記事では、マップをプログラムで操作することで得た知識をどのように適用できるかについてお話しする予定です。
PPS:親切な人々に招待してくれてありがとう!