======================= AESに関するポリシー(仮) ======================= 現在のライブラリ実装は自由に扱える状態だが、最終的には 以下のポリシーを反映した形に制限を加える。 ○(予習)鍵の種類 次の4組の鍵の組み合わせが存在する。 KEY[0] ID[0] SEED[0] KEY[1] ID[1] SEED[1] KEY[2] ID[2] SEED[2] KEY[3] ID[3] SEED[3] ○(予習)鍵の基本事項 それぞれが独立したレジスタであるが、SEEDを設定したときに、 SEED + ID => KEY という計算処理がおこなれる(計算式は秘密)。 また、任意のタイミングでKEYのひとつをAESコアに送ることができる。 このAESコアに送る作業を行わない限りAESで使用される鍵は 変更されない。 ○(予習)種別ごとの意味合い KEYは一般的なAES回路として他のシステムとやり取りするような データを取り扱うときにのみ使用する。 IDとSEEDは任天堂依存のやりとりで使うことになるが、 基本的にIDの方はシステム側であらかじめ設定しておき、 アプリケーションには操作させない。 ●それぞれの鍵の意味合い デバイス依存 アプリケーション依存 0: × ○ 1: ○ ○ 2: × × 3: ○ × ここで、デバイス依存とは、eFuseの内容を反映するということ。 また、アプリケーション依存とは、ROMヘッダ辺りを反映するということ。 上記の内容を反映するように、IDを設定することになる。 0と1はブートローダーが、2と3はIPL ROMが設定する。 (いつでも上書きできるので、IPL ROMで0と1も設定しておく) ●アプリケーション解放 アプリケーションには、KEY[0]、SEED[0]〜SEED[3]を使えるようにする。 場合によっては、SEED[2]とSEED[3]は解放させない(2つしかない) ●ARM9側API案 鍵の種類を、DEVICE_DEPEND、APPLICATION_DEPENDの ビットORで設定できるようにするだけ。 複数レジスタがあることも見せずに、値をほおり込むと AESコアに送るところまで処理する。 ・AES_SetNormalKey(u128 pKey) ・AES_SetSpecialKey(u128 pKey, u32 types)