diff --git a/readme-AES.txt b/readme-AES.txt index ee6b698..8df50ab 100644 --- a/readme-AES.txt +++ b/readme-AES.txt @@ -2,35 +2,43 @@ AESに関するポリシー(仮) ======================= -現在のライブラリ実装は自由に扱える状態だが、最終的には -以下のポリシーを反映した形に制限を加える。 +AESのパラメータの一つである鍵について、その取り扱い方の +ポリシーを決める必要がある。 + +(余談) +AES-CTRでは、鍵以外にIV (128bit)により暗号化結果が変化する。 +AES-CCMでは、鍵以外にNONCE (96bit)および各長さ(各16bit)に +より暗号化結果が変化する。 +これらは、鍵とは異なり、AESを有効にする度に再設定する +必要がある。 -○(予習)鍵の種類 +○(予習)鍵レジスタの種類 -次の4組の鍵の組み合わせが存在する。 +次の4組の鍵レジスタの組み合わせが存在する。 +AESコアで使用される鍵はこれらとは別に存在する点に注意! 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[x][3]を設定したときに、 - SEED + ID => KEY + SEED[x] + ID[x] => KEY[x] -という計算処理がおこなれる(計算式は秘密)。 +という計算処理(KEYへの書き込み)がおこなれる(計算式は秘密)。 また、任意のタイミングでKEYのひとつをAESコアに送ることができる。 -このAESコアに送る作業を行わない限りAESで使用される鍵は +このAESコアに送る作業を行わない限りAESコアで使用される鍵は 変更されない。 ○(予習)種別ごとの意味合い KEYは一般的なAES回路として他のシステムとやり取りするような -データを取り扱うときにのみ使用する。 +データを取り扱うときにのみ直接書き込む。 IDとSEEDは任天堂依存のやりとりで使うことになるが、 基本的にIDの方はシステム側であらかじめ設定しておき、 @@ -50,19 +58,23 @@ ID また、アプリケーション依存とは、ROMヘッダ辺りを反映するということ。 上記の内容を反映するように、IDを設定することになる。 -ただし、KEYを直接設定する場合は、この意味合いは関係ない。 +具体的には、イニシャルコードに依存するID[0][y]とID[1][z]については +アプリケーションローダーで初期化し、それら以外の部分については、 +IPL ROMで設定した値から二度と変更しない。 + +ただし、KEYを直接設定する場合は、上記の意味合いは関係ない。 ●アプリケーションが触ることのできる部分 アプリケーションには、KEY[2]、SEED[0]〜SEED[3]を使えるようにする。 -とりあえずは、SEED[2]は解放しない。 +ただし、とりあえずはSEED[2]は解放しない。 ●ARM7側初期化コード ROMコードで全レジスタの初期値を設定している。 -大半はダミーだが、ID関係の固定値はここでのみの設定となる。 +大半はダミーだが、IDの固定値はここでのみの設定となる。 アプリケーションローダー用に、TwlFirm内にIDのgame_code依存 部分のみを再設定するコードを用意している。 @@ -83,9 +95,6 @@ AES_SetSpecialKey() SEED[1] それぞれ引数をすぐに有効にするもので、「以前の鍵」という使い方は (とりあえず)できないようにしている。 -課題: Static領域の読み直しはさせないのか? - (.data領域は最低必要かと思われるが・・・) - (少なくとも0の)SEEDは設定できないようにしてしまうか。 ●ARM7側API