Android Secure Element CTSの実行用ARA-Mできました
Android Secure Element CTSの実行に必要なアクセスルールを返すARA-M、とりあえず完成です。インストール後にルールの追加や変更を動的に実行できるようには作っていませんが、それはまた他にやることがないときにでも。
アクセスルールの選択ルール
ルールをたくさん定義することができるため、条件的には複数のルールに該当することがあります。その場合に何を優先するかについても、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):
- Specific rules have priority.
- Rules associated with end-entity certificates have priority (in the case of certificate chains).
- Restrictive rules have priority.
通常は「許可されたもの以外は原則禁止」の方向でアクセスルールを設計するものと思われますが、今回は下記のように積み重ねて「禁止されたもの以外は原則許可」みたいな仕様で作ります。
ベースは「全て許可」
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:
- 0x00060000
- 0xA0060000
- Unauthorized APDUs:
- 0x0008000000
- 0x80060000
- 0xA008000000
- 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 |
テスト仕様に従って、この調子で追加してゆけば完成です。