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

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

Android Secure Element CTSの実行用ARA-Mできました

Android Secure Element CTSの実行に必要なアクセスルールを返すARA-M、とりあえず完成です。インストール後にルールの追加や変更を動的に実行できるようには作っていませんが、それはまた他にやることがないときにでも。

github.com

アクセスルールの選択ルール

ルールをたくさん定義することができるため、条件的には複数のルールに該当することがあります。その場合に何を優先するかについても、Global Platform Secure Element Access Control仕様書で規定されています。ざっくり言うと「より具体的に合致する方が優先。同列ならアクセスを制限する方向のルールを優先」です。

3.3 Introduction to Access Control Rule Conflict Resolution

The policy to manage conflicting rules is based on three basic principles (in order):

  1. Specific rules have priority.
  2. Rules associated with end-entity certificates have priority (in the case of certificate chains).
  3. Restrictive rules have priority.

通常は「許可されたもの以外は原則禁止」の方向でアクセスルールを設計するものと思われますが、今回は下記のように積み重ねて「禁止されたもの以外は原則許可」みたいな仕様で作ります。

  • テスト用に禁止するルールが設けられていないケースについては、全て許可する。
  • 特定のテスト用アプレットに対するAPDUコマンドによるアクセスは、基本的には全て禁止する。
  • 特定のテスト用アプレットに対する特定のAPDUコマンドによるアクセスは、許可する。

ベースは「全て許可」

Open Mobile APIを使っていろいろアクセスできるようにしておいたほうが、きっといろいろ便利です。他に該当するルールがない場合にはこの「全て許可」ルールが選択されるようにしておきます。

|REF-AR-DO|T|E2    | |                  | |                                        |
|         |L|0B    | |                  | |                                        |
|         |V|REF-DO|T|E1                | |                                        |
|         | |      |L|04                | |                                        |
|         | |      |V|AID-REF-DO        |T|4F                                      |
|         | |      | |                  |L|00 (Not Specified)                      |
|         | |      | |DeviceAppID-REF-DO|T|C1                                      |
|         | |      | |                  |L|00 (Not Specified)                      |
|         | |AR-DO |T|E3                | |                                        |
|         | |      |L|03                | |                                        |
|         | |      |V|APDU-AR-DO        |T|D0                                      |
|         | |      | |                  |L|01                                      |
|         | |      | |                  |V|01 (Always)                             |

ルールの適用対象となるアプレットを特定するAID-REF-DOは空、ターミナル側のアプリケーションを特定するDeviceAppID-REF-DOも空、そしてAPDUアクセスの許可・禁止を指示するAPDU-AR-DOは'01' (許可)です。これにより、「どのアプレットに対するどのアプリによるAPDUコマンドアクセスでも許可」となります。

特定のアプレットに対するアクセスは「全て禁止」

前項の「全て許可」ルールは全てのAPDUコマンドアクセスに適用されますが、より具体的なルールを併設することでその一部を上書きすることができます。Secure Element Access Control系テストのアクセス対象はAID末尾'40'から'4F'までのアプレットですので、それらに対するアクセスを「全て禁止」にします。AID 'A000000476416E64726F696443545340'に対する全てのアプリからのAPDUコマンドアクセスを「全て禁止」にするルールがこちら。

|REF-AR-DO|T|E2    | |                  | |                                        |
|         |L|1B    | |                  | |                                        |
|         |V|REF-DO|T|E1                | |                                        |
|         | |      |L|14                | |                                        |
|         | |      |V|AID-REF-DO        |T|4F                                      |
|         | |      | |                  |L|10                                      |
|         | |      | |                  |V|A000000476416E64726F696443545340        |
|         | |      | |DeviceAppID-REF-DO|T|C1                                      |
|         | |      | |                  |L|00 (Not Specified)                      |
|         | |AR-DO |T|E3                | |                                        |
|         | |      |L|03                | |                                        |
|         | |      |V|APDU-AR-DO        |T|D0                                      |
|         | |      | |                  |L|01                                      |
|         | |      | |                  |V|00 (Never)                              |

AID-REF-DOで指定するAIDの末尾を'4F'まで変えながら、同内容のルールを16個用意します。

さらに具体的なルールを載せて完成

これまでに挙げた二種類のルールよりも優先される、より具体的なルールを加えたら完成です。Androic Secure Element CTSページに書かれている仕様の一部を引用します。

CtsSecureElementAccessControlTestCases1

  • Hash of the APK: 0x4bbe31beb2f753cfe71ec6bf112548687bb6c34e
  • Authorized AIDs
    • 0xA000000476416E64726F696443545340
      • Authorized APDUs:
        1. 0x00060000
        2. 0xA0060000
      • Unauthorized APDUs:
        1. 0x0008000000
        2. 0x80060000
        3. 0xA008000000
        4. 0x9406000000

アプリ'4BBE31BEB2F753CFE71EC6BF112548687BB6C34E'によるアプレット'A000000476416E64726F696443545340'に対するAPDUコマンドアクセスは、コマンド'00060000'もしくは'A0060000'のみ許可すること。前項のルールでこのアプレットに対するAPDUコマンドアクセスは全て禁止になっているので、特定のケースだけ限定的に許可するルールをAPDUフィルタを使って追加すれば良いということになります。

|REF-AR-DO|T|E2    | |                  | |                                        |
|         |L|3E    | |                  | |                                        |
|         |V|REF-DO|T|E1                | |                                        |
|         | |      |L|28                | |                                        |
|         | |      |V|AID-REF-DO        |T|4F                                      |
|         | |      | |                  |L|10                                      |
|         | |      | |                  |V|A000000476416E64726F696443545340        |
|         | |      | |DeviceAppID-REF-DO|T|C1                                      |
|         | |      | |                  |L|14                                      |
|         | |      | |                  |V|4BBE31BEB2F753CFE71EC6BF112548687BB6C34E|
|         | |AR-DO |T|E3                | |                                        |
|         | |      |L|12                | |                                        |
|         | |      |V|APDU-AR-DO        |T|D0                                      |
|         | |      | |                  |L|10                                      |
|         | |      | |                  |V|00060000 / FFFF0000                     |
|         | |      | |                  | |A0060000 / FFFF0000                     |

テスト仕様に従って、この調子で追加してゆけば完成です。