説明

暗号又は復号を行うコンピュータシステム及びコンピュータプログラム

処理時間を観測するタイミング攻撃に対する耐性を有するコンピュータシステムを提供する。 コンピュータシステムは、平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号する。変換表は、ライン表領域の先頭位置において、部分データに対応する1個の変換データを含み、他の位置において、前記変換に無関係のデータを含む。コンピュータプログラムは、取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報を秘密に扱う暗号及び復号技術に関する。
【背景技術】
【0002】
ADSL(Asymmetric Digital Subscriber Line)や光ファイバーなどに代表される高速通信路を介して、デジタル化された音楽や映像等のコンテンツを提供するサービスの普及に伴い、これらのコンテンツの不正コピーなどのコンテンツの不正利用の防止が必要となってきている。
一般に、コンテンツの不正利用を防止する著作権保護方式においては、暗号技術が用いられる。例えば、暗号化鍵を用いてデジタルコンテンツを暗号化して通信路を介して配布し、その暗号化鍵に対応する復号化鍵を与えられているユーザのみが、暗号化されたコンテンツを復号化して、元のデジタルコンテンツの再生を行うことができる。
【0003】
一方、パーソナルコンピュータの普及により、デジタルコンテンツはコンピュータ上で再生されることが多くなってきている。著作権保護方式に必要な暗号処理は、パーソナルコンピュータ上の暗号プログラムとして提供され、暗号化されたコンテンツを復号化する際に用いる復号化鍵も、予めその暗号プログラムの内部に埋め込まれる場合が多くなってきている。
【0004】
ところで、最近、コンピュータ上において暗号プログラムの実行中に実行環境つまりコンピュータから漏れ出す副情報、例えば、処理時間や電力消費量などを利用して、暗号プログラム内部に秘密に格納されている秘密情報、例えば、復号化鍵を取得するサイドチャネル攻撃が提案されている。
非特許文献1及び非特許文献2によると、このような攻撃手法の一つとして、コンピュータに内蔵され、処理の高速化を目的に用いられるキャッシュメモリに着目したタイミング攻撃というものがある。ここで、キャッシュメモリとは(非特許文献3を参照)、一度演算部、例えばCPUがメインメモリから取得したデータを、高速にアクセス可能なキャッシュメモリに格納し、二度目以降に同じデータにアクセスする場合は、高速にアクセス可能なキャッシュメモリからデータを取得することによって、処理速度の高速化を実現するものである。
【0005】
上述のタイミング攻撃では、データをキャッシュメモリから取得する場合と、メインメモリから取得する場合との処理時間差に着目して、秘密情報を特定することに成功している。
このタイミング攻撃は、キャッシュメモリが搭載されたCPU上で実行される暗号プログラムに対して有効であり、特に、テーブル参照演算(一般にSBOXの参照と呼ばれる)が用いられる繰り返し型のブロック暗号方式であるAES(Advanced Encryption Standard)方式(非特許文献4に記載)やDES(Data Encryption Standard)方式などが攻撃の対象となっている。本タイミング攻撃を適用可能な実行環境としては、例えば、一般的なパーソナルコンピュータ(PC/AT互換機など)やキャッシュメモリを有するスマートカードなどである。
【0006】
次に、タイミング攻撃の概要について説明する。
AESでは、入力データと秘密鍵(拡大鍵)とに排他的論理和演算を施しその演算結果を用いて、上述のテーブル参照演算を行う。また、前提として、暗号処理を開始する前に、キャッシュメモリにその暗号処理のテーブル参照演算で用いるテーブルデータ配列(SBOX)が格納されていないものとする。このような前提のもとでは、暗号処理の途中のテーブル参照演算において、テーブル要素がキャッシュメモリから取得されるか、メインメモリから取得されるかは、入力データ及び秘密鍵に依存して一意に定まる。
【0007】
これは、ある固定のテーブル要素を参照するテーブル参照演算を想定した場合に、入力データの値を変化させることによって、テーブル要素がキャッシュメモリから取得される場合と、メインメモリから取得される場合との両方のケースがあることを意味する。つまり、入力データを変化させることによって、全体の暗号処理時間が変化することを意味する。
【0008】
そこで、タイミング攻撃では、全体の暗号処理時間を測定し、測定して得られた処理時間を基に、処理途中のあるテーブル参照演算において、テーブル要素がキャッシュメモリから取得されたか、メインメモリから取得されたかを推測し、その推測及び入力データを基に、秘密鍵(拡大鍵)を解析する。
このようなタイミング攻撃には、主に二つのアプローチがある。一つは、非特許文献1に記載されているように、1ブロック(AES方式の場合は128ビット)毎の暗号化処理時間を計測するものである。もう一つは、非特許文献2に記載されているように、2ブロック(AES方式の場合128ビット×2)毎の暗号化処理時間を計測するものである。次に、非特許文献1及び非特許文献2に記載のタイミング攻撃のそれぞれの概要について説明する。
【0009】
非特許文献1に記載のタイミング攻撃は、2回同じテーブル要素にアクセスした場合に、2回目はキャッシュメモリからテーブル要素を取得するため、処理時間が短くなることを利用している。非特許文献1に記載のタイミング攻撃の大まかな流れは以下の通りである。
まず、1ブロック暗号化する毎に、キャッシュメモリの内容をクリアする。そして、ある2つのテーブル参照演算に着目し、その2つのテーブル参照演算の入力値に影響する鍵情報をある値に仮定する。そして、その仮定の下で2つのテーブル参照演算の入力値が同じになるような入力データを選択し、その処理時間を計測する。上記のことを考えられる全ての鍵情報の値について実行する。最終的には、一番処理時間の短かった鍵を正解の鍵として出力する。その後、また別の2つのテーブル参照演算に着目し、同様に鍵を推定していく。
【0010】
一方、非特許文献2に記載のタイミング攻撃は、一回のメインメモリ上の暗号プログラム内のテーブル要素のアクセスによって、メインメモリから複数のテーブル要素が一緒にキャッシュメモリへコピーされる特徴を用いている。非特許文献2に記載のタイミング攻撃の大まかな流れは以下の通りである。
まず、2ブロック暗号化する毎に、キャッシュメモリの内容をクリアする。そして、ある1つのテーブル参照演算に着目し、その1つのテーブル参照演算の入力値に影響する鍵情報をある値に仮定する。そして、1ブロック目の着目するテーブル参照演算において、メインメモリからキャッシュメモリへコピーされる複数のテーブル要素を、2ブロック目で参照する(ただし、1ブロック目のテーブル参照演算の入力値以外)入力データを選択し、その処理時間を計測する。上記のことを考えられる全ての鍵情報の値について実行する。最終的には、一番処理時間の短かった鍵を正解の鍵として出力する。その後、また別の1つのテーブル参照演算に着目し、同様に鍵を推定していく。
【0011】
上記で説明したように、処理時間を測定するタイミング攻撃は、入力データに依存して、1ブロック又は2ブロックの暗号処理の時間が異なることに起因している。このため、タイミング攻撃に対する対策としては、入力データを変えても、1ブロック又は2ブロックの暗号処理の処理時間が変化せずに一定になるようにする方法がある。このような対策法としては、非特許文献5の第4.2節に記載の従来技術がある。その従来技術の概要を説明する。ここでは、暗号処理の具体的な適用例として、AES方式の暗号化処理を挙げる。
【0012】
非特許文献5により開示されている従来技術の特徴は、実際のAES方式の暗号化処理を実行する前に、AES方式のSubBytes処理で用いられるテーブル参照演算のテーブルデータ配列のテーブル要素に一つ一つアクセスすることにより、入力データに依存しない処理(非特許文献5ではCache Warmingと呼ばれる)を追加するものである。これにより、実際のAES方式の暗号化処理を開始する前までに、AES方式のSubBytes処理のテーブル参照演算で用いられる全てのテーブル要素をキャッシュメモリに格納することができ、結果的に、AES方式の暗号化処理のSubBytes処理のテーブル参照演算においては、テーブル要素を全てキャッシュメモリから取得出来ることになる。これによって、入力メッセージに依存して、全体の処理時間が変化せずに、処理時間が常に一定となる。つまり、処理時間を測定するタイミング攻撃に対する耐性を向上させることが出来る。
【0013】
また、特許文献1は、キャッシュ攻撃型暗号解読法に対する防御機能を備えた暗号装置を提供することを目的として、1つの平文または1つの暗号文の暗号処理又は復号処理における変換表に対するアクセス時のキャッシュミスヒット回数を、任意の平文または暗号文についてほぼ均一化する手段について開示している。
【非特許文献1】Y.Tsunoo,E.Tsujihara,K.Minematsu,H.Miyauchi,″Cryptanalysis of Block Ciphers Implemented on Computers with Cache″International Symposium on Information Theory and Its Applications(ISITA)、October 2002.
【非特許文献2】鶴丸豊広ら、”64ビットブロック暗号に対するタイミング攻撃”The 2003 Symposium on Cryptgraphy and Information Security(SCIS2003)、2003.
【非特許文献3】デイビッド・A・パターソン、ジョン・L・ヘネシー、”コンピュータの構成と設計”、ISBN4−8222−8056−X、日経BP社出版
【非特許文献4】Federal Information Processing Standard(FIPS)Publication 197、November 26、2001.
【非特許文献5】D.Page、″Defending against cache−based side−channel attacks″Information Security Technical Report、Vol.8、No.1、Page30−44、2003.
【特許文献1】日本国特開2004−120307号公報
【発明の開示】
【発明が解決しようとする課題】
【0014】
しかしながら、上述したように、処理時間を観測するタイミング攻撃に関する研究が進んでおり、さらに別の防御手段の開発が要望されている。
本発明は、上記の要望に応えるために、処理時間を観測するタイミング攻撃に対する耐性を有するコンピュータシステム、方法及びコンピュータプログラムプログラムを提供することを目的とする。
【課題を解決するための手段】
【0015】
上記目的を達成するために、本発明は、平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、所定長のライン記憶領域を含むキャッシュメモリ部と、前記主メモリ部に記憶されている前記コンピュータプログラムから1個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する1個の変換データを含み、前記ライン表領域の他の位置において、前記変換に無関係のデータを含み、前記コンピュータプログラムは、部分データを取得する取得命令群と、取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含むことを特徴とする。
【発明の効果】
【0016】
上記の構成によると、キャッシュメモリ部のライン記憶領域には、1個の変換データが含まれるので、入力メッセージを変化させても暗号又は復号処理の処理時間が一定となるため、処理時間を観測するタイミング攻撃に対する耐性は向上する。
ここで、前記変換表は、前記部分データが有する値に依存する位置において、前記変換データを含み、前記演算命令群は、取得した部分データに演算を施すことにより、対応する前記変換データの前記変換表における位置を算出するとしてもよい。また、前記所定長は、前記変換データの長さの整数w倍であり、前記ライン表領域は、前記所定位置において、前記変換データを含み、その他の全ての位置において、前記変換に無関係のデータを含み、前記演算命令群は、整数wによる乗算を用いて、対応する前記変換データの前記変換表における位置を算出するとしてもよい。また、前記所定位置は、前記ライン表領域の先頭位置であり、前記演算命令群は、取得した部分データに整数wを乗ずることにより、対応する前記変換データの前記変換表における位置を算出するとしてもよい。
【0017】
これらの構成によると、簡単な演算により、部分データに対応する変換データの位置を特定することができる。
ここで、前記ライン表領域は、前記所定位置において前記変換データを含み、さらに、他の所定位置において、他の部分データに対応する他の変換データを含み、その他の全ての位置において、前記変換に無関係のデータを含むとしてもよい。また、前記所定長は、前記変換データの長さの整数w倍であり、前記所定位置は、前記ライン表領域の先頭位置であり、前記他の所定位置は、前記ライン表領域を2等分した後半領域の先頭位置であり、前記演算命令群は、取得した部分データに整数w/2を乗ずることにより、対応する前記変換データの前記変換表における位置を算出するとしてもよい。また、前記所定長は、前記変換データの長さの整数w倍であり、前記所定位置は、前記ライン表領域の先頭から整数x番目の位置であり、前記他の所定位置は、前記ライン表領域を2等分した後半領域の先頭から整数x番目の位置であり、前記演算命令群は、取得した部分データに整数w/2を乗じ、さらに整数xを加算することにより、対応する前記変換データの前記変換表における位置を算出するとしてもよい。
【0018】
これらの構成によると、キャッシュメモリ部のライン記憶領域には、1個以上の変換データが含まれるので、処理時間を観測するタイミング攻撃に対する耐性を一定の程度に保ちつつ、キャッシュメモリ部の容量をより小さくすることができる。
ここで、平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、所定長のライン記憶領域を含むキャッシュメモリ部と、前記主メモリ部に記憶されている前記コンピュータプログラムから1個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する1個の変換データを含み、前記コンピュータプログラムは、部分データを取得する取得命令群と、取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含み、前記所定位置は、前記部分データに、所定演算を施して得られる位置であり、前記演算命令群は、前記部分データに、前記所定演算を施して、対応する前記変換データの前記変換表における位置を算出するとしてもよい。また、前記所定演算は、mod zにおける前記部分データと奇数との乗算であり、zは、部分データが取り得る値の種類の数であるとしてもよい。
【0019】
これらの構成によると、変換表において変換データがランダムに配置されるので、所定演算が漏洩しなければ、攻撃に対する耐性を保つことができる。
ここで、平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、部分データに対応する変換データを含む第1変換表と、部分データに対応する変換データを含む第2変換表と、前記プロセスにおいて、前記第1変換表及び前記第2変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、所定長のライン記憶領域を含むキャッシュメモリ部と、前記主メモリ部に記憶されている前記コンピュータプログラムから1個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、前記実行部は、前記第1変換表及び前記第2変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、前記第1変換表及び前記第2変換表は、それぞれ、前記所定長のライン表領域を有し、各ライン表領域の所定位置において、部分データに対応する1個の変換データを含み、前記コンピュータプログラムは、部分データを取得する取得命令群と、取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含み、前記第1変換表における前記所定位置は、前記部分データに、第1演算を施して得られる位置であり、前記第2変換表における前記所定位置は、前記部分データに、第2演算を施して得られる位置であり、前記演算命令群は、変換の都度、前記第1変換表及び前記第2変換表のいずれを使用するかを決定する決定命令と、前記部分データに、決定された変換表に対応する前記第1演算又は前記第2演算を施して、前記変換データの決定した前記変換表における位置を算出する算出命令を含むとしてもよい。また、前記第1演算は、mod zにおける前記部分データと第1の奇数との乗算であり、前記第2演算は、mod zにおける前記部分データと第2の奇数との乗算であり、zは、部分データが取り得る値の種類の数であり、前記決定命令は、乱数を発生させ、発生させた乱数により、いずれの変換表を用いるかを決定するとしてもよい。
【0020】
これらの構成によると、変換の都度用いられる変換表が代わるので、攻撃に対する耐性を保つことができる。
【図面の簡単な説明】
【0021】
【図1】本発明に係る第1の実施の形態としてのコンテンツ配信システム10の構成を示す構成図である。
【図2】コンテンツサーバ装置100の構成を示すブロック図である。
【図3】コンテンツ暗号プログラム132の内容を説明するフローチャートである。
【図4】AES暗号プログラム133の構成を示す構成図である。
【図5】標準Sボックス380のデータ構造を示す構造図である。
【図6】変形Sボックス511のデータ構造を示す構造図である。
【図7】暗号メインモジュール501の内容を説明するフローチャートである。
【図8】Round処理モジュール503の内容を説明するフローチャートである。
【図9】SubBytes処理モジュール505の内容を説明するフローチャートである。
【図10】FinalRound処理モジュール504の内容を説明するフローチャートである。
【図11】マイクロプロセッサ101の構成を示すブロック図である。
【図12】データ部175のキャッシュライン部181〜187に変形Sボックス511の内容が格納された場合における一例を示す。
【図13】マイクロプロセッサ101の動作を示すフローチャートである。
【図14】AES暗号プログラム133による暗号化の動作を示すデータプロセスチャートである。
【図15】各Round処理又はFinalRound処理の動作におけるAddRoundKey処理及びSubBytes処理の詳細の動作を示すデータプロセスチャートである。
【図16】パーソナルコンピュータ200の構成を示すブロック図である。
【図17】コンテンツ復号プログラム232及び再生プログラム233の内容を説明するフローチャートである。
【図18】AES復号プログラム234の内容を説明するフローチャートである。
【図19】標準逆変換Sボックス800のデータ構造を示す構造図である。
【図20】逆変換変形Sボックス611のデータ構造を示す構造図である。
【図21】復号メインモジュール601の内容を説明するフローチャートである。
【図22】InvRound処理モジュール603の内容を説明するフローチャートである。
【図23】InvSubBytes処理モジュール605の内容を説明するフローチャートである。
【図24】InvFinalRound処理モジュール604の内容を説明するフローチャートである。
【図25】データ部の各キャッシュライン部に、逆変換変形Sボックス611の内容が格納された場合における一例を示す。
【図26】AES復号プログラム234による復号の動作を示すデータプロセスチャートである。
【図27】InvSubBytes処理及びAddRoundKey処理の詳細の動作を示すデータプロセスチャートである。
【図28】変形Sボックス911のデータ構造を示す構造図である。
【図29】SubBytes処理モジュール505aによるSubBytes処理における1個の左シフト処理902及び1の参照処理903の動作を示すデータプロセスチャートである。
【図30】データ部175のキャッシュライン部181、182、・・・に変形Sボックス911の内容が格納された場合における一例を示す。
【図31】変形Sボックス1011のデータ構造を示す構造図である。
【図32】SubBytes処理モジュール505bによるSubBytes処理において、1個の左シフト処理1002、1個の加算処理1003及び1の参照処理1004の動作を示すデータプロセスチャートである。
【図33】データ部175のキャッシュライン部181、182、・・・に変形Sボックス1011の内容が格納された場合における一例を示す。
【図34】変形Sボックス1121のデータ構造を示す構造図である。
【図35】整数である256個の入力値A(0、1、2、・・・、255)と、計算結果A×177 mod 256との対応を示す対応表である。
【図36】SubBytes処理モジュール505cによるSubBytes処理において、1個の乗算処理1102及び1個の参照処理1103の動作を示すデータプロセスチャートである。
【図37】データ部175のキャッシュライン部181、182、・・・に変形Sボックス1121の内容が格納された場合における一例を示す。
【図38】変形Sボックス1221のデータ構造を示す構造図である。
【図39】SubBytes処理モジュール505dによるSubBytes処理において、1個の乗算処理1202、1個のシフト処理1203及び1個の参照処理1204の動作を示すデータプロセスチャートである。
【図40】データ部175のキャッシュライン部181、182、・・・に変形Sボックス1221の内容が格納された場合における一例を示す。
【図41】変形Sボックス1311のデータ構造を示す構造図である。
【図42】SubBytes処理モジュール505eによるSubBytes処理において、1個の乗算処理1302、1個のシフト処理1303、1個の加算処理1304及び1個の参照処理1305の動作を示すデータプロセスチャートである。
【図43】データ部175のキャッシュライン部181、182、・・・に変形Sボックス1221の内容が格納された場合における一例を示す。
【図44】変形Sボックス1421のデータ構造を示す構造図である。
【図45】変形Sボックス1441のデータ構造を示す構造図である。
【図46】整数である256個の入力値B(0、1、2、・・・、255)と、その計算結果B×77 mod 256との対応を示す対応表である。
【図47】SubBytes処理モジュール505fによるSubBytes処理において、1個の乱数生成処理1402と、1個の乱数判断処理1403と、「1個のmod 256における177との乗算処理1406及び1個の変形Sボックス1421の参照処理1407」と、「1個のmod 256における77との乗算処理1408及び1個の変形Sボックス1441の参照処理1409」とからなる組1401の動作を示すデータプロセスチャートである。
【図48】データ部175のキャッシュライン部181、182、・・・に変形Sボックス1421の内容が格納された場合における一例を示す。
【図49】データ部175のキャッシュライン部181、182、・・・に変形Sボックス1441の内容が格納された場合における一例を示す。
【図50】SubBytes処理モジュール1501の内容を説明するフローチャートである。
【符号の説明】
【0022】
10 コンテンツ配信システム
30a 配信サーバ装置
30b 放送装置
30c BD製造装置
40 記録媒体
100 コンテンツサーバ装置
101 マイクロプロセッサ
102 ハードディスク部
103 メモリ部
104 入力制御部
105 表示制御部
106 通信部
107 キーボード
108 モニタ
109 システムバス
200 パーソナルコンピュータ
200a デジタル放送受信装置
200b BD再生装置
201 マイクロプロセッサ
202 ハードディスク部
203 メモリ部
204 入力制御部
205 表示制御部
206 通信部
207 キーボード
208 モニタ
【発明を実施するための最良の形態】
【0023】
1.コンテンツ配信システム10
本発明に係る1個の実施の形態としてのコンテンツ配信システム10について説明する。
1.1 コンテンツ配信システム10の構成
コンテンツ配信システム10は、図1に示すように、コンテンツサーバ装置100、配信サーバ装置30a、放送装置30b、BD製造装置30c、パーソナルコンピュータ200、デジタル放送受信装置200a及びBD再生装置200bから構成されている。
【0024】
コンテンツサーバ装置100は、映像データ及び音データから構成される映画のコンテンツを記憶しており、配信サーバ装置30aからの要求に応じて、記憶しているコンテンツを暗号化して暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線21を介して接続されている配信サーバ装置30aへ送信する。配信サーバ装置30aは、暗号化コンテンツを受信し、インターネット20を介して接続されているパーソナルコンピュータ200へ暗号化コンテンツを送信する。パーソナルコンピュータ200は、暗号化コンテンツを受信し、受信した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
【0025】
また、コンテンツサーバ装置100は、上記と同様に、放送装置30bからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線22を介して接続されている放送装置30bへ送信する。放送装置30bは、暗号化コンテンツを受信し、受信した暗号化コンテンツを放送波に乗せて放送し、デジタル放送受信装置200aは、放送波を受信し、受信した放送波から前記暗号化コンテンツを抽出し、抽出した暗号化コンテンツを復号して復号コンテンツを生成、生成した復号コンテンツを再生して映像及び音を出力する。
【0026】
さらに、コンテンツサーバ装置100は、上記と同様に、BD製造装置30cからの要求に応じて、暗号化コンテンツを生成し、生成した暗号化コンテンツを専用回線23を介して接続されているBD製造装置30cへ送信する。BD製造装置30cは、暗号化コンテンツを受信し、受信した暗号化コンテンツを記録媒体40に書き込む。暗号化コンテンツが書き込まれた記録媒体40は、販売されて利用者により購入される。利用者により、記録媒体40が装着されたBD再生装置200bは、記録媒体40から前記暗号化コンテンツを読み出し、読み出した暗号化コンテンツを復号して復号コンテンツを生成し、生成した復号コンテンツを再生して映像及び音を出力する。
【0027】
1.2 コンテンツサーバ装置100の構成
コンテンツサーバ装置100は、図2に示すように、マイクロプロセッサ101、ハードディスク部102、メモリ部103、入力制御部104、表示制御部105、通信部106及びシステムバス109などから構成されるコンピュータシステムである。マイクロプロセッサ101、ハードディスク部102、メモリ部103、入力制御部104、表示制御部105及び通信部106は、システムバス109を介して相互に接続されている。また、入力制御部104及び表示制御部105は、それぞれ、キーボード107及びモニタ108に接続されている。さらに、通信部106は、専用回線21、22及び23を介して、それぞれ、配信サーバ装置30a、放送装置30b及びBD製造装置30cに接続されている。
【0028】
ハードディスク部102及びメモリ部103には、様々なコンピュータプログラム及びその他のデータが記憶されており、マイクロプロセッサ101が、各コンピュータプログラムに従って動作することにより、コンテンツサーバ装置100は、その一部の機能を達成する。
(1)ハードディスク部102
ハードディスク部102は、コンピュータプログラム及びデータを長期に渡って格納するための記憶ユニットである。ハードディスク部102は、図2に示すように、コンテンツ120、コンテンツ121、コンテンツ122、・・・、鍵123、鍵124、鍵125、・・・、コンテンツ配信プログラム141、コンテンツ暗号プログラム142、AES暗号プログラム143、送信プログラム144、図示していないその他のコンピュータプログラム及び図示していないその他のデータを記憶している。また、暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・を記憶するための領域を備えている。
【0029】
コンテンツ120、コンテンツ121、コンテンツ122、・・・は、それぞれ、鍵123、鍵124、鍵125、・・・、に対応しており、また、暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・に対応している。
コンテンツ120、コンテンツ121、コンテンツ122、・・・は、それぞれ、映像データ及び音データが高効率に圧縮符号化された圧縮データである。
【0030】
鍵123、鍵124、鍵125、・・・は、それぞれ、コンテンツ120、コンテンツ121、コンテンツ122、・・・に、暗号化アルゴリズムを施して、暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・を生成する際に使用される暗号鍵であり、それぞれ、128ビット長のデータである。ここで、前記暗号化アルゴリズムは、AES(Advanced Encryption Standard)に基づくものである。
【0031】
暗号化コンテンツ126、暗号化コンテンツ127、暗号化コンテンツ128、・・・は、それぞれ、コンテンツ120、コンテンツ121、コンテンツ122、・・・に、暗号化アルゴリズムAESが施されて生成された暗号化データである。
コンテンツ配信プログラム141、コンテンツ暗号プログラム142、AES暗号プログラム143及び送信プログラム144は、それぞれ、マイクロプロセッサ101の指示により、コンテンツ配信プログラム131、コンテンツ暗号プログラム132、AES暗号プログラム133及び送信プログラム134として、メモリ部103にローディングされる。これらのコンピュータプログラムについては、後述する。
【0032】
(2)メモリ部103
メモリ部103は、実行対象となるコンピュータプログラム及びデータを一時的に蓄える記憶ユニットであり、図2に示すように、コンテンツ配信プログラム131、コンテンツ暗号プログラム132、AES暗号プログラム133、送信プログラム134、図示していないその他のプログラム及び図示していないその他のデータを記憶するための領域を備えている。
【0033】
上記の各プログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ101により解読され実行される形式である。
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、通常、人が話したり書いたりする場合に用いる言語により又はフローチャートにより各コンピュータプログラムの内容を表現し、これにより、各コンピュータプログラムを説明する。
【0034】
(a)コンテンツ配信プログラム131
コンテンツ配信プログラム131は、複数の命令コードを含んで構成されている。
これらの命令コード群は、コンテンツの配信先の装置から、例えば、配信サーバ装置30aから、コンテンツ、例えば、コンテンツ120の指定及びコンテンツの配信先の装置の指定を受け取り、受け取った指定により示されるコンテンツを指定して、コンテンツ暗号プログラム132を呼び出し、次に、コンテンツ暗号プログラム132により生成された暗号化コンテンツを、例えば、暗号化コンテンツ126としてハードディスク部102へ書き込み、受け取った指定による配信先の装置と、生成されハードディスク部102に書き込まれた暗号化コンテンツとを指定して、送信プログラム134を呼び出すことを示している。
【0035】
こうして、コンテンツ配信プログラム131に従ってマイクロプロセッサ101が動作することにより、受け取った指定により示される配信先の装置へ、生成された暗号化コンテンツが送信される。
(b)コンテンツ暗号プログラム132
コンテンツ暗号プログラム132は、図3に示すように、命令コード群S111、S112、S113、S114、S115及びS116を含んで構成されており、これらの命令コード群は、コンテンツ暗号プログラム132内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0036】
命令コード群S111は、指定を受け付けたコンテンツ内におけるデータの位置をビットにより示す読出しポイントに、初期値として値「−128」を代入し、指定を受け付けたコンテンツに対応する鍵をハードディスク部102から読み出すことを示す複数の命令コードを含む。ここで、値「−128」が代入された読出しポイントは、前記コンテンツ外の位置を示しているが、読出しポイントに初期値として値「−128」を代入するのは、後述する命令コード群S112の最初の実行において、読出しポイントが、前記コンテンツの先頭の位置を示すようにするためである。後述する命令コード群S112の最初の実行において、前記読出しポイントに128ビットが加算され、読出しポイントは、値「0」を有することになり、この読出しポイントは、前記コンテンツの先頭の位置を示している。
【0037】
命令コード群S112は、前記読出しポイントに128ビットを加算し、次に、前記コンテンツにおいて、加算された読出しポイントにより示される位置から1ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記コンテンツ内であるならば、当該位置から1ブロック分のデータを読み出し、読出しポイントにより示される位置が前記コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含む。ここで、1ブロックは、128ビット長のデータである。
【0038】
命令コード群S113は、命令コード群S112から終了コードが出力された場合には、コンテンツ暗号プログラム132による処理を終了し、終了コードが出力されていない場合には、次の命令コード群S114に制御を移すことを示す複数の命令コードを含む。
命令コード群S114は、読み出された前記鍵及び読み出された前記1ブロックを伴って、AES暗号プログラム133を呼び出すことを示す複数の命令コードを含む。前記1ブロックを伴って、AES暗号プログラム133が呼び出されることにより、前記ブロックにAESによる暗号化が施されて暗号化ブロックが生成される。
【0039】
AES方式では、入力メッセージ(平文)と出力メッセージ(暗号文)がともに128ビットであり、入力する暗号化鍵、復号化鍵は、128ビット、192ビット、256ビットから選択出来るようになっている。本実施の形態では、暗号化鍵及び復号化鍵は、128ビットとしている。
命令コード群S115は、AES暗号プログラム133により生成された1個の暗号化ブロックを、ハードディスク部102に、例えば暗号化コンテンツ126の一部として書き込むことを示す複数の命令コードを含む。
【0040】
命令コード群S116は、次に、制御を命令コード群S112へ移すことを示す命令コードを含む。
(c)AES暗号プログラム133
AES暗号プログラム133は、AESに基づいて、128ビット長の平文ブロックを暗号化して128ビット長の暗号文ブロックを生成する暗号アルゴリズムであり、図4に示すように、暗号メインモジュール501、AddRoundKey処理モジュール502、Round処理モジュール503、FinalRound処理モジュール504、SubBytes処理モジュール505、ShiftRows処理モジュール506、MixColumns処理モジュール507、KeySchedule処理モジュール508及び変形Sボックス511から構成されている。
【0041】
各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ101により解読され実行される形式である。
(c−1)標準Sボックス380
ここでは、AESの暗号化において定義されている8ビット入力、8ビット出力を行うSボックスの参照処理において一般的に用いられるテーブルデータ配列である標準Sボックス380について、図5に示す配列表現381及び配列表現382を用いて説明する。
【0042】
なお、AESでは、標準Sボックスという用語は一般的に使用されていないが、本実施の形態において用いられる変形Sボックス511と区別するために、このような表現を採用している。
図5に示す配列表現381及び配列表現382は、標準Sボックス380を表現するものであって、配列表現381は、標準Sボックス380に含まれる複数の配列要素をそれぞれ配列番号(サフィックス)により区別して示しており、配列表現382は、標準Sボックス380に含まれる複数の配列要素それぞれの具体的な値を示している。
【0043】
配列表現381は、表現上の便宜のために、16行×16列のマトリックス状に配置された複数の配列要素を含み、配列表現382は、表現上の便宜のために、16行×16列のマトリックス状に配置された複数の配列要素の具体的な値を含む。配列表現381において、マトリックスのある位置に配置された配列要素は、配列表現382において、マトリックスの同じ位置に配置された具体的な値に対応している。
【0044】
標準Sボックス380は、256個の配列要素391、392、393、・・・、394、・・・、395、396、397、・・・、398を含んでいる。各配列要素は、8ビットのデータであり、「S[xx]」のように表現されている。ここで、「S」は、配列要素を示す配列要素名であり、「S」に続いて[ ]により囲まれた数値xxが、当該配列要素を識別するための配列番号である。図5の配列表現381の各配列要素において、各配列番号は、16進数により表現されている。
【0045】
具体的には、256個の配列要素391「S[00]」、392「S[01]」、393「S[02]」、・・・、394「S[0f]」、・・・、395「S[f0]」、396「S[f1]」、397「S[f2]」、・・・、398「S[ff]」は、それぞれ、具体値401「63」、具体値402「7c」、具体値403「77」、・・・、具体値404「76」、・・・、具体値405「8c」、具体値406「a1」、具体値407「89」、・・・、具体値408「16」である。これらの具体値は、16進数により表現されている。
【0046】
(c−2)変形Sボックス511
変形Sボックス511について説明する。
変形Sボックス511は、図6に示すように、2048個の配列要素431、441、442、443、444、445、446、447、432、・・・、433、・・・、434、・・・、435、・・・、436、・・・、437、・・・、438、・・・から構成されている。
【0047】
変形Sボックス511を構成する各配列要素は、図6においては、表現の便宜上、256行×8列のマトリックス状に配置されている。
各配列要素は、8ビットのデータである。従って、1行×8列分の配列要素の長さは、64ビット長である。
第1列の256個の配列要素431、432、433、434、・・・、435、436、437、438は、それぞれ、値S[00」、値S[01]、値S[02]、値S[03]、・・・、値S[fc]、値S[fd]、値S[fe]、値S[ff]を有する。ここで、値S[00]値S[01]、・・・、値S[fe]、値S[ff]は、上述の標準Sボックス380に含まれるものと同じである。
【0048】
第2列の256個の配列要素は、それぞれ、値「0xff」を有する。ここで、「0x」は、これに続く数字が16進数による表現であることを示している。
第3列〜第8列に含まれる各配列要素も、それぞれ、値「0xff」を有する。
このように、変形Sボックス511に含まれる複数の配列要素が、256行×8列のマトリックス状に配置されているとみなした場合に、変形Sボックス511において、第1列の256個の各配列要素に、標準Sボックス380に含まれる各配列要素が配され、第2〜第8列の各配列要素に値「0xff」が配されている。
【0049】
こうして、変形Sボックス511では、8個の連続して配置される配列要素について、その先頭の配列要素は、標準Sボックス380に含まれる配列要素と同じ値を有し、その他の配列要素は、意味のない値「0xff」を有している。
(c−3)暗号メインモジュール501
暗号メインモジュール501は、図7に示すように、命令コード群S121、S122、S123、S124、S125及びS126を含んで構成されており、これらの命令コード群は、暗号メインモジュール501内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0050】
命令コード群S121は、入力された平文ブロックと、暗号化鍵から生成された拡大鍵との演算であるAddRoundKey処理を行うAddRoundKey処理モジュール502を呼び出すことを示す複数の命令コードを含む。
命令コード群S122は、カウンタを0に初期化することを示す複数の命令コードを含む。このカウンタは、暗号メインモジュール501内において、繰返しを制御するためのものである。
【0051】
命令コード群S123は、後述するRound処理を行うRound処理モジュール503を呼び出すことを示す複数の命令コードを含む。
命令コード群S124は、前記カウンタに「1」を加算することを示す複数の命令コードを含む。
命令コード群S125は、前記カウンタが所定の繰返し回数「Nr−1」であるか否かを判定し、繰返し回数「Nr−1」でない場合には、命令コード群S123へ移行し、繰返し回数「Nr−1」である場合には、次の命令コード群S126へ移行することを示す複数の命令コードを含む。
【0052】
ここで、繰返し回数「Nr」は、暗号化鍵及び復号化鍵のビット長に依存し、暗号化鍵及び復号化鍵のビット長が128ビットの場合、Nr=10であり、ビット長が192ビットの場合、Nr=12であり、ビット長が256ビットの場合、Nr=14であると定められている。
命令コード群S126は、後述するFinalRound処理を行うFinalRound処理モジュール504を呼び出すことを示す複数の命令コードを含む。
【0053】
(c−4)Round処理モジュール503
Round処理モジュール503は、図8に示すように、命令コード群S131、S132、S133及びS134を含んで構成されており、これらの命令コード群は、Round処理モジュール503内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0054】
命令コード群S131は、16回のテーブル参照演算から構成されるSubBytes処理を行うSubBytes処理モジュール505を呼び出すことを示す複数の命令コードを含む。
命令コード群S132は、ShiftRows処理を行うShiftRows処理モジュール506を呼び出すことを示す複数の命令コードを含む。
命令コード群S133は、MixColumns処理を行うMixColumns処理モジュール507を呼び出すことを示す複数の命令コードを含む。
【0055】
命令コード群S134は、上述したAddRoundKey処理を行うAddRoundKey処理モジュール502を呼び出すことを示す複数の命令コードを含む。
(c−5)SubBytes処理モジュール505
本実施の形態のSubBytes処理では、128ビットのブロックデータを受け取り、受け取った128ビットのブロックデータを16個の8ビットの部分ブロックデータに分け(8ビット×16=128ビット)、各部分ブロックデータを3ビットだけ左へシフトする。こうして、16個の部分ブロックデータのそれぞれについて、11ビットのデータが生成される。次に、各11ビットのデータに、変形Sボックスの参照処理を施して、8ビットデータを出力する。
【0056】
このように、16個の部分ブロックデータについて、左シフトと変形Sボックスの参照処理とが施される。この結果、16個の8ビットデータが生成される。生成された16個の8ビットデータが連結されて128ビットのブロックデータが生成され出力される。
上記のように、各部分ブロックデータを3ビットだけ左へシフトするのは、次の理由による。
【0057】
3ビットだけ左へシフトすることにより、各部分ブロックデータが8倍される。変形Sボックス511においては、連続して配置されている8個の配列要素のうち、先頭の1個については、有効な配列要素S[xx]が配置されているので、各部分ブロックデータを8倍して得られたデータをアドレスとして、変形Sボックス511を参照することにより、有効な配列要素S[xx]のみが得られるのである。
【0058】
なお、SubBytes処理モジュール505は、上述した理由により、3ビットの左シフトの処理に代えて、8倍の乗算を行う乗算処理を含むとしてもよい。
また、同様にして、別の変形Sボックスにおいて、連続して配置されている16個の配列要素のうち、先頭の1個については、有効な配列要素S[xx]が配置されているとするなら、各部分ブロックデータを16倍して得られたデータをアドレスとして、前記別の変形Sボックスを参照することにより、有効な配列要素S[xx]のみが得られる。
【0059】
また、別の変形Sボックスにおいて、連続して配置されている4個の配列要素のうち、先頭の1個については、有効な配列要素S[xx]が配置されているとするなら、各部分ブロックデータを4倍して得られたデータをアドレスとして、前記別の変形Sボックスを参照することにより、有効な配列要素S[xx]のみが得られる。
SubBytes処理モジュール505は、図9に示すように、命令コード群S141、S142、S143、S144、S145、S146、・・・、S147及びS148を含んで構成されており、これらの命令コード群は、SubBytes処理モジュール505内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0060】
命令コード群S141は、16個の部分ブロックデータのうち、第1の部分ブロックデータを3ビットだけ左へシフトし、11ビットのデータを生成することを示す複数の命令コードを含む。
命令コード群S142は、命令コード群S141により生成された11ビットのデータを変形Sボックス511におけるアドレスとして、変形Sボックス511を参照し、前記11ビットのデータをアドレスとする位置に格納されている8ビットのデータを変形Sボックス511から読み出し、読み出した8ビットのデータを出力することを示す複数の命令コードを含む。
【0061】
命令コード群S143、S145、・・・、S147は、それぞれ、命令コード群S141と同様の複数の命令コードを含む。命令コード群S143、S145、・・・、S147においては、16個の部分ブロックデータのうち、それぞれ、第2の部分ブロックデータ、第3の部分ブロックデータ、・・・、第16の部分ブロックデータをシフトの対象としている点において、命令コード群S141と相違している。
【0062】
命令コード群S144、S146、・・・、S148は、それぞれ、命令コード群S142と同様の複数の命令コードを含む。命令コード群S144、S146、・・・、S148においては、それぞれ命令コード群S143、S145、・・・、S147による出力結果を用いる点において、命令コード群S142と相違している。
(c−6)FinalRound処理モジュール504
FinalRound処理モジュール504は、図10に示すように、命令コード群S151、S152及びS153を含んで構成されており、これらの命令コード群は、FinalRound処理モジュール504内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0063】
命令コード群S151は、SubBytes処理モジュール505を呼び出すことを示す複数の命令コードを含む。
命令コード群S152は、ShiftRows処理を行うShiftRows処理モジュール506を呼び出すことを示す複数の命令コードを含む。
命令コード群S153は、AddRoundKey処理を行うAddRoundKey処理モジュール502を呼び出すことを示す複数の命令コードを含む。
【0064】
(c−7)その他
AddRoundKey処理モジュール502、ShiftRows処理モジュール506、MixColumns処理モジュール507及びKeySchedule処理モジュール508は、それぞれ、AESに規定されているAddRoundKey処理、ShiftRows処理、MixColumns処理及びKeySchedule処理を行う。これらの処理については、AESに規定されている通りであるので、説明を省略する。
【0065】
(d)送信プログラム134
送信プログラム134は、複数の命令コードが並べられて構成されており、呼出し元のプログラムから、データの指定及び配信先の装置の指定を受け取り、通信部106を制御して、指示されたデータを指定された配信先の装置へ送信することを示す複数の命令コードを含む。
【0066】
(3)マイクロプロセッサ101
マイクロプロセッサ101は、コンテンツサーバ装置100の制御、データの計算・加工を行う中枢部分であり、メモリ部103に記憶されているコンピュータプログラムに従って、演算、制御などを行う。
マイクロプロセッサ101は、図11に示すように、演算部161、キャッシュ部162及び図示していないその他のユニットから構成されている。
(キャッシュ部162)
キャッシュ部162は、プログラムの実行時に、演算部161によるメモリ部103へのアクセスにより、そのアクセス時間がプログラムの実行性能に影響することを回避するために、設けられたものである。
【0067】
キャッシュ部162は、図11に示すように、データ部175及び図示していないその他のユニットから構成されている。データ部175は、さらに、256個のキャッシュライン部181、182、183、184、185、・・・、186及び187から構成されている。各キャッシュライン部は、64ビットのメモリ領域を備えている。
メモリ部103に記憶されている内容の一部が、データ部175のいずれかのキャッシュライン部にコピーされる。
【0068】
キャッシュ部162は、メモリ部103と同様に、アドレスが与えられると、そのアドレスに対応するキャッシュライン部に格納されているデータを出力する。
(演算部161)
演算部161は、メモリ部103に記憶されているコンピュータプログラム中の命令コードを一つ一つ解釈し、解釈結果に応じて、演算・制御を行う。
【0069】
演算部161は、次に取り出すべき命令が入っている番地情報を格納するプログラムカウンタPCを保持する。
コンピュータプログラムを実行する場合、演算部161は、まず、ハードディスク部102に格納されているコンピュータプログラムをメモリ部103にコピー(ロード)する。次に、プログラムカウンタPCを初期値に設定し、プログラムカウンタPCの値を基に、コンピュータプログラムの中の命令を一つ取得する。そして、その取得した一命令を実行する。その命令の実行中に、メモリ部103にロードされたコンピュータプログラムに定義されている固定値データを参照する場合、演算部161は、メモリ部103にアクセスしその固定値データを取得するとともに、キャッシュ部162にも同じ固定値データを格納する。次に同じ固定値データを参照する場合は、演算部161は、メモリ部103ではなく、キャッシュ部162にアクセスし、その固定値データを取得する。そして、その一命令を実行し終わったら、プログラムカウンタPCを一つ進め、再度コンピュータプログラムの中の命令を一つ取得し、上記と同様にその一命令を実行する。最終的に、プログラムカウンタPCが終了を示す値となったら、コンピュータプログラムの実行を終了する。
【0070】
このように、演算部161は、キャッシュ部162にアクセスし、所望のデータがキャッシュ部162に存在しない場合には、メモリ部103から所望のデータを読み出し、読み出したデータをキャッシュ部162のデータ部175のいずれかのキャッシュライン部に書き込む。このときは、メモリ部103からキャッシュ部162へのデータのコピーのために、多少時間がかかるが、2度目以降には、演算部161は、キャッシュ部162へアクセスするので、高速となる。
(データ部175の一例)
データ部175のキャッシュライン部181〜187に、上述したSubBytes処理により、変形Sボックス511の内容が格納された場合における一例を図12にデータ部175aとして示す。
【0071】
データ部175aのキャッシュライン部181a、182a、183a、184a、・・・、186a、187aには、変形Sボックス511の内容がそのまま格納されている。
つまり、キャッシュライン部181aには、配列要素451「S[00]」、配列要素461「0xff」、配列要素462「0xff」、配列要素463「0xff」、配列要素464「0xff」、配列要素465「0xff」、配列要素466「0xff」及び配列要素467「0xff」が格納されている。また、他のキャッシュライン部においても、その先頭に標準Sボックス380の配列要素が格納され、他の部分には、「0xff」が格納されている。
【0072】
例えば、キャッシュライン部182a、183a、184a、・・・、186a、187aの先頭には、それぞれ、標準Sボックス380の配列要素である配列要素452「S[01]」、配列要素453「S[02]」、配列要素454「S[03]」、・・・、配列要素455「S[fc]」、配列要素456「S[fd]」、配列要素457「S[fe]」及び配列要素458「S[ff]」が格納されている。
【0073】
このように、データ部175aの各キャッシュライン部には、わずか1個の標準Sボックス380の配列要素のみが格納されている。
1.3 コンテンツサーバ装置100の動作
コンテンツサーバ装置100の動作について説明する。
(1)マイクロプロセッサ101の動作
マイクロプロセッサ101の動作について、図13に示すフローチャートを用いて説明する。
【0074】
演算部161は、ハードディスク部102に格納されているコンピュータプログラムをメモリ部103にコピーし、次に取り出すべき命令に関する番地情報を格納するプログラムカウンタPCを初期値に設定する(ステップS161)。
次に、演算部161は、メモリ部103にロードしたコンピュータプログラムの中から、プログラムカウンタPCの値を基に、一つの命令を取り出す(ステップS162)。
【0075】
その際、演算部161は、その命令において、コンピュータプログラム内に定義されている固定データを使用するか否かを判断し(ステップS163)、固定データを使用する場合(ステップS163でYes)、使用したい固定データがキャッシュ部162上にあるとき(ステップS164でYes)、キャッシュ部162にアクセスし、該当する固定データを取得し(ステップS165)、次に、取り出した命令を解読し、取得した固定データを用いて、解読した結果を実行し(ステップS166)、次に、プログラムカウンタPCが終了を示していたら(ステップS167でYes)、処理を終了する。もし、終了を指していない場合(ステップS167でNo)、プログラムカウンタPCを一つ進め(ステップS170)、次に、ステップS162に制御を移して処理を繰り返す。
【0076】
固定データを使用しない場合(ステップS163でNo)、演算部161は、次に、取り出した命令を解読し、解読した結果を実行し(ステップS166)、次に、ステップS167に制御を移して処理を繰り返す。
使用したい固定データがキャッシュ部162上にない場合(ステップS164でNo)、演算部161は、メモリ部103にアクセスし、該当する固定データを取得し(ステップS168)、取得した固定データをキャッシュ部162のキャッシュライン部にコピーし(ステップS169)、次に、取り出した命令を解読し、取得した固定データを用いて、解読した結果を実行し(ステップS166)、次に、ステップS167に制御を移して処理を繰り返す。
【0077】
(2)AES暗号プログラム133による暗号化の動作
AES暗号プログラム133による暗号化の動作について、図14に示すデータプロセスチャートを用いて説明する。ここでは、この図に示すように、128ビットの入力鍵K301を用いて、128ビットの平文データPT303から、128ビットの暗号文データCT308が生成されるものとする。
【0078】
AES暗号プログラム133による暗号化の動作は、この図に示すように、鍵スケジュールのステップ302と、10段のプロセス304、305、・・・、306、307とから構成される。
入力鍵K301に基づいて、KeySchedule処理モジュール508により、11個の拡大鍵SK、SK、・・・SK、SK、SK10が生成され(ステップ302)、生成された拡大鍵SK、SK、・・・、SK、SK、SK10が各段のAddRoundKey処理へ配布される(ステップ311、312、・・・、313、314、315)。
【0079】
次に、第1段のプロセスにおいて(プロセス304)、AddRoundKey処理モジュール502により拡大鍵SKを用いてAddRoundKey処理が行われ(ステップ321)、SubBytes処理モジュール505により、SubBytes処理が行われ(ステップ322)、ShiftRows処理モジュール506により、ShiftRows処理が行われ(ステップ323)、MixColumns処理モジュール507により、MixColumns処理が行われる(ステップ324)。
【0080】
次に、第2段のプロセスにおいて(プロセス305)、AddRoundKey処理モジュール502により拡大鍵SKを用いてAddRoundKey処理が行われ(ステップ331)、SubBytes処理モジュール505により、SubBytes処理が行われ(ステップ332)、ShiftRows処理モジュール506により、ShiftRows処理が行われ(ステップ333)、MixColumns処理モジュール507により、MixColumns処理が行われる(ステップ334)。
【0081】
同様に、第3段から第8段までの各段のプロセスにおいて、AddRoundKey処理、SubBytes処理、ShiftRows処理及びMixColumns処理が行われる。
次に、第9段のプロセスにおいて(プロセス306)、AddRoundKey処理モジュール502により拡大鍵SKを用いてAddRoundKey処理が行われ(ステップ341)、SubBytes処理モジュール505により、SubBytes処理が行われ(ステップ342)、ShiftRows処理モジュール506により、ShiftRows処理が行われ(ステップ343)、MixColumns処理モジュール507により、MixColumns処理が行われる(ステップ344)。
【0082】
最後に、第10段のプロセスにおいて(プロセス307)、AddRoundKey処理モジュール502により拡大鍵SKを用いてAddRoundKey処理が行われ(ステップ351)、SubBytes処理モジュール505により、SubBytes処理が行われ(ステップ352)、ShiftRows処理モジュール506により、ShiftRows処理が行われ(ステップ353)、AddRoundKey処理モジュール502により拡大鍵SK10を用いてAddRoundKey処理が行われる(ステップ354)。
【0083】
こうして、128ビットの暗号文データCT308が生成される。
(3)各Round処理又はFinalRound処理の動作
次に、各Round処理又はFinalRound処理の動作について、特に、AddRoundKey処理及びSubBytes処理の詳細の動作について、図15に示すデータプロセスチャートを用いて説明する。ここでは、図15に示すように、128ビットの拡大鍵361を用いて、128ビットの入力データ371から、128ビットの出力データ376が生成されるものとする。
【0084】
各Round処理又はFinalRound処理は、AddRoundKey処理372、SubBytes処理373、ShiftRows処理374及びMixColumns処理(又はAddRoundKey処理)375を含む。
AddRoundKey処理372は、16個の排他的論理和演算381、382、383、・・・、384を含む。また、SubBytes処理373は、16個のシフト処理385、386、387、・・・、388と、16個の変形Sボックスの参照処理391、392、393、・・・、394とを含む。
【0085】
128ビットの拡大鍵361は、16個の8ビットの部分鍵に分けられ、16個の部分鍵が、それぞれ、AddRoundKey処理372の16個の排他的論理和演算381、382、383、・・・、384へ出力される(ステップ362、363、364、・・・、365)。
128ビットの入力データ371が、16個の8ビットの部分データに分けられ、16個の部分データが、それぞれ、AddRoundKey処理372の16個の排他的論理和演算381、382、383、・・・、384へ出力される。
【0086】
排他的論理和演算381は、第1の部分データ(8ビット)を受け取り、第1の部分鍵(8ビット)を受け取り、受け取った第1の部分データと受け取った第1の部分鍵とに排他的論理和演算を施して、8ビットの第1の演算データを得、得られた第1の演算データをSubBytes処理373のシフト処理385へ出力する。
シフト処理385は、8ビットの第1の演算データを得、得られた第1の演算データを、3ビットだけ左側へシフトして、11ビットの第1のシフトデータを得る。ここで、得られた第1のシフトデータの上位の8ビットは、前記演算データと同じデータであり、前記第1のシフトデータの下位の3ビットは、「000」(2進数表現)である。次に、得られた第1のシフトデータをSubBytes処理373の参照処理391へ出力する。
【0087】
参照処理391は、第1のシフトデータを受け取り、受け取った第1のシフトデータをアドレスとして、変形Sボックス511を参照して、8ビットの第1の配列要素を取得する。
同様に、排他的論理和演算382は、第2の部分データと第2の部分鍵とに排他的論理和演算を施して、第2の演算データを得、シフト処理386は、第2の演算データを、3ビットだけ左側へシフトして、第2のシフトデータを得、参照処理392は、第2のシフトデータをアドレスとして、変形Sボックス511を参照して、第2の配列要素を取得する。
【0088】
同様に、排他的論理和演算383は、第3の部分データと第3の部分鍵とに排他的論理和演算を施して、第3の演算データを得、シフト処理387は、第3の演算データを、3ビットだけ左側へシフトして、第3のシフトデータを得、参照処理393は、第3のシフトデータをアドレスとして、変形Sボックス511を参照して、第3の配列要素を取得する。
【0089】
同様に、第4から第15の配列要素が取得される。
さらに、同様に、排他的論理和演算384は、第16の部分データと第16の部分鍵とに排他的論理和演算を施して、第16の演算データを得、シフト処理388は、第16の演算データを、3ビットだけ左側へシフトして、第16のシフトデータを得、参照処理394は、第16のシフトデータをアドレスとして、変形Sボックス511を参照して、第16の配列要素を取得する。
【0090】
こうして、第1から第16の配列要素(16個の配列要素)が取得される。
次に、第1から第16の配列要素は、この順序で結合されて128ビットのデータが生成される。
次に、生成されたデータに、ShiftRows処理374が施され、次に、MixColumns処理(又はAddRoundKey処理)375が施される。こうして、128ビットの出力データ376が生成され出力される。
【0091】
1.4 パーソナルコンピュータ200の構成
パーソナルコンピュータ200は、コンテンツサーバ装置100と同様のコンピュータシステムであって、図16に示すように、マイクロプロセッサ201、ハードディスク部202、メモリ部203、入力制御部204、表示制御部205及び通信部206などから構成される。入力制御部204及び表示制御部205は、それぞれ、キーボード207及びモニタ208に接続されている。また、通信部206は、インターネット20に接続されている。
【0092】
ハードディスク部202及びメモリ部203には、様々なコンピュータプログラムが記憶されており、マイクロプロセッサ201が、各コンピュータプログラムに従って動作することにより、パーソナルコンピュータ200は、その一部の機能を達成する。
なお、デジタル放送受信装置200a及びBD再生装置200bは、パーソナルコンピュータ200と同様の構成を有しているので、これらの装置についての説明を省略する。
【0093】
(1)ハードディスク部202
ハードディスク部202は、図16に示すように、鍵222、コンテンツ受信プログラム241、コンテンツ復号プログラム242、再生プログラム243及びAES復号プログラム244を記憶しており、また暗号化コンテンツ221を記憶するための領域を備えている。暗号化コンテンツ221と鍵222とは、対応している。
【0094】
暗号化コンテンツ221及び鍵222は、それぞれ、コンテンツサーバ装置100のハードディスク部102に記憶されている暗号化コンテンツ126及び鍵123と同じものである。
コンテンツ受信プログラム241、コンテンツ復号プログラム242、再生プログラム243及びAES復号プログラム244は、それぞれ、マイクロプロセッサ201の指示により、コンテンツ受信プログラム231、コンテンツ復号プログラム232、再生プログラム233及びAES復号プログラム234として、メモリ部203にローディングされる。これらのコンピュータプログラムについては、後述する。
【0095】
(2)メモリ部203
メモリ部203は、図16に示すように、コンテンツ受信プログラム231、コンテンツ復号プログラム232、再生プログラム233及びAES復号プログラム234を記憶している。また、メモリ部203は、復号コンテンツ領域236を含む。
これらのプログラムは、それぞれ、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ201により解読され実行される形式である。
【0096】
復号コンテンツ領域236には、暗号化コンテンツが復号されて生成された復号コンテンツが一時的に書き込まれる。
以下において、各コンピュータプログラムの内容を説明するが、各コンピュータプログラムの内容の理解を容易にするために、機械語形式の命令コードを用いた表現ではなく、通常、人が話したり書いたりする場合に用いる言語により又はフローチャートにより各コンピュータプログラムの内容を表現し、これにより、各コンピュータプログラムを説明する。
【0097】
(a)コンテンツ受信プログラム231
コンテンツ受信プログラム231は、複数の命令コードを含んで構成されている。
これらの命令コード群は、パーソナルコンピュータ200の利用者からコンテンツの指定を受け付けることを示す複数の命令コードと、指定を受け付けた前記コンテンツを識別するコンテンツ識別子を取得し、取得したコンテンツ識別子を、通信部206及びインターネット20を介して、配信サーバ装置30aへ送信することを示す複数の命令コードと、配信サーバ装置30aから、インターネット20及び通信部206を介して、前記コンテンツ識別子により識別される暗号化コンテンツを受信することを示す複数の命令コードと、受信した暗号化コンテンツをハードディスク部202へ、例えば暗号化コンテンツ221として書き込むことを示す複数の命令コードとを含んでいる。
【0098】
(b)コンテンツ復号プログラム232
コンテンツ復号プログラム232は、図17に示すように、命令コード群S211、S212、S213、S214、S215、S216、S217及びS218を含んで構成されており、これらの命令コード群は、コンテンツ復号プログラム232内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0099】
命令コード群S211は、パーソナルコンピュータ200の利用者から、ハードディスク部202に記憶されているいずれかの暗号化コンテンツの指定を受け付けることを示す複数の命令コードを含んでいる。
命令コード群S212は、メモリ部203に記憶されている再生プログラム233を呼び出すことを示す複数の命令コードを含んでいる。命令コード群S212が実行されることにより、その結果、コンテンツ復号プログラム232と再生プログラム233とが並行して実行される。
【0100】
命令コード群S213は、指定を受け付けた暗号化コンテンツ内におけるデータの位置をビットにより示す読出しポイントに初期値として値「−128」を代入し、次に、指定を受け付けた暗号化コンテンツに対応する鍵をハードディスク部202から読み出すことを示す複数の命令コードを含んでいる。
命令コード群S214は、前記読出しポイントに128ビットを加算し、次に、前記暗号化コンテンツにおいて、加算された読出しポイントにより示される位置から1ブロック分のデータの読出しを試みることを示す複数の命令コードと、読出しポイントにより示される位置が前記暗号化コンテンツ内であるならば、当該位置から1ブロック分のデータを読み出し、読出しポイントにより示される位置が前記暗号化コンテンツの外を示すならば、ブロックの読み出しが終了したことを示す終了コードを出力することを示す複数の命令コードとを含んでいる。ここで、1ブロックは、128ビット長のデータである。
【0101】
命令コード群S215は、命令コード群S214から終了コードが出力された場合には、コンテンツ復号プログラム232による処理を終了し、終了コードが出力されていない場合には、次の命令コード群S216に制御を移すことを示す複数の命令コードを含んでいる。
命令コード群S216は、読み出された前記鍵及び読み出された前記1ブロックを伴って、AES復号プログラム234を呼び出すことを示す複数の命令コードを含んでいる。
【0102】
命令コード群S217は、復号プログラム234により生成された1個の復号ブロックを、メモリ部203の復号コンテンツ領域236へ書き込むことを示す複数の命令コードを含んでいる。
命令コード群S218は、次に制御を命令コード群S214へ移すことを示す命令コードを含んでいる。
【0103】
(c)再生プログラム233
再生プログラム233は、図17に示すように、命令コード群S218、S219及びS220を含んで構成されており、これらの命令コード群は、再生プログラム233内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0104】
命令コード群S218は、メモリ部203が有する復号コンテンツ領域236から1個以上の復号ブロックを読み出すことを示す複数の命令コードを含んでいる。
命令コード群S219は、読み出した前記復号ブロックから映像データ及び音データを生成し、生成した映像データ及び音データを映像信号及び音信号に変換して、表示制御部205を介して、モニタ208へ出力することを示す複数の命令コードを含んでいる。
【0105】
命令コード群S220は、次に制御を命令コード群S218へ移すことを示す命令コードを含んでいる。
(d)AES復号プログラム234
AES復号プログラム234は、図18に示すように、復号メインモジュール601、AddRoundKey処理モジュール602、InvRound処理モジュール603、InvFinalRound処理モジュール604、InvSubBytes処理モジュール605、InvShiftRows処理モジュール606、InvMixColumns処理モジュール607、KeySchedule処理モジュール608及び逆変換変形Sボックス611から構成されている。
【0106】
各モジュールは、機械語形式の複数の命令コードを組み合わせて構成されるコンピュータプログラムである。前記機械語形式は、マイクロプロセッサ201により解読され実行される形式である。
(d−1)標準逆変換Sボックス800
ここでは、AESの復号において定義されている8ビット入力、8ビット出力を行う逆変換Sボックスの参照処理において一般的に用いられるテーブルデータ配列である標準逆変換Sボックス800について、図19に示す配列表現801及び配列表現802を用いて説明する。
【0107】
なお、AESでは、標準逆変換Sボックスという用語は一般的に使用されていないが、本実施の形態において用いられる逆変換変形Sボックス611と区別するために、このような表現を採用している。
図19に示す配列表現801及び配列表現802は、標準逆変換Sボックス800を表現するものであって、配列表現801は、標準逆変換Sボックス800に含まれる複数の配列要素をそれぞれ配列番号(サフィックス)により区別して示しており、配列表現802は、標準逆変換Sボックス800に含まれる複数の配列要素それぞれの具体的な値を示している。
【0108】
配列表現801は、表現上の便宜のために、16行×16列のマトリックス状に配置された複数の配列要素を含み、配列表現802は、表現上の便宜のために、16行×16列のマトリックス状に配置された複数の配列要素の具体的な値を含む。配列表現801において、マトリックスのある位置に配置された配列要素は、配列表現802において、マトリックスの同じ位置に配置された具体的な値に対応している。
【0109】
標準逆変換Sボックス800は、256個の配列要素811、812、813、・・・、814、・・・、815、816、817、・・・、818を含んでいる。各配列要素は、8ビットのデータであり、「InvS[xx]」のように表現されている。ここで、「InvS」は、配列要素を示す配列要素名であり、「InvS」に続いて[ ]により囲まれた数値xxが、当該配列要素を識別するための配列番号である。図19の配列表現801の各配列要素において、各配列番号は、16進数により表現されている。
【0110】
具体的には、256個の配列要素811「InvS[00]」、812「InvS[01]」、813「InvS[02]」、・・・、814「InvS[0f]」、・・・、815「InvS[f0]」、816「InvS[f1]」、817「InvS[f2]」、・・・、818「InvS[ff]」は、それぞれ、具体値821「52」、具体値822「09」、具体値823「6a」、・・・、具体値824「fb」、・・・、具体値825「17」、具体値826「2b」、具体値827「04」、・・・、具体値828「7d」である。これらの具体値は、16進数により表現されている。
【0111】
(d−2)逆変換変形Sボックス611
逆変換変形Sボックス611について説明する。
逆変換変形Sボックス611は、図20に示すように、2048個の配列要素831、841、842、843、844、845、846、847、832、・・・、833、・・・、834、・・・、835、・・・、836、・・・、837、・・・、838、・・・から構成されている。
【0112】
逆変換変形Sボックス611を構成する各配列要素は、図20においては、表現の便宜上、256行×8列のマトリックス状に配置されている。
第1列の256個の配列要素831、832、833、834、・・・、835、836、837、838は、それぞれ、値InvS[00]、値InvS[01]、値InvS[02]、値InvS[03]、・・・、値InvS[fc]、値InvS[fd]、値InvS[fe]、値InvS[ff]を有する。ここで、値InvS[00]、値InvS[01]、・・・、値InvS[fe]、値InvS[ff]は、上述の標準逆変換Sボックス800に含まれるものと同じである。
【0113】
第2列の256個の配列要素は、それぞれ、値「0xff」を有する。ここで、「0x」は、これに続く数字が16進数による表現であることを示している。
第3列〜第8列に含まれる各配列要素も、それぞれ、値「0xff」を有する。
このように、逆変換変形Sボックス611では、8個の連続して配置される配列要素について、その先頭の配列要素は、標準逆変換Sボックス800に含まれる配列要素と同じ値を有し、その他の配列要素は、意味のない値「0xff」を有している。
【0114】
(d−3)復号メインモジュール601
復号メインモジュール601は、図21に示すように、命令コード群S231、S232、S233、S234、S235及びS236を含んで構成されており、これらの命令コード群は、復号メインモジュール601内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0115】
命令コード群S231は、入力された暗号文ブロックと、暗号化鍵から生成された拡大鍵との演算であるAddRoundKey処理を行うAddRoundKey処理モジュール602を呼び出すことを示す複数の命令コードを含む。
命令コード群S232は、カウンタを0に初期化することを示す複数の命令コードを含む。このカウンタは、復号メインモジュール601内において、繰返しを制御するためのものである。
【0116】
命令コード群S233は、後述するInvRound処理を行うInvRound処理モジュール603を呼び出すことを示す複数の命令コードを含む。
命令コード群S234は、前記カウンタに「1」を加算することを示す複数の命令コードを含む。
命令コード群S235は、前記カウンタが所定の繰返し回数「Nr−1」であるか否かを判定し、繰返し回数「Nr−1」でない場合には、命令コード群S233へ移行し、繰返し回数「Nr−1」である場合には、次の命令コード群S236へ移行することを示す複数の命令コードを含む。
【0117】
ここで、繰返し回数「Nr」は、暗号化鍵及び復号化鍵のビット長に依存し、暗号化鍵及び復号化鍵のビット長が128ビットの場合、Nr=10であり、ビット長が192ビットの場合、Nr=12であり、ビット長が256ビットの場合、Nr=14であると定められている。
命令コード群S236は、後述するInvFinalRound処理を行うInvFinalRound処理モジュール604を呼び出すことを示す複数の命令コードを含む。
【0118】
(d−4)InvRound処理モジュール603
InvRound処理モジュール603は、図22に示すように、命令コード群S241、S242、S243及びS244を含んで構成されており、これらの命令コード群は、InvRound処理モジュール603内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0119】
命令コード群S241は、InvShiftRows処理を行うInvShiftRows処理モジュール606を呼び出すことを示す複数の命令コードを含む。
命令コード群S242は、16回のテーブル参照演算から構成されるInvSubBytes処理を行うInvSubBytes処理モジュール605を呼び出すことを示す複数の命令コードを含む。
【0120】
命令コード群S243は、上述したAddRoundKey処理を行うAddRoundKey処理モジュール602を呼び出すことを示す複数の命令コードを含む。
命令コード群S244は、InvMixColumns処理を行うInvMixColumns処理モジュール607を呼び出すことを示す複数の命令コードを含む。
(d−5)InvSubBytes処理モジュール605
本実施の形態のInvSubBytes処理では、128ビットのブロックデータを受け取り、受け取った128ビットのブロックデータを16個の8ビットの部分ブロックデータに分け(8ビット×16=128ビット)、各部分ブロックデータを3ビットだけ左へシフトする。こうして、16個の部分ブロックデータのそれぞれについて、11ビットのデータが生成される。次に、各11ビットのデータに、逆変換変形Sボックス611の参照処理を施して、8ビットデータを出力する。
【0121】
このように、16個の部分ブロックデータについて、左シフトと逆変換変形Sボックス611の参照処理とが施される。この結果、16個の8ビットデータが生成される。生成された16個の8ビットデータが連結されて128ビットのブロックデータが生成され出力される。
各部分ブロックデータを3ビットだけ左へシフトする理由については、上述した通りである。
【0122】
SubBytes処理モジュール505においては、変形Sボックス511の参照が行われるのに対して、InvSubBytes処理モジュール605においては、逆変換変形Sボックス611の参照が行われる点において、InvSubBytes処理モジュール605とSubBytes処理モジュール505とは相違している。
InvSubBytes処理モジュール605は、図23に示すように、命令コード群S251、S252、S253、S254、S255、S256、・・・、S257及びS258を含んで構成されており、これらの命令コード群は、InvSubBytes処理モジュール605内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0123】
命令コード群S251は、16個の部分ブロックデータのうち、第1の部分ブロックデータを3ビットだけ左へシフトし、11ビットのデータを生成することを示す複数の命令コードを含む。
命令コード群S252は、命令コード群S251により生成された11ビットのデータを逆変換変形Sボックス611におけるアドレスとして、逆変換変形Sボックス611を参照し、前記11ビットのデータをアドレスとする位置に格納されている8ビットのデータを逆変換変形Sボックス611から読み出し、読み出した8ビットのデータを出力することを示す複数の命令コードを含む。
【0124】
命令コード群S253、S255、・・・、S257は、それぞれ、命令コード群S251と同様の複数の命令コードを含む。命令コード群S253、S255、・・・、S257においては、16個の部分ブロックデータのうち、それぞれ、第2の部分ブロックデータ、第3の部分ブロックデータ、・・・、第16の部分ブロックデータをシフトの対象としている点において、命令コード群S251と相違している。
【0125】
命令コード群S254、S256、・・・、S258は、それぞれ、命令コード群S252と同様の複数の命令コードを含む。命令コード群S254、S256、・・・、S258においては、それぞれ命令コード群S253、S255、・・・、S257による出力結果を用いる点において、命令コード群S252と相違している。
(d−6)InvFinalRound処理モジュール604
InvFinalRound処理モジュール604は、図24に示すように、命令コード群S261、S262及びS263を含んで構成されており、これらの命令コード群は、InvFinalRound処理モジュール604内において、この順序で並べられている。各命令コード群は、1個又は複数個の命令コードを含んでいる。
【0126】
命令コード群S261は、InvShiftRows処理を行うInvShiftRows処理モジュール606を呼び出すことを示す複数の命令コードを含む。
命令コード群S262は、InvSubBytes処理を行うInvSubBytes処理モジュール605を呼び出すことを示す複数の命令コードを含む。
命令コード群S263は、AddRoundKey処理を行うAddRoundKey処理モジュール602を呼び出すことを示す複数の命令コードを含む。
【0127】
(d−7)その他
AddRoundKey処理モジュール602、InvShiftRows処理モジュール606、InvMixColumns処理モジュール607及びKeySchedule処理モジュール608は、それぞれ、AESに規定されているAddRoundKey処理、InvShiftRows処理、InvMixColumns処理及びKeySchedule処理を行う。これらの処理については、AESに規定されている通りであるので、説明を省略する。
【0128】
(3)マイクロプロセッサ201
マイクロプロセッサ201は、マイクロプロセッサ101と同様に、演算部、キャッシュ部及びその他のユニットから構成されている。また、キャッシュ部は、データ部175及びその他のユニットから構成され、データ部は、256個のキャッシュライン部から構成され、各キャッシュライン部は、64ビットのメモリ領域を備えている。
【0129】
マイクロプロセッサ201は、マイクロプロセッサ101と同様の構成を有しており、演算部、キャッシュ部及びその他のユニットについては、上述した通りである。
ここでは、データ部の各キャッシュライン部に、上述したInvSubBytes処理により、逆変換変形Sボックス611の内容が格納された場合における一例を図25にデータ部175bとして示す。
【0130】
データ部175bのキャッシュライン部181b、182b、183b、184b、・・・、186b、187bには、逆変換変形Sボックス611の内容がそのまま格納されている。
つまり、キャッシュライン部181bには、配列要素851「InvS[00]」、配列要素861「0xff」、配列要素862「0xff」、配列要素863「0xff」、配列要素864「0xff」、配列要素865「0xff」、配列要素866「0xff」及び配列要素867「0xff」が格納されている。また、他のキャッシュライン部においても、その先頭に逆変換標準Sボックス800の配列要素が格納され、他の部分には、「0xff」が格納されている。
【0131】
例えば、キャッシュライン部182b、183b、184b、・・・、186b、187bの先頭には、それぞれ、逆変換標準Sボックス800の配列要素である配列要素852「InvS[01]」、配列要素853「InvS[02]」、配列要素854「InvS[03]」、・・・、配列要素855「InvS[fc]」、配列要素856「InvS[fd]」、配列要素857「InvS[fe]」及び配列要素858「InvS[ff]」が格納されている。
【0132】
1.5 パーソナルコンピュータ200の動作
パーソナルコンピュータ200の動作について説明する。なお、マイクロプロセッサ201の動作は、マイクロプロセッサ101の動作と同じであるので、説明を省略する。
(1)AES復号プログラム234による復号の動作
AES復号プログラム234による復号の動作について、図26に示すデータプロセスチャートを用いて説明する。ここでは、この図に示すように、128ビットの入力鍵K701を用いて、128ビットの暗号文データCT703から、128ビットの復号文データDT709が生成されるものとする。
【0133】
AES復号プログラム234による復号の動作は、この図に示すように、鍵スケジュールのステップ702と、AddRoundKey処理のステップ704と、10段のプロセス705、706、・・・、707、708とから構成される。
入力鍵K701に基づいて、KeySchedule処理モジュール608により、11個の拡大鍵SK、SK、SK、・・・、SK、SK10が生成され(ステップ702)、生成された拡大鍵SK、SK、SK、・・・、SK、SK10が各AddRoundKey処理へ配布される(ステップ711、712、713、・・・、714、715)。
【0134】
次に、AddRoundKey処理モジュール602により拡大鍵SKを用いてAddRoundKey処理が行われる(ステップ704)。
次に、第1段のプロセス705において、InvShiftRows処理モジュール606により、InvShiftRows処理が行われ(ステップ721)、InvSubBytes処理モジュール605により、InvSubBytes処理が行われ(ステップ722)、AddRoundKey処理モジュール602により拡大鍵SKを用いてAddRoundKey処理が行われ(ステップ723)、InvMixColumns処理モジュール607により、InvMixColumns処理が行われる(ステップ724)。
【0135】
次に、第2段のプロセス706において、InvShiftRows処理モジュール606により、InvShiftRows処理が行われ(ステップ731)、InvSubBytes処理モジュール605により、InvSubBytes処理が行われ(ステップ732)、AddRoundKey処理モジュール602により拡大鍵SKを用いてAddRoundKey処理が行われ(ステップ733)、InvMixColumns処理モジュール607により、InvMixColumns処理が行われる(ステップ734)。
【0136】
同様に、第3段から第8段までの各段のプロセスにおいて、InvShiftRows処理、InvSubBytes処理、AddRoundKey処理及びInvMixColumns処理が行われる。
次に、第9段のプロセス707において、InvShiftRows処理モジュール606により、InvShiftRows処理が行われ(ステップ741)、InvSubBytes処理モジュール605により、InvSubBytes処理が行われ(ステップ742)、AddRoundKey処理モジュール602により拡大鍵SKを用いてAddRoundKey処理が行われ(ステップ743)、InvMixColumns処理モジュール607により、InvMixColumns処理が行われる(ステップ744)。
【0137】
最後に、第10段のプロセス708において、InvShiftRows処理モジュール606により、InvShiftRows処理が行われ(ステップ751)、InvSubBytes処理モジュール605により、InvSubBytes処理が行われ(ステップ752)、AddRoundKey処理モジュール602により拡大鍵SK10を用いてAddRoundKey処理が行われる(ステップ753)。
こうして、128ビットの復号データDT709が生成される。
【0138】
(2)各InvRound処理又はInvFinalRound処理におけるInvSubBytes処理及びAddRoundKey処理の詳細の動作
次に、各InvRound処理又はInvFinalRound処理におけるInvSubBytes処理及びAddRoundKey処理の詳細の動作について、図27に示すデータプロセスチャートを用いて説明する。
【0139】
各InvRound処理又はInvFinalRound処理は、図27に示すように、少なくとも、InvShiftRows処理771、InvSubBytes処理772及びAddRoundKey処理772を含む。
InvSubBytes処理772は、16個のシフト処理781、782、783、・・・、784と、16個の逆変換変形Sボックス611の参照処理785、786、788、・・・、789とを含む。
【0140】
また、AddRoundKey処理773は、16個の排他的論理和演算791、792、793、・・・、794を含む。
128ビットの拡大鍵761が、16個の8ビットの部分鍵に分けられ、16個の部分鍵が、それぞれ、AddRoundKey処理773の16個の排他的論理和演算791、792、793、・・・、794へ出力される(ステップ762、763、764、・・・、765)。
【0141】
各InvRound処理又はInvFinalRound処理において、InvShiftRows処理771が終了した後に、InvShiftRows処理771から128ビットのブロックデータが出力され、前記ブロックデータが、16個の8ビットの部分データに分けられ、16個の部分データが、それぞれ、InvSubBytes処理772の16個のシフト処理781、782、783、・・・、784へ出力される。
【0142】
シフト処理781は、第1の部分データ(8ビット)を受け取り、受け取った第1の部分データを、3ビットだけ左側へシフトして、11ビットの第1のシフトデータを得る。ここで、得られた第1のシフトデータの上位の8ビットは、前記第1の部分データと同じデータであり、前記第1のシフトデータの下位の3ビットは、「000」(2進数表現)である。次に、得られた第1のシフトデータを参照処理785へ出力する。
【0143】
参照処理785は、第1のシフトデータを受け取り、受け取った第1のシフトデータをアドレスとして、逆変換変形Sボックス611を参照して、8ビットの第1の配列要素を取得し、取得した第1の配列要素をAddRoundKey処理773の排他的論理和演算791へ出力する。
排他的論理和演算791は、第1の配列要素(8ビット)を受け取り、第1の部分鍵(8ビット)を受け取り、受け取った第1の配列要素と受け取った第1の部分鍵とに排他的論理和演算を施して、8ビットの第1の演算データを得る。
【0144】
同様に、シフト処理782は、第2の部分データ(8ビット)を、3ビットだけ左側へシフトして、11ビットの第2のシフトデータを得、参照処理786は、受け取った第2のシフトデータをアドレスとして、逆変換変形Sボックス611を参照して、8ビットの第2の配列要素を取得し、排他的論理和演算792は、第2の配列要素と第2の部分鍵とに排他的論理和演算を施して、8ビットの第2の演算データを得る。
【0145】
同様に、シフト処理783は、第3の部分データ(8ビット)を、3ビットだけ左側へシフトして、11ビットの第3のシフトデータを得、参照処理788は、受け取った第3のシフトデータをアドレスとして、逆変換変形Sボックス611を参照して、8ビットの第3の配列要素を取得し、排他的論理和演算793は、第3の配列要素と第3の部分鍵とに排他的論理和演算を施して、8ビットの第3の演算データを得る。
【0146】
同様に、第4から第15の演算データが得られる。
さらに、同様に、シフト処理784は、第16の部分データ(8ビット)を、3ビットだけ左側へシフトして、11ビットの第16のシフトデータを得、参照処理789は、受け取った第16のシフトデータをアドレスとして、逆変換変形Sボックス611を参照して、8ビットの第16の配列要素を取得し、排他的論理和演算794は、第16の配列要素と第16の部分鍵とに排他的論理和演算を施して、8ビットの第16の演算データを得る。
【0147】
こうして、第1から第16の演算データ(16個の演算データ)が取得される。
次に、第1から第16の演算データは、この順序で結合されて128ビットのデータが生成される。
2.変形例(1)
コンテンツサーバ装置100のメモリ部103が記憶しているAES暗号プログラム133の変形例について説明する。
【0148】
AES暗号プログラム133は、変形Sボックス511に代えて、図28に示す変形Sボックス911を含むとしてもよい。また、このとき、AES暗号プログラム133は、SubBytes処理モジュール505に代えて、SubBytes処理モジュール505a(図示していない)を含む。SubBytes処理モジュール505aは、3ビットの左シフトの処理に代えて、2ビットの左シフトの処理を含む。
【0149】
(変形Sボックス911)
変形Sボックス911は、図28に示すように、1024個の配列要素921、931、932、933、922、934、935、936、923、・・・、924、・・・、925、・・・、926、・・・、927、・・・、928、・・・から構成されている。
【0150】
変形Sボックス911を構成する各配列要素は、図28においては、表現の便宜上、128行×8列のマトリックス状に配置されている。
第1列の128個の配列要素921、923、・・・、925、927は、それぞれ、値S[00]、値S[02]、値S[04]、値S[06]、・・・、値S[f8]、値S[fa]、値S[fc]、値S[fe]を有する。ここで、値S[00]、値S[02]、値S[04]、値S[06]、・・・、値S[f8]、値S[fa]、値S[fc]、値S[fe]は、上述の標準Sボックス380に含まれるものと同じである。
【0151】
第2列の256個の配列要素は、それぞれ、値「0xff」を有する。ここで、「0x」は、これに続く数字が16進数による表現であることを示している。
第3列〜第4列に含まれる各配列要素も、値「0xff」を有する。
第5列の128個の配列要素922、924、・・・、926、928は、それぞれ、値S[01]、値S[03]、値S[05]、値S[07]、・・・、値S[f9]、値S[fb]、値S[fd]、値S[ff]を有する。ここで、値S[01]、値S[03]、値S[05]、値S[07]、・・・、値S[f9]、値S[fb]、値S[fd]、値S[ff]は、上述の標準Sボックス380に含まれるものと同じである。
【0152】
第6列の256個の配列要素は、それぞれ、値「0xff」を有する。
第7列〜第8列に含まれる各配列要素も、値「0xff」を有する。
このように、変形Sボックス911に含まれる複数の配列要素が、128行×8列のマトリックス状に配置されているとみなした場合に、変形Sボックス911において、第1列の128個の各配列要素に、標準Sボックス380に含まれる偶数の配列番号を有する各配列要素が配され、第5列の128個の各配列要素に、標準Sボックス380に含まれる奇数の配列番号を有する各配列要素が配され、第2〜第4列及び第6〜第8列の各配列要素に値「0xff」が配されている。
【0153】
こうして、変形Sボックス911では、4個の連続して配置される配列要素について、その先頭の配列要素は、標準Sボックス380に含まれる配列要素と同じ値を有し、その他の配列要素は、意味のない値「0xff」を有している。
(SubBytes処理モジュール505a)
SubBytes処理モジュール505aによるSubBytes処理では、128ビットのブロックデータを受け取り、受け取った128ビットのブロックデータを16個の8ビットの部分ブロックデータに分け(8ビット×16=128ビット)、図29に示すように、各部分ブロックデータを2ビットだけ左へシフトする(ステップ902)。こうして、16個の部分ブロックデータのそれぞれについて、10ビットのデータが生成される。次に、生成された各10ビットのデータに、変形Sボックス911の参照処理を施して、8ビットデータを出力する(ステップ903)。
【0154】
なお、上述したように、SubBytes処理モジュール505aによるSubBytes処理において、16個の2ビットの左シフト処理と、16個の変形Sボックス911の参照処理とが行われるが、表示を簡便にするために、図29においては、これらの16個の左シフト処理及び16個の参照処理のうち、1個の左シフト処理902及び1の参照処理903からなる組901のみを示している。
【0155】
このように、16個の部分ブロックデータについて、2ビットの左シフトと変形Sボックス911の参照処理とが施される。この結果、16個の8ビットデータが生成される。生成された16個の8ビットデータが連結されて128ビットのブロックデータが生成され出力される。
上記のように、各部分ブロックデータを2ビットだけ左へシフトするのは、次の理由による。
【0156】
2ビットだけ左へシフトすることにより、各部分ブロックデータが4倍される。変形Sボックス911においては、連続して配置されている4個の配列要素のうち、先頭の1個については、有効な配列要素S[xx]が配置されているので、各部分ブロックデータを4倍して得られたデータをアドレスとして、変形Sボックス911を参照することにより、有効な配列要素S[xx]のみが得られるのである。
【0157】
なお、SubBytes処理モジュール505aは、上述した理由により、2ビットの左シフトの処理に代えて、4倍の乗算を行う乗算処理を含むとしてもよい。
(データ部の一例)
データ部175のキャッシュライン部181、182、・・・に、上述したSubBytes処理により、変形Sボックス911の内容が格納された場合における一例を図30にデータ部175cとして示す。
【0158】
図30によると、データ部175cの先頭から128個のキャッシュライン部181c、182c、183c、184c、・・・には、変形Sボックス911の内容がそのまま格納されている。
つまり、キャッシュライン部181cには、配列要素941「S[00]」、配列要素951「0xff」、配列要素952「0xff」、配列要素953「0xff」、配列要素942「S[01]」、配列要素954「0xff」、配列要素955「0xff」及び配列要素956「0xff」が格納されている。また、他のキャッシュライン部においても、その第1番目及び第5番目に標準Sボックス380の配列要素が格納され、他の部分には、「0xff」が格納されている。
【0159】
また、128個のキャッシュライン部182c、183c、184c、・・・の先頭の配列要素には、それぞれ、標準Sボックス380の配列要素である配列要素943「S[02]、・・・、配列要素945「S[fc]」及び配列要素947「S[fe]」が格納されている。
また、128個のキャッシュライン部182c、183c、184c、・・・の第5番目の配列要素には、それぞれ、標準Sボックス380の配列要素である配列要素944「S[03]」、・・・、配列要素946「S[fd]」及び配列要素948「S[ff]」が格納されている。
【0160】
このように、データ部175cの各キャッシュライン部には、わずか2個の標準Sボックス380の配列要素のみが格納されている。
(AES復号プログラム234における適用)
パーソナルコンピュータ200のメモリ部203が記憶しているAES復号プログラム234において、上記と同様にしてもよい。
【0161】
つまり、AES復号プログラム234は、逆変換変形Sボックス611に代えて、図28に示す変形Sボックス911と同様に構成した逆変換変形Sボックスを含むとしてもよい。また、このとき、AES復号プログラム234のInvSubBytes処理モジュール605は、SubBytes処理モジュール505aと同様に、3ビットの左シフトの処理に代えて、2ビットの左シフトの処理を含む。
【0162】
3.変形例(2)
コンテンツサーバ装置100のメモリ部103が記憶しているAES暗号プログラム133の別の変形例について説明する。
AES暗号プログラム133は、変形Sボックス511に代えて、図31に示す変形Sボックス1011を含むとしてもよい。また、このとき、AES暗号プログラム133は、SubBytes処理モジュール505に代えて、SubBytes処理モジュール505b(図示していない)を含む。SubBytes処理モジュール505bは、3ビットの左シフトの処理に代えて、1ビットの左シフトの処理と、mod 512における値「1」の加算の処理とを含む。
【0163】
(変形Sボックス1011)
変形Sボックス1011は、図31に示すように、512個の配列要素1041、1031、1042、1032、1043、1033、1044、1034、・・・、1035、・・・、1036、・・・、1037、・・・、1038、・・・から構成されている。
【0164】
変形Sボックス1011を構成する各配列要素は、図31においては、表現の便宜上、64行×8列のマトリックス状に配置されている。
第2列の64個の配列要素1031、・・・、1035は、それぞれ、値S[00]、値S[04]、値S[08]、値S[12]、・・・、値S[f0]、値S[f4]、値S[f8]、値S[fc]を有する。ここで、値S[00]、値S[04]、値S[08]、値S[12]、・・・、値S[f0]、値S[f4]、値S[f8]、値S[fc]は、上述の標準Sボックス380に含まれるものと同じである。
【0165】
また、第4列の64個の配列要素1032、・・・、1036は、それぞれ、値S[01]、値S[05]、値S[09]、値S[13]、・・・、値S[f1]、値S[f5]、値S[f9]、値S[fd]を有する。ここで、値S[01]、値S[05]、値S[09]、値S[13]、・・・、値S[f1]、値S[f5]、値S[f9]、値S[fd]は、上述の標準Sボックス380に含まれるものと同じである。
【0166】
また、第6列の64個の配列要素1033、・・・、1037は、それぞれ、値S[02]、値S[06]、値S[10]、値S[14]、・・・、値S[f2]、値S[f6]、値S[fa]、値S[fe]を有する。ここで、値S[02]、値S[06]、値S[10]、値S[14]、・・・、値S[f2]、値S[f6]、値S[fa]、値S[fe]は、上述の標準Sボックス380に含まれるものと同じである。
【0167】
また、第8列の64個の配列要素1034、・・・、1038は、それぞれ、値S[03]、値S[07]、値S[11]、値S[15]、・・・、値S[f3]、値S[f7]、値S[fb]、値S[ff]を有する。ここで、値S[03]、値S[07]、値S[11]、値S[15]、・・・、値S[f3]、値S[f7]、値S[fb]、値S[ff]は、上述の標準Sボックス380に含まれるものと同じである。
【0168】
第1列の64個の配列要素は、それぞれ、値「0xff」を有する。ここで、「0x」は、これに続く数字が16進数による表現であることを示している。
第3列、第5列及び第7列に含まれる各配列要素も、値「0xff」を有する。
このように、変形Sボックス1011では、2個の連続して配置される配列要素について、その先頭の配列要素は、意味のない値「0xff」を有し、その他の配列要素は、標準Sボックス380に含まれる配列要素と同じ値を有している。
【0169】
(SubBytes処理モジュール505b)
SubBytes処理モジュール505bによるSubBytes処理では、128ビットのブロックデータを受け取り、受け取った128ビットのブロックデータを16個の8ビットの部分ブロックデータに分け(8ビット×16=128ビット)、図32に示すように、各部分ブロックデータを1ビットだけ左へシフトする(ステップ1002)。こうして、16個の部分ブロックデータのそれぞれについて、9ビットのデータが生成される。次に、生成された各9ビットのデータと値「1」とにmod 512における加算を施して9ビットの加算データを得る(ステップ1003)。
【0170】
つまり、(加算データ)=(9ビットのデータ)+ 1 mod 512
次に、生成された各9ビットの加算データに、変形Sボックス1011の参照処理を施して、8ビットデータを出力する(ステップ1004)。
なお、上述したように、SubBytes処理モジュール505bによるSubBytes処理において、16個の1ビットの左シフト処理と、16個のmod 512における値「1」との加算処理と、16個の変形Sボックス1011の参照処理とが行われるが、表示を簡便にするために、図32においては、これらの16個の左シフト処理、16個の加算処理及び16個の参照処理のうち、1個の左シフト処理1002、1個の加算処理1003及び1の参照処理1004からなる組1001のみを示している。
【0171】
このように、16個の部分ブロックデータについて、1ビットの左シフトと、mod 512の加算と、変形Sボックス1011の参照処理とが施される。この結果、16個の8ビットデータが生成される。生成された16個の8ビットデータが連結されて128ビットのブロックデータが生成され出力される。
上記のように、各部分ブロックデータを1ビットだけ左へシフトし、さらに、mod 512における値「1」の加算をするのは、次の理由による。
【0172】
1ビットだけ左へシフトし、さらに、mod 512の「1」加算することにより、各部分ブロックデータが2倍され、「1」が加算される。変形Sボックス1011においては、連続して配置されている2個の配列要素のうち、後の1個については、有効な配列要素S[xx]が配置されているので、各部分ブロックデータを2倍し、さらに「1」を加算して得られたデータをアドレスとして、変形Sボックス1011を参照することにより、有効な配列要素S[xx]のみが得られるのである。
【0173】
なお、SubBytes処理モジュール505bは、上述した理由により、1ビットの左シフトの処理に代えて、2倍の乗算を行う乗算処理を含むとしてもよい。
このように、変形Sボックスにおいて、連続して配置されている2個の配列要素のうち、2番目の配列要素について、有効な配列要素S[xx]が配置されているとするなら、上述したように、各部分ブロックデータを2倍し、さらに「1」を加算して得られたデータをアドレスとして、前記別の変形Sボックスを参照することにより、有効な配列要素S[xx]のみが得られる。
【0174】
また、別の変形Sボックスにおいて、連続して配置されている8個の配列要素のうち、3番目の配列要素について、有効な配列要素S[xx]が配置されているとするなら、上述したように、各部分ブロックデータを8倍し、さらに「2」を加算して得られたデータをアドレスとして、前記別の変形Sボックスを参照することにより、有効な配列要素S[xx]のみが得られる。
【0175】
また、別の変形Sボックスにおいて、連続して配置されている8個の配列要素のうち、4番目の配列要素について、有効な配列要素S[xx]が配置されているとするなら、上述したように、各部分ブロックデータを8倍し、さらに「3」を加算して得られたデータをアドレスとして、前記別の変形Sボックスを参照することにより、有効な配列要素S[xx]のみが得られる。
(データ部の一例)
データ部175のキャッシュライン部181、182、・・・に、上述したSubBytes処理により、変形Sボックス1011の内容が格納された場合における一例を図33にデータ部175dとして示す。
【0176】
データ部175dの先頭から64個のキャッシュライン部181d、182d、183d、184d、・・・には、変形Sボックス1011の内容がそのまま格納されている。
つまり、キャッシュライン部181dには、配列要素1061「0xff」、配列要素1051「S[00]」、配列要素1062「0xff」、配列要素1052「S[01]」、配列要素1063「0xff」、配列要素1053「S[02]」、配列要素1064「0xff」及び配列要素1054「S[03]」が格納されている。また、他のキャッシュライン部においても、その第2番目、第4番目、第6番目及び第8番目の配列要素には、標準Sボックス380の配列要素が格納され、他の配列要素には、「0xff」が格納されている。
【0177】
また、64個のキャッシュライン部182d、183d、184d、・・・の第2番目の配列要素には、それぞれ、標準Sボックス380の配列要素である配列要素「S[04]」、「S[08]」、「S[12]」、・・・、「S[f0]」、「S[f4]」、「S[f8]」及び「S[fc]」が格納されている。
また、64個のキャッシュライン部182d、183d、184d、・・・の第4番目の配列には、それぞれ、標準Sボックス380の配列要素である配列要素「S[05]」、「S[09]」、「S[13]」、・・・、「S[f1]」、「S[f5]」、「S[f9]」及び「S[fd]」が格納されている。
【0178】
また、64個のキャッシュライン部182d、183d、184d、・・・の第6番目の配列には、それぞれ、標準Sボックス380の配列要素である配列要素「S[06]」、「S[10]」、「S[14]」、・・・、「S[f2]」、「S[f6]」、「S[fa]」及び「S[fe]」が格納されている。
また、64個のキャッシュライン部182d、183d、184d、・・・の第8番目の配列には、それぞれ、標準Sボックス380の配列要素である配列要素、「S[07]」、「S[11]」、「S[15]」、・・・、「S[f3]」、「S[f7]」、「S[fb]」及び「S[ff]」が格納されている。
【0179】
このように、データ部175dの各キャッシュライン部には、わずか4個の標準Sボックス380の配列要素のみが格納されている。
(AES復号プログラム234における適用)
パーソナルコンピュータ200のメモリ部203が記憶しているAES復号プログラム234において、上記と同様にしてもよい。
【0180】
つまり、AES復号プログラム234は、逆変換変形Sボックス611に代えて、図31に示す変形Sボックス1011と同様に構成した逆変換変形Sボックスを含むとしてもよい。また、このとき、AES復号プログラム234のInvSubBytes処理モジュール605は、SubBytes処理モジュール505bと同様に、3ビットの左シフトの処理に代えて、1ビットの左シフトの処理と、mod 512における値「1」の加算の処理とを含む。
【0181】
4.変形例(3)
コンテンツサーバ装置100のメモリ部103が記憶しているAES暗号プログラム133の別の変形例について説明する。
AES暗号プログラム133は、変形Sボックス511に代えて、図34に示す変形Sボックス1121を含むとしてもよい。また、このとき、AES暗号プログラム133は、SubBytes処理モジュール505に代えて、SubBytes処理モジュール505c(図示していない)を含む。SubBytes処理モジュール505cは、3ビットの左シフトの処理に代えて、mod 256における乗算の処理を含む。
【0182】
(変形Sボックス1121)
変形Sボックス1121は、図34に示すように、256個の配列要素1131、1132、1133、1134、1135、1136、1137、1138、1139、1140、1141、1142、1143、1144、1145、1146、・・・から構成されている。これらの配列要素は、配列番号「0」、「1」、「2」、「3」、・・・、「255」により識別されるものとする。
【0183】
変形Sボックス1121を構成する各配列要素は、図34においては、表現の便宜上、32行×8列のマトリックス状に配置されている。
第1行の8個の配列要素1131、・・・、1138は、それぞれ、値S[0]、値S[81]、値S[162]、値S[243]、値S[68]、値S[149]、値S[230]、値S[55]を有する。ここで、値S[0]、値S[81]、値S[162]、値S[243]、値S[68]、値S[149]、値S[230]、値S[55]は、上述の標準Sボックス380に含まれるものと同じである。なお、ここでは、S[xx]において、xxは、10進数による表示である。
【0184】
また、第2行の8個の配列要素1139、・・・、1146は、それぞれ、値S[136]、値S[217]、値S[42]、値S[123]、値S[204]、値S[29]、値S[110]、値S[191]を有する。ここで、値S[136]、値S[217]、値S[42]、値S[123]、値S[204]、値S[29]、値S[110]、値S[191]は、上述の標準Sボックス380に含まれるものと同じである。ここでも、S[xx]において、xxは、10進数による表示である。
【0185】
第3行から第32行の各配列要素も、上述の標準Sボックス380に含まれる配列要素と同じものである。ただし、図34の変形Sボックス1121においては、第3行から第32行の各配列要素の表示を省略している。
(変形Sボックス1121の配列規則)
変形Sボックス1121には、次に説明する規則に従って、上述の標準Sボックス380に格納されている各配列要素が格納されている。
【0186】
整数である256個の入力値A(0、1、2、・・・、255)のそれぞれに対して、A×177mod 256を計算する。各入力値Aと対応する計算結果とを、図35に示す対応表1122に示す。
対応表1122は、256個の入力値Aと、A×177 mod 256による計算結果とを対応付けて表示するものである。ただし、図35に示す対応表1122においては、紙面の都合上の理由により、全てのAの値に対応する計算結果を表示している訳ではなく、その一部分のみを表示し、その他については、表示を省略している。
【0187】
ここで、例えば、入力値A=0に対するA×177 mod 256の計算結果は、「0」であり、入力値A=81に対する計算結果は、「1」であり、入力値A=162に対する計算結果は、「2」であり、入力値A=243に対する計算結果は、「3」であり、入力値A=68に対する計算結果は、「4」である。
一例として、変形Sボックス1121の配列番号「0」により示される配列要素1131に格納する標準Sボックス380の配列要素を次のようにして決定する。配列番号「0」と同じ値を有する計算結果「0」を対応表1122から探し、計算結果に対応する入力値A「0」を取得する。次に、取得した入力値A「0」を配列番号とする配列要素S[0]を、変形Sボックス1121の配列番号「0」により示される配列要素1131の値とする。
【0188】
また、別の一例として、変形Sボックス1121の配列番号「1」により示される配列要素1132に格納する標準Sボックス380の配列要素を次のようにして決定する。配列番号「1」と同じ値を有する計算結果「1」を対応表1122から探し、計算結果に対応する入力値A「81」を取得する。次に、取得した入力値A「81」を配列番号とする配列要素S[81]を、変形Sボックス1121の配列番号「1」により示される配列要素1132の値とする。
【0189】
さらに、別の一例として、変形Sボックス1121の配列番号「2」により示される配列要素1133に格納する標準Sボックス380の配列要素を次のようにして決定する。配列番号「2」と同じ値を有する計算結果「2」を対応表1122から探し、計算結果に対応する入力値A「162」を取得する。次に、取得した入力値A「162」を配列番号とする配列要素S[162]を、変形Sボックス1121の配列番号「2」により示される配列要素1133の値とする。
【0190】
以下は同様である。
このように、変形Sボックス1121では、上述した規則により、標準Sボックス380に含まれる配列要素が配置されている。
なお、上記において、入力値Aに対する計算結果A×177 mod 256を用いるとしており、入力値Aに、「177」を乗じているが、「177」には限定されない。他の奇数の値を乗じるとしてもよい。
【0191】
また、mod 256において乗算を行うとしているが、ここで、値「256」は、変換対象となるデータが取り得る長さ(例えば、ビット長)、言い換えれば、変換対象となるデータが取り得る値の種類の数に依存する。上記の実施の形態及び変形例では、変換対象となるデータは、8ビットであるので、そのデータの取り得る値の種類の数は、256である。上述したように、mod 256において乗算を行うことにより、この乗算により得られる乗算値の取り得る値の種類の数は、変換対象となるデータと同じ256となる。
【0192】
(SubBytes処理モジュール505c)
SubBytes処理モジュール505cによるSubBytes処理では、128ビットのブロックデータを受け取り、受け取った128ビットのブロックデータを16個の8ビットの部分ブロックデータに分け(8ビット×16=128ビット)、図36に示すように、mod 256において、各部分ブロックデータに値「177」を乗ずる(ステップ1102)。こうして、16個の部分ブロックデータのそれぞれについて、8ビットの乗算値が生成される。次に、生成された各8ビットの乗算値に、変形Sボックス1121の参照処理を施して、8ビットデータを出力する(ステップ1103)。
【0193】
なお、上述したように、SubBytes処理モジュール505cによるSubBytes処理において、16個のmod 256における乗算処理と、16個の変形Sボックス1121の参照処理とが行われるが、表示を簡便にするために、図36においては、これらの16個の乗算処理及び16個の参照処理のうち、1個の乗算処理1102及び1個の参照処理1103からなる組1101のみを示している。
【0194】
このように、16個の部分ブロックデータについて、mod 256の乗算と、変形Sボックス1121の参照処理とが施される。この結果、16個の8ビットデータが生成される。生成された16個の8ビットデータが連結されて128ビットのブロックデータが生成され出力される。
上記のように、mod 256において、各部分ブロックデータに、値「177」を乗じるのは、次の理由による。
【0195】
一例として、部分ブロックデータが「81」であるとする。このとき、上記の乗算により、
81 × 177 mod 256 = 1 が得られる。
次に、得られた「1」を配列番号として変形Sボックス1121を参照すると、配列要素S[81]が得られる。
【0196】
また、一例として、部分ブロックデータが「162」であるとする。このとき、上記の乗算により、
162 × 177 mod 256 = 2が得られる。
次に、得られた「2」を配列番号として変形Sボックス1121を参照すると、配列要素S[162]が得られる。
【0197】
このように、各部分ブロックデータに、mod 256において、値「177」を乗じ、得られた乗算値をアドレスとして、変形Sボックス1121を参照することにより、各部分ブロックデータに適切に対応する有効な配列要素S[xx]が得られるのである。
(データ部の一例)
データ部175のキャッシュライン部181、182、・・・に、上述したSubBytes処理により、変形Sボックス1121の内容が格納された場合における一例を図37にデータ部175eとして示す。
【0198】
データ部175eの先頭から32個のキャッシュライン部181e、182e、・・・には、変形Sボックス1121の内容がそのまま格納されている。
つまり、キャッシュライン部181eには、配列要素1151「S[0]」、配列要素1152「S[81]」、配列要素1153「S[162]」、配列要素1154「S[243]」、配列要素1155「S[68]」、配列要素1156「S[149]」、配列要素1157「S[230]」及び配列要素1158「S[55]」が格納されている。
【0199】
また、キャッシュライン部182eには、配列要素1159「S[136]」、配列要素1160「S[217]」、配列要素1161「S[42]」、配列要素1162「S[123]」、配列要素1163「S[204]」、配列要素1164「S[29]」、配列要素1165「S[110]」及び配列要素1166「S[191]」が格納されている。
【0200】
また、他のキャッシュライン部においても、上記と同様に、変形Sボックス1121の1行の8個の配列要素が、格納されている。
(AES復号プログラム234における適用)
パーソナルコンピュータ200のメモリ部203が記憶しているAES復号プログラム234において、上記と同様にしてもよい。
【0201】
つまり、AES復号プログラム234は、逆変換変形Sボックス611に代えて、図34に示す変形Sボックス1121と同様に構成した逆変換変形Sボックスを含むとしてもよい。また、このとき、AES復号プログラム234のInvSubBytes処理モジュール605は、SubBytes処理モジュール505cと同様に、3ビットの左シフトの処理に代えて、mod 512における値「177」の乗算の処理を含む。
【0202】
5.変形例(4)
コンテンツサーバ装置100のメモリ部103が記憶しているAES暗号プログラム133の別の変形例について説明する。
AES暗号プログラム133は、変形Sボックス511に代えて、図38に示す変形Sボックス1221を含むとしてもよい。また、このとき、AES暗号プログラム133は、SubBytes処理モジュール505に代えて、SubBytes処理モジュール505d(図示していない)を含む。SubBytes処理モジュール505dは、3ビットの左シフトの処理に代えて、mod 256における乗算の処理と1ビットの左シフトの処理とを含む。
【0203】
(変形Sボックス1221)
変形Sボックス1221は、図38に示すように、512個の配列要素1231、1241、1232、1242、1233、1243、1234、1244、1235、・・・、1236、・・・、1237、・・・、1238、・・・から構成されている。
変形Sボックス1221を構成する各配列要素は、図38においては、表現の便宜上、64行×8列のマトリックス状に配置されている。
【0204】
変形Sボックス1221においては、図34に示す変形Sボックス1121に格納されている各配列要素S[xx]が、変形Sボックス1121における配置の順序を保ちながら、1つ置きに格納されている。また、これらの配列要素の間には、「0xff」が格納されている。
例えば、変形Sボックス1221の第1行の8個の配列要素1231、1241、1232、1242、1233、1243、1234、1244は、それぞれ、値S[0]、「0xff」、値S[81]、「0xff」、値S[162]、「0xff」、値S[243]、「0xff」を有する。ここで、値S[0]、値S[81]、値S[162]、値S[243]は、図34に示す変形Sボックス1121の第1行の先頭の4個の配列要素と同じものである。
【0205】
また、変形Sボックス1221の第2行の8個の配列要素1235、・・・、1236、・・・、1237、・・・、1238、・・・は、それぞれ、値S[68]、「0xff」、値S[149]、「0xff」、値S[230]、「0xff」、値S[55]、「0xff」を有する。ここで、値S[68]、値S[149]、値S[230]、値S[55]は、図34に示す変形Sボックス1121の第1行の後半の4個の配列要素と同じものである。
【0206】
なお、ここでは、S[xx]において、xxは、10進数による表示である。
(SubBytes処理モジュール505d)
SubBytes処理モジュール505dによるSubBytes処理では、128ビットのブロックデータを受け取り、受け取った128ビットのブロックデータを16個の8ビットの部分ブロックデータに分け(8ビット×16=128ビット)、図39に示すように、mod 256において、各部分ブロックデータに値「177」を乗ずる(ステップ1202)。こうして、16個の部分ブロックデータのそれぞれについて、8ビットの乗算値が生成される。次に、生成された乗算値を1ビットだけ左へシフトして9ビットのシフトデータを生成する(ステップ1203)。こうして、16個の乗算値のそれぞれについて、9ビットのシフトデータが生成される。次に、生成された各9ビットのシフトデータに、変形Sボックス1221の参照処理を施して、8ビットデータを出力する(ステップ1204)。
【0207】
なお、上述したように、SubBytes処理モジュール505dによるSubBytes処理において、16個のmod 256における乗算処理と、16個の左シフト処理と、16個の変形Sボックス1221の参照処理とが行われるが、表示を簡便にするために、図39においては、これらの16個の乗算処理、16個のシフト処理及び16個の参照処理のうち、1個の乗算処理1202、1個のシフト処理1203及び1個の参照処理1204からなる組1201のみを示している。
【0208】
このように、16個の部分ブロックデータについて、mod 256の乗算と、1ビットの左シフト処理と、変形Sボックス1221の参照処理とが施される。この結果、16個の8ビットデータが生成される。生成された16個の8ビットデータが連結されて128ビットのブロックデータが生成され出力される。
上記のように、mod 256において、各部分ブロックデータに、値「177」を乗じるのは、変形例(4)において説明した通りである。また、1ビットの左シフト処理を行うのは、変形例(2)において説明した通りである。
【0209】
このように、各部分ブロックデータに、mod 256において、値「177」を乗じ、さらに、得られた乗算値に1ビットの左シフト処理を施して、シフトデータを得、得られたシフトデータをアドレスとして、変形Sボックス1221を参照することにより、各部分ブロックデータに適切に対応する有効な配列要素S[xx]が得られるのである。
なお、SubBytes処理モジュール505dは、1ビットの左シフトの処理に代えて、2倍の乗算を行う乗算処理を含むとしてもよい。
(データ部の一例)
データ部175のキャッシュライン部181、182、・・・に、上述したSubBytes処理により、変形Sボックス1221の内容が格納された場合における一例を図40にデータ部175fとして示す。
【0210】
データ部175fの先頭から64個のキャッシュライン部181f、182f、・・・には、変形Sボックス1221の内容がそのまま格納されている。
つまり、キャッシュライン部181fには、配列要素1251「S[0]」、配列要素1261「0xff」、配列要素1252「S[81]」、配列要素1262「0xff」、配列要素1253「S[162]」、配列要素1263「0xff」、配列要素1254「S[243]」、配列要素1264「0xff」が格納されている。
【0211】
また、キャッシュライン部182fには、配列要素1255「S[68]」、「0xff」、配列要素1256「S[149]」、「0xff」、配列要素1257「S[230]」、「0xff」、配列要素1258「S[55]」、「0xff」が格納されている。
このように、データ部175fの各キャッシュライン部には、変形Sボックス1221の一行に含まれている8個の配列要素が格納されている。
(AES復号プログラム234における適用)
パーソナルコンピュータ200のメモリ部203が記憶しているAES復号プログラム234において、上記と同様にしてもよい。
【0212】
つまり、AES復号プログラム234は、逆変換変形Sボックス611に代えて、図38に示す変形Sボックス1221と同様に構成した逆変換変形Sボックスを含むとしてもよい。また、このとき、AES復号プログラム234のInvSubBytes処理モジュール605は、SubBytes処理モジュール505dと同様に、3ビットの左シフトの処理に代えて、mod 256における値「177」の乗算の処理と、1ビットの左シフトの処理とを含む。
【0213】
6.変形例(5)
コンテンツサーバ装置100のメモリ部103が記憶しているAES暗号プログラム133の別の変形例について説明する。
AES暗号プログラム133は、変形Sボックス511に代えて、図41に示す変形Sボックス1311を含むとしてもよい。また、このとき、AES暗号プログラム133は、SubBytes処理モジュール505に代えて、SubBytes処理モジュール505e(図示していない)を含む。SubBytes処理モジュール505eは、3ビットの左シフトの処理に代えて、mod 256における乗算の処理と1ビットの左シフトの処理とmod 512における加算の処理とを含む。
【0214】
(変形Sボックス1311)
変形Sボックス1311は、図41に示すように、512個の配列要素1331、1321、1332、1322、1333、1323、1334、1324、・・・、1325、・・・、1326、・・・、1327、・・・、1328、・・・から構成されている。
【0215】
変形Sボックス1311を構成する各配列要素は、図41においては、表現の便宜上、64行×8列のマトリックス状に配置されている。
変形Sボックス1311においては、その先頭に「0xff」を格納し、その後については、図34に示す変形Sボックス1121に格納されている各配列要素S[xx]が、変形Sボックス1121における配置の順序を保ちながら、1つ置きに格納されている。また、これらの配列要素の間には、「0xff」が格納されている。
【0216】
例えば、変形Sボックス1311の第1行の8個の配列要素1331、1321、1332、1322、1333、1323、1334、1324は、それぞれ、「0xff」、値S[0]、「0xff」、値S[81]、「0xff」、値S[162]、「0xff」、値S[243]を有する。ここで、値S[0]、値S[81]、値S[162]、値S[243]は、図34に示す変形Sボックス1121の第1行の先頭の4個の配列要素と同じものである。
【0217】
また、変形Sボックス1311の第2行の8個の配列要素・・・、1325、・・・、1326、・・・、1327、・・・、1328は、それぞれ、「0xff」、値S[68]、「0xff」、値S[149]、「0xff」、値S[230]、「0xff」、値S[55]を有する。ここで、値S[68]、値S[149]、値S[230]、値S[55]は、図34に示す変形Sボックス1121の第1行の後半の4個の配列要素と同じものである。
【0218】
なお、ここでは、S[xx]において、xxは、10進数による表示である。
(SubBytes処理モジュール505e)
SubBytes処理モジュール505eによるSubBytes処理では、128ビットのブロックデータを受け取り、受け取った128ビットのブロックデータを16個の8ビットの部分ブロックデータに分け(8ビット×16=128ビット)、図42に示すように、mod 256において、各部分ブロックデータに値「177」を乗ずる(ステップ1302)。こうして、16個の部分ブロックデータのそれぞれについて、8ビットの乗算値が生成される。次に、生成された乗算値を1ビットだけ左へシフトして9ビットのシフトデータを生成する(ステップ1303)。こうして、16個の乗算値のそれぞれについて、9ビットのシフトデータが生成される。次に、mod 512において、生成された各9ビットのシフトデータに、値[1」を加算して9ビットの加算値を生成する(ステップS1304)。次に、生成された各9ビットの加算値に、変形Sボックス1311の参照処理を施して、8ビットデータを出力する(ステップ1305)。
【0219】
なお、上述したように、SubBytes処理モジュール505eによるSubBytes処理において、16個のmod 256における乗算処理と、16個の左シフト処理と、16個のmod 512における加算処理と、16個の変形Sボックス1311の参照処理とが行われるが、表示を簡便にするために、図42においては、これらの16個の乗算処理、16個のシフト処理、16個の加算処理及び16個の参照処理のうち、1個の乗算処理1302、1個のシフト処理1303、1個の加算処理1304及び1個の参照処理1305からなる組1301のみを示している。
【0220】
このように、16個の部分ブロックデータについて、mod 256の乗算と、1ビットの左シフト処理と、mod 512の加算と、変形Sボックス1311の参照処理とが施される。この結果、16個の8ビットデータが生成される。生成された16個の8ビットデータが連結されて128ビットのブロックデータが生成され出力される。
上記のように、mod 256において、各部分ブロックデータに、値「177」を乗じるのは、変形例(4)において説明した通りである。また、1ビットの左シフト処理を行うのは、変形例(2)において説明した通りである。また、mod 512において、加算を行うのは、変形例(2)において説明した通りである。
【0221】
このように、各部分ブロックデータに、mod 256において、値「177」を乗じ、さらに、得られた乗算値に1ビットの左シフト処理を施して、シフトデータを得、mod 256において、得られたシフトデータに値「1」を加算して加算値を得、得られた加算値をアドレスとして、変形Sボックス1311を参照することにより、各部分ブロックデータに適切に対応する有効な配列要素S[xx]が得られるのである。
【0222】
なお、SubBytes処理モジュール505eは、1ビットの左シフトの処理に代えて、2倍の乗算を行う乗算処理を含むとしてもよい。
(データ部の一例)
データ部175のキャッシュライン部181、182、・・・に、上述したSubBytes処理により、変形Sボックス1221の内容が格納された場合における一例を図43にデータ部175gとして示す。
【0223】
データ部175gの先頭から64個のキャッシュライン部181g、182g、・・・には、変形Sボックス1311の内容がそのまま格納されている。
つまり、キャッシュライン部181gには、配列要素1351「0xff」、配列要素1341「S[0]」、配列要素1352「0xff」、配列要素1342「S[81]」、配列要素1352「0xff」、配列要素1343「S[162]」、配列要素1353「0xff」、配列要素1344「S[243]」が格納されている。
【0224】
また、キャッシュライン部182gには、「0xff」、配列要素1345「S[68]」、「0xff」、配列要素1346「S[149]」、「0xff」、配列要素1347「S[230]」、「0xff」、配列要素1348「S[55]」が格納されている。
このように、データ部175gの各キャッシュライン部には、変形Sボックス1311の一行に含まれている8個の配列要素が格納されている。
(AES復号プログラム234における適用)
パーソナルコンピュータ200のメモリ部203が記憶しているAES復号プログラム234において、上記と同様にしてもよい。
【0225】
つまり、AES復号プログラム234は、逆変換変形Sボックス611に代えて、図41に示す変形Sボックス1311と同様に構成した逆変換変形Sボックスを含むとしてもよい。また、このとき、AES復号プログラム234のInvSubBytes処理モジュール605は、SubBytes処理モジュール505eと同様に、3ビットの左シフトの処理に代えて、mod 256における値「177」の乗算の処理と、1ビットの左シフトの処理と、mod 512における値「1」の加算の処理とを含む。
【0226】
7.変形例(6)
コンテンツサーバ装置100のメモリ部103が記憶しているAES暗号プログラム133の別の変形例について説明する。
AES暗号プログラム133は、変形Sボックス511に代えて、図44に示す変形Sボックス1421及び図45に示す変形Sボックス1441を含むとしてもよい。また、このとき、AES暗号プログラム133は、SubBytes処理モジュール505に代えて、SubBytes処理モジュール505f(図示していない)を含む。SubBytes処理モジュール505fについては、後述する。
【0227】
(変形Sボックス1421)
変形Sボックス1421は、図44に示すように、256個の配列要素1431、1432、1433、1434、1435、1436、1437、1438、・・・から構成されている。変形Sボックス1421は、図34に示す変形Sボックス1121と同じである。ここでは、変形Sボックス1421についての説明を省略する。
【0228】
(変形Sボックス1441)
変形Sボックス1441は、図34に示す変形Sボックス1121と類似する考え方により生成されたものであり、図45に示すように、256個の配列要素1451、1452、1453、1454、1455、1456、1457、1458、・・・から構成されている。これらの配列要素は、配列番号「0」、「1」、「2」、「3」、・・・、「255」により識別されるものとする。
【0229】
変形Sボックス1441を構成する各配列要素は、図45においては、表現の便宜上、32行×8列のマトリックス状に配置されている。
第1行の8個の配列要素1451、・・・、1458は、それぞれ、値S[0]、値S[133]、値S[10]、値S[143]、値S[20]、値S[153]、値S[30]、値S[163]を有する。ここで、値S[0]、値S[133]、値S[10]、値S[143]、値S[20]、値S[153]、値S[30]、値S[163]は、上述の標準Sボックス380に含まれるものと同じである。なお、ここでは、S[xx]において、xxは、10進数による表示である。
【0230】
また、第2行の8個の配列要素は、それぞれ、値S[40]、値S[173]、値S[50]、値S[183]、値S[60]、値S[193]、値S[70]、値S[203]を有する。ここで、値S[40]、値S[173]、値S[50]、値S[183]、値S[60]、値S[193]、値S[70]、値S[203]は、上述の標準Sボックス380に含まれるものと同じである。ここでも、S[xx]において、xxは、10進数による表示である。
【0231】
第3行から第32行の各配列要素も、上述の標準Sボックス380に含まれる配列要素と同じものである。ただし、図45の変形Sボックス1441においては、第3行から第32行の各配列要素の表示を省略している。
(変形Sボックス1441の配列規則)
変形Sボックス1441には、次に説明する規則に従って、上述の標準Sボックス380に格納されている各配列要素が格納されている。この配列規則は、図34に示す変形Sボックス1121における配列規則と類似のものである。
【0232】
ここで、整数である256個の入力値B(0、1、2、・・・、255)のそれぞれに対して、B×77 mod 256を計算する。各入力値Bと対応する計算結果とを、図46に示す対応表1442に示す。
対応表1442は、256個の入力値Bと、B×77 mod 256による計算結果とを対応付けて表示するものである。ただし、図46に示す対応表1442においては、紙面の都合上の理由により、全てのBの値に対応する計算結果を表示している訳ではなく、その一部分のみを表示し、その他については、表示を省略している。
【0233】
ここで、例えば、入力値B=0に対するB×77 mod 256の計算結果は、「0」であり、入力値B=133に対する計算結果は、「1」であり、入力値B=10に対する計算結果は、「2」であり、入力値B=143に対する計算結果は、「3」であり、入力値B=20に対する計算結果は、「4」である。
一例として、変形Sボックス1441の配列番号「0」により示される配列要素1451に格納する標準Sボックス380の配列要素を次のようにして決定する。配列番号「0」と同じ値を有する計算結果「0」を対応表1442から探し、計算結果に対応する入力値B「0」を取得する。次に、取得した入力値B「0」を配列番号とする配列要素S[0]を、変形Sボックス1441の配列番号「0」により示される配列要素1451の値とする。
【0234】
また、別の一例として、変形Sボックス1441の配列番号「1」により示される配列要素1452に格納する標準Sボックス380の配列要素を次のようにして決定する。配列番号「1」と同じ値を有する計算結果「1」を対応表1442から探し、計算結果に対応する入力値B「133」を取得する。次に、取得した入力値B「133」を配列番号とする配列要素S[133]を、変形Sボックス1441の配列番号「1」により示される配列要素1452の値とする。
【0235】
さらに、別の一例として、変形Sボックス1441の配列番号「2」により示される配列要素1453に格納する標準Sボックス380の配列要素を次のようにして決定する。配列番号「2」と同じ値を有する計算結果「2」を対応表1442から探し、計算結果に対応する入力値B「10」を取得する。次に、取得した入力値B「10」を配列番号とする配列要素S[10]を、変形Sボックス1441の配列番号「2」により示される配列要素1453の値とする。
【0236】
以下は同様である。
このように、変形Sボックス1441では、上述した規則により、標準Sボックス380に含まれる配列要素が配置されている。
(SubBytes処理モジュール505f)
SubBytes処理モジュール505fによるSubBytes処理では、128ビットのブロックデータを受け取り、受け取った128ビットのブロックデータを16個の8ビットの部分ブロックデータに分ける(8ビット×16=128ビット)。
【0237】
次に、各部分ブロックデータについて、図47に示すように、以下に示す処理を行う。
(a)乱数Rを生成する。乱数Rは、値「0」及び値「1」のいずれかである(ステップ1402)。
(b)生成した乱数Rが、値「0」及び値「1」のいずれであるかを判断する(ステップ1403)。
【0238】
(c)生成した乱数Rが、値「0」である場合に、mod 256において、当該部分ブロックデータに値「177」を乗ずる(ステップ1406)。こうして、8ビットの乗算値が生成される。次に、生成された8ビットの乗算値に、変形Sボックス1421の参照処理を施して、8ビットデータを出力する(ステップ1407)。
(d)生成した乱数Rが、値「1」である場合に、mod 256において、当該部分ブロックデータに値「77」を乗ずる(ステップ1408)。こうして、8ビットの乗算値が生成される。次に、生成された8ビットの乗算値に、変形Sボックス1441の参照処理を施して、8ビットデータを出力する(ステップ1409)。
【0239】
なお、上述したように、SubBytes処理モジュール505fによるSubBytes処理において、乱数生成処理を16個と、乱数判断処理を16個と、「mod 256における177との乗算処理」及び「mod 256における77との乗算処理」のいずれかを16個と、「変形Sボックス1421の参照処理」及び「変形Sボックス1441の参照処理」のいずれかを16個とが行われるが、表示を簡便にするために、図47においては、1個の乱数生成処理1402と、1個の乱数判断処理1403と、「1個のmod 256における177との乗算処理1406及び1個の変形Sボックス1421の参照処理1407」と、「1個のmod 256における77との乗算処理1408及び1個の変形Sボックス1441の参照処理1409」とからなる組1401のみを示している。
【0240】
このように、16個の部分ブロックデータについて、mod 256の177の乗算又は77の乗算と、変形Sボックス1421又は1441の参照処理とが施される。この結果、16個の8ビットデータが生成される。生成された16個の8ビットデータが連結されて128ビットのブロックデータが生成され出力される。
このように、各部分ブロックデータに、生成した乱数により、mod 256における、値「177」の乗算又は値「77」の乗算を行い、それぞれの場合について、変形Sボックス1421又は1441を参照することにより、各部分ブロックデータに適切に対応する有効な配列要素S[xx]が得られるのである。
(データ部の一例)
データ部175のキャッシュライン部181、182、・・・に、上述したSubBytes処理により、変形Sボックス1421の内容が格納された場合における一例を図48にデータ部175hとして示す。また、変形Sボックス1441の内容が格納された場合における一例を図49にデータ部175iとして示す。
(AES復号プログラム234における適用)
パーソナルコンピュータ200のメモリ部203が記憶しているAES復号プログラム234において、上記と同様にしてもよい。
【0241】
つまり、AES復号プログラム234は、逆変換変形Sボックス611に代えて、図44に示す変形Sボックス1421と同様に構成した逆変換変形Sボックスと、図45に示す変形Sボックス1441と同様に構成した逆変換変形Sボックスとを含むとしてもよい。また、このとき、AES復号プログラム234のInvSubBytes処理モジュール605は、SubBytes処理モジュール505fと同様に、3ビットの左シフトの処理に代えて、図47に示す各ステップの処理を含む。
【0242】
8.変形例(7)
コンテンツサーバ装置100のメモリ部103が記憶しているAES暗号プログラム133の別の変形例について説明する。
AES暗号プログラム133は、SubBytes処理モジュール505に代えて、図50に示すSubBytes処理モジュール1501を含むとしてもよい。
【0243】
SubBytes処理モジュール1501では、通常のSubBytes処理と同様に、Sボックスの参照演算が16回行われる。さらに、Sボックスの参照演算を行う前、もしくは後(図50では、後の場合について示している)に、キャッシュ部162のデータ部175に格納されている全ての配列要素を消去する処理を行う。
なお、キャッシュ部162に格納されているデータを消去する方法としては、特別な命令を使用する方法(Pentium(登録商標)の場合、”INVD”命令や”WBINVD”命令)や、メモリ部103上にある暗号処理と関係ないデータにアクセスすることによって、そのデータをキャッシュ部162にコピーさせ、キャッシュ部162に既にある配列要素を追い出す方法などがある。
【0244】
SubBytes処理モジュール1501では、図50に示すように、Sボックスの参照処理を行い(ステップS301)、次に、上記で説明したような方法で、キャッシュ部162に格納されている配列要素を消去する処理を行う(ステップS302)。
その後、ステップS303〜S314において、ステップS301及びS302と同様に、Sボックスの参照処理i(iは2から16の自然数)の後に、キャッシュ部162に格納されている配列要素を消去する処理を繰り返す。
【0245】
なお、上記の変形例においては、Sボックスの配列要素にアクセスした後(又はアクセスする前)にキャッシュクリア処理を呼ぶようにしていたが、それに限るものではない。
例えば、カウンタが0およびNr−1のときにだけ、各16回のテーブル参照演算の後には、キャッシュクリア処理を設け、他のカウンタ値(1からNr−2)の場合は、キャッシュクリア処理をしなくても良い。これは、タイミング攻撃は、平文および暗号文に近いSubBytes処理(例えば、1段目やNr−1段目)にある鍵を推定する際に必要な計算量の方が、平文および暗号文に遠いSubBytes処理(例えば、(Nr−1)/2段目)にある鍵を推定する際に必要な計算量よりも多いことを利用している。
【0246】
このように、ある特定の攻撃がされ易い部分(例えば、カウンタ値により判断される)にのみ、変形SubBytes処理を施すことにより、タイミング攻撃に対する耐性は、上記の変形例よりも劣るが、キャッシュクリア処理の回数は減るため、処理速度が向上する効果を有する。
9.その他の変形例
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【0247】
(1)コンピュータプログラムを処理する機器に含まれるプロセッサは、図11の構成に限るものではない。例えば、マイクロプロセッサ101は、キャッシュ部162の替わりに、高速でより容量の小さい1次キャッシュ部162aとより低速でより容量の大きな2次キャッシュ部162bを有していても良い。
この場合、演算部161は、最初に、1次キャッシュ部162aにデータを読みに行き、該当データが1次キャッシュ部162aになかった場合は、2次キャッシュ部162bに読みに行く。この場合、テーブル要素が1次キャッシュ部162aから取得される場合と、2次キャッシュ部162bから取得される場合と、メモリ部103から取得される場合と、の3通りのケースがあり、タイミング攻撃は、入力メッセージに依存して、全体の処理時間が同様に変化することを利用する。
【0248】
なお、マイクロプロセッサ101は、さらに、3次キャッシュ部などを有していても良い。
(2)上記の実施の形態及び変形例において、マイクロプロセッサは、キャッシュ部を備えるとしているが、本発明は、これに限定されることはない。マイクロプロセッサの内部にキャッシュ部を備えることはなく、コンピュータシステムがマイクロプロセッサとキャッシュ部とメモリ部とを含むとしてもよい。
【0249】
(3)上記の実施の形態及び変形例において、変形Sボックス511は、AES暗号プログラム133に含まれるとしているが、これには限定されない。
AES暗号プログラム133に含まれる各モジュール(コンピュータプログラム)と、変形Sボックス511とは、別々のデータ集合(ファイル)を構成しているとしてもよい。AES復号プログラム134についても同様である。
【0250】
(4)上記の実施の形態及び変形例において、各変形Sボックスは、標準Sボックスには存在しないダミーデータとして「0xff」を含むとしているが、「0xff」には限定されない。「0xff」の代わりに他のデータを含むとしてもよい。例えば、各変形Sボックスは、「0xff」に代えて、乱数生成器により生成した乱数を含むとしてもよいし、標準Sボックスに存在するデータを含むとしてもよい。
【0251】
(5)上記の実施の形態では、図8に示すように、Round処理モジュール503は、命令コード群S131、S132、S133及びS134を含んで構成されており、これらの命令コード群は、Round処理モジュール503内において、この順序で並べられ、この順序により、各命令コード群が実行されるとしているが、これには限定されない。
例えば、Round処理モジュール503に代えて、変形Round処理モジュールは、命令コード群S132、S133、S134及びS131を含んで構成されており、これらの命令コード群は、変形Round処理モジュール内において、この順序で並べられ、この順序により、各命令コード群が実行されるとしてもよい。この場合に、暗号メインモジュールは、命令コード群S131を呼び出し、その後、所定回数だけ、変形Round処理モジュールを呼び出す。
【0252】
(6)上記の実施の形態では、マイクロプロセッサ101のキャッシュ部は、64ビット長の各キャッシュライン部を備えているとしているが、キャッシュライン部のビット長はこれには限定されず、他の長さの各キャッシュライン部を有しているとしてもよい。この場合においても上記に説明したことが実現できる。
(7)上記の実施の形態では、暗号アルゴリズムとしてAESに適用するとしているが、これには限定されない。例えば、DES(Data Encryption Stanadard)等の暗号アルゴリズムに適用するとしてもよい。
【0253】
また、本発明は、暗号化及び復号にのみ適用できるのではない。具体的には、情報の改ざんチェックやデジタル署名などの用途に用いても良い。
(8)上記の各装置は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記RAM又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を1個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。
【0254】
(9)上記の各装置を構成する構成要素の一部又は全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムLSIは、その機能を達成する。
【0255】
(10)上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なICカード又は単体のモジュールから構成されているとしてもよい。前記ICカード又は前記モジュールは、マイクロプロセッサ、ROM、RAM、などから構成されるコンピュータシステムである。前記ICカード又は前記モジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ICカード又は前記モジュールは、その機能を達成する。このICカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
【0256】
(11)本発明は、上記に示す方法であるとしてもよい。また、これらの方法を5ンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【0257】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
【0258】
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
(12)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【0259】
本発明にかかるコンピュータシステムは、処理時間を観測するタイミング攻撃に対して耐性を高めることが出来るため、情報を秘密に扱う必要があるあらゆる産業において、経営的に、また継続的及び反復的に、使用することができる。また、本発明を構成する各装置は、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。

【特許請求の範囲】
【請求項1】
平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、
部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、
所定長のライン記憶領域を含むキャッシュメモリ部と、
前記主メモリ部に記憶されている前記コンピュータプログラムから1個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、
前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、
前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する1個の変換データを含み、前記ライン表領域の他の位置において、前記変換に無関係のデータを含み、
前記コンピュータプログラムは、
部分データを取得する取得命令群と、
取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、
前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含む
ことを特徴とするコンピュータシステム。
【請求項2】
前記変換表は、前記部分データが有する値に依存する位置において、前記変換データを含み、
前記演算命令群は、取得した部分データに演算を施すことにより、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項1に記載のコンピュータシステム。
【請求項3】
前記所定長は、前記変換データの長さの整数w倍であり、
前記ライン表領域は、前記所定位置において、前記変換データを含み、その他の全ての位置において、前記変換に無関係のデータを含み、
前記演算命令群は、整数wによる乗算を用いて、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項2に記載のコンピュータシステム。
【請求項4】
前記所定位置は、前記ライン表領域の先頭位置であり、
前記演算命令群は、取得した部分データに整数wを乗ずることにより、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項3に記載のコンピュータシステム。
【請求項5】
前記ライン表領域は、
前記所定位置において前記変換データを含み、
さらに、他の所定位置において、他の部分データに対応する他の変換データを含み、
その他の全ての位置において、前記変換に無関係のデータを含む
ことを特徴とする請求項2に記載のコンピュータシステム。
【請求項6】
前記所定長は、前記変換データの長さの整数w倍であり、
前記所定位置は、前記ライン表領域の先頭位置であり、
前記他の所定位置は、前記ライン表領域を2等分した後半領域の先頭位置であり、
前記演算命令群は、取得した部分データに整数w/2を乗ずることにより、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項5に記載のコンピュータシステム。
【請求項7】
前記所定長は、前記変換データの長さの整数w倍であり、
前記所定位置は、前記ライン表領域の先頭から整数x番目の位置であり、
前記他の所定位置は、前記ライン表領域を2等分した後半領域の先頭から整数x番目の位置であり、
前記演算命令群は、取得した部分データに整数w/2を乗じ、さらに整数xを加算することにより、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項5に記載のコンピュータシステム。
【請求項8】
平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、
部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、
所定長のライン記憶領域を含むキャッシュメモリ部と、
前記主メモリ部に記憶されている前記コンピュータプログラムから1個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、
前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、
前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する1個の変換データを含み、
前記コンピュータプログラムは、
部分データを取得する取得命令群と、
取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、
前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含み、
前記所定位置は、前記部分データに、所定演算を施して得られる位置であり、
前記演算命令群は、前記部分データに、前記所定演算を施して、対応する前記変換データの前記変換表における位置を算出する
ことを特徴とする請求項1に記載のコンピュータシステム。
【請求項9】
前記所定演算は、mod zにおける前記部分データと奇数との乗算であり、
zは、部分データが取り得る値の種類の数である
ことを特徴とする請求項8に記載のコンピュータシステム。
【請求項10】
平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムであって、
部分データに対応する変換データを含む第1変換表と、部分データに対応する変換データを含む第2変換表と、前記プロセスにおいて、前記第1変換表及び前記第2変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、
所定長のライン記憶領域を含むキャッシュメモリ部と、
前記主メモリ部に記憶されている前記コンピュータプログラムから1個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、
前記実行部は、前記第1変換表及び前記第2変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、
前記第1変換表及び前記第2変換表は、それぞれ、前記所定長のライン表領域を有し、各ライン表領域の所定位置において、部分データに対応する1個の変換データを含み、
前記コンピュータプログラムは、
部分データを取得する取得命令群と、
取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、
前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含み、
前記第1変換表における前記所定位置は、前記部分データに、第1演算を施して得られる位置であり、
前記第2変換表における前記所定位置は、前記部分データに、第2演算を施して得られる位置であり、
前記演算命令群は、
変換の都度、前記第1変換表及び前記第2変換表のいずれを使用するかを決定する決定命令と、
前記部分データに、決定された変換表に対応する前記第1演算又は前記第2演算を施して、前記変換データの決定した前記変換表における位置を算出する算出命令を含む
ことを特徴とする請求項1に記載のコンピュータシステム。
【請求項11】
前記第1演算は、mod zにおける前記部分データと第1の奇数との乗算であり、
前記第2演算は、mod zにおける前記部分データと第2の奇数との乗算であり、
zは、部分データが取り得る値の種類の数であり、
前記決定命令は、乱数を発生させ、発生させた乱数により、いずれの変換表を用いるかを決定する
ことを特徴とする請求項10に記載のコンピュータシステム。
【請求項12】
平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムにおいて用いられるコンピュータプログラムであって、
前記コンピュータシステムは、
部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、
所定長のライン記憶領域を含むキャッシュメモリ部と、
前記主メモリ部に記憶されている前記コンピュータプログラムから1個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、
前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、
前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する1個の変換データを含み、前記ライン表領域の他の位置において、前記変換に無関係のデータを含み、
前記コンピュータプログラムは、
部分データを取得する取得命令群と、
取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出する演算命令群と、
前記変換表から、算出された前記位置に存する前記変換データを読み出す読出命令群とを含む
ことを特徴とするコンピュータプログラム。
【請求項13】
前記コンピュータプログラムは、コンピュータ読み取り可能な記録媒体に記録されている
ことを特徴とする請求項12に記載のコンピュータプログラム。
【請求項14】
前記コンピュータプログラムは、搬送波に乗せられて送信される
ことを特徴とする請求項12に記載のコンピュータプログラム。
【請求項15】
平文又は暗号文に係る部分データを対応する変換データに変換するプロセスを経て、平文又は暗号文を暗号化又は復号するコンピュータシステムにおいて用いられる方法であって、
前記コンピュータシステムは、
部分データに対応する変換データを含む変換表と、前記プロセスにおいて、前記変換表を用いて部分データに対応する変換データを取得する複数の命令を含むコンピュータプログラムとを記憶している主メモリ部と、
所定長のライン記憶領域を含むキャッシュメモリ部と、
前記主メモリ部に記憶されている前記コンピュータプログラムから1個ずつ命令を読み出し、解読し、その解読結果に応じて動作する実行部とを備え、
前記実行部は、前記変換表に含まれる変換データを取得する際に、最初に、前記キャッシュメモリ部の前記ライン記憶領域から当該変換データの取得を試み、前記ライン記憶領域に当該変換データが存在しない場合に、前記主メモリ部から当該変換データを取得し、取得した変換データを含む前記所定長の包含データを前記ライン記憶領域に書き込み、
前記変換表は、前記所定長のライン表領域を有し、前記ライン表領域の所定位置において、部分データに対応する1個の変換データを含み、前記ライン表領域の他の位置において、前記変換に無関係のデータを含み、
前記方法は、
前記コンピュータプログラムにより、部分データを取得するステップと、
前記コンピュータプログラムにより、取得した部分データを用いて、対応する前記変換データの前記変換表における位置を算出するステップと、
前記コンピュータプログラムにより、前記変換表から、算出された前記位置に存する前記変換データを読み出すステップとを含む
ことを特徴とする方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate

【図36】
image rotate

【図37】
image rotate

【図38】
image rotate

【図39】
image rotate

【図40】
image rotate

【図41】
image rotate

【図42】
image rotate

【図43】
image rotate

【図44】
image rotate

【図45】
image rotate

【図46】
image rotate

【図47】
image rotate

【図48】
image rotate

【図49】
image rotate

【図50】
image rotate


【国際公開番号】WO2005/103908
【国際公開日】平成17年11月3日(2005.11.3)
【発行日】平成19年8月30日(2007.8.30)
【国際特許分類】
【出願番号】特願2006−512522(P2006−512522)
【国際出願番号】PCT/JP2005/007319
【国際出願日】平成17年4月15日(2005.4.15)
【出願人】(000005821)松下電器産業株式会社 (73,050)
【Fターム(参考)】