twl_wrapsdk/readme-AES.txt
yutaka 58d709b0c1 arrange AES APIs (almost is around ARM9)
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@76 4ee2a332-4b2b-5046-8439-1ba90f034370
2007-05-22 09:28:16 +00:00

97 lines
2.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=======================
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を設定することになる。
●アプリケーションが触ることのできる部分
アプリケーションには、KEY[0]、SEED[0]SEED[3]を使えるようにする。
場合によっては、SEED[2]とSEED[3]は解放させない(2つしかない)
●ARM7側初期化
ROMコードで全レジスタの初期値を設定している。
大半はダミーだが、ID関係の固定値はここでのみの設定となる。
アプリケーションローダー用に、TwlFirm内にIDのgame_code依存
部分のみを再設定するコードを用意している。
アプリケーション起動後はIDを触ることは無い。
●ARM9側API
次のような個別のAPIを用意して見た。
AES_SetGeneralKey() KEY[0]に鍵を設定する
AES_SetSystemKey() SEED[3]に鍵を設定する
AES_SetGameKey() SEED[0]に鍵を設定する
AES_SetSpecialKey() SEED[1]に鍵を設定する
//AESi_SetAlternativeKey() SEED[2]に鍵を設定する (非公開)
それぞれ引数をすぐに有効にするもので、「以前の鍵」という使い方は
できないようにしている。
●ARM7側API
個別に指定することも上記APIを使用することもできる。
個別設定用に、次のenumを用意している。
typedef enum
{
AES_KEYSEL_GAME = 0,
AES_KEYSEL_SPECIAL = 1,
AES_KEYSEL_ALTERNATIVE = 2,
AES_KEYSEL_SYSTEM = 3,
AES_KEYSEL_IPL = AES_KEYSEL_ALTERNATIVE,
AES_KEYSEL_GENERAL = 0 // for key register
}
AESKeySel;