(57)【特許請求の範囲】
【請求項１】
平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、
部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、
所定長のライン記憶領域を含むキャッシュメモリ部と、
前記主メモリ部に記憶されている前記コンピュータプログラムから１個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、
前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、
前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する１個の変換データを含み、前記ライン表領域の他の位置において、前記変換に無関係のデータを含み、
前記コンピュータプログラムは、
部分データを取得する取得命令群と、
取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、
前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含む
ことを特徴とするコンピュータシステム。
【請求項２】
前記変換表は、前記部分データが有する値に依存する位置において、前記変換データを含み、
前記演算命令群は、取得した部分データに演算を施すことにより、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記所定長は、前記変換データの長さの整数ｗ倍であり、
前記ライン表領域は、前記所定位置において、前記変換データを含み、その他の全ての位置において、前記変換に無関係のデータを含み、
前記演算命令群は、整数ｗによる乗算を用いて、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項４】
前記所定位置は、前記ライン表領域の先頭位置であり、
前記演算命令群は、取得した部分データに整数ｗを乗ずることにより、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項３に記載のコンピュータシステム。
【請求項５】
前記ライン表領域は、
前記所定位置において前記変換データを含み、
さらに、他の所定位置において、他の部分データに対応する他の変換データを含み、
その他の全ての位置において、前記変換に無関係のデータを含む
ことを特徴とする請求項２に記載のコンピュータシステム。
【請求項６】
前記所定長は、前記変換データの長さの整数ｗ倍であり、
前記所定位置は、前記ライン表領域の先頭位置であり、
前記他の所定位置は、前記ライン表領域を２等分した後半領域の先頭位置であり、
前記演算命令群は、取得した部分データに整数ｗ／２を乗ずることにより、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項５に記載のコンピュータシステム。
【請求項７】
前記所定長は、前記変換データの長さの整数ｗ倍であり、
前記所定位置は、前記ライン表領域の先頭から整数ｘ番目の位置であり、
前記他の所定位置は、前記ライン表領域を２等分した後半領域の先頭から整数ｘ番目の位置であり、
前記演算命令群は、取得した部分データに整数ｗ／２を乗じ、さらに整数ｘを加算することにより、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項５に記載のコンピュータシステム。
【請求項８】
平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、
部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、
所定長のライン記憶領域を含むキャッシュメモリ部と、
前記主メモリ部に記憶されている前記コンピュータプログラムから１個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、
前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、
前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する１個の変換データを含み、
前記コンピュータプログラムは、
部分データを取得する取得命令群と、
取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、
前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含み、
前記所定位置は、前記部分データに、所定演算を施して得られる位置であり、
前記演算命令群は、前記部分データに、前記所定演算を施して、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項９】
前記所定演算は、ｍｏｄ  ｚにおける前記部分データと奇数との乗算であり、
ｚは、部分データが取り得る値の種類の数である
ことを特徴とする請求項８に記載のコンピュータシステム。
【請求項１０】
平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、
部分データに対応する変換データを含む第１変換表と、部分データに対応する変換データを含む第２変換表と、前記プロセスにおいて、前記第１変換表及び前記第２変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、
所定長のライン記憶領域を含むキャッシュメモリ部と、
前記主メモリ部に記憶されている前記コンピュータプログラムから１個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、
前記実行部は、前記第１変換表及び前記第２変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、
前記第１変換表及び前記第２変換表は、それぞれ、前記所定長のライン表領域を有し、各ライン表領域の所定位置において、部分データに対応する１個の変換データを含み、
前記コンピュータプログラムは、
部分データを取得する取得命令群と、
取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、
前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含み、
前記第１変換表における前記所定位置は、前記部分データに、第１演算を施して得られる位置であり、
前記第２変換表における前記所定位置は、前記部分データに、第２演算を施して得られる位置であり、
前記演算命令群は、
変換の都度、前記第１変換表及び前記第２変換表のいずれを使用するかを決定する決定命令と、
前記部分データに、決定された変換表に対応する前記第１演算又は前記第２演算を施して、前記変換データの決定した前記変換表における位置を算出する算出命令を含む
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項１１】
前記第１演算は、ｍｏｄ  ｚにおける前記部分データと第１の奇数との乗算であり、
前記第２演算は、ｍｏｄ  ｚにおける前記部分データと第２の奇数との乗算であり、
ｚは、部分データが取り得る値の種類の数であり、
前記決定命令は、乱数を発生させ、発生させた乱数により、いずれの変換表を用いるかを決定する
ことを特徴とする請求項１０に記載のコンピュータシステム。
【請求項１２】
平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムにおいて用いられるコンピュータプログラムであって、
前記コンピュータシステムは、
部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、
所定長のライン記憶領域を含むキャッシュメモリ部と、
前記主メモリ部に記憶されている前記コンピュータプログラムから１個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、
前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、
前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する１個の変換データを含み、前記ライン表領域の他の位置において、前記変換に無関係のデータを含み、
前記コンピュータプログラムは、
部分データを取得する取得命令群と、
取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、
前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含む
ことを特徴とするコンピュータプログラム。
【請求項１３】
前記コンピュータプログラムは、コンピュータ読み取り可能な記録媒体に記録されている
ことを特徴とする請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記コンピュータプログラムは、搬送波に乗せられて送信される
ことを特徴とする請求項１２に記載のコンピュータプログラム。
【請求項１５】
平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムにおいて用いられる方法であって、
前記コンピュータシステムは、
部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、
所定長のライン記憶領域を含むキャッシュメモリ部と、
前記主メモリ部に記憶されている前記コンピュータプログラムから１個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、
前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、
前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する１個の変換データを含み、前記ライン表領域の他の位置において、前記変換に無関係のデータを含み、
前記方法は、
前記コンピュータプログラムにより、部分データを取得するステップと、
前記コンピュータプログラムにより、取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出するステップと、
前記コンピュータプログラムにより、前記変換表から、算出された前記位置に存する前記変換データを読み出すステップとを含む
ことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報を秘密に扱う暗号及び復号技術に関する。
【背景技術】
【０００２】
ＡＤＳＬ（Asymmetric Digital Subscriber Line）や光ファイバーなどに代表される高速通信路を介して、デジタル化された音楽や映像等のコンテンツを提供するサービスの普及に伴い、これらのコンテンツの不正コピーなどのコンテンツの不正利用の防止が必要となってきている。
一般に、コンテンツの不正利用を防止する著作権保護方式においては、暗号技術が用いられる。例えば、暗号化鍵を用いてデジタルコンテンツを暗号化して通信路を介して配布し、その暗号化鍵に対応する復号化鍵を与えられているユーザのみが、暗号化されたコンテンツを復号化して、元のデジタルコンテンツの再生を行うことができる。
【０００３】
一方、パーソナルコンピュータの普及により、デジタルコンテンツはコンピュータ上で再生されることが多くなってきている。著作権保護方式に必要な暗号処理は、パーソナルコンピュータ上の暗号プログラムとして提供され、暗号化されたコンテンツを復号化する際に用いる復号化鍵も、予めその暗号プログラムの内部に埋め込まれる場合が多くなってきている。
【０００４】
ところで、最近、コンピュータ上において暗号プログラムの実行中に実行環境つまりコンピュータから漏れ出す副情報、例えば、処理時間や電力消費量などを利用して、暗号プログラム内部に秘密に格納されている秘密情報、例えば、復号化鍵を取得するサイドチャネル攻撃が提案されている。
非特許文献１及び非特許文献２によると、このような攻撃手法の一つとして、コンピュータに内蔵され、処理の高速化を目的に用いられるキャッシュメモリに着目したタイミング攻撃というものがある。ここで、キャッシュメモリとは（非特許文献３を参照）、一度演算部、例えばＣＰＵがメインメモリから取得したデータを、高速にアクセス可能なキャッシュメモリに格納し、二度目以降に同じデータにアクセスする場合は、高速にアクセス可能なキャッシュメモリからデータを取得することによって、処理速度の高速化を実現するものである。
【０００５】
上述のタイミング攻撃では、データをキャッシュメモリから取得する場合と、メインメモリから取得する場合との処理時間差に着目して、秘密情報を特定することに成功している。
このタイミング攻撃は、キャッシュメモリが搭載されたＣＰＵ上で実行される暗号プログラムに対して有効であり、特に、テーブル参照演算（一般にＳＢＯＸの参照と呼ばれる）が用いられる繰り返し型のブロック暗号方式であるＡＥＳ（AdvancedEncryption Standard）方式（非特許文献４に記載）やＤＥＳ（Data Encryption Standard）方式などが攻撃の対象となっている。本タイミング攻撃を適用可能な実行環境としては、例えば、一般的なパーソナルコンピュータ（ＰＣ／ＡＴ互換機など）やキャッシュメモリを有するスマートカードなどである。
【０００６】
次に、タイミング攻撃の概要について説明する。
ＡＥＳでは、入力データと秘密鍵（拡大鍵）とに排他的論理和演算を施しその演算結果を用いて、上述のテーブル参照演算を行う。また、前提として、暗号処理を開始する前に、キャッシュメモリにその暗号処理のテーブル参照演算で用いるテーブルデータ配列（ＳＢＯＸ）が格納されていないものとする。このような前提のもとでは、暗号処理の途中のテーブル参照演算において、テーブル要素がキャッシュメモリから取得されるか、メインメモリから取得されるかは、入力データ及び秘密鍵に依存して一意に定まる。
【０００７】
これは、ある固定のテーブル要素を参照するテーブル参照演算を想定した場合に、入力データの値を変化させることによって、テーブル要素がキャッシュメモリから取得される場合と、メインメモリから取得される場合との両方のケースがあることを意味する。つまり、入力データを変化させることによって、全体の暗号処理時間が変化することを意味する。
【０００８】
そこで、タイミング攻撃では、全体の暗号処理時間を測定し、測定して得られた処理時間を基に、処理途中のあるテーブル参照演算において、テーブル要素がキャッシュメモリから取得されたか、メインメモリから取得されたかを推測し、その推測及び入力データを基に、秘密鍵（拡大鍵）を解析する。
このようなタイミング攻撃には、主に二つのアプローチがある。一つは、非特許文献１に記載されているように、１ブロック（ＡＥＳ方式の場合は１２８ビット）毎の暗号化処理時間を計測するものである。もう一つは、非特許文献２に記載されているように、２ブロック（ＡＥＳ方式の場合１２８ビット×２）毎の暗号化処理時間を計測するものである。次に、非特許文献１及び非特許文献２に記載のタイミング攻撃のそれぞれの概要について説明する。
【０００９】
非特許文献１に記載のタイミング攻撃は、２回同じテーブル要素にアクセスした場合に、２回目はキャッシュメモリからテーブル要素を取得するため、処理時間が短くなることを利用している。非特許文献１に記載のタイミング攻撃の大まかな流れは以下の通りである。
まず、１ブロック暗号化する毎に、キャッシュメモリの内容をクリアする。そして、ある２つのテーブル参照演算に着目し、その２つのテーブル参照演算の入力値に影響する鍵情報をある値に仮定する。そして、その仮定の下で２つのテーブル参照演算の入力値が同じになるような入力データを選択し、その処理時間を計測する。上記のことを考えられる全ての鍵情報の値について実行する。最終的には、一番処理時間の短かった鍵を正解の鍵として出力する。その後、また別の２つのテーブル参照演算に着目し、同様に鍵を推定していく。
【００１０】
一方、非特許文献２に記載のタイミング攻撃は、一回のメインメモリ上の暗号プログラム内のテーブル要素のアクセスによって、メインメモリから複数のテーブル要素が一緒にキャッシュメモリへコピーされる特徴を用いている。非特許文献２に記載のタイミング攻撃の大まかな流れは以下の通りである。
まず、２ブロック暗号化する毎に、キャッシュメモリの内容をクリアする。そして、ある１つのテーブル参照演算に着目し、その１つのテーブル参照演算の入力値に影響する鍵情報をある値に仮定する。そして、１ブロック目の着目するテーブル参照演算において、メインメモリからキャッシュメモリへコピーされる複数のテーブル要素を、２ブロック目で参照する（ただし、１ブロック目のテーブル参照演算の入力値以外）入力データを選択し、その処理時間を計測する。上記のことを考えられる全ての鍵情報の値について実行する。最終的には、一番処理時間の短かった鍵を正解の鍵として出力する。その後、また別の１つのテーブル参照演算に着目し、同様に鍵を推定していく。
【００１１】
上記で説明したように、処理時間を測定するタイミング攻撃は、入力データに依存して、１ブロック又は２ブロックの暗号処理の時間が異なることに起因している。このため、タイミング攻撃に対する対策としては、入力データを変えても、１ブロック又は２ブロックの暗号処理の処理時間が変化せずに一定になるようにする方法がある。このような対策法としては、非特許文献５の第４．２節に記載の従来技術がある。その従来技術の概要を説明する。ここでは、暗号処理の具体的な適用例として、ＡＥＳ方式の暗号化処理を挙げる。
【００１２】
非特許文献５により開示されている従来技術の特徴は、実際のＡＥＳ方式の暗号化処理を実行する前に、ＡＥＳ方式のＳｕｂＢｙｔｅｓ処理で用いられるテーブル参照演算のテーブルデータ配列のテーブル要素に一つ一つアクセスすることにより、入力データに依存しない処理（非特許文献５ではＣａｃｈｅ  Ｗａｒｍｉｎｇと呼ばれる）を追加するものである。これにより、実際のＡＥＳ方式の暗号化処理を開始する前までに、ＡＥＳ方式のＳｕｂＢｙｔｅｓ処理のテーブル参照演算で用いられる全てのテーブル要素をキャッシュメモリに格納することができ、結果的に、ＡＥＳ方式の暗号化処理のＳｕｂＢｙｔｅｓ処理のテーブル参照演算においては、テーブル要素を全てキャッシュメモリから取得出来ることになる。これによって、入力メッセージに依存して、全体の処理時間が変化せずに、処理時間が常に一定となる。つまり、処理時間を測定するタイミング攻撃に対する耐性を向上させることが出来る。
【００１３】
また、特許文献１は、キャッシュ攻撃型暗号解読法に対する防御機能を備えた暗号装置を提供することを目的として、１つの平文または１つの暗号文の暗号処理又は復号処理における変換表に対するアクセス時のキャッシュミスヒット回数を、任意の平文または暗号文についてほぼ均一化する手段について開示している。
【非特許文献１】Y.Tsunoo ,E.Tsujihara ,K.Minematsu ,H.Miyauchi, "Cryptanalysisof Block Ciphers Implemented on Computers with Cache" InternationalSymposium on Information Theory and Its Applications(ISITA)、October 2002.
【非特許文献２】鶴丸豊広ら、”６４ビットブロック暗号に対するタイミング攻撃”The 2003 Symposium on Cryptgraphy andInformation Security(SCIS2003)、2003.
【非特許文献３】デイビッド・Ａ・パターソン、ジョン・Ｌ・ヘネシー、”コンピュータの構成と設計”、ＩＳＢＮ４−８２２２−８０５６−Ｘ、日経ＢＰ社出版
【非特許文献４】Federal Information Processing Standard(FIPS) Publication 197、November  26、2001.
【非特許文献５】D.Page、"Defending against cache-based side-channelattacks" Information Security Technical Report、Vol.8、No.1、Page30-44、2003.
【特許文献１】日本国特開２００４−１２０３０７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
しかしながら、上述したように、処理時間を観測するタイミング攻撃に関する研究が進んでおり、さらに別の防御手段の開発が要望されている。
本発明は、上記の要望に応えるために、処理時間を観測するタイミング攻撃に対する耐性を有するコンピュータシステム、方法及びコンピュータプログラムプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記目的を達成するために、本発明は、平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、所定長のライン記憶領域を含むキャッシュメモリ部と、前記主メモリ部に記憶されている前記コンピュータプログラムから１個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する１個の変換データを含み、前記ライン表領域の他の位置において、前記変換に無関係のデータを含み、前記コンピュータプログラムは、部分データを取得する取得命令群と、取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含むことを特徴とする。
【発明の効果】
【００１６】
上記の構成によると、キャッシュメモリ部のライン記憶領域には、１個の変換データが含まれるので、入力メッセージを変化させても暗号又は復号処理の処理時間が一定となるため、処理時間を観測するタイミング攻撃に対する耐性は向上する。
ここで、前記変換表は、前記部分データが有する値に依存する位置において、前記変換データを含み、前記演算命令群は、取得した部分データに演算を施すことにより、対応する前記変換データの前記変換表における位置を算出するとしてもよい。また、前記所定長は、前記変換データの長さの整数ｗ倍であり、前記ライン表領域は、前記所定位置において、前記変換データを含み、その他の全ての位置において、前記変換に無関係のデータを含み、前記演算命令群は、整数ｗによる乗算を用いて、対応する前記変換データの前記変換表における位置を算出するとしてもよい。また、前記所定位置は、前記ライン表領域の先頭位置であり、前記演算命令群は、取得した部分データに整数ｗを乗ずることにより、対応する前記変換データの前記変換表における位置を算出するとしてもよい。
【００１７】
これらの構成によると、簡単な演算により、部分データに対応する変換データの位置を特定することができる。
ここで、前記ライン表領域は、前記所定位置において前記変換データを含み、さらに、他の所定位置において、他の部分データに対応する他の変換データを含み、その他の全ての位置において、前記変換に無関係のデータを含むとしてもよい。また、前記所定長は、前記変換データの長さの整数ｗ倍であり、前記所定位置は、前記ライン表領域の先頭位置であり、前記他の所定位置は、前記ライン表領域を２等分した後半領域の先頭位置であり、前記演算命令群は、取得した部分データに整数ｗ／２を乗ずることにより、対応する前記変換データの前記変換表における位置を算出するとしてもよい。また、前記所定長は、前記変換データの長さの整数ｗ倍であり、前記所定位置は、前記ライン表領域の先頭から整数ｘ番目の位置であり、前記他の所定位置は、前記ライン表領域を２等分した後半領域の先頭から整数ｘ番目の位置であり、前記演算命令群は、取得した部分データに整数ｗ／２を乗じ、さらに整数ｘを加算することにより、対応する前記変換データの前記変換表における位置を算出するとしてもよい。
【００１８】
これらの構成によると、キャッシュメモリ部のライン記憶領域には、１個以上の変換データが含まれるので、処理時間を観測するタイミング攻撃に対する耐性を一定の程度に保ちつつ、キャッシュメモリ部の容量をより小さくすることができる。
ここで、平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、所定長のライン記憶領域を含むキャッシュメモリ部と、前記主メモリ部に記憶されている前記コンピュータプログラムから１個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する１個の変換データを含み、前記コンピュータプログラムは、部分データを取得する取得命令群と、取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含み、前記所定位置は、前記部分データに、所定演算を施して得られる位置であり、前記演算命令群は、前記部分データに、前記所定演算を施して、対応する前記変換データの前記変換表における位置を算出するとしてもよい。また、前記所定演算は、ｍｏｄ  ｚにおける前記部分データと奇数との乗算であり、ｚは、部分データが取り得る値の種類の数であるとしてもよい。
【００１９】
これらの構成によると、変換表において変換データがランダムに配置されるので、所定演算が漏洩しなければ、攻撃に対する耐性を保つことができる。
ここで、平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、部分データに対応する変換データを含む第１変換表と、部分データに対応する変換データを含む第２変換表と、前記プロセスにおいて、前記第１変換表及び前記第２変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、所定長のライン記憶領域を含むキャッシュメモリ部と、前記主メモリ部に記憶されている前記コンピュータプログラムから１個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、前記実行部は、前記第１変換表及び前記第２変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、前記第１変換表及び前記第２変換表は、それぞれ、前記所定長のライン表領域を有し、各ライン表領域の所定位置において、部分データに対応する１個の変換データを含み、前記コンピュータプログラムは、部分データを取得する取得命令群と、取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含み、前記第１変換表における前記所定位置は、前記部分データに、第１演算を施して得られる位置であり、前記第２変換表における前記所定位置は、前記部分データに、第２演算を施して得られる位置であり、前記演算命令群は、変換の都度、前記第１変換表及び前記第２変換表のいずれを使用するかを決定する決定命令と、前記部分データに、決定された変換表に対応する前記第１演算又は前記第２演算を施して、前記変換データの決定した前記変換表における位置を算出する算出命令を含むとしてもよい。また、前記第１演算は、ｍｏｄ  ｚにおける前記部分データと第１の奇数との乗算であり、前記第２演算は、ｍｏｄ  ｚにおける前記部分データと第２の奇数との乗算であり、ｚは、部分データが取り得る値の種類の数であり、前記決定命令は、乱数を発生させ、発生させた乱数により、いずれの変換表を用いるかを決定するとしてもよい。
【００２０】
これらの構成によると、変換の都度用いられる変換表が代わるので、攻撃に対する耐性を保つことができる。
【発明を実施するための最良の形態】
【００２１】
１．コンテンツ配信システム１０
本発明に係る１個の実施の形態としてのコンテンツ配信システム１０について説明する。
１．１  コンテンツ配信システム１０の構成
コンテンツ配信システム１０は、図１に示すように、コンテンツサーバ装置１００、配信サーバ装置３０ａ、放送装置３０ｂ、ＢＤ製造装置３０ｃ、パーソナルコンピュータ２００、デジタル放送受信装置２００ａ及びＢＤ再生装置２００ｂから構成されている。
【００２２】
コンテンツサーバ装置１００は、映像データ及び音データから構成される映画のコンテンツを記憶しており、配信サーバ装置３０ａからの要求に応じて、記憶しているコンテンツを暗号化して暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線２１を介して接続されている配信サーバ装置３０ａへ送信する。配信サーバ装置３０ａは、暗号化コンテンツを受信し、インターネット２０を介して接続されているパーソナルコンピュータ２００へ暗号化コンテンツを送信する。パーソナルコンピュータ２００は、暗号化コンテンツを受信し、受信した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
【００２３】
また、コンテンツサーバ装置１００は、上記と同様に、放送装置３０ｂからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線２２を介して接続されている放送装置３０ｂへ送信する。放送装置３０ｂは、暗号化コンテンツを受信し、受信した暗号化コンテンツを放送波に乗せて放送し、デジタル放送受信装置２００ａは、放送波を受信し、受信した放送波から前記暗号化コンテンツを抽出し、抽出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
【００２４】
さらに、コンテンツサーバ装置１００は、上記と同様に、ＢＤ製造装置３０ｃからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線２３を介して接続されているＢＤ製造装置３０ｃへ送信する。ＢＤ製造装置３０ｃは、暗号化コンテンツを受信し、受信した暗号化コンテンツを記録媒体４０に書き込む。暗号化コンテンツが書き込まれた記録媒体４０は、販売されて利用者により購入される。利用者により、記録媒体４０が装着されたＢＤ再生装置２００ｂは、記録媒体４０から前記暗号化コンテンツを読み出し、読み出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
【００２５】
１．２  コンテンツサーバ装置１００の構成
コンテンツサーバ装置１００は、図２に示すように、マイクロプロセッサ１０１、ハードディスク部１０２、メモリ部１０３、入力制御部１０４、表示制御部１０５、通信部１０６及びシステムバス１０９などから構成されるコンピュータシステムである。マイクロプロセッサ１０１、ハードディスク部１０２、メモリ部１０３、入力制御部１０４、表示制御部１０５及び通信部１０６は、システムバス１０９を介して相互に接続されている。また、入力制御部１０４及び表示制御部１０５は、それぞれ、キーボード１０７及びモニタ１０８に接続されている。さらに、通信部１０６は、専用回線２１、２２及び２３を介して、それぞれ、配信サーバ装置３０ａ、放送装置３０ｂ及びＢＤ製造装置３０ｃに接続されている。
【００２６】
ハードディスク部１０２及びメモリ部１０３には、様々なコンピュータプログラム及びその他のデータが記憶されており、マイクロプロセッサ１０１が、各コンピュータプログラムに従って動作することにより、コンテンツサーバ装置１００は、その一部の機能を達成する。
（１）ハードディスク部１０２
ハードディスク部１０２は、コンピュータプログラム及びデータを長期に渡って格納するための記憶ユニットである。ハードディスク部１０２は、図２に示すように、コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・、鍵１２３、鍵１２４、鍵１２５、・・・、コンテンツ配信プログラム１４１、コンテンツ暗号プログラム１４２、ＡＥＳ暗号プログラム１４３、送信プログラム１４４、図示していないその他のコンピュータプログラム及び図示していないその他のデータを記憶している。また、暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・を記憶するための領域を備えている。
【００２７】
コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・は、それぞれ、鍵１２３、鍵１２４、鍵１２５、・・・、に対応しており、また、暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・に対応している。
コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・は、それぞれ、映像データ及び音データが高効率に圧縮符号化された圧縮データである。
【００２８】
鍵１２３、鍵１２４、鍵１２５、・・・は、それぞれ、コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・に、暗号化アルゴリズムを施して、暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・を生成する際に使用される暗号鍵であり、それぞれ、１２８ビット長のデータである。ここで、前記暗号化アルゴリズムは、ＡＥＳ（AdvancedEncryption Standard）に基づくものである。
【００２９】
暗号化コンテンツ１２６、暗号化コンテンツ１２７、暗号化コンテンツ１２８、・・・は、それぞれ、コンテンツ１２０、コンテンツ１２１、コンテンツ１２２、・・・に、暗号化アルゴリズムＡＥＳが施されて生成された暗号化データである。
コンテンツ配信プログラム１４１、コンテンツ暗号プログラム１４２、ＡＥＳ暗号プログラム１４３及び送信プログラム１４４は、それぞれ、マイクロプロセッサ１０１の指示により、コンテンツ配信プログラム１３１、コンテンツ暗号プログラム１３２、ＡＥＳ暗号プログラム１３３及び送信プログラム１３４として、メモリ部１０３にローディングされる。これらのコンピュータプログラムについては、後述する。
【００３０】
（２）メモリ部１０３
メモリ部１０３は、実行対象となるコンピュータプログラム及びデータを一時的に蓄える記憶ユニットであり、図２に示すように、コンテンツ配信プログラム１３１、コンテンツ暗号プログラム１３２、ＡＥＳ暗号プログラム１３３、送信プログラム１３４、図示していないその他のプログラム及び図示していないその他のデータを記憶するための領域を備えている。
【００３１】
上記の各プログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ１０１により解読され実行される形式である。
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、通常、人が話したり書いたりする場合に用いる言語により又はフローチャートにより各コンピュータプログラムの内容を表現し、これにより、各コンピュータプログラムを説明する。
【００３２】
（ａ）コンテンツ配信プログラム１３１
コンテンツ配信プログラム１３１は、複数の命令コードを含んで構成されている。
これらの命令コード群は、コンテンツの配信先の装置から、例えば、配信サーバ装置３０ａから、コンテンツ、例えば、コンテンツ１２０の指定及びコンテンツの配信先の装置の指定を受け取り、受け取った指定により示されるコンテンツを指定して、コンテンツ暗号プログラム１３２を呼び出し、次に、コンテンツ暗号プログラム１３２により生成された暗号化コンテンツを、例えば、暗号化コンテンツ１２６としてハードディスク部１０２へ書き込み、受け取った指定による配信先の装置と、生成されハードディスク部１０２に書き込まれた暗号化コンテンツとを指定して、送信プログラム１３４を呼び出すことを示している。
【００３３】
こうして、コンテンツ配信プログラム１３１に従ってマイクロプロセッサ１０１が動作することにより、受け取った指定により示される配信先の装置へ、生成された暗号化コンテンツが送信される。
（ｂ）コンテンツ暗号プログラム１３２
コンテンツ暗号プログラム１３２は、図３に示すように、命令コード群Ｓ１１１、Ｓ１１２、Ｓ１１３、Ｓ１１４、Ｓ１１５及びＳ１１６を含んで構成されており、これらの命令コード群は、コンテンツ暗号プログラム１３２内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００３４】
命令コード群Ｓ１１１は、指定を受け付けたコンテンツ内におけるデータの位置をビットにより示す読出しポイントに、初期値として値「−１２８」を代入し、指定を受け付けたコンテンツに対応する鍵をハードディスク部１０２から読み出すことを示す複数の命令コードを含む。ここで、値「−１２８」が代入された読出しポイントは、前記コンテンツ外の位置を示しているが、読出しポイントに初期値として値「−１２８」を代入するのは、後述する命令コード群Ｓ１１２の最初の実行において、読出しポイントが、前記コンテンツの先頭の位置を示すようにするためである。後述する命令コード群Ｓ１１２の最初の実行において、前記読出しポイントに１２８ビットが加算され、読出しポイントは、値「０」を有することになり、この読出しポイントは、前記コンテンツの先頭の位置を示している。
【００３５】
命令コード群Ｓ１１２は、前記読出しポイントに１２８ビットを加算し、次に、前記コンテンツにおいて、加算された読出しポイントにより示される位置から１ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記コンテンツ内であるならば、当該位置から１ブロック分のデータを読み出し、読出しポイントにより示される位置が前記コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含む。ここで、１ブロックは、１２８ビット長のデータである。
【００３６】
命令コード群Ｓ１１３は、命令コード群Ｓ１１２から終了コードが出力された場合には、コンテンツ暗号プログラム１３２による処理を終了し、終了コードが出力されていない場合には、次の命令コード群Ｓ１１４に制御を移すことを示す複数の命令コードを含む。
命令コード群Ｓ１１４は、読み出された前記鍵及び読み出された前記１ブロックを伴って、ＡＥＳ暗号プログラム１３３を呼び出すことを示す複数の命令コードを含む。前記１ブロックを伴って、ＡＥＳ暗号プログラム１３３が呼び出されることにより、前記ブロックにＡＥＳによる暗号化が施されて暗号化ブロックが生成される。
【００３７】
ＡＥＳ方式では、入力メッセージ（平文）と出力メッセージ（暗号文）がともに１２８ビットであり、入力する暗号化鍵、復号化鍵は、１２８ビット、１９２ビット、２５６ビットから選択出来るようになっている。本実施の形態では、暗号化鍵及び復号化鍵は、１２８ビットとしている。
命令コード群Ｓ１１５は、ＡＥＳ暗号プログラム１３３により生成された１個の暗号化ブロックを、ハードディスク部１０２に、例えば暗号化コンテンツ１２６の一部として書き込むことを示す複数の命令コードを含む。
【００３８】
命令コード群Ｓ１１６は、次に、制御を命令コード群Ｓ１１２へ移すことを示す命令コードを含む。
（ｃ）ＡＥＳ暗号プログラム１３３
ＡＥＳ暗号プログラム１３３は、ＡＥＳに基づいて、１２８ビット長の平文ブロックを暗号化して１２８ビット長の暗号文ブロックを生成する暗号アルゴリズムであり、図４に示すように、暗号メインモジュール５０１、AddRoundKey処理モジュール５０２、Round 処理モジュール５０３、FinalRound処理モジュール５０４、SubBytes処理モジュール５０５、ShiftRows 処理モジュール５０６、MixColumns処理モジュール５０７、KeySchedule処理モジュール５０８及び変形Ｓボックス５１１から構成されている。
【００３９】
各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ１０１により解読され実行される形式である。
（ｃ−１）標準Ｓボックス３８０
ここでは、ＡＥＳの暗号化において定義されている８ビット入力、８ビット出力を行うＳボックスの参照処理において一般的に用いられるテーブルデータ配列である標準Ｓボックス３８０について、図５に示す配列表現３８１及び配列表現３８２を用いて説明する。
【００４０】
なお、ＡＥＳでは、標準Ｓボックスという用語は一般的に使用されていないが、本実施の形態において用いられる変形Ｓボックス５１１と区別するために、このような表現を採用している。
図５に示す配列表現３８１及び配列表現３８２は、標準Ｓボックス３８０を表現するものであって、配列表現３８１は、標準Ｓボックス３８０に含まれる複数の配列要素をそれぞれ配列番号（サフィックス）により区別して示しており、配列表現３８２は、標準Ｓボックス３８０に含まれる複数の配列要素それぞれの具体的な値を示している。
【００４１】
配列表現３８１は、表現上の便宜のために、１６行×１６列のマトリックス状に配置された複数の配列要素を含み、配列表現３８２は、表現上の便宜のために、１６行×１６列のマトリックス状に配置された複数の配列要素の具体的な値を含む。配列表現３８１において、マトリックスのある位置に配置された配列要素は、配列表現３８２において、マトリックスの同じ位置に配置された具体的な値に対応している。
【００４２】
標準Ｓボックス３８０は、２５６個の配列要素３９１、３９２、３９３、・・・、３９４、・・・、３９５、３９６、３９７、・・・、３９８を含んでいる。各配列要素は、８ビットのデータであり、「Ｓ［ｘｘ］」のように表現されている。ここで、「Ｓ」は、配列要素を示す配列要素名であり、「Ｓ」に続いて［  ］により囲まれた数値ｘｘが、当該配列要素を識別するための配列番号である。図５の配列表現３８１の各配列要素において、各配列番号は、１６進数により表現されている。
【００４３】
具体的には、２５６個の配列要素３９１「Ｓ［００］」、３９２「Ｓ［０１］」、３９３「Ｓ［０２］」、・・・、３９４「Ｓ［０ｆ］」、・・・、３９５「Ｓ［ｆ０］」、３９６「Ｓ［ｆ１］」、３９７「Ｓ［ｆ２］」、・・・、３９８「Ｓ［ｆｆ］」は、それぞれ、具体値４０１「６３」、具体値４０２「７ｃ」、具体値４０３「７７」、・・・、具体値４０４「７６」、・・・、具体値４０５「８ｃ」、具体値４０６「ａ１」、具体値４０７「８９」、・・・、具体値４０８「１６」である。これらの具体値は、１６進数により表現されている。
【００４４】
（ｃ−２）変形Ｓボックス５１１
変形Ｓボックス５１１について説明する。
変形Ｓボックス５１１は、図６に示すように、２０４８個の配列要素４３１、４４１、４４２、４４３、４４４、４４５、４４６、４４７、４３２、・・・、４３３、・・・、４３４、・・・、４３５、・・・、４３６、・・・、４３７、・・・、４３８、・・・から構成されている。
【００４５】
変形Ｓボックス５１１を構成する各配列要素は、図６においては、表現の便宜上、２５６行×８列のマトリックス状に配置されている。
各配列要素は、８ビットのデータである。従って、１行×８列分の配列要素の長さは、６４ビット長である。
第１列の２５６個の配列要素４３１、４３２、４３３、４３４、・・・、４３５、４３６、４３７、４３８は、それぞれ、値Ｓ［００」、値Ｓ［０１］、値Ｓ［０２］、値Ｓ［０３］、・・・、値Ｓ［ｆｃ］、値Ｓ［ｆｄ］、値Ｓ［ｆｅ］、値Ｓ［ｆｆ］を有する。ここで、値Ｓ［００］、値Ｓ［０１］、・・・、値Ｓ［ｆｅ］、値Ｓ［ｆｆ］は、上述の標準Ｓボックス３８０に含まれるものと同じである。
【００４６】
第２列の２５６個の配列要素は、それぞれ、値「０ｘｆｆ」を有する。ここで、「０ｘ」は、これに続く数字が１６進数による表現であることを示している。
第３列〜第８列に含まれる各配列要素も、それぞれ、値「０ｘｆｆ」を有する。
このように、変形Ｓボックス５１１に含まれる複数の配列要素が、２５６行×８列のマトリックス状に配置されているとみなした場合に、変形Ｓボックス５１１において、第１列の２５６個の各配列要素に、標準Ｓボックス３８０に含まれる各配列要素が配され、第２〜第８列の各配列要素に値「０ｘｆｆ」が配されている。
【００４７】
こうして、変形Ｓボックス５１１では、８個の連続して配置される配列要素について、その先頭の配列要素は、標準Ｓボックス３８０に含まれる配列要素と同じ値を有し、その他の配列要素は、意味のない値「０ｘｆｆ」を有している。
（ｃ−３）暗号メインモジュール５０１
暗号メインモジュール５０１は、図７に示すように、命令コード群Ｓ１２１、Ｓ１２２、Ｓ１２３、Ｓ１２４、Ｓ１２５及びＳ１２６を含んで構成されており、これらの命令コード群は、暗号メインモジュール５０１内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００４８】
命令コード群Ｓ１２１は、入力された平文ブロックと、暗号化鍵から生成された拡大鍵との演算であるAddRoundKey 処理を行うAddRoundKey 処理モジュール５０２を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ１２２は、カウンタを０に初期化することを示す複数の命令コードを含む。このカウンタは、暗号メインモジュール５０１内において、繰返しを制御するためのものである。
【００４９】
命令コード群Ｓ１２３は、後述するRound 処理を行うRound 処理モジュール５０３を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ１２４は、前記カウンタに「１」を加算することを示す複数の命令コードを含む。
命令コード群Ｓ１２５は、前記カウンタが所定の繰返し回数「Ｎｒ−１」であるか否かを判定し、繰返し回数「Ｎｒ−１」でない場合には、命令コード群Ｓ１２３へ移行し、繰返し回数「Ｎｒ−１」である場合には、次の命令コード群Ｓ１２６へ移行することを示す複数の命令コードを含む。
【００５０】
ここで、繰返し回数「Ｎｒ」は、暗号化鍵及び復号化鍵のビット長に依存し、暗号化鍵及び復号化鍵のビット長が１２８ビットの場合、Ｎｒ＝１０であり、ビット長が１９２ビットの場合、Ｎｒ＝１２であり、ビット長が２５６ビットの場合、Ｎｒ＝１４であると定められている。
命令コード群Ｓ１２６は、後述するFinalRound処理を行うFinalRound処理モジュール５０４を呼び出すことを示す複数の命令コードを含む。
【００５１】
（ｃ−４）Round 処理モジュール５０３
Round 処理モジュール５０３は、図８に示すように、命令コード群Ｓ１３１、Ｓ１３２、Ｓ１３３及びＳ１３４を含んで構成されており、これらの命令コード群は、Round処理モジュール５０３内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００５２】
命令コード群Ｓ１３１は、１６回のテーブル参照演算から構成されるSubBytes処理を行うSubBytes処理モジュール５０５を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ１３２は、ShiftRows 処理を行うShiftRows 処理モジュール５０６を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ１３３は、MixColumns処理を行うMixColumns処理モジュール５０７を呼び出すことを示す複数の命令コードを含む。
【００５３】
命令コード群Ｓ１３４は、上述したAddRoundKey 処理を行うAddRoundKey 処理モジュール５０２を呼び出すことを示す複数の命令コードを含む。
（ｃ−５）SubBytes処理モジュール５０５
本実施の形態のSubBytes処理では、１２８ビットのブロックデータを受け取り、受け取った１２８ビットのブロックデータを１６個の８ビットの部分ブロックデータに分け（８ビット×１６＝１２８ビット）、各部分ブロックデータを３ビットだけ左へシフトする。こうして、１６個の部分ブロックデータのそれぞれについて、１１ビットのデータが生成される。次に、各１１ビットのデータに、変形Ｓボックスの参照処理を施して、８ビットデータを出力する。
【００５４】
このように、１６個の部分ブロックデータについて、左シフトと変形Ｓボックスの参照処理とが施される。この結果、１６個の８ビットデータが生成される。生成された１６個の８ビットデータが連結されて１２８ビットのブロックデータが生成され出力される。
上記のように、各部分ブロックデータを３ビットだけ左へシフトするのは、次の理由による。
【００５５】
３ビットだけ左へシフトすることにより、各部分ブロックデータが８倍される。変形Ｓボックス５１１においては、連続して配置されている８個の配列要素のうち、先頭の１個については、有効な配列要素Ｓ［ｘｘ］が配置されているので、各部分ブロックデータを８倍して得られたデータをアドレスとして、変形Ｓボックス５１１を参照することにより、有効な配列要素Ｓ［ｘｘ］のみが得られるのである。
【００５６】
なお、SubBytes処理モジュール５０５は、上述した理由により、３ビットの左シフトの処理に代えて、８倍の乗算を行う乗算処理を含むとしてもよい。
また、同様にして、別の変形Ｓボックスにおいて、連続して配置されている１６個の配列要素のうち、先頭の１個については、有効な配列要素Ｓ［ｘｘ］が配置されているとするなら、各部分ブロックデータを１６倍して得られたデータをアドレスとして、前記別の変形Ｓボックスを参照することにより、有効な配列要素Ｓ［ｘｘ］のみが得られる。
【００５７】
また、別の変形Ｓボックスにおいて、連続して配置されている４個の配列要素のうち、先頭の１個については、有効な配列要素Ｓ［ｘｘ］が配置されているとするなら、各部分ブロックデータを４倍して得られたデータをアドレスとして、前記別の変形Ｓボックスを参照することにより、有効な配列要素Ｓ［ｘｘ］のみが得られる。
SubBytes処理モジュール５０５は、図９に示すように、命令コード群Ｓ１４１、Ｓ１４２、Ｓ１４３、Ｓ１４４、Ｓ１４５、Ｓ１４６、・・・、Ｓ１４７及びＳ１４８を含んで構成されており、これらの命令コード群は、SubBytes処理モジュール５０５内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００５８】
命令コード群Ｓ１４１は、１６個の部分ブロックデータのうち、第１の部分ブロックデータを３ビットだけ左へシフトし、１１ビットのデータを生成することを示す複数の命令コードを含む。
命令コード群Ｓ１４２は、命令コード群Ｓ１４１により生成された１１ビットのデータを変形Ｓボックス５１１におけるアドレスとして、変形Ｓボックス５１１を参照し、前記１１ビットのデータをアドレスとする位置に格納されている８ビットのデータを変形Ｓボックス５１１から読み出し、読み出した８ビットのデータを出力することを示す複数の命令コードを含む。
【００５９】
命令コード群Ｓ１４３、Ｓ１４５、・・・、Ｓ１４７は、それぞれ、命令コード群Ｓ１４１と同様の複数の命令コードを含む。命令コード群Ｓ１４３、Ｓ１４５、・・・、Ｓ１４７においては、１６個の部分ブロックデータのうち、それぞれ、第２の部分ブロックデータ、第３の部分ブロックデータ、・・・、第１６の部分ブロックデータをシフトの対象としている点において、命令コード群Ｓ１４１と相違している。
【００６０】
命令コード群Ｓ１４４、Ｓ１４６、・・・、Ｓ１４８は、それぞれ、命令コード群Ｓ１４２と同様の複数の命令コードを含む。命令コード群Ｓ１４４、Ｓ１４６、・・・、Ｓ１４８においては、それぞれ命令コード群Ｓ１４３、Ｓ１４５、・・・、Ｓ１４７による出力結果を用いる点において、命令コード群Ｓ１４２と相違している。
（ｃ−６）FinalRound処理モジュール５０４
FinalRound処理モジュール５０４は、図１０に示すように、命令コード群Ｓ１５１、Ｓ１５２及びＳ１５３を含んで構成されており、これらの命令コード群は、FinalRound処理モジュール５０４内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００６１】
命令コード群Ｓ１５１は、SubBytes処理モジュール５０５を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ１５２は、ShiftRows 処理を行うShiftRows 処理モジュール５０６を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ１５３は、AddRoundKey 処理を行うAddRoundKey 処理モジュール５０２を呼び出すことを示す複数の命令コードを含む。
【００６２】
（ｃ−７）その他
AddRoundKey 処理モジュール５０２、ShiftRows 処理モジュール５０６、MixColumns処理モジュール５０７及びKeySchedule 処理モジュール５０８は、それぞれ、ＡＥＳに規定されているAddRoundKey処理、ShiftRows 処理、MixColumns処理及びKeySchedule 処理を行う。これらの処理については、ＡＥＳに規定されている通りであるので、説明を省略する。
【００６３】
（ｄ）送信プログラム１３４
送信プログラム１３４は、複数の命令コードが並べられて構成されており、呼出し元のプログラムから、データの指定及び配信先の装置の指定を受け取り、通信部１０６を制御して、指示されたデータを指定された配信先の装置へ送信することを示す複数の命令コードを含む。
【００６４】
（３）マイクロプロセッサ１０１
マイクロプロセッサ１０１は、コンテンツサーバ装置１００の制御、データの計算・加工を行う中枢部分であり、メモリ部１０３に記憶されているコンピュータプログラムに従って、演算、制御などを行う。
マイクロプロセッサ１０１は、図１１に示すように、演算部１６１、キャッシュ部１６２及び図示していないその他のユニットから構成されている。
（キャッシュ部１６２）
キャッシュ部１６２は、プログラムの実行時に、演算部１６１によるメモリ部１０３へのアクセスにより、そのアクセス時間がプログラムの実行性能に影響することを回避するために、設けられたものである。
【００６５】
キャッシュ部１６２は、図１１に示すように、データ部１７５及び図示していないその他のユニットから構成されている。データ部１７５は、さらに、２５６個のキャッシュライン部１８１、１８２、１８３、１８４、１８５、・・・、１８６及び１８７から構成されている。各キャッシュライン部は、６４ビットのメモリ領域を備えている。
メモリ部１０３に記憶されている内容の一部が、データ部１７５のいずれかのキャッシュライン部にコピーされる。
【００６６】
キャッシュ部１６２は、メモリ部１０３と同様に、アドレスが与えられると、そのアドレスに対応するキャッシュライン部に格納されているデータを出力する。
（演算部１６１）
演算部１６１は、メモリ部１０３に記憶されているコンピュータプログラム中の命令コードを一つ一つ解釈し、解釈結果に応じて、演算・制御を行う。
【００６７】
演算部１６１は、次に取り出すべき命令が入っている番地情報を格納するプログラムカウンタＰＣを保持する。
コンピュータプログラムを実行する場合、演算部１６１は、まず、ハードディスク部１０２に格納されているコンピュータプログラムをメモリ部１０３にコピー（ロード）する。次に、プログラムカウンタＰＣを初期値に設定し、プログラムカウンタＰＣの値を基に、コンピュータプログラムの中の命令を一つ取得する。そして、その取得した一命令を実行する。その命令の実行中に、メモリ部１０３にロードされたコンピュータプログラムに定義されている固定値データを参照する場合、演算部１６１は、メモリ部１０３にアクセスしその固定値データを取得するとともに、キャッシュ部１６２にも同じ固定値データを格納する。次に同じ固定値データを参照する場合は、演算部１６１は、メモリ部１０３ではなく、キャッシュ部１６２にアクセスし、その固定値データを取得する。そして、その一命令を実行し終わったら、プログラムカウンタＰＣを一つ進め、再度コンピュータプログラムの中の命令を一つ取得し、上記と同様にその一命令を実行する。最終的に、プログラムカウンタＰＣが終了を示す値となったら、コンピュータプログラムの実行を終了する。
【００６８】
このように、演算部１６１は、キャッシュ部１６２にアクセスし、所望のデータがキャッシュ部１６２に存在しない場合には、メモリ部１０３から所望のデータを読み出し、読み出したデータをキャッシュ部１６２のデータ部１７５のいずれかのキャッシュライン部に書き込む。このときは、メモリ部１０３からキャッシュ部１６２へのデータのコピーのために、多少時間がかかるが、２度目以降には、演算部１６１は、キャッシュ部１６２へアクセスするので、高速となる。
（データ部１７５の一例）
データ部１７５のキャッシュライン部１８１〜１８７に、上述したSubBytes 処理により、変形Ｓボックス５１１の内容が格納された場合における一例を図１２にデータ部１７５ａとして示す。
【００６９】
データ部１７５ａのキャッシュライン部１８１ａ、１８２ａ、１８３ａ、１８４ａ、・・・、１８６ａ、１８７ａには、変形Ｓボックス５１１の内容がそのまま格納されている。
つまり、キャッシュライン部１８１ａには、配列要素４５１「Ｓ［００］」、配列要素４６１「０ｘｆｆ」、配列要素４６２「０ｘｆｆ」、配列要素４６３「０ｘｆｆ」、配列要素４６４「０ｘｆｆ」、配列要素４６５「０ｘｆｆ」、配列要素４６６「０ｘｆｆ」及び配列要素４６７「０ｘｆｆ」が格納されている。また、他のキャッシュライン部においても、その先頭に標準Ｓボックス３８０の配列要素が格納され、他の部分には、「０ｘｆｆ」が格納されている。
【００７０】
例えば、キャッシュライン部１８２ａ、１８３ａ、１８４ａ、・・・、１８６ａ、１８７ａの先頭には、それぞれ、標準Ｓボックス３８０の配列要素である配列要素４５２「Ｓ［０１］」、配列要素４５３「Ｓ［０２］」、配列要素４５４「Ｓ［０３］」、・・・、配列要素４５５「Ｓ［ｆｃ］」、配列要素４５６「Ｓ［ｆｄ］」、配列要素４５７「Ｓ［ｆｅ］」及び配列要素４５８「Ｓ［ｆｆ］」が格納されている。
【００７１】
このように、データ部１７５ａの各キャッシュライン部には、わずか１個の標準Ｓボックス３８０の配列要素のみが格納されている。
１．３  コンテンツサーバ装置１００の動作
コンテンツサーバ装置１００の動作について説明する。
（１）マイクロプロセッサ１０１の動作
マイクロプロセッサ１０１の動作について、図１３に示すフローチャートを用いて説明する。
【００７２】
演算部１６１は、ハードディスク部１０２に格納されているコンピュータプログラムをメモリ部１０３にコピーし、次に取り出すべき命令に関する番地情報を格納するプログラムカウンタＰＣを初期値に設定する（ステップＳ１６１）。
次に、演算部１６１は、メモリ部１０３にロードしたコンピュータプログラムの中から、プログラムカウンタＰＣの値を基に、一つの命令を取り出す（ステップＳ１６２）。
【００７３】
その際、演算部１６１は、その命令において、コンピュータプログラム内に定義されている固定データを使用するか否かを判断し（ステップＳ１６３）、固定データを使用する場合（ステップＳ１６３でＹｅｓ）、使用したい固定データがキャッシュ部１６２上にあるとき（ステップＳ１６４でＹｅｓ）、キャッシュ部１６２にアクセスし、該当する固定データを取得し（ステップＳ１６５）、次に、取り出した命令を解読し、取得した固定データを用いて、解読した結果を実行し（ステップＳ１６６）、次に、プログラムカウンタＰＣが終了を示していたら（ステップＳ１６７でＹｅｓ）、処理を終了する。もし、終了を指していない場合（ステップＳ１６７でＮｏ）、プログラムカウンタＰＣを一つ進め（ステップＳ１７０）、次に、ステップＳ１６２に制御を移して処理を繰り返す。
【００７４】
固定データを使用しない場合（ステップＳ１６３でＮｏ）、演算部１６１は、次に、取り出した命令を解読し、解読した結果を実行し（ステップＳ１６６）、次に、ステップＳ１６７に制御を移して処理を繰り返す。
使用したい固定データがキャッシュ部１６２上にない場合（ステップＳ１６４でＮｏ）、演算部１６１は、メモリ部１０３にアクセスし、該当する固定データを取得し（ステップＳ１６８）、取得した固定データをキャッシュ部１６２のキャッシュライン部にコピーし（ステップＳ１６９）、次に、取り出した命令を解読し、取得した固定データを用いて、解読した結果を実行し（ステップＳ１６６）、次に、ステップＳ１６７に制御を移して処理を繰り返す。
【００７５】
（２）ＡＥＳ暗号プログラム１３３による暗号化の動作
ＡＥＳ暗号プログラム１３３による暗号化の動作について、図１４に示すデータプロセスチャートを用いて説明する。ここでは、この図に示すように、１２８ビットの入力鍵Ｋ３０１を用いて、１２８ビットの平文データＰＴ３０３から、１２８ビットの暗号文データＣＴ３０８が生成されるものとする。
【００７６】
ＡＥＳ暗号プログラム１３３による暗号化の動作は、この図に示すように、鍵スケジュールのステップ３０２と、１０段のプロセス３０４、３０５、・・・、３０６、３０７とから構成される。
入力鍵Ｋ３０１に基づいて、KeySchedule 処理モジュール５０８により、１１個の拡大鍵ＳＫ0 、ＳＫ1 、・・・ＳＫ8、ＳＫ9 、ＳＫ10が生成され（ステップ３０２）、生成された拡大鍵ＳＫ0 、ＳＫ1、・・・、ＳＫ8 、ＳＫ9 、ＳＫ10が各段のAddRoundKey処理へ配布される（ステップ３１１、３１２、・・・、３１３、３１４、３１５）。
【００７７】
次に、第１段のプロセスにおいて（プロセス３０４）、AddRoundKey 処理モジュール５０２により拡大鍵ＳＫ0 を用いてAddRoundKey処理が行われ（ステップ３２１）、SubBytes処理モジュール５０５により、SubBytes処理が行われ（ステップ３２２）、ShiftRows 処理モジュール５０６により、ShiftRows処理が行われ（ステップ３２３）、MixColumns処理モジュール５０７により、MixColumns処理が行われる（ステップ３２４）。
【００７８】
次に、第２段のプロセスにおいて（プロセス３０５）、AddRoundKey 処理モジュール５０２により拡大鍵ＳＫ1 を用いてAddRoundKey処理が行われ（ステップ３３１）、SubBytes処理モジュール５０５により、SubBytes処理が行われ（ステップ３３２）、ShiftRows 処理モジュール５０６により、ShiftRows処理が行われ（ステップ３３３）、MixColumns処理モジュール５０７により、MixColumns処理が行われる（ステップ３３４）。
【００７９】
同様に、第３段から第８段までの各段のプロセスにおいて、AddRoundKey 処理、SubBytes処理、ShiftRows 処理及びMixColumns処理が行われる。
次に、第９段のプロセスにおいて（プロセス３０６）、AddRoundKey 処理モジュール５０２により拡大鍵ＳＫ8 を用いてAddRoundKey処理が行われ（ステップ３４１）、SubBytes処理モジュール５０５により、SubBytes処理が行われ（ステップ３４２）、ShiftRows 処理モジュール５０６により、ShiftRows処理が行われ（ステップ３４３）、MixColumns処理モジュール５０７により、MixColumns処理が行われる（ステップ３４４）。
【００８０】
最後に、第１０段のプロセスにおいて（プロセス３０７）、AddRoundKey 処理モジュール５０２により拡大鍵ＳＫ9 を用いてAddRoundKey処理が行われ（ステップ３５１）、SubBytes処理モジュール５０５により、SubBytes処理が行われ（ステップ３５２）、ShiftRows 処理モジュール５０６により、ShiftRows処理が行われ（ステップ３５３）、AddRoundKey 処理モジュール５０２により拡大鍵ＳＫ10を用いてAddRoundKey 処理が行われる（ステップ３５４）。
【００８１】
こうして、１２８ビットの暗号文データＣＴ３０８が生成される。
（３）各Round 処理又はFinalRound処理の動作
次に、各Round 処理又はFinalRound処理の動作について、特に、AddRoundKey 処理及びSubBytes処理の詳細の動作について、図１５に示すデータプロセスチャートを用いて説明する。ここでは、図１５に示すように、１２８ビットの拡大鍵３６１を用いて、１２８ビットの入力データ３７１から、１２８ビットの出力データ３７６が生成されるものとする。
【００８２】
各Round 処理又はFinalRound処理は、AddRoundKey 処理３７２、SubBytes処理３７３、ShiftRows 処理３７４及びMixColumns処理（又はAddRoundKey処理）３７５を含む。
AddRoundKey 処理３７２は、１６個の排他的論理和演算３８１、３８２、３８３、・・・、３８４を含む。また、SubBytes処理３７３は、１６個のシフト処理３８５、３８６、３８７、・・・、３８８と、１６個の変形Ｓボックスの参照処理３９１、３９２、３９３、・・・、３９４とを含む。
【００８３】
１２８ビットの拡大鍵３６１は、１６個の８ビットの部分鍵に分けられ、１６個の部分鍵が、それぞれ、AddRoundKey 処理３７２の１６個の排他的論理和演算３８１、３８２、３８３、・・・、３８４へ出力される（ステップ３６２、３６３、３６４、・・・、３６５）。
１２８ビットの入力データ３７１が、１６個の８ビットの部分データに分けられ、１６個の部分データが、それぞれ、AddRoundKey 処理３７２の１６個の排他的論理和演算３８１、３８２、３８３、・・・、３８４へ出力される。
【００８４】
排他的論理和演算３８１は、第１の部分データ（８ビット）を受け取り、第１の部分鍵（８ビット）を受け取り、受け取った第１の部分データと受け取った第１の部分鍵とに排他的論理和演算を施して、８ビットの第１の演算データを得、得られた第１の演算データをSubBytes処理３７３のシフト処理３８５へ出力する。
シフト処理３８５は、８ビットの第１の演算データを得、得られた第１の演算データを、３ビットだけ左側へシフトして、１１ビットの第１のシフトデータを得る。ここで、得られた第１のシフトデータの上位の８ビットは、前記演算データと同じデータであり、前記第１のシフトデータの下位の３ビットは、「０００」（２進数表現）である。次に、得られた第１のシフトデータをSubBytes処理３７３の参照処理３９１へ出力する。
【００８５】
参照処理３９１は、第１のシフトデータを受け取り、受け取った第１のシフトデータをアドレスとして、変形Ｓボックス５１１を参照して、８ビットの第１の配列要素を取得する。
同様に、排他的論理和演算３８２は、第２の部分データと第２の部分鍵とに排他的論理和演算を施して、第２の演算データを得、シフト処理３８６は、第２の演算データを、３ビットだけ左側へシフトして、第２のシフトデータを得、参照処理３９２は、第２のシフトデータをアドレスとして、変形Ｓボックス５１１を参照して、第２の配列要素を取得する。
【００８６】
同様に、排他的論理和演算３８３は、第３の部分データと第３の部分鍵とに排他的論理和演算を施して、第３の演算データを得、シフト処理３８７は、第３の演算データを、３ビットだけ左側へシフトして、第３のシフトデータを得、参照処理３９３は、第３のシフトデータをアドレスとして、変形Ｓボックス５１１を参照して、第３の配列要素を取得する。
【００８７】
同様に、第４から第１５の配列要素が取得される。
さらに、同様に、排他的論理和演算３８４は、第１６の部分データと第１６の部分鍵とに排他的論理和演算を施して、第１６の演算データを得、シフト処理３８８は、第１６の演算データを、３ビットだけ左側へシフトして、第１６のシフトデータを得、参照処理３９４は、第１６のシフトデータをアドレスとして、変形Ｓボックス５１１を参照して、第１６の配列要素を取得する。
【００８８】
こうして、第１から第１６の配列要素（１６個の配列要素）が取得される。
次に、第１から第１６の配列要素は、この順序で結合されて１２８ビットのデータが生成される。
次に、生成されたデータに、ShiftRows 処理３７４が施され、次に、MixColumns処理（又はAddRoundKey 処理）３７５が施される。こうして、１２８ビットの出力データ３７６が生成され出力される。
【００８９】
１．４  パーソナルコンピュータ２００の構成
パーソナルコンピュータ２００は、コンテンツサーバ装置１００と同様のコンピュータシステムであって、図１６に示すように、マイクロプロセッサ２０１、ハードディスク部２０２、メモリ部２０３、入力制御部２０４、表示制御部２０５及び通信部２０６などから構成される。入力制御部２０４及び表示制御部２０５は、それぞれ、キーボード２０７及びモニタ２０８に接続されている。また、通信部２０６は、インターネット２０に接続されている。
【００９０】
ハードディスク部２０２及びメモリ部２０３には、様々なコンピュータプログラムが記憶されており、マイクロプロセッサ２０１が、各コンピュータプログラムに従って動作することにより、パーソナルコンピュータ２００は、その一部の機能を達成する。
なお、デジタル放送受信装置２００ａ及びＢＤ再生装置２００ｂは、パーソナルコンピュータ２００と同様の構成を有しているので、これらの装置についての説明を省略する。
【００９１】
（１）ハードディスク部２０２
ハードディスク部２０２は、図１６に示すように、鍵２２２、コンテンツ受信プログラム２４１、コンテンツ復号プログラム２４２、再生プログラム２４３及びＡＥＳ復号プログラム２４４を記憶しており、また暗号化コンテンツ２２１を記憶するための領域を備えている。暗号化コンテンツ２２１と鍵２２２とは、対応している。
【００９２】
暗号化コンテンツ２２１及び鍵２２２は、それぞれ、コンテンツサーバ装置１００のハードディスク部１０２に記憶されている暗号化コンテンツ１２６及び鍵１２３と同じものである。
コンテンツ受信プログラム２４１、コンテンツ復号プログラム２４２、再生プログラム２４３及びＡＥＳ復号プログラム２４４は、それぞれ、マイクロプロセッサ２０１の指示により、コンテンツ受信プログラム２３１、コンテンツ復号プログラム２３２、再生プログラム２３３及びＡＥＳ復号プログラム２３４として、メモリ部２０３にローディングされる。これらのコンピュータプログラムについては、後述する。
【００９３】
（２）メモリ部２０３
メモリ部２０３は、図１６に示すように、コンテンツ受信プログラム２３１、コンテンツ復号プログラム２３２、再生プログラム２３３及びＡＥＳ復号プログラム２３４を記憶している。また、メモリ部２０３は、復号コンテンツ領域２３６を含む。
これらのプログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ２０１により解読され実行される形式である。
【００９４】
復号コンテンツ領域２３６には、暗号化コンテンツが復号されて生成された復号コンテンツが一時的に書き込まれる。
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、通常、人が話したり書いたりする場合に用いる言語により又はフローチャートにより各コンピュータプログラムの内容を表現し、これにより、各コンピュータプログラムを説明する。
【００９５】
（ａ）コンテンツ受信プログラム２３１
コンテンツ受信プログラム２３１は、複数の命令コードを含んで構成されている。
これらの命令コード群は、パーソナルコンピュータ２００の利用者からコンテンツの指定を受け付けることを示す複数の命令コードと、指定を受け付けた前記コンテンツを識別するコンテンツ識別子を取得し、取得したコンテンツ識別子を、通信部２０６及びインターネット２０を介して、配信サーバ装置３０ａへ送信することを示す複数の命令コードと、配信サーバ装置３０ａから、インターネット２０及び通信部２０６を介して、前記コンテンツ識別子により識別される暗号化コンテンツを受信することを示す複数の命令コードと、受信した暗号化コンテンツをハードディスク部２０２へ、例えば暗号化コンテンツ２２１として書き込むことを示す複数の命令コードとを含んでいる。
【００９６】
（ｂ）コンテンツ復号プログラム２３２
コンテンツ復号プログラム２３２は、図１７に示すように、命令コード群Ｓ２１１、Ｓ２１２、Ｓ２１３、Ｓ２１４、Ｓ２１５、Ｓ２１６、Ｓ２１７及びＳ２１８を含んで構成されており、これらの命令コード群は、コンテンツ復号プログラム２３２内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【００９７】
命令コード群Ｓ２１１は、パーソナルコンピュータ２００の利用者から、ハードディスク部２０２に記憶されているいずれかの暗号化コンテンツの指定を受け付けることを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１２は、メモリ部２０３に記憶されている再生プログラム２３３を呼び出すことを示す複数の命令コードを含んでいる。命令コード群Ｓ２１２が実行されることにより、その結果、コンテンツ復号プログラム２３２と再生プログラム２３３とが並行して実行される。
【００９８】
命令コード群Ｓ２１３は、指定を受け付けた暗号化コンテンツ内におけるデータの位置をビットにより示す読出しポイントに初期値として値「−１２８」を代入し、次に、指定を受け付けた暗号化コンテンツに対応する鍵をハードディスク部２０２から読み出すことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１４は、前記読出しポイントに１２８ビットを加算し、次に、前記暗号化コンテンツにおいて、加算された読出しポイントにより示される位置から１ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記暗号化コンテンツ内であるならば、当該位置から１ブロック分のデータを読み出し、読出しポイントにより示される位置が前記暗号化コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含んでいる。ここで、１ブロックは、１２８ビット長のデータである。
【００９９】
命令コード群Ｓ２１５は、命令コード群Ｓ２１４から終了コードが出力された場合には、コンテンツ復号プログラム２３２による処理を終了し、終了コードが出力されていない場合には、次の命令コード群Ｓ２１６に制御を移すことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１６は、読み出された前記鍵及び読み出された前記１ブロックを伴って、ＡＥＳ復号プログラム２３４を呼び出すことを示す複数の命令コードを含んでいる。
【０１００】
命令コード群Ｓ２１７は、復号プログラム２３４により生成された１個の復号ブロックを、メモリ部２０３の復号コンテンツ領域２３６へ書き込むことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１８は、次に制御を命令コード群Ｓ２１４へ移すことを示す命令コードを含んでいる。
【０１０１】
（ｃ）再生プログラム２３３
再生プログラム２３３は、図１７に示すように、命令コード群Ｓ２１８、Ｓ２１９及びＳ２２０を含んで構成されており、これらの命令コード群は、再生プログラム２３３内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【０１０２】
命令コード群Ｓ２１８は、メモリ部２０３が有する復号コンテンツ領域２３６から１個以上の復号ブロックを読み出すことを示す複数の命令コードを含んでいる。
命令コード群Ｓ２１９は、読み出した前記復号ブロックから映像データ及び音データを生成し、生成した映像データ及び音データを映像信号及び音信号に変換して、表示制御部２０５を介して、モニタ２０８へ出力することを示す複数の命令コードを含んでいる。
【０１０３】
命令コード群Ｓ２２０は、次に制御を命令コード群Ｓ２１８へ移すことを示す命令コードを含んでいる。
（ｄ）ＡＥＳ復号プログラム２３４
ＡＥＳ復号プログラム２３４は、図１８に示すように、復号メインモジュール６０１、AddRoundKey 処理モジュール６０２、InvRound処理モジュール６０３、InvFinalRound処理モジュール６０４、InvSubBytes 処理モジュール６０５、InvShiftRows処理モジュール６０６、InvMixColumns 処理モジュール６０７、KeySchedule処理モジュール６０８及び逆変換変形Ｓボックス６１１から構成されている。
【０１０４】
各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ２０１により解読され実行される形式である。
（ｄ−１）標準逆変換Ｓボックス８００
ここでは、ＡＥＳの復号において定義されている８ビット入力、８ビット出力を行う逆変換Ｓボックスの参照処理において一般的に用いられるテーブルデータ配列である標準逆変換Ｓボックス８００について、図１９に示す配列表現８０１及び配列表現８０２を用いて説明する。
【０１０５】
なお、ＡＥＳでは、標準逆変換Ｓボックスという用語は一般的に使用されていないが、本実施の形態において用いられる逆変換変形Ｓボックス６１１と区別するために、このような表現を採用している。
図１９に示す配列表現８０１及び配列表現８０２は、標準逆変換Ｓボックス８００を表現するものであって、配列表現８０１は、標準逆変換Ｓボックス８００に含まれる複数の配列要素をそれぞれ配列番号（サフィックス）により区別して示しており、配列表現８０２は、標準逆変換Ｓボックス８００に含まれる複数の配列要素それぞれの具体的な値を示している。
【０１０６】
配列表現８０１は、表現上の便宜のために、１６行×１６列のマトリックス状に配置された複数の配列要素を含み、配列表現８０２は、表現上の便宜のために、１６行×１６列のマトリックス状に配置された複数の配列要素の具体的な値を含む。配列表現８０１において、マトリックスのある位置に配置された配列要素は、配列表現８０２において、マトリックスの同じ位置に配置された具体的な値に対応している。
【０１０７】
標準逆変換Ｓボックス８００は、２５６個の配列要素８１１、８１２、８１３、・・・、８１４、・・・、８１５、８１６、８１７、・・・、８１８を含んでいる。各配列要素は、８ビットのデータであり、「ＩｎｖＳ［ｘｘ］」のように表現されている。ここで、「ＩｎｖＳ」は、配列要素を示す配列要素名であり、「ＩｎｖＳ」に続いて［  ］により囲まれた数値ｘｘが、当該配列要素を識別するための配列番号である。図１９の配列表現８０１の各配列要素において、各配列番号は、１６進数により表現されている。
【０１０８】
具体的には、２５６個の配列要素８１１「ＩｎｖＳ［００］」、８１２「ＩｎｖＳ［０１］」、８１３「ＩｎｖＳ［０２］」、・・・、８１４「ＩｎｖＳ［０ｆ］」、・・・、８１５「ＩｎｖＳ［ｆ０］」、８１６「ＩｎｖＳ［ｆ１］」、８１７「ＩｎｖＳ［ｆ２］」、・・・、８１８「ＩｎｖＳ［ｆｆ］」は、それぞれ、具体値８２１「５２」、具体値８２２「０９」、具体値８２３「６ａ」、・・・、具体値８２４「ｆｂ」、・・・、具体値８２５「１７」、具体値８２６「２ｂ」、具体値８２７「０４」、・・・、具体値８２８「７ｄ」である。これらの具体値は、１６進数により表現されている。
【０１０９】
（ｄ−２）逆変換変形Ｓボックス６１１
逆変換変形Ｓボックス６１１について説明する。
逆変換変形Ｓボックス６１１は、図２０に示すように、２０４８個の配列要素８３１、８４１、８４２、８４３、８４４、８４５、８４６、８４７、８３２、・・・、８３３、・・・、８３４、・・・、８３５、・・・、８３６、・・・、８３７、・・・、８３８、・・・から構成されている。
【０１１０】
逆変換変形Ｓボックス６１１を構成する各配列要素は、図２０においては、表現の便宜上、２５６行×８列のマトリックス状に配置されている。
第１列の２５６個の配列要素８３１、８３２、８３３、８３４、・・・、８３５、８３６、８３７、８３８は、それぞれ、値ＩｎｖＳ［００］、値ＩｎｖＳ［０１］、値ＩｎｖＳ［０２］、値ＩｎｖＳ［０３］、・・・、値ＩｎｖＳ［ｆｃ］、値ＩｎｖＳ［ｆｄ］、値ＩｎｖＳ［ｆｅ］、値ＩｎｖＳ［ｆｆ］を有する。ここで、値ＩｎｖＳ［００］、値ＩｎｖＳ［０１］、・・・、値ＩｎｖＳ［ｆｅ］、値ＩｎｖＳ［ｆｆ］は、上述の標準逆変換Ｓボックス８００に含まれるものと同じである。
【０１１１】
第２列の２５６個の配列要素は、それぞれ、値「０ｘｆｆ」を有する。ここで、「０ｘ」は、これに続く数字が１６進数による表現であることを示している。
第３列〜第８列に含まれる各配列要素も、それぞれ、値「０ｘｆｆ」を有する。
このように、逆変換変形Ｓボックス６１１では、８個の連続して配置される配列要素について、その先頭の配列要素は、標準逆変換Ｓボックス８００に含まれる配列要素と同じ値を有し、その他の配列要素は、意味のない値「０ｘｆｆ」を有している。
【０１１２】
（ｄ−３）復号メインモジュール６０１
復号メインモジュール６０１は、図２１に示すように、命令コード群Ｓ２３１、Ｓ２３２、Ｓ２３３、Ｓ２３４、Ｓ２３５及びＳ２３６を含んで構成されており、これらの命令コード群は、復号メインモジュール６０１内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【０１１３】
命令コード群Ｓ２３１は、入力された暗号文ブロックと、暗号化鍵から生成された拡大鍵との演算であるAddRoundKey 処理を行うAddRoundKey 処理モジュール６０２を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ２３２は、カウンタを０に初期化することを示す複数の命令コードを含む。このカウンタは、復号メインモジュール６０１内において、繰返しを制御するためのものである。
【０１１４】
命令コード群Ｓ２３３は、後述するInvRound処理を行うInvRound処理モジュール６０３を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ２３４は、前記カウンタに「１」を加算することを示す複数の命令コードを含む。
命令コード群Ｓ２３５は、前記カウンタが所定の繰返し回数「Ｎｒ−１」であるか否かを判定し、繰返し回数「Ｎｒ−１」でない場合には、命令コード群Ｓ２３３へ移行し、繰返し回数「Ｎｒ−１」である場合には、次の命令コード群Ｓ２３６へ移行することを示す複数の命令コードを含む。
【０１１５】
ここで、繰返し回数「Ｎｒ」は、暗号化鍵及び復号化鍵のビット長に依存し、暗号化鍵及び復号化鍵のビット長が１２８ビットの場合、Ｎｒ＝１０であり、ビット長が１９２ビットの場合、Ｎｒ＝１２であり、ビット長が２５６ビットの場合、Ｎｒ＝１４であると定められている。
命令コード群Ｓ２３６は、後述するInvFinalRound 処理を行うInvFinalRound 処理モジュール６０４を呼び出すことを示す複数の命令コードを含む。
【０１１６】
（ｄ−４）InvRound処理モジュール６０３
InvRound処理モジュール６０３は、図２２に示すように、命令コード群Ｓ２４１、Ｓ２４２、Ｓ２４３及びＳ２４４を含んで構成されており、これらの命令コード群は、InvRound処理モジュール６０３内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【０１１７】
命令コード群Ｓ２４１は、InvShiftRows処理を行うInvShiftRows処理モジュール６０６を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ２４２は、１６回のテーブル参照演算から構成されるInvSubBytes処理を行うInvSubBytes処理モジュール６０５を呼び出すことを示す複数の命令コードを含む。
【０１１８】
命令コード群Ｓ２４３は、上述したAddRoundKey 処理を行うAddRoundKey 処理モジュール６０２を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ２４４は、InvMixColumns処理を行うInvMixColumns処理モジュール６０７を呼び出すことを示す複数の命令コードを含む。
（ｄ−５）InvSubBytes 処理モジュール６０５
本実施の形態のInvSubBytes 処理では、１２８ビットのブロックデータを受け取り、受け取った１２８ビットのブロックデータを１６個の８ビットの部分ブロックデータに分け（８ビット×１６＝１２８ビット）、各部分ブロックデータを３ビットだけ左へシフトする。こうして、１６個の部分ブロックデータのそれぞれについて、１１ビットのデータが生成される。次に、各１１ビットのデータに、逆変換変形Ｓボックス６１１の参照処理を施して、８ビットデータを出力する。
【０１１９】
このように、１６個の部分ブロックデータについて、左シフトと逆変換変形Ｓボックス６１１の参照処理とが施される。この結果、１６個の８ビットデータが生成される。生成された１６個の８ビットデータが連結されて１２８ビットのブロックデータが生成され出力される。
各部分ブロックデータを３ビットだけ左へシフトする理由については、上述した通りである。
【０１２０】
SubBytes処理モジュール５０５においては、変形Ｓボックス５１１の参照が行われるのに対して、InvSubBytes 処理モジュール６０５においては、逆変換変形Ｓボックス６１１の参照が行われる点において、InvSubBytes処理モジュール６０５とSubBytes処理モジュール５０５とは相違している。
InvSubBytes 処理モジュール６０５は、図２３に示すように、命令コード群Ｓ２５１、Ｓ２５２、Ｓ２５３、Ｓ２５４、Ｓ２５５、Ｓ２５６、・・・、Ｓ２５７及びＳ２５８を含んで構成されており、これらの命令コード群は、InvSubBytes処理モジュール６０５内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【０１２１】
命令コード群Ｓ２５１は、１６個の部分ブロックデータのうち、第１の部分ブロックデータを３ビットだけ左へシフトし、１１ビットのデータを生成することを示す複数の命令コードを含む。
命令コード群Ｓ２５２は、命令コード群Ｓ２５１により生成された１１ビットのデータを逆変換変形Ｓボックス６１１におけるアドレスとして、逆変換変形Ｓボックス６１１を参照し、前記１１ビットのデータをアドレスとする位置に格納されている８ビットのデータを逆変換変形Ｓボックス６１１から読み出し、読み出した８ビットのデータを出力することを示す複数の命令コードを含む。
【０１２２】
命令コード群Ｓ２５３、Ｓ２５５、・・・、Ｓ２５７は、それぞれ、命令コード群Ｓ２５１と同様の複数の命令コードを含む。命令コード群Ｓ２５３、Ｓ２５５、・・・、Ｓ２５７においては、１６個の部分ブロックデータのうち、それぞれ、第２の部分ブロックデータ、第３の部分ブロックデータ、・・・、第１６の部分ブロックデータをシフトの対象としている点において、命令コード群Ｓ２５１と相違している。
【０１２３】
命令コード群Ｓ２５４、Ｓ２５６、・・・、Ｓ２５８は、それぞれ、命令コード群Ｓ２５２と同様の複数の命令コードを含む。命令コード群Ｓ２５４、Ｓ２５６、・・・、Ｓ２５８においては、それぞれ命令コード群Ｓ２５３、Ｓ２５５、・・・、Ｓ２５７による出力結果を用いる点において、命令コード群Ｓ２５２と相違している。
（ｄ−６）InvFinalRound 処理モジュール６０４
InvFinalRound 処理モジュール６０４は、図２４に示すように、命令コード群Ｓ２６１、Ｓ２６２及びＳ２６３を含んで構成されており、これらの命令コード群は、InvFinalRound処理モジュール６０４内において、この順序で並べられている。各命令コード群は、１個又は複数個の命令コードを含んでいる。
【０１２４】
命令コード群Ｓ２６１は、InvShiftRows処理を行うInvShiftRows処理モジュール６０６を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ２６２は、InvSubBytes 処理を行うInvSubBytes処理モジュール６０５を呼び出すことを示す複数の命令コードを含む。
命令コード群Ｓ２６３は、AddRoundKey 処理を行うAddRoundKey 処理モジュール６０２を呼び出すことを示す複数の命令コードを含む。
【０１２５】
（ｄ−７）その他
AddRoundKey 処理モジュール６０２、InvShiftRows処理モジュール６０６、InvMixColumns 処理モジュール６０７及びKeySchedule処理モジュール６０８は、それぞれ、ＡＥＳに規定されているAddRoundKey 処理、InvShiftRows処理、InvMixColumns 処理及びKeySchedule処理を行う。これらの処理については、ＡＥＳに規定されている通りであるので、説明を省略する。
【０１２６】
（３）マイクロプロセッサ２０１
マイクロプロセッサ２０１は、マイクロプロセッサ１０１と同様に、演算部、キャッシュ部及びその他のユニットから構成されている。また、キャッシュ部は、データ部１７５及びその他のユニットから構成され、データ部は、２５６個のキャッシュライン部から構成され、各キャッシュライン部は、６４ビットのメモリ領域を備えている。
【０１２７】
マイクロプロセッサ２０１は、マイクロプロセッサ１０１と同様の構成を有しており、演算部、キャッシュ部及びその他のユニットについては、上述した通りである。
ここでは、データ部の各キャッシュライン部に、上述したInvSubBytes 処理により、逆変換変形Ｓボックス６１１の内容が格納された場合における一例を図２５にデータ部１７５ｂとして示す。
【０１２８】
データ部１７５ｂのキャッシュライン部１８１ｂ、１８２ｂ、１８３ｂ、１８４ｂ、・・・、１８６ｂ、１８７ｂには、逆変換変形Ｓボックス６１１の内容がそのまま格納されている。
つまり、キャッシュライン部１８１ｂには、配列要素８５１「ＩｎｖＳ［００］」、配列要素８６１「０ｘｆｆ」、配列要素８６２「０ｘｆｆ」、配列要素８６３「０ｘｆｆ」、配列要素８６４「０ｘｆｆ」、配列要素８６５「０ｘｆｆ」、配列要素８６６「０ｘｆｆ」及び配列要素８６７「０ｘｆｆ」が格納されている。また、他のキャッシュライン部においても、その先頭に逆変換標準Ｓボックス８００の配列要素が格納され、他の部分には、「０ｘｆｆ」が格納されている。
【０１２９】
例えば、キャッシュライン部１８２ｂ、１８３ｂ、１８４ｂ、・・・、１８６ｂ、１８７ｂの先頭には、それぞれ、逆変換標準Ｓボックス８００の配列要素である配列要素８５２「ＩｎｖＳ［０１］」、配列要素８５３「ＩｎｖＳ［０２］」、配列要素８５４「ＩｎｖＳ［０３］」、・・・、配列要素８５５「ＩｎｖＳ［ｆｃ］」、配列要素８５６「ＩｎｖＳ［ｆｄ］」、配列要素８５７「ＩｎｖＳ［ｆｅ］」及び配列要素８５８「ＩｎｖＳ［ｆｆ］」が格納されている。
【０１３０】
１．５  パーソナルコンピュータ２００の動作
パーソナルコンピュータ２００の動作について説明する。なお、マイクロプロセッサ２０１の動作は、マイクロプロセッサ１０１の動作と同じであるので、説明を省略する。
（１）ＡＥＳ復号プログラム２３４による復号の動作
ＡＥＳ復号プログラム２３４による復号の動作について、図２６に示すデータプロセスチャートを用いて説明する。ここでは、この図に示すように、１２８ビットの入力鍵Ｋ７０１を用いて、１２８ビットの暗号文データＣＴ７０３から、１２８ビットの復号文データＤＴ７０９が生成されるものとする。
【０１３１】
ＡＥＳ復号プログラム２３４による復号の動作は、この図に示すように、鍵スケジュールのステップ７０２と、AddRoundKey 処理のステップ７０４と、１０段のプロセス７０５、７０６、・・・、７０７、７０８とから構成される。
入力鍵Ｋ７０１に基づいて、KeySchedule 処理モジュール６０８により、１１個の拡大鍵ＳＫ0 、ＳＫ1 、ＳＫ2、・・・、ＳＫ9 、ＳＫ10が生成され（ステップ７０２）、生成された拡大鍵ＳＫ0 、ＳＫ1、ＳＫ2 、・・・、ＳＫ9 、ＳＫ10が各AddRoundKey処理へ配布される（ステップ７１１、７１２、７１３、・・・、７１４、７１５）。
【０１３２】
次に、AddRoundKey 処理モジュール６０２により拡大鍵ＳＫ0 を用いてAddRoundKey 処理が行われる（ステップ７０４）。
次に、第１段のプロセス７０５において、InvShiftRows 処理モジュール６０６により、InvShiftRows 処理が行われ（ステップ７２１）、InvSubBytes処理モジュール６０５により、InvSubBytes処理が行われ（ステップ７２２）、AddRoundKey処理モジュール６０２により拡大鍵ＳＫ1 を用いてAddRoundKey 処理が行われ（ステップ７２３）、InvMixColumns処理モジュール６０７により、InvMixColumns処理が行われる（ステップ７２４）。
【０１３３】
次に、第２段のプロセス７０６において、InvShiftRows 処理モジュール６０６により、InvShiftRows 処理が行われ（ステップ７３１）、InvSubBytes処理モジュール６０５により、InvSubBytes処理が行われ（ステップ７３２）、AddRoundKey処理モジュール６０２により拡大鍵ＳＫ2 を用いてAddRoundKey 処理が行われ（ステップ７３３）、InvMixColumns処理モジュール６０７により、InvMixColumns処理が行われる（ステップ７３４）。
【０１３４】
同様に、第３段から第８段までの各段のプロセスにおいて、InvShiftRows 処理、InvSubBytes処理、AddRoundKey 処理及びInvMixColumns処理が行われる。
次に、第９段のプロセス７０７において、InvShiftRows 処理モジュール６０６により、InvShiftRows 処理が行われ（ステップ７４１）、InvSubBytes処理モジュール６０５により、InvSubBytes処理が行われ（ステップ７４２）、AddRoundKey処理モジュール６０２により拡大鍵ＳＫ9 を用いてAddRoundKey 処理が行われ（ステップ７４３）、InvMixColumns処理モジュール６０７により、InvMixColumns処理が行われる（ステップ７４４）。
【０１３５】
最後に、第１０段のプロセス７０８において、InvShiftRows 処理モジュール６０６により、InvShiftRows 処理が行われ（ステップ７５１）、InvSubBytes処理モジュール６０５により、InvSubBytes処理が行われ（ステップ７５２）、AddRoundKey処理モジュール６０２により拡大鍵ＳＫ10を用いてAddRoundKey 処理が行われる（ステップ７５３）。
こうして、１２８ビットの復号データＤＴ７０９が生成される。
【０１３６】
（２）各InvRound 処理又はInvFinalRound処理におけるInvSubBytes処理及びAddRoundKey 処理の詳細の動作
次に、各InvRound 処理又はInvFinalRound処理におけるInvSubBytes処理及びAddRoundKey 処理の詳細の動作について、図２７に示すデータプロセスチャートを用いて説明する。
【０１３７】
各InvRound 処理又はInvFinalRound処理は、図２７に示すように、少なくとも、InvShiftRows処理７７１、InvSubBytes処理７７２及びAddRoundKey処理７７２を含む。
InvSubBytes処理７７２は、１６個のシフト処理７８１、７８２、７８３、・・・、７８４と、１６個の逆変換変形Ｓボックス６１１の参照処理７８５、７８６、７８８、・・・、７８９とを含む。
【０１３８】
また、AddRoundKey 処理７７３は、１６個の排他的論理和演算７９１、７９２、７９３、・・・、７９４を含む。
１２８ビットの拡大鍵７６１が、１６個の８ビットの部分鍵に分けられ、１６個の部分鍵が、それぞれ、AddRoundKey 処理７７３の１６個の排他的論理和演算７９１、７９２、７９３、・・・、７９４へ出力される（ステップ７６２、７６３、７６４、・・・、７６５）。
【０１３９】
各InvRound 処理又はInvFinalRound処理において、InvShiftRows処理７７１が終了した後に、InvShiftRows処理７７１から１２８ビットのブロックデータが出力され、前記ブロックデータが、１６個の８ビットの部分データに分けられ、１６個の部分データが、それぞれ、InvSubBytes処理７７２の１６個のシフト処理７８１、７８２、７８３、・・・、７８４へ出力される。
【０１４０】
シフト処理７８１は、第１の部分データ（８ビット）を受け取り、受け取った第１の部分データを、３ビットだけ左側へシフトして、１１ビットの第１のシフトデータを得る。ここで、得られた第１のシフトデータの上位の８ビットは、前記第１の部分データと同じデータであり、前記第１のシフトデータの下位の３ビットは、「０００」（２進数表現）である。次に、得られた第１のシフトデータを参照処理７８５へ出力する。
【０１４１】
参照処理７８５は、第１のシフトデータを受け取り、受け取った第１のシフトデータをアドレスとして、逆変換変形Ｓボックス６１１を参照して、８ビットの第１の配列要素を取得し、取得した第１の配列要素をAddRoundKey処理７７３の排他的論理和演算７９１へ出力する。
排他的論理和演算７９１は、第１の配列要素（８ビット）を受け取り、第１の部分鍵（８ビット）を受け取り、受け取った第１の配列要素と受け取った第１の部分鍵とに排他的論理和演算を施して、８ビットの第１の演算データを得る。
【０１４２】
同様に、シフト処理７８２は、第２の部分データ（８ビット）を、３ビットだけ左側へシフトして、１１ビットの第２のシフトデータを得、参照処理７８６は、受け取った第２のシフトデータをアドレスとして、逆変換変形Ｓボックス６１１を参照して、８ビットの第２の配列要素を取得し、排他的論理和演算７９２は、第２の配列要素と第２の部分鍵とに排他的論理和演算を施して、８ビットの第２の演算データを得る。
【０１４３】
同様に、シフト処理７８３は、第３の部分データ（８ビット）を、３ビットだけ左側へシフトして、１１ビットの第３のシフトデータを得、参照処理７８８は、受け取った第３のシフトデータをアドレスとして、逆変換変形Ｓボックス６１１を参照して、８ビットの第３の配列要素を取得し、排他的論理和演算７９３は、第３の配列要素と第３の部分鍵とに排他的論理和演算を施して、８ビットの第３の演算データを得る。
【０１４４】
同様に、第４から第１５の演算データが得られる。
さらに、同様に、シフト処理７８４は、第１６の部分データ（８ビット）を、３ビットだけ左側へシフトして、１１ビットの第１６のシフトデータを得、参照処理７８９は、受け取った第１６のシフトデータをアドレスとして、逆変換変形Ｓボックス６１１を参照して、８ビットの第１６の配列要素を取得し、排他的論理和演算７９４は、第１６の配列要素と第１６の部分鍵とに排他的論理和演算を施して、８ビットの第１６の演算データを得る。
【０１４５】
こうして、第１から第１６の演算データ（１６個の演算データ）が取得される。
次に、第１から第１６の演算データは、この順序で結合されて１２８ビットのデータが生成される。
２．変形例（１）
コンテンツサーバ装置１００のメモリ部１０３が記憶しているＡＥＳ暗号プログラム１３３の変形例について説明する。
【０１４６】
ＡＥＳ暗号プログラム１３３は、変形Ｓボックス５１１に代えて、図２８に示す変形Ｓボックス９１１を含むとしてもよい。また、このとき、ＡＥＳ暗号プログラム１３３は、SubBytes処理モジュール５０５に代えて、SubBytes処理モジュール５０５ａ（図示していない）を含む。SubBytes処理モジュール５０５ａは、３ビットの左シフトの処理に代えて、２ビットの左シフトの処理を含む。
【０１４７】
（変形Ｓボックス９１１）
変形Ｓボックス９１１は、図２８に示すように、１０２４個の配列要素９２１、９３１、９３２、９３３、９２２、９３４、９３５、９３６、９２３、・・・、９２４、・・・、９２５、・・・、９２６、・・・、９２７、・・・、９２８、・・・から構成されている。
【０１４８】
変形Ｓボックス９１１を構成する各配列要素は、図２８においては、表現の便宜上、１２８行×８列のマトリックス状に配置されている。
第１列の１２８個の配列要素９２１、９２３、・・・、９２５、９２７は、それぞれ、値Ｓ［００］、値Ｓ［０２］、値Ｓ［０４］、値Ｓ［０６］、・・・、値Ｓ［ｆ８］、値Ｓ［ｆａ］、値Ｓ［ｆｃ］、値Ｓ［ｆｅ］を有する。ここで、値Ｓ［００］、値Ｓ［０２］、値Ｓ［０４］、値Ｓ［０６］、・・・、値Ｓ［ｆ８］、値Ｓ［ｆａ］、値Ｓ［ｆｃ］、値Ｓ［ｆｅ］は、上述の標準Ｓボックス３８０に含まれるものと同じである。
【０１４９】
第２列の１２８個の配列要素は、それぞれ、値「０ｘｆｆ」を有する。ここで、「０ｘ」は、これに続く数字が１６進数による表現であることを示している。
第３列〜第４列に含まれる各配列要素も、値「０ｘｆｆ」を有する。
第５列の１２８個の配列要素９２２、９２４、・・・、９２６、９２８は、それぞれ、値Ｓ［０１］、値Ｓ［０３］、値Ｓ［０５］、値Ｓ［０７］、・・・、値Ｓ［ｆ９］、値Ｓ［ｆｂ］、値Ｓ［ｆｄ］、値Ｓ［ｆｆ］を有する。ここで、値Ｓ［０１］、値Ｓ［０３］、値Ｓ［０５］、値Ｓ［０７］、・・・、値Ｓ［ｆ９］、値Ｓ［ｆｂ］、値Ｓ［ｆｄ］、値Ｓ［ｆｆ］は、上述の標準Ｓボックス３８０に含まれるものと同じである。
【０１５０】
第６列の１２８個の配列要素は、それぞれ、値「０ｘｆｆ」を有する。
第７列〜第８列に含まれる各配列要素も、値「０ｘｆｆ」を有する。
このように、変形Ｓボックス９１１に含まれる複数の配列要素が、１２８行×８列のマトリックス状に配置されているとみなした場合に、変形Ｓボックス９１１において、第１列の１２８個の各配列要素に、標準Ｓボックス３８０に含まれる偶数の配列番号を有する各配列要素が配され、第５列の１２８個の各配列要素に、標準Ｓボックス３８０に含まれる奇数の配列番号を有する各配列要素が配され、第２〜第４列及び第６〜第８列の各配列要素に値「０ｘｆｆ」が配されている。
【０１５１】
こうして、変形Ｓボックス９１１では、４個の連続して配置される配列要素について、その先頭の配列要素は、標準Ｓボックス３８０に含まれる配列要素と同じ値を有し、その他の配列要素は、意味のない値「０ｘｆｆ」を有している。
（SubBytes処理モジュール５０５ａ）
SubBytes処理モジュール５０５ａによるSubBytes処理では、１２８ビットのブロックデータを受け取り、受け取った１２８ビットのブロックデータを１６個の８ビットの部分ブロックデータに分け（８ビット×１６＝１２８ビット）、図２９に示すように、各部分ブロックデータを２ビットだけ左へシフトする（ステップ９０２）。こうして、１６個の部分ブロックデータのそれぞれについて、１０ビットのデータが生成される。次に、生成された各１０ビットのデータに、変形Ｓボックス９１１の参照処理を施して、８ビットデータを出力する（ステップ９０３）。
【０１５２】
なお、上述したように、SubBytes処理モジュール５０５ａによるSubBytes処理において、１６個の２ビットの左シフト処理と、１６個の変形Ｓボックス９１１の参照処理とが行われるが、表示を簡便にするために、図２９においては、これらの１６個の左シフト処理及び１６個の参照処理のうち、１個の左シフト処理９０２及び１の参照処理９０３からなる組９０１のみを示している。
【０１５３】
このように、１６個の部分ブロックデータについて、２ビットの左シフトと変形Ｓボックス９１１の参照処理とが施される。この結果、１６個の８ビットデータが生成される。生成された１６個の８ビットデータが連結されて１２８ビットのブロックデータが生成され出力される。
上記のように、各部分ブロックデータを２ビットだけ左へシフトするのは、次の理由による。
【０１５４】
２ビットだけ左へシフトすることにより、各部分ブロックデータが４倍される。変形Ｓボックス９１１においては、連続して配置されている４個の配列要素のうち、先頭の１個については、有効な配列要素Ｓ［ｘｘ］が配置されているので、各部分ブロックデータを４倍して得られたデータをアドレスとして、変形Ｓボックス９１１を参照することにより、有効な配列要素Ｓ［ｘｘ］のみが得られるのである。
【０１５５】
なお、SubBytes処理モジュール５０５ａは、上述した理由により、２ビットの左シフトの処理に代えて、４倍の乗算を行う乗算処理を含むとしてもよい。
（データ部の一例）
データ部１７５のキャッシュライン部１８１、１８２、・・・に、上述したSubBytes 処理により、変形Ｓボックス９１１の内容が格納された場合における一例を図３０にデータ部１７５ｃとして示す。
【０１５６】
図３０によると、データ部１７５ｃの先頭から１２８個のキャッシュライン部１８１ｃ、１８２ｃ、１８３ｃ、１８４ｃ、・・・には、変形Ｓボックス９１１の内容がそのまま格納されている。
つまり、キャッシュライン部１８１ｃには、配列要素９４１「Ｓ［００］」、配列要素９５１「０ｘｆｆ」、配列要素９５２「０ｘｆｆ」、配列要素９５３「０ｘｆｆ」、配列要素９４２「Ｓ［０１］」、配列要素９５４「０ｘｆｆ」、配列要素９５５「０ｘｆｆ」及び配列要素９５６「０ｘｆｆ」が格納されている。また、他のキャッシュライン部においても、その第１番目及び第５番目に標準Ｓボックス３８０の配列要素が格納され、他の部分には、「０ｘｆｆ」が格納されている。
【０１５７】
また、１２７個のキャッシュライン部１８２ｃ、１８３ｃ、１８４ｃ、・・・の先頭の配列要素には、それぞれ、標準Ｓボックス３８０の配列要素である配列要素９４３「Ｓ［０２］」、・・・、配列要素９４５「Ｓ［ｆｃ］」及び配列要素９４７「Ｓ［ｆｅ］」が格納されている。
また、１２７個のキャッシュライン部１８２ｃ、１８３ｃ、１８４ｃ、・・・の第５番目の配列要素には、それぞれ、標準Ｓボックス３８０の配列要素である配列要素９４４「Ｓ［０３］」、・・・、配列要素９４６「Ｓ［ｆｄ］」及び配列要素９４８「Ｓ［ｆｆ］」が格納されている。
【０１５８】
このように、データ部１７５ｃの各キャッシュライン部には、わずか２個の標準Ｓボックス３８０の配列要素のみが格納されている。
（ＡＥＳ復号プログラム２３４における適用）
パーソナルコンピュータ２００のメモリ部２０３が記憶しているＡＥＳ復号プログラム２３４において、上記と同様にしてもよい。
【０１５９】
つまり、ＡＥＳ復号プログラム２３４は、逆変換変形Ｓボックス６１１に代えて、図２８に示す変形Ｓボックス９１１と同様に構成した逆変換変形Ｓボックスを含むとしてもよい。また、このとき、ＡＥＳ復号プログラム２３４のInvSubBytes処理モジュール６０５は、SubBytes処理モジュール５０５ａと同様に、３ビットの左シフトの処理に代えて、２ビットの左シフトの処理を含む。
【０１６０】
３．変形例（２）
コンテンツサーバ装置１００のメモリ部１０３が記憶しているＡＥＳ暗号プログラム１３３の別の変形例について説明する。
ＡＥＳ暗号プログラム１３３は、変形Ｓボックス５１１に代えて、図３１に示す変形Ｓボックス１０１１を含むとしてもよい。また、このとき、ＡＥＳ暗号プログラム１３３は、SubBytes処理モジュール５０５に代えて、SubBytes処理モジュール５０５ｂ（図示していない）を含む。SubBytes処理モジュール５０５ｂは、３ビットの左シフトの処理に代えて、１ビットの左シフトの処理と、ｍｏｄ  ５１２における値「１」の加算の処理とを含む。
【０１６１】
（変形Ｓボックス１０１１）
変形Ｓボックス１０１１は、図３１に示すように、５１２個の配列要素１０４１、１０３１、１０４２、１０３２、１０４３、１０３３、１０４４、１０３４、・・・、１０３５、・・・、１０３６、・・・、１０３７、・・・、１０３８、・・・から構成されている。
【０１６２】
変形Ｓボックス１０１１を構成する各配列要素は、図３１においては、表現の便宜上、６４行×８列のマトリックス状に配置されている。
第２列の６４個の配列要素１０３１、・・・、１０３５は、それぞれ、値Ｓ［００］、値Ｓ［０４］、値Ｓ［０８］、値Ｓ［１２］、・・・、値Ｓ［ｆ０］、値Ｓ［ｆ４］、値Ｓ［ｆ８］、値Ｓ［ｆｃ］を有する。ここで、値Ｓ［００］、値Ｓ［０４」、値Ｓ［０８］、値Ｓ［１２］、・・・、値Ｓ［ｆ０］、値Ｓ［ｆ４］、値Ｓ［ｆ８］、値Ｓ［ｆｃ］は、上述の標準Ｓボックス３８０に含まれるものと同じである。
【０１６３】
また、第４列の６４個の配列要素１０３２、・・・、１０３６は、それぞれ、値Ｓ［０１］、値Ｓ［０５］、値Ｓ［０９］、値Ｓ［１３］、・・・、値Ｓ［ｆ１］、値Ｓ［ｆ５］、値Ｓ［ｆ９］、値Ｓ［ｆｄ］を有する。ここで、値Ｓ［０１］、値Ｓ［０５］、値Ｓ［０９］、値Ｓ［１３］、・・・、値Ｓ［ｆ１］、値Ｓ［ｆ５］、値Ｓ［ｆ９］、値Ｓ［ｆｄ］は、上述の標準Ｓボックス３８０に含まれるものと同じである。
【０１６４】
また、第６列の６４個の配列要素１０３３、・・・、１０３７は、それぞれ、値Ｓ［０２］、値Ｓ［０６］、値Ｓ［１０］、値Ｓ［１４］、・・・、値Ｓ［ｆ２］、値Ｓ［ｆ６］、値Ｓ［ｆａ］、値Ｓ［ｆｅ］を有する。ここで、値Ｓ［０２］、値Ｓ［０６］、値Ｓ［１０］、値Ｓ［１４］、・・・、値Ｓ［ｆ２］、値Ｓ［ｆ６］、値Ｓ［ｆａ］、値Ｓ［ｆｅ］は、上述の標準Ｓボックス３８０に含まれるものと同じである。
【０１６５】
また、第８列の６４個の配列要素１０３４、・・・、１０３８は、それぞれ、値Ｓ［０３］、値Ｓ［０７］、値Ｓ［１１］、値Ｓ［１５］、・・・、値Ｓ［ｆ３］、値Ｓ［ｆ７］、値Ｓ［ｆｂ］、値Ｓ［ｆｆ］を有する。ここで、値Ｓ［０３］、値Ｓ［０７］、値Ｓ［１１］、値Ｓ［１５］、・・・、値Ｓ［ｆ３］、値Ｓ［ｆ７］、値Ｓ［ｆｂ］、値Ｓ［ｆｆ］は、上述の標準Ｓボックス３８０に含まれるものと同じである。
【０１６６】
第１列の６４個の配列要素は、それぞれ、値「０ｘｆｆ」を有する。ここで、「０ｘ」は、これに続く数字が１６進数による表現であることを示している。
第３列、第５列及び第７列に含まれる各配列要素も、値「０ｘｆｆ」を有する。
このように、変形Ｓボックス１０１１では、２個の連続して配置される配列要素について、その先頭の配列要素は、意味のない値「０ｘｆｆ」を有し、その他の配列要素は、標準Ｓボックス３８０に含まれる配列要素と同じ値を有している。
【０１６７】
（SubBytes処理モジュール５０５ｂ）
SubBytes処理モジュール５０５ｂによるSubBytes処理では、１２８ビットのブロックデータを受け取り、受け取った１２８ビットのブロックデータを１６個の８ビットの部分ブロックデータに分け（８ビット×１６＝１２８ビット）、図３２に示すように、各部分ブロックデータを１ビットだけ左へシフトする（ステップ１００２）。こうして、１６個の部分ブロックデータのそれぞれについて、９ビットのデータが生成される。次に、生成された各９ビットのデータと値「１」とにｍｏｄ  ５１２における加算を施して９ビットの加算データを得る（ステップ１００３）。
【０１６８】
つまり、（加算データ）＝（９ビットのデータ）＋  １  ｍｏｄ  ５１２
次に、生成された各９ビットの加算データに、変形Ｓボックス１０１１の参照処理を施して、８ビットデータを出力する（ステップ１００４）。
なお、上述したように、SubBytes処理モジュール５０５ｂによるSubBytes処理において、１６個の１ビットの左シフト処理と、１６個のｍｏｄ  ５１２における値「１」との加算処理と、１６個の変形Ｓボックス１０１１の参照処理とが行われるが、表示を簡便にするために、図３２においては、これらの１６個の左シフト処理、１６個の加算処理及び１６個の参照処理のうち、１個の左シフト処理１００２、１個の加算処理１００３及び１の参照処理１００４からなる組１００１のみを示している。
【０１６９】
このように、１６個の部分ブロックデータについて、１ビットの左シフトと、ｍｏｄ  ５１２の加算と、変形Ｓボックス１０１１の参照処理とが施される。この結果、１６個の８ビットデータが生成される。生成された１６個の８ビットデータが連結されて１２８ビットのブロックデータが生成され出力される。
上記のように、各部分ブロックデータを１ビットだけ左へシフトし、さらに、ｍｏｄ  ５１２における値「１」の加算をするのは、次の理由による。
【０１７０】
１ビットだけ左へシフトし、さらに、ｍｏｄ  ５１２の「１」加算することにより、各部分ブロックデータが２倍され、「１」が加算される。変形Ｓボックス１０１１においては、連続して配置されている２個の配列要素のうち、後の１個については、有効な配列要素Ｓ［ｘｘ］が配置されているので、各部分ブロックデータを２倍し、さらに「１」を加算して得られたデータをアドレスとして、変形Ｓボックス１０１１を参照することにより、有効な配列要素Ｓ［ｘｘ］のみが得られるのである。
【０１７１】
なお、SubBytes処理モジュール５０５ｂは、上述した理由により、１ビットの左シフトの処理に代えて、２倍の乗算を行う乗算処理を含むとしてもよい。
このように、変形Ｓボックスにおいて、連続して配置されている２個の配列要素のうち、２番目の配列要素について、有効な配列要素Ｓ［ｘｘ］が配置されているとするなら、上述したように、各部分ブロックデータを２倍し、さらに「１」を加算して得られたデータをアドレスとして、前記別の変形Ｓボックスを参照することにより、有効な配列要素Ｓ［ｘｘ］のみが得られる。
【０１７２】
また、別の変形Ｓボックスにおいて、連続して配置されている８個の配列要素のうち、３番目の配列要素について、有効な配列要素Ｓ［ｘｘ］が配置されているとするなら、上述したように、各部分ブロックデータを８倍し、さらに「２」を加算して得られたデータをアドレスとして、前記別の変形Ｓボックスを参照することにより、有効な配列要素Ｓ［ｘｘ］のみが得られる。
【０１７３】
また、別の変形Ｓボックスにおいて、連続して配置されている８個の配列要素のうち、４番目の配列要素について、有効な配列要素Ｓ［ｘｘ］が配置されているとするなら、上述したように、各部分ブロックデータを８倍し、さらに「３」を加算して得られたデータをアドレスとして、前記別の変形Ｓボックスを参照することにより、有効な配列要素Ｓ［ｘｘ］のみが得られる。
（データ部の一例）
データ部１７５のキャッシュライン部１８１、１８２、・・・に、上述したSubBytes 処理により、変形Ｓボックス１０１１の内容が格納された場合における一例を図３３にデータ部１７５ｄとして示す。
【０１７４】
データ部１７５ｄの先頭から６４個のキャッシュライン部１８１ｄ、１８２ｄ、１８３ｄ、１８４ｄ、・・・には、変形Ｓボックス１０１１の内容がそのまま格納されている。
つまり、キャッシュライン部１８１ｄには、配列要素１０６１「０ｘｆｆ」、配列要素１０５１「Ｓ［００］」、配列要素１０６２「０ｘｆｆ」、配列要素１０５２「Ｓ［０１］」、配列要素１０６３「０ｘｆｆ」、配列要素１０５３「Ｓ［０２］」、配列要素１０６４「０ｘｆｆ」及び配列要素１０５４「Ｓ［０３］」が格納されている。また、他のキャッシュライン部においても、その第２番目、第４番目、第６番目及び第８番目の配列要素には、標準Ｓボックス３８０の配列要素が格納され、他の配列要素には、「０ｘｆｆ」が格納されている。
【０１７５】
また、６３個のキャッシュライン部１８２ｄ、１８３ｄ、１８４ｄ、・・・の第２番目の配列要素には、それぞれ、標準Ｓボックス３８０の配列要素である配列要素「Ｓ［０４］」、「Ｓ［０８］」、「Ｓ［１２］」、・・・、「Ｓ［ｆ０］」、「Ｓ［ｆ４］」、「Ｓ［ｆ８］」及び「Ｓ［ｆｃ］」が格納されている。
また、６３個のキャッシュライン部１８２ｄ、１８３ｄ、１８４ｄ、・・・の第４番目の配列には、それぞれ、標準Ｓボックス３８０の配列要素である配列要素「Ｓ［０５］」、「Ｓ［０９］」、「Ｓ［１３］」、・・・、「Ｓ［ｆ１］」、「Ｓ［ｆ５］」、「Ｓ［ｆ９］」及び「Ｓ［ｆｄ］」が格納されている。
【０１７６】
また、６３個のキャッシュライン部１８２ｄ、１８３ｄ、１８４ｄ、・・・の第６番目の配列には、それぞれ、標準Ｓボックス３８０の配列要素である配列要素「Ｓ［０６］」、「Ｓ［１０］」、「Ｓ［１４］」、・・・、「Ｓ［ｆ２］」、「Ｓ［ｆ６］」、「Ｓ［ｆａ］」及び「Ｓ［ｆｅ］」が格納されている。
また、６３個のキャッシュライン部１８２ｄ、１８３ｄ、１８４ｄ、・・・の第８番目の配列には、それぞれ、標準Ｓボックス３８０の配列要素である配列要素、「Ｓ［０７］」、「Ｓ［１１］」、「Ｓ［１５］」、・・・、「Ｓ［ｆ３］」、「Ｓ［ｆ７］」、「Ｓ［ｆｂ］」及び「Ｓ［ｆｆ］」が格納されている。
【０１７７】
このように、データ部１７５ｄの各キャッシュライン部には、わずか４個の標準Ｓボックス３８０の配列要素のみが格納されている。
（ＡＥＳ復号プログラム２３４における適用）
パーソナルコンピュータ２００のメモリ部２０３が記憶しているＡＥＳ復号プログラム２３４において、上記と同様にしてもよい。
【０１７８】
つまり、ＡＥＳ復号プログラム２３４は、逆変換変形Ｓボックス６１１に代えて、図３１に示す変形Ｓボックス１０１１と同様に構成した逆変換変形Ｓボックスを含むとしてもよい。また、このとき、ＡＥＳ復号プログラム２３４のInvSubBytes処理モジュール６０５は、SubBytes処理モジュール５０５ｂと同様に、３ビットの左シフトの処理に代えて、１ビットの左シフトの処理と、ｍｏｄ  ５１２における値「１」の加算の処理とを含む。
【０１７９】
４．変形例（３）
コンテンツサーバ装置１００のメモリ部１０３が記憶しているＡＥＳ暗号プログラム１３３の別の変形例について説明する。
ＡＥＳ暗号プログラム１３３は、変形Ｓボックス５１１に代えて、図３４に示す変形Ｓボックス１１２１を含むとしてもよい。また、このとき、ＡＥＳ暗号プログラム１３３は、SubBytes処理モジュール５０５に代えて、SubBytes処理モジュール５０５ｃ（図示していない）を含む。SubBytes処理モジュール５０５ｃは、３ビットの左シフトの処理に代えて、ｍｏｄ  ２５６における乗算の処理を含む。
【０１８０】
（変形Ｓボックス１１２１）
変形Ｓボックス１１２１は、図３４に示すように、２５６個の配列要素１１３１、１１３２、１１３３、１１３４、１１３５、１１３６、１１３７、１１３８、１１３９、１１４０、１１４１、１１４２、１１４３、１１４４、１１４５、１１４６、・・・から構成されている。これらの配列要素は、配列番号「０」、「１」、「２」、「３」、・・・、「２５５」により識別されるものとする。
【０１８１】
変形Ｓボックス１１２１を構成する各配列要素は、図３４においては、表現の便宜上、３２行×８列のマトリックス状に配置されている。
第１行の８個の配列要素１１３１、・・・、１１３８は、それぞれ、値Ｓ［０］、値Ｓ［８１］、値Ｓ［１６２］、値Ｓ［２４３］、値Ｓ［６８］、値Ｓ［１４９］、値Ｓ［２３０］、値Ｓ［５５］を有する。ここで、値Ｓ［０］、値Ｓ［８１］、値Ｓ［１６２］、値Ｓ［２４３］、値Ｓ［６８］、値Ｓ［１４９］、値Ｓ［２３０］、値Ｓ［５５］は、上述の標準Ｓボックス３８０に含まれるものと同じである。なお、ここでは、Ｓ［ｘｘ］において、ｘｘは、１０進数による表示である。
【０１８２】
また、第２行の８個の配列要素１１３９、・・・、１１４６は、それぞれ、値Ｓ［１３６］、値Ｓ［２１７］、値Ｓ［４２］、値Ｓ［１２３］、値Ｓ［２０４］、値Ｓ［２９］、値Ｓ［１１０］、値Ｓ［１９１］を有する。ここで、値Ｓ［１３６］、値Ｓ［２１７］、値Ｓ［４２］、値Ｓ［１２３］、値Ｓ［２０４］、値Ｓ［２９］、値Ｓ［１１０］、値Ｓ［１９１］は、上述の標準Ｓボックス３８０に含まれるものと同じである。ここでも、Ｓ［ｘｘ］において、ｘｘは、１０進数による表示である。
【０１８３】
第３行から第３２行の各配列要素も、上述の標準Ｓボックス３８０に含まれる配列要素と同じものである。ただし、図３４の変形Ｓボックス１１２１においては、第３行から第３２行の各配列要素の表示を省略している。
（変形Ｓボックス１１２１の配列規則）
変形Ｓボックス１１２１には、次に説明する規則に従って、上述の標準Ｓボックス３８０に格納されている各配列要素が格納されている。
【０１８４】
整数である２５６個の入力値Ａ（０、１、２、・・・、２５５）のそれぞれに対して、Ａ×１７７  ｍｏｄ  ２５６を計算する。各入力値Ａと対応する計算結果とを、図３５に示す対応表１１２２に示す。
対応表１１２２は、２５６個の入力値Ａと、Ａ×１７７  ｍｏｄ  ２５６による計算結果とを対応付けて表示するものである。ただし、図３５に示す対応表１１２２においては、紙面の都合上の理由により、全てのＡの値に対応する計算結果を表示している訳ではなく、その一部分のみを表示し、その他については、表示を省略している。
【０１８５】
ここで、例えば、入力値Ａ＝０に対するＡ×１７７  ｍｏｄ  ２５６の計算結果は、「０」であり、入力値Ａ＝８１に対する計算結果は、「１」であり、入力値Ａ＝１６２に対する計算結果は、「２」であり、入力値Ａ＝２４３に対する計算結果は、「３」であり、入力値Ａ＝６８に対する計算結果は、「４」である。
一例として、変形Ｓボックス１１２１の配列番号「０」により示される配列要素１１３１に格納する標準Ｓボックス３８０の配列要素を次のようにして決定する。配列番号「０」と同じ値を有する計算結果「０」を対応表１１２２から探し、計算結果に対応する入力値Ａ「０」を取得する。次に、取得した入力値Ａ「０」を配列番号とする配列要素Ｓ［０］を、変形Ｓボックス１１２１の配列番号「０」により示される配列要素１１３１の値とする。
【０１８６】
また、別の一例として、変形Ｓボックス１１２１の配列番号「１」により示される配列要素１１３２に格納する標準Ｓボックス３８０の配列要素を次のようにして決定する。配列番号「１」と同じ値を有する計算結果「１」を対応表１１２２から探し、計算結果に対応する入力値Ａ「８１」を取得する。次に、取得した入力値Ａ「８１」を配列番号とする配列要素Ｓ［８１］を、変形Ｓボックス１１２１の配列番号「１」により示される配列要素１１３２の値とする。
【０１８７】
さらに、別の一例として、変形Ｓボックス１１２１の配列番号「２」により示される配列要素１１３３に格納する標準Ｓボックス３８０の配列要素を次のようにして決定する。配列番号「２」と同じ値を有する計算結果「２」を対応表１１２２から探し、計算結果に対応する入力値Ａ「１６２」を取得する。次に、取得した入力値Ａ「１６２」を配列番号とする配列要素Ｓ［１６２］を、変形Ｓボックス１１２１の配列番号「２」により示される配列要素１１３３の値とする。
【０１８８】
以下は同様である。
このように、変形Ｓボックス１１２１では、上述した規則により、標準Ｓボックス３８０に含まれる配列要素が配置されている。
なお、上記において、入力値Ａに対する計算結果Ａ×１７７  ｍｏｄ  ２５６を用いるとしており、入力値Ａに、「１７７」を乗じているが、「１７７」には限定されない。他の奇数の値を乗じるとしてもよい。
【０１８９】
また、ｍｏｄ  ２５６において乗算を行うとしているが、ここで、値「２５６」は、変換対象となるデータが取り得る長さ（例えば、ビット長）、言い換えれば、変換対象となるデータが取り得る値の種類の数に依存する。上記の実施の形態及び変形例では、変換対象となるデータは、８ビットであるので、そのデータの取り得る値の種類の数は、２５６である。上述したように、ｍｏｄ  ２５６において乗算を行うことにより、この乗算により得られる乗算値の取り得る値の種類の数は、変換対象となるデータと同じ２５６となる。
【０１９０】
（SubBytes処理モジュール５０５ｃ）
SubBytes処理モジュール５０５ｃによるSubBytes処理では、１２８ビットのブロックデータを受け取り、受け取った１２８ビットのブロックデータを１６個の８ビットの部分ブロックデータに分け（８ビット×１６＝１２８ビット）、図３６に示すように、ｍｏｄ  ２５６において、各部分ブロックデータに値「１７７」を乗ずる（ステップ１１０２）。こうして、１６個の部分ブロックデータのそれぞれについて、８ビットの乗算値が生成される。次に、生成された各８ビットの乗算値に、変形Ｓボックス１１２１の参照処理を施して、８ビットデータを出力する（ステップ１１０３）。
【０１９１】
なお、上述したように、SubBytes処理モジュール５０５ｃによるSubBytes処理において、１６個のｍｏｄ  ２５６における乗算処理と、１６個の変形Ｓボックス１１２１の参照処理とが行われるが、表示を簡便にするために、図３６においては、これらの１６個の乗算処理及び１６個の参照処理のうち、１個の乗算処理１１０２及び１個の参照処理１１０３からなる組１１０１のみを示している。
【０１９２】
このように、１６個の部分ブロックデータについて、ｍｏｄ  ２５６の乗算と、変形Ｓボックス１１２１の参照処理とが施される。この結果、１６個の８ビットデータが生成される。生成された１６個の８ビットデータが連結されて１２８ビットのブロックデータが生成され出力される。
上記のように、ｍｏｄ  ２５６において、各部分ブロックデータに、値「１７７」を乗じるのは、次の理由による。
【０１９３】
一例として、部分ブロックデータが「８１」であるとする。このとき、上記の乗算により、
８１  ×  １７７  ｍｏｄ  ２５６  ＝  １  が得られる。
次に、得られた「１」を配列番号として変形Ｓボックス１１２１を参照すると、配列要素Ｓ［８１］が得られる。
【０１９４】
また、一例として、部分ブロックデータが「１６２」であるとする。このとき、上記の乗算により、
１６２  ×  １７７  ｍｏｄ  ２５６  ＝  ２  が得られる。
次に、得られた「２」を配列番号として変形Ｓボックス１１２１を参照すると、配列要素Ｓ［１６２］が得られる。
【０１９５】
このように、各部分ブロックデータに、ｍｏｄ  ２５６において、値「１７７」を乗じ、得られた乗算値をアドレスとして、変形Ｓボックス１１２１を参照することにより、各部分ブロックデータに適切に対応する有効な配列要素Ｓ［ｘｘ］が得られるのである。
（データ部の一例）
データ部１７５のキャッシュライン部１８１、１８２、・・・に、上述したSubBytes 処理により、変形Ｓボックス１１２１の内容が格納された場合における一例を図３７にデータ部１７５ｅとして示す。
【０１９６】
データ部１７５ｅの先頭から３２個のキャッシュライン部１８１ｅ、１８２ｅ、・・・には、変形Ｓボックス１１２１の内容がそのまま格納されている。
つまり、キャッシュライン部１８１ｅには、配列要素１１５１「Ｓ［０］」、配列要素１１５２「Ｓ［８１］」、配列要素１１５３「Ｓ［１６２］」、配列要素１１５４「Ｓ［２４３］」、配列要素１１５５「Ｓ［６８］」、配列要素１１５６「Ｓ［１４９］」、配列要素１１５７「Ｓ［２３０］」及び配列要素１１５８「Ｓ［５５］」が格納されている。
【０１９７】
また、キャッシュライン部１８２ｅには、配列要素１１５９「Ｓ［１３６］」、配列要素１１６０「Ｓ［２１７］」、配列要素１１６１「Ｓ［４２］」、配列要素１１６２「Ｓ［１２３］」、配列要素１１６３「Ｓ［２０４］」、配列要素１１６４「Ｓ［２９］」、配列要素１１６５「Ｓ［１１０］」及び配列要素１１６６「Ｓ［１９１］」が格納されている。
【０１９８】
また、他のキャッシュライン部においても、上記と同様に、変形Ｓボックス１１２１の１行の８個の配列要素が、格納されている。
（ＡＥＳ復号プログラム２３４における適用）
パーソナルコンピュータ２００のメモリ部２０３が記憶しているＡＥＳ復号プログラム２３４において、上記と同様にしてもよい。
【０１９９】
つまり、ＡＥＳ復号プログラム２３４は、逆変換変形Ｓボックス６１１に代えて、図３４に示す変形Ｓボックス１１２１と同様に構成した逆変換変形Ｓボックスを含むとしてもよい。また、このとき、ＡＥＳ復号プログラム２３４のInvSubBytes処理モジュール６０５は、SubBytes処理モジュール５０５ｃと同様に、３ビットの左シフトの処理に代えて、ｍｏｄ  ５１２における値「１７７」の乗算の処理を含む。
【０２００】
５．変形例（４）
コンテンツサーバ装置１００のメモリ部１０３が記憶しているＡＥＳ暗号プログラム１３３の別の変形例について説明する。
ＡＥＳ暗号プログラム１３３は、変形Ｓボックス５１１に代えて、図３８に示す変形Ｓボックス１２２１を含むとしてもよい。また、このとき、ＡＥＳ暗号プログラム１３３は、SubBytes処理モジュール５０５に代えて、SubBytes処理モジュール５０５ｄ（図示していない）を含む。SubBytes処理モジュール５０５ｄは、３ビットの左シフトの処理に代えて、ｍｏｄ  ２５６における乗算の処理と１ビットの左シフトの処理とを含む。
【０２０１】
（変形Ｓボックス１２２１）
変形Ｓボックス１２２１は、図３８に示すように、５１２個の配列要素１２３１、１２４１、１２３２、１２４２、１２３３、１２４３、１２３４、１２４４、１２３５、・・・、１２３６、・・・、１２３７、・・・、１２３８、・・・から構成されている。
変形Ｓボックス１２２１を構成する各配列要素は、図３８においては、表現の便宜上、６４行×８列のマトリックス状に配置されている。
【０２０２】
変形Ｓボックス１２２１においては、図３４に示す変形Ｓボックス１１２１に格納されている各配列要素Ｓ［ｘｘ］が、変形Ｓボックス１１２１における配置の順序を保ちながら、１つ置きに格納されている。また、これらの配列要素の間には、「０ｘｆｆ」が格納されている。
例えば、変形Ｓボックス１２２１の第１行の８個の配列要素１２３１、１２４１、１２３２、１２４２、１２３３、１２４３、１２３４、１２４４は、それぞれ、値Ｓ［０］、「０ｘｆｆ」、値Ｓ［８１］、「０ｘｆｆ」、値Ｓ［１６２］、「０ｘｆｆ」、値Ｓ［２４３］、「０ｘｆｆ」を有する。ここで、値Ｓ［０］、値Ｓ［８１］、値Ｓ［１６２］、値Ｓ［２４３］は、図３４に示す変形Ｓボックス１１２１の第１行の先頭の４個の配列要素と同じものである。
【０２０３】
また、変形Ｓボックス１２２１の第２行の８個の配列要素１２３５、・・・、１２３６、・・・、１２３７、・・・、１２３８、・・・は、それぞれ、値Ｓ［６８］、「０ｘｆｆ」、値Ｓ［１４９］、「０ｘｆｆ」、値Ｓ［２３０］、「０ｘｆｆ」、値Ｓ［５５］、「０ｘｆｆ」を有する。ここで、値Ｓ［６８］、値Ｓ［１４９］、値Ｓ［２３０］、値Ｓ［５５］は、図３４に示す変形Ｓボックス１１２１の第１行の後半の４個の配列要素と同じものである。
【０２０４】
なお、ここでは、Ｓ［ｘｘ］において、ｘｘは、１０進数による表示である。
（SubBytes処理モジュール５０５ｄ）
SubBytes処理モジュール５０５ｄによるSubBytes処理では、１２８ビットのブロックデータを受け取り、受け取った１２８ビットのブロックデータを１６個の８ビットの部分ブロックデータに分け（８ビット×１６＝１２８ビット）、図３９に示すように、ｍｏｄ  ２５６において、各部分ブロックデータに値「１７７」を乗ずる（ステップ１２０２）。こうして、１６個の部分ブロックデータのそれぞれについて、８ビットの乗算値が生成される。次に、生成された乗算値を１ビットだけ左へシフトして９ビットのシフトデータを生成する（ステップ１２０３）。こうして、１６個の乗算値のそれぞれについて、９ビットのシフトデータが生成される。次に、生成された各９ビットのシフトデータに、変形Ｓボックス１２２１の参照処理を施して、８ビットデータを出力する（ステップ１２０４）。
【０２０５】
なお、上述したように、SubBytes処理モジュール５０５ｄによるSubBytes処理において、１６個のｍｏｄ  ２５６における乗算処理と、１６個の左シフト処理と、１６個の変形Ｓボックス１２２１の参照処理とが行われるが、表示を簡便にするために、図３９においては、これらの１６個の乗算処理、１６個のシフト処理及び１６個の参照処理のうち、１個の乗算処理１２０２、１個のシフト処理１２０３及び１個の参照処理１２０４からなる組１２０１のみを示している。
【０２０６】
このように、１６個の部分ブロックデータについて、ｍｏｄ  ２５６の乗算と、１ビットの左シフト処理と、変形Ｓボックス１２２１の参照処理とが施される。この結果、１６個の８ビットデータが生成される。生成された１６個の８ビットデータが連結されて１２８ビットのブロックデータが生成され出力される。
上記のように、ｍｏｄ  ２５６において、各部分ブロックデータに、値「１７７」を乗じるのは、変形例（４）において説明した通りである。また、１ビットの左シフト処理を行うのは、変形例（２）において説明した通りである。
【０２０７】
このように、各部分ブロックデータに、ｍｏｄ  ２５６において、値「１７７」を乗じ、さらに、得られた乗算値に１ビットの左シフト処理を施して、シフトデータを得、得られたシフトデータをアドレスとして、変形Ｓボックス１２２１を参照することにより、各部分ブロックデータに適切に対応する有効な配列要素Ｓ［ｘｘ］が得られるのである。
なお、SubBytes処理モジュール５０５ｄは、１ビットの左シフトの処理に代えて、２倍の乗算を行う乗算処理を含むとしてもよい。
（データ部の一例）
データ部１７５のキャッシュライン部１８１、１８２、・・・に、上述したSubBytes 処理により、変形Ｓボックス１２２１の内容が格納された場合における一例を図４０にデータ部１７５ｆとして示す。
【０２０８】
データ部１７５ｆの先頭から６４個のキャッシュライン部１８１ｆ、１８２ｆ、・・・には、変形Ｓボックス１２２１の内容がそのまま格納されている。
つまり、キャッシュライン部１８１ｆには、配列要素１２５１「Ｓ［０］」、配列要素１２６１「０ｘｆｆ」、配列要素１２５２「Ｓ［８１］」、配列要素１２６２「０ｘｆｆ」、配列要素１２５３「Ｓ［１６２］」、配列要素１２６３「０ｘｆｆ」、配列要素１２５４「Ｓ［２４３］」、配列要素１２６４「０ｘｆｆ」が格納されている。
【０２０９】
また、キャッシュライン部１８２ｆには、配列要素１２５５「Ｓ［６８］」、「０ｘｆｆ」、配列要素１２５６「Ｓ［１４９］」、「０ｘｆｆ」、配列要素１２５７「Ｓ［２３０］」、「０ｘｆｆ」、配列要素１２５８「Ｓ［５５］」、「０ｘｆｆ」が格納されている。
このように、データ部１７５ｆの各キャッシュライン部には、変形Ｓボックス１２２１の一行に含まれている８個の配列要素が格納されている。
（ＡＥＳ復号プログラム２３４における適用）
パーソナルコンピュータ２００のメモリ部２０３が記憶しているＡＥＳ復号プログラム２３４において、上記と同様にしてもよい。
【０２１０】
つまり、ＡＥＳ復号プログラム２３４は、逆変換変形Ｓボックス６１１に代えて、図３８に示す変形Ｓボックス１２２１と同様に構成した逆変換変形Ｓボックスを含むとしてもよい。また、このとき、ＡＥＳ復号プログラム２３４のInvSubBytes処理モジュール６０５は、SubBytes処理モジュール５０５ｄと同様に、３ビットの左シフトの処理に代えて、ｍｏｄ  ２５６における値「１７７」の乗算の処理と、１ビットの左シフトの処理とを含む。
【０２１１】
６．変形例（５）
コンテンツサーバ装置１００のメモリ部１０３が記憶しているＡＥＳ暗号プログラム１３３の別の変形例について説明する。
ＡＥＳ暗号プログラム１３３は、変形Ｓボックス５１１に代えて、図４１に示す変形Ｓボックス１３１１を含むとしてもよい。また、このとき、ＡＥＳ暗号プログラム１３３は、SubBytes処理モジュール５０５に代えて、SubBytes処理モジュール５０５ｅ（図示していない）を含む。SubBytes処理モジュール５０５ｅは、３ビットの左シフトの処理に代えて、ｍｏｄ  ２５６における乗算の処理と１ビットの左シフトの処理とｍｏｄ  ５１２における加算の処理とを含む。
【０２１２】
（変形Ｓボックス１３１１）
変形Ｓボックス１３１１は、図４１に示すように、５１２個の配列要素１３３１、１３２１、１３３２、１３２２、１３３３、１３２３、１３３４、１３２４、・・・、１３２５、・・・、１３２６、・・・、１３２７、・・・、１３２８、・・・から構成されている。
【０２１３】
変形Ｓボックス１３１１を構成する各配列要素は、図４１においては、表現の便宜上、６４行×８列のマトリックス状に配置されている。
変形Ｓボックス１３１１においては、その先頭に「０ｘｆｆ」を格納し、その後については、図３４に示す変形Ｓボックス１１２１に格納されている各配列要素Ｓ［ｘｘ］が、変形Ｓボックス１１２１における配置の順序を保ちながら、１つ置きに格納されている。また、これらの配列要素の間には、「０ｘｆｆ」が格納されている。
【０２１４】
例えば、変形Ｓボックス１３１１の第１行の８個の配列要素１３３１、１３２１、１３３２、１３２２、１３３３、１３２３、１３３４、１３２４は、それぞれ、「０ｘｆｆ」、値Ｓ［０］、「０ｘｆｆ」、値Ｓ［８１］、「０ｘｆｆ」、値Ｓ［１６２］、「０ｘｆｆ」、値Ｓ［２４３］を有する。ここで、値Ｓ［０］、値Ｓ［８１］、値Ｓ［１６２］、値Ｓ［２４３］は、図３４に示す変形Ｓボックス１１２１の第１行の先頭の４個の配列要素と同じものである。
【０２１５】
また、変形Ｓボックス１３１１の第２行の８個の配列要素  ・・・、１３２５、・・・、１３２６、・・・、１３２７、・・・、１３２８は、それぞれ、「０ｘｆｆ」、値Ｓ［６８］、「０ｘｆｆ」、値Ｓ［１４９］、「０ｘｆｆ」、値Ｓ［２３０］、「０ｘｆｆ」、値Ｓ［５５］を有する。ここで、値Ｓ［６８］、値Ｓ［１４９］、値Ｓ［２３０］、値Ｓ［５５］は、図３４に示す変形Ｓボックス１１２１の第１行の後半の４個の配列要素と同じものである。
【０２１６】
なお、ここでは、Ｓ［ｘｘ］において、ｘｘは、１０進数による表示である。
（SubBytes処理モジュール５０５ｅ）
SubBytes処理モジュール５０５ｅによるSubBytes処理では、１２８ビットのブロックデータを受け取り、受け取った１２８ビットのブロックデータを１６個の８ビットの部分ブロックデータに分け（８ビット×１６＝１２８ビット）、図４２に示すように、ｍｏｄ  ２５６において、各部分ブロックデータに値「１７７」を乗ずる（ステップ１３０２）。こうして、１６個の部分ブロックデータのそれぞれについて、８ビットの乗算値が生成される。次に、生成された乗算値を１ビットだけ左へシフトして９ビットのシフトデータを生成する（ステップ１３０３）。こうして、１６個の乗算値のそれぞれについて、９ビットのシフトデータが生成される。次に、ｍｏｄ  ５１２において、生成された各９ビットのシフトデータに、値［１」を加算して９ビットの加算値を生成する（ステップＳ１３０４）。次に、生成された各９ビットの加算値に、変形Ｓボックス１３１１の参照処理を施して、８ビットデータを出力する（ステップ１３０５）。
【０２１７】
なお、上述したように、SubBytes処理モジュール５０５ｅによるSubBytes処理において、１６個のｍｏｄ  ２５６における乗算処理と、１６個の左シフト処理と、１６個のｍｏｄ  ５１２における加算処理と、１６個の変形Ｓボックス１３１１の参照処理とが行われるが、表示を簡便にするために、図４２においては、これらの１６個の乗算処理、１６個のシフト処理、１６個の加算処理及び１６個の参照処理のうち、１個の乗算処理１３０２、１個のシフト処理１３０３、１個の加算処理１３０４及び１個の参照処理１３０５からなる組１３０１のみを示している。
【０２１８】
このように、１６個の部分ブロックデータについて、ｍｏｄ  ２５６の乗算と、１ビットの左シフト処理と、ｍｏｄ  ５１２の加算と、変形Ｓボックス１３１１の参照処理とが施される。この結果、１６個の８ビットデータが生成される。生成された１６個の８ビットデータが連結されて１２８ビットのブロックデータが生成され出力される。
上記のように、ｍｏｄ  ２５６において、各部分ブロックデータに、値「１７７」を乗じるのは、変形例（４）において説明した通りである。また、１ビットの左シフト処理を行うのは、変形例（２）において説明した通りである。また、ｍｏｄ  ５１２において、加算を行うのは、変形例（２）において説明した通りである。
【０２１９】
このように、各部分ブロックデータに、ｍｏｄ  ２５６において、値「１７７」を乗じ、さらに、得られた乗算値に１ビットの左シフト処理を施して、シフトデータを得、ｍｏｄ  ２５６において、得られたシフトデータに値「１」を加算して加算値を得、得られた加算値をアドレスとして、変形Ｓボックス１３１１を参照することにより、各部分ブロックデータに適切に対応する有効な配列要素Ｓ［ｘｘ］が得られるのである。
【０２２０】
なお、SubBytes処理モジュール５０５ｅは、１ビットの左シフトの処理に代えて、２倍の乗算を行う乗算処理を含むとしてもよい。
（データ部の一例）
データ部１７５のキャッシュライン部１８１、１８２、・・・に、上述したSubBytes 処理により、変形Ｓボックス１２２１の内容が格納された場合における一例を図４３にデータ部１７５ｇとして示す。
【０２２１】
データ部１７５ｇの先頭から６４個のキャッシュライン部１８１ｇ、１８２ｇ、・・・には、変形Ｓボックス１３１１の内容がそのまま格納されている。
つまり、キャッシュライン部１８１ｇには、配列要素１３５１「０ｘｆｆ」、配列要素１３４１「Ｓ［０］」、配列要素１３５２「０ｘｆｆ」、配列要素１３４２「Ｓ［８１］」、配列要素１３５２「０ｘｆｆ」、配列要素１３４３「Ｓ［１６２］」、配列要素１３５３「０ｘｆｆ」、配列要素１３４４「Ｓ［２４３］」が格納されている。
【０２２２】
また、キャッシュライン部１８２ｇには、「０ｘｆｆ」、配列要素１３４５「Ｓ［６８］」、「０ｘｆｆ」、配列要素１３４６「Ｓ［１４９］」、「０ｘｆｆ」、配列要素１３４７「Ｓ［２３０］」、「０ｘｆｆ」、配列要素１３４８「Ｓ［５５］」が格納されている。
このように、データ部１７５ｇの各キャッシュライン部には、変形Ｓボックス１３１１の一行に含まれている８個の配列要素が格納されている。
（ＡＥＳ復号プログラム２３４における適用）
パーソナルコンピュータ２００のメモリ部２０３が記憶しているＡＥＳ復号プログラム２３４において、上記と同様にしてもよい。
【０２２３】
つまり、ＡＥＳ復号プログラム２３４は、逆変換変形Ｓボックス６１１に代えて、図４１に示す変形Ｓボックス１３１１と同様に構成した逆変換変形Ｓボックスを含むとしてもよい。また、このとき、ＡＥＳ復号プログラム２３４のInvSubBytes処理モジュール６０５は、SubBytes処理モジュール５０５ｅと同様に、３ビットの左シフトの処理に代えて、ｍｏｄ  ２５６における値「１７７」の乗算の処理と、１ビットの左シフトの処理と、ｍｏｄ  ５１２における値「１」の加算の処理とを含む。
【０２２４】
７．変形例（６）
コンテンツサーバ装置１００のメモリ部１０３が記憶しているＡＥＳ暗号プログラム１３３の別の変形例について説明する。
ＡＥＳ暗号プログラム１３３は、変形Ｓボックス５１１に代えて、図４４に示す変形Ｓボックス１４２１及び図４５に示す変形Ｓボックス１４４１を含むとしてもよい。また、このとき、ＡＥＳ暗号プログラム１３３は、SubBytes処理モジュール５０５に代えて、SubBytes処理モジュール５０５ｆ（図示していない）を含む。SubBytes処理モジュール５０５ｆについては、後述する。
【０２２５】
（変形Ｓボックス１４２１）
変形Ｓボックス１４２１は、図４４に示すように、２５６個の配列要素１４３１、１４３２、１４３３、１４３４、１４３５、１４３６、１４３７、１４３８、・・・から構成されている。変形Ｓボックス１４２１は、図３４に示す変形Ｓボックス１１２１と同じである。ここでは、変形Ｓボックス１４２１についての説明を省略する。
【０２２６】
（変形Ｓボックス１４４１）
変形Ｓボックス１４４１は、図３４に示す変形Ｓボックス１１２１と類似する考え方により生成されたものであり、図４５に示すように、２５６個の配列要素１４５１、１４５２、１４５３、１４５４、１４５５、１４５６、１４５７、１４５８、・・・から構成されている。これらの配列要素は、配列番号「０」、「１」、「２」、「３」、・・・、「２５５」により識別されるものとする。
【０２２７】
変形Ｓボックス１４４１を構成する各配列要素は、図４５においては、表現の便宜上、３２行×８列のマトリックス状に配置されている。
第１行の８個の配列要素１４５１、・・・、１４５８は、それぞれ、値Ｓ［０］、値Ｓ［１３３］、値Ｓ［１０］、値Ｓ［１４３］、値Ｓ［２０］、値Ｓ［１５３］、値Ｓ［３０］、値Ｓ［１６３］を有する。ここで、値Ｓ［０］、値Ｓ［１３３］、値Ｓ［１０］、値Ｓ［１４３］、値Ｓ［２０］、値Ｓ［１５３］、値Ｓ［３０］、値Ｓ［１６３］は、上述の標準Ｓボックス３８０に含まれるものと同じである。なお、ここでは、Ｓ［ｘｘ］において、ｘｘは、１０進数による表示である。
【０２２８】
また、第２行の８個の配列要素は、それぞれ、値Ｓ［４０］、値Ｓ［１７３］、値Ｓ［５０］、値Ｓ［１８３］、値Ｓ［６０］、値Ｓ［１９３］、値Ｓ［７０］、値Ｓ［２０３］を有する。ここで、値Ｓ［４０］、値Ｓ［１７３］、値Ｓ［５０］、値Ｓ［１８３］、値Ｓ［６０］、値Ｓ［１９３］、値Ｓ［７０］、値Ｓ［２０３］は、上述の標準Ｓボックス３８０に含まれるものと同じである。ここでも、Ｓ［ｘｘ］において、ｘｘは、１０進数による表示である。
【０２２９】
第３行から第３２行の各配列要素も、上述の標準Ｓボックス３８０に含まれる配列要素と同じものである。ただし、図４５の変形Ｓボックス１４４１においては、第３行から第３２行の各配列要素の表示を省略している。
（変形Ｓボックス１４４１の配列規則）
変形Ｓボックス１４４１には、次に説明する規則に従って、上述の標準Ｓボックス３８０に格納されている各配列要素が格納されている。この配列規則は、図３４に示す変形Ｓボックス１１２１における配列規則と類似のものである。
【０２３０】
ここで、整数である２５６個の入力値Ｂ（０、１、２、・・・、２５５）のそれぞれに対して、Ｂ×７７  ｍｏｄ  ２５６を計算する。各入力値Ｂと対応する計算結果とを、図４６に示す対応表１４４２に示す。
対応表１４４２は、２５６個の入力値Ｂと、Ｂ×７７  ｍｏｄ  ２５６による計算結果とを対応付けて表示するものである。ただし、図４６に示す対応表１４４２においては、紙面の都合上の理由により、全てのＢの値に対応する計算結果を表示している訳ではなく、その一部分のみを表示し、その他については、表示を省略している。
【０２３１】
ここで、例えば、入力値Ｂ＝０に対するＢ×７７  ｍｏｄ  ２５６の計算結果は、「０」であり、入力値Ｂ＝１３３に対する計算結果は、「１」であり、入力値Ｂ＝１０に対する計算結果は、「２」であり、入力値Ｂ＝１４３に対する計算結果は、「３」であり、入力値Ｂ＝２０に対する計算結果は、「４」である。
一例として、変形Ｓボックス１４４１の配列番号「０」により示される配列要素１４５１に格納する標準Ｓボックス３８０の配列要素を次のようにして決定する。配列番号「０」と同じ値を有する計算結果「０」を対応表１４４２から探し、計算結果に対応する入力値Ｂ「０」を取得する。次に、取得した入力値Ｂ「０」を配列番号とする配列要素Ｓ［０］を、変形Ｓボックス１４４１の配列番号「０」により示される配列要素１４５１の値とする。
【０２３２】
また、別の一例として、変形Ｓボックス１４４１の配列番号「１」により示される配列要素１４５２に格納する標準Ｓボックス３８０の配列要素を次のようにして決定する。配列番号「１」と同じ値を有する計算結果「１」を対応表１４４２から探し、計算結果に対応する入力値Ｂ「１３３」を取得する。次に、取得した入力値Ｂ「１３３」を配列番号とする配列要素Ｓ［１３３］を、変形Ｓボックス１４４１の配列番号「１」により示される配列要素１４５２の値とする。
【０２３３】
さらに、別の一例として、変形Ｓボックス１４４１の配列番号「２」により示される配列要素１４５３に格納する標準Ｓボックス３８０の配列要素を次のようにして決定する。配列番号「２」と同じ値を有する計算結果「２」を対応表１４４２から探し、計算結果に対応する入力値Ｂ「１０」を取得する。次に、取得した入力値Ｂ「１０」を配列番号とする配列要素Ｓ［１０］を、変形Ｓボックス１４４１の配列番号「２」により示される配列要素１４５３の値とする。
【０２３４】
以下は同様である。
このように、変形Ｓボックス１４４１では、上述した規則により、標準Ｓボックス３８０に含まれる配列要素が配置されている。
（SubBytes処理モジュール５０５ｆ）
SubBytes処理モジュール５０５ｆによるSubBytes処理では、１２８ビットのブロックデータを受け取り、受け取った１２８ビットのブロックデータを１６個の８ビットの部分ブロックデータに分ける（８ビット×１６＝１２８ビット）。
【０２３５】
次に、各部分ブロックデータについて、図４７に示すように、以下に示す処理を行う。
（ａ）乱数Ｒを生成する。乱数Ｒは、値「０」及び値「１」のいずれかである（ステップ１４０２）。
（ｂ）生成した乱数Ｒが、値「０」及び値「１」のいずれであるかを判断する（ステップ１４０３）。
【０２３６】
（ｃ）生成した乱数Ｒが、値「０」である場合に、ｍｏｄ  ２５６において、当該部分ブロックデータに値「１７７」を乗ずる（ステップ１４０６）。こうして、８ビットの乗算値が生成される。次に、生成された８ビットの乗算値に、変形Ｓボックス１４２１の参照処理を施して、８ビットデータを出力する（ステップ１４０７）。
（ｄ）生成した乱数Ｒが、値「１」である場合に、ｍｏｄ  ２５６において、当該部分ブロックデータに値「７７」を乗ずる（ステップ１４０８）。こうして、８ビットの乗算値が生成される。次に、生成された８ビットの乗算値に、変形Ｓボックス１４４１の参照処理を施して、８ビットデータを出力する（ステップ１４０９）。
【０２３７】
なお、上述したように、SubBytes処理モジュール５０５ｆによるSubBytes処理において、乱数生成処理を１６個と、乱数判断処理を１６個と、「ｍｏｄ  ２５６における１７７との乗算処理」及び「ｍｏｄ  ２５６における７７との乗算処理」のいずれかを１６個と、「変形Ｓボックス１４２１の参照処理」及び「変形Ｓボックス１４４１の参照処理」のいずれかを１６個とが行われるが、表示を簡便にするために、図４７においては、１個の乱数生成処理１４０２と、１個の乱数判断処理１４０３と、「１個のｍｏｄ  ２５６における１７７との乗算処理１４０６及び１個の変形Ｓボックス１４２１の参照処理１４０７」と、「１個のｍｏｄ  ２５６における７７との乗算処理１４０８及び１個の変形Ｓボックス１４４１の参照処理１４０９」とからなる組１４０１のみを示している。
【０２３８】
このように、１６個の部分ブロックデータについて、ｍｏｄ  ２５６の１７７の乗算又は７７の乗算と、変形Ｓボックス１４２１又は１４４１の参照処理とが施される。この結果、１６個の８ビットデータが生成される。生成された１６個の８ビットデータが連結されて１２８ビットのブロックデータが生成され出力される。
このように、各部分ブロックデータに、生成した乱数により、ｍｏｄ  ２５６における、値「１７７」の乗算又は値「７７」の乗算を行い、それぞれの場合について、変形Ｓボックス１４２１又は１４４１を参照することにより、各部分ブロックデータに適切に対応する有効な配列要素Ｓ［ｘｘ］が得られるのである。
（データ部の一例）
データ部１７５のキャッシュライン部１８１、１８２、・・・に、上述したSubBytes 処理により、変形Ｓボックス１４２１の内容が格納された場合における一例を図４８にデータ部１７５ｈとして示す。また、変形Ｓボックス１４４１の内容が格納された場合における一例を図４９にデータ部１７５ｉとして示す。
（ＡＥＳ復号プログラム２３４における適用）
パーソナルコンピュータ２００のメモリ部２０３が記憶しているＡＥＳ復号プログラム２３４において、上記と同様にしてもよい。
【０２３９】
つまり、ＡＥＳ復号プログラム２３４は、逆変換変形Ｓボックス６１１に代えて、図４４に示す変形Ｓボックス１４２１と同様に構成した逆変換変形Ｓボックスと、図４５に示す変形Ｓボックス１４４１と同様に構成した逆変換変形Ｓボックスとを含むとしてもよい。また、このとき、ＡＥＳ復号プログラム２３４のInvSubBytes処理モジュール６０５は、SubBytes処理モジュール５０５ｆと同様に、３ビットの左シフトの処理に代えて、図４７に示す各ステップの処理を含む。
【０２４０】
８．変形例（７）
コンテンツサーバ装置１００のメモリ部１０３が記憶しているＡＥＳ暗号プログラム１３３の別の変形例について説明する。
ＡＥＳ暗号プログラム１３３は、SubBytes処理モジュール５０５に代えて、図５０に示すSubBytes処理モジュール１５０１を含むとしてもよい。
【０２４１】
SubBytes処理モジュール１５０１では、通常のSubBytes処理と同様に、Ｓボックスの参照演算が１６回行われる。さらに、Ｓボックスの参照演算を行う前、もしくは後（図５０では、後の場合について示している）に、キャッシュ部１６２のデータ部１７５に格納されている全ての配列要素を消去する処理を行う。
なお、キャッシュ部１６２に格納されているデータを消去する方法としては、特別な命令を使用する方法（Ｐｅｎｔｉｕｍ（登録商標）の場合、”ＩＮＶＤ”命令や”ＷＢＩＮＶＤ”命令）や、メモリ部１０３上にある暗号処理と関係ないデータにアクセスすることによって、そのデータをキャッシュ部１６２にコピーさせ、キャッシュ部１６２に既にある配列要素を追い出す方法などがある。
【０２４２】
SubBytes処理モジュール１５０１では、図５０に示すように、Ｓボックスの参照処理を行い（ステップＳ３０１）、次に、上記で説明したような方法で、キャッシュ部１６２に格納されている配列要素を消去する処理を行う（ステップＳ３０２）。
その後、ステップＳ３０３〜Ｓ３１４において、ステップＳ３０１及びＳ３０２と同様に、Ｓボックスの参照処理ｉ（ｉは２から１６の自然数）の後に、キャッシュ部１６２に格納されている配列要素を消去する処理を繰り返す。
【０２４３】
なお、上記の変形例においては、Ｓボックスの配列要素にアクセスした後（又はアクセスする前）にキャッシュクリア処理を呼ぶようにしていたが、それに限るものではない。
例えば、カウンタが０およびＮｒ−１のときにだけ、各１６回のテーブル参照演算の後には、キャッシュクリア処理を設け、他のカウンタ値（１からＮｒ−２）の場合は、キャッシュクリア処理をしなくても良い。これは、タイミング攻撃は、平文および暗号文に近いＳｕｂＢｙｔｅｓ処理（例えば、１段目やＮｒ−１段目）にある鍵を推定する際に必要な計算量の方が、平文および暗号文に遠いＳｕｂＢｙｔｅｓ処理（例えば、（Ｎｒ−１）／２段目）にある鍵を推定する際に必要な計算量よりも多いことを利用している。
【０２４４】
このように、ある特定の攻撃がされ易い部分（例えば、カウンタ値により判断される）にのみ、変形ＳｕｂＢｙｔｅｓ処理を施すことにより、タイミング攻撃に対する耐性は、上記の変形例よりも劣るが、キャッシュクリア処理の回数は減るため、処理速度が向上する効果を有する。
９．その他の変形例
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【０２４５】
（１）コンピュータプログラムを処理する機器に含まれるプロセッサは、図１１の構成に限るものではない。例えば、マイクロプロセッサ１０１は、キャッシュ部１６２の替わりに、高速でより容量の小さい１次キャッシュ部１６２ａとより低速でより容量の大きな２次キャッシュ部１６２ｂを有していても良い。
この場合、演算部１６１は、最初に、１次キャッシュ部１６２ａにデータを読みに行き、該当データが１次キャッシュ部１６２ａになかった場合は、２次キャッシュ部１６２ｂに読みに行く。この場合、テーブル要素が１次キャッシュ部１６２ａから取得される場合と、２次キャッシュ部１６２ｂから取得される場合と、メモリ部１０３から取得される場合と、の３通りのケースがあり、タイミング攻撃は、入力メッセージに依存して、全体の処理時間が同様に変化することを利用する。
【０２４６】
なお、マイクロプロセッサ１０１は、さらに、３次キャッシュ部などを有していても良い。
（２）上記の実施の形態及び変形例において、マイクロプロセッサは、キャッシュ部を備えるとしているが、本発明は、これに限定されることはない。マイクロプロセッサの内部にキャッシュ部を備えることはなく、コンピュータシステムがマイクロプロセッサとキャッシュ部とメモリ部とを含むとしてもよい。
【０２４７】
（３）上記の実施の形態及び変形例において、変形Ｓボックス５１１は、ＡＥＳ暗号プログラム１３３に含まれるとしているが、これには限定されない。
ＡＥＳ暗号プログラム１３３に含まれる各モジュール（コンピュータプログラム）と、変形Ｓボックス５１１とは、別々のデータ集合（ファイル）を構成しているとしてもよい。ＡＥＳ復号プログラム１３４についても同様である。
【０２４８】
（４）上記の実施の形態及び変形例において、各変形Ｓボックスは、標準Ｓボックスには存在しないダミーデータとして「０ｘｆｆ」を含むとしているが、「０ｘｆｆ」には限定されない。「０ｘｆｆ」の代わりに他のデータを含むとしてもよい。例えば、各変形Ｓボックスは、「０ｘｆｆ」に代えて、乱数生成器により生成した乱数を含むとしてもよいし、標準Ｓボックスに存在するデータを含むとしてもよい。
【０２４９】
（５）上記の実施の形態では、図８に示すように、Round処理モジュール５０３は、命令コード群Ｓ１３１、Ｓ１３２、Ｓ１３３及びＳ１３４を含んで構成されており、これらの命令コード群は、Round処理モジュール５０３内において、この順序で並べられ、この順序により、各命令コード群が実行されるとしているが、これには限定されない。
例えば、Round処理モジュール５０３に代えて、変形Round処理モジュールは、命令コード群Ｓ１３２、Ｓ１３３、Ｓ１３４及びＳ１３１を含んで構成されており、これらの命令コード群は、変形Round処理モジュール内において、この順序で並べられ、この順序により、各命令コード群が実行されるとしてもよい。この場合に、暗号メインモジュールは、命令コード群Ｓ１３１を呼び出し、その後、所定回数だけ、変形Round処理モジュールを呼び出す。
【０２５０】
（６）上記の実施の形態では、マイクロプロセッサ１０１のキャッシュ部は、６４ビット長の各キャッシュライン部を備えているとしているが、キャッシュライン部のビット長はこれには限定されず、他の長さの各キャッシュライン部を有しているとしてもよい。この場合においても上記に説明したことが実現できる。
（７）上記の実施の形態では、暗号アルゴリズムとしてＡＥＳに適用するとしているが、これには限定されない。例えば、ＤＥＳ（Data EncryptionStanadard）等の暗号アルゴリズムに適用するとしてもよい。
【０２５１】
また、本発明は、暗号化及び復号にのみ適用できるのではない。具体的には、情報の改ざんチェックやデジタル署名などの用途に用いても良い。
（８）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を１個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。
【０２５２】
（９）上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Large Scale Integration：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。
【０２５３】
（１０）上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なＩＣカード又は単体のモジュールから構成されているとしてもよい。前記ＩＣカード又は前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、などから構成されるコンピュータシステムである。前記ＩＣカード又は前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ＩＣカード又は前記モジュールは、その機能を達成する。このＩＣカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
【０２５４】
（１１）本発明は、上記に示す方法であるとしてもよい。また、これらの方法を５ンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【０２５５】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
【０２５６】
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（１２）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０２５７】
本発明にかかるコンピュータシステムは、処理時間を観測するタイミング攻撃に対して耐性を高めることが出来るため、情報を秘密に扱う必要があるあらゆる産業において、経営的に、また継続的及び反復的に、使用することができる。また、本発明を構成する各装置は、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。
【図面の簡単な説明】
【０２５８】
【図１】本発明に係る第１の実施の形態としてのコンテンツ配信システム１０の構成を示す構成図である。
【図２】コンテンツサーバ装置１００の構成を示すブロック図である。
【図３】コンテンツ暗号プログラム１３２の内容を説明するフローチャートである。
【図４】ＡＥＳ暗号プログラム１３３の構成を示す構成図である。
【図５】標準Ｓボックス３８０のデータ構造を示す構造図である。
【図６】変形Ｓボックス５１１のデータ構造を示す構造図である。
【図７】暗号メインモジュール５０１の内容を説明するフローチャートである。
【図８】Round 処理モジュール５０３の内容を説明するフローチャートである。
【図９】SubBytes処理モジュール５０５の内容を説明するフローチャートである。
【図１０】FinalRound処理モジュール５０４の内容を説明するフローチャートである。
【図１１】マイクロプロセッサ１０１の構成を示すブロック図である。
【図１２】データ部１７５のキャッシュライン部１８１〜１８７に変形Ｓボックス５１１の内容が格納された場合における一例を示す。
【図１３】マイクロプロセッサ１０１の動作を示すフローチャートである。
【図１４】ＡＥＳ暗号プログラム１３３による暗号化の動作を示すデータプロセスチャートである。
【図１５】各Round 処理又はFinalRound処理の動作におけるAddRoundKey 処理及びSubBytes処理の詳細の動作を示すデータプロセスチャートである。
【図１６】パーソナルコンピュータ２００の構成を示すブロック図である。
【図１７】コンテンツ復号プログラム２３２及び再生プログラム２３３の内容を説明するフローチャートである。
【図１８】ＡＥＳ復号プログラム２３４の内容を説明するフローチャートである。
【図１９】標準逆変換Ｓボックス８００のデータ構造を示す構造図である。
【図２０】逆変換変形Ｓボックス６１１のデータ構造を示す構造図である。
【図２１】復号メインモジュール６０１の内容を説明するフローチャートである。
【図２２】InvRound処理モジュール６０３の内容を説明するフローチャートである。
【図２３】InvSubBytes 処理モジュール６０５の内容を説明するフローチャートである。
【図２４】InvFinalRound 処理モジュール６０４の内容を説明するフローチャートである。
【図２５】データ部の各キャッシュライン部に、逆変換変形Ｓボックス６１１の内容が格納された場合における一例を示す。
【図２６】ＡＥＳ復号プログラム２３４による復号の動作を示すデータプロセスチャートである。
【図２７】InvSubBytes処理及びAddRoundKey 処理の詳細の動作を示すデータプロセスチャートである。
【図２８】変形Ｓボックス９１１のデータ構造を示す構造図である。
【図２９】SubBytes処理モジュール５０５ａによるSubBytes処理における１個の左シフト処理９０２及び１の参照処理９０３の動作を示すデータプロセスチャートである。
【図３０】データ部１７５のキャッシュライン部１８１、１８２、・・・に変形Ｓボックス９１１の内容が格納された場合における一例を示す。
【図３１】変形Ｓボックス１０１１のデータ構造を示す構造図である。
【図３２】SubBytes処理モジュール５０５ｂによるSubBytes処理において、１個の左シフト処理１００２、１個の加算処理１００３及び１の参照処理１００４の動作を示すデータプロセスチャートである。
【図３３】データ部１７５のキャッシュライン部１８１、１８２、・・・に変形Ｓボックス１０１１の内容が格納された場合における一例を示す。
【図３４】変形Ｓボックス１１２１のデータ構造を示す構造図である。
【図３５】整数である２５６個の入力値Ａ（０、１、２、・・・、２５５）と、計算結果Ａ×１７７  ｍｏｄ  ２５６との対応を示す対応表である。
【図３６】SubBytes処理モジュール５０５ｃによるSubBytes処理において、１個の乗算処理１１０２及び１個の参照処理１１０３の動作を示すデータプロセスチャートである。
【図３７】データ部１７５のキャッシュライン部１８１、１８２、・・・に変形Ｓボックス１１２１の内容が格納された場合における一例を示す。
【図３８】変形Ｓボックス１２２１のデータ構造を示す構造図である。
【図３９】SubBytes処理モジュール５０５ｄによるSubBytes処理において、１個の乗算処理１２０２、１個のシフト処理１２０３及び１個の参照処理１２０４の動作を示すデータプロセスチャートである。
【図４０】データ部１７５のキャッシュライン部１８１、１８２、・・・に変形Ｓボックス１２２１の内容が格納された場合における一例を示す。
【図４１】変形Ｓボックス１３１１のデータ構造を示す構造図である。
【図４２】SubBytes処理モジュール５０５ｅによるSubBytes処理において、１個の乗算処理１３０２、１個のシフト処理１３０３、１個の加算処理１３０４及び１個の参照処理１３０５の動作を示すデータプロセスチャートである。
【図４３】データ部１７５のキャッシュライン部１８１、１８２、・・・に変形Ｓボックス１２２１の内容が格納された場合における一例を示す。
【図４４】変形Ｓボックス１４２１のデータ構造を示す構造図である。
【図４５】変形Ｓボックス１４４１のデータ構造を示す構造図である。
【図４６】整数である２５６個の入力値Ｂ（０、１、２、・・・、２５５）と、その計算結果Ｂ×７７  ｍｏｄ  ２５６との対応を示す対応表である。
【図４７】SubBytes処理モジュール５０５ｆによるSubBytes処理において、１個の乱数生成処理１４０２と、１個の乱数判断処理１４０３と、「１個のｍｏｄ  ２５６における１７７との乗算処理１４０６及び１個の変形Ｓボックス１４２１の参照処理１４０７」と、「１個のｍｏｄ  ２５６における７７との乗算処理１４０８及び１個の変形Ｓボックス１４４１の参照処理１４０９」とからなる組１４０１の動作を示すデータプロセスチャートである。
【図４８】データ部１７５のキャッシュライン部１８１、１８２、・・・に変形Ｓボックス１４２１の内容が格納された場合における一例を示す。
【図４９】データ部１７５のキャッシュライン部１８１、１８２、・・・に変形Ｓボックス１４４１の内容が格納された場合における一例を示す。
【図５０】SubBytes処理モジュール１５０１の内容を説明するフローチャートである。
【符号の説明】
【０２５９】
１０    コンテンツ配信システム
３０ａ  配信サーバ装置
３０ｂ  放送装置
３０ｃ  ＢＤ製造装置
４０    記録媒体
１００    コンテンツサーバ装置
１０１    マイクロプロセッサ
１０２    ハードディスク部
１０３    メモリ部
１０４    入力制御部
１０５    表示制御部
１０６    通信部
１０７    キーボード
１０８    モニタ
１０９    システムバス
２００    パーソナルコンピュータ
２００ａ  デジタル放送受信装置
２００ｂ  ＢＤ再生装置
２０１    マイクロプロセッサ
２０２    ハードディスク部
２０３    メモリ部
２０４    入力制御部
２０５    表示制御部
２０６    通信部
２０７    キーボード
２０８    モニタ
【図１】
0004701166.tif 000002
【図２】
0004701166.tif 000003
【図３】
0004701166.tif 000004
【図４】
0004701166.tif 000005
【図５】
0004701166.tif 000006
【図６】
0004701166.tif 000007
【図７】
0004701166.tif 000008
【図８】
0004701166.tif 000009
【図９】
0004701166.tif 000010
【図１０】
0004701166.tif 000011
【図１１】
0004701166.tif 000012
【図１２】
0004701166.tif 000013
【図１３】
0004701166.tif 000014
【図１４】
0004701166.tif 000015
【図１５】
0004701166.tif 000016
【図１６】
0004701166.tif 000017
【図１７】
0004701166.tif 000018
【図１８】
0004701166.tif 000019
【図１９】
0004701166.tif 000020
【図２０】
0004701166.tif 000021
【図２１】
0004701166.tif 000022
【図２２】
0004701166.tif 000023
【図２３】
0004701166.tif 000024
【図２４】
0004701166.tif 000025
【図２５】
0004701166.tif 000026
【図２６】
0004701166.tif 000027
【図２７】
0004701166.tif 000028
【図２８】
0004701166.tif 000029
【図２９】
0004701166.tif 000030
【図３０】
0004701166.tif 000031
【図３１】
0004701166.tif 000032
【図３２】
0004701166.tif 000033
【図３３】
0004701166.tif 000034
【図３４】
0004701166.tif 000035
【図３５】
0004701166.tif 000036
【図３６】
0004701166.tif 000037
【図３７】
0004701166.tif 000038
【図３８】
0004701166.tif 000039
【図３９】
0004701166.tif 000040
【図４０】
0004701166.tif 000041
【図４１】
0004701166.tif 000042
【図４２】
0004701166.tif 000043
【図４３】
0004701166.tif 000044
【図４４】
0004701166.tif 000045
【図４５】
0004701166.tif 000046
【図４６】
0004701166.tif 000047
【図４７】
0004701166.tif 000048
【図４８】
0004701166.tif 000049
【図４９】
0004701166.tif 000050
【図５０】
0004701166.tif 000051