(57)【要約】【課題】コンピューティングシステムにおける汎用システムプロセッサからデータの暗号化及び／又は復号化タスクを排除する。【解決手段】グラフィック処理ユニットを含むことができる並行処理構造を有するシステムに暗号化及び／又は復号化処理をオフロードするためのシステム、方法、及びプロセッサ実行可能命令が開示される。ルックアップテーブルは、グラフィック処理ユニット上でだけ暗号化／復号化変換を実行する段階をサポートする。１つのバージョンでは、ルックアップテーブルは、ラインダール暗号化／復号化変換をサポートする。また、復号された暗号文を視覚化するためのシステム、方法、及びプロセッサ実行可能命令が開示される。【選択図】図１
2008017489.tif 000002
【特許請求の範囲】
【請求項１】
暗号化方法であって、
非暗号化テクスチャからの複数のデータバイトを有する状態ブロックをグラフィック処理ユニット（「ＧＰＵ」）にロードする段階と、
ＧＰＵ内の第１ルックアップテーブルを参照して、前記複数のデータバイト及び第１ラウンド鍵に基づいて複数の第１変換バイトを取得する段階と、
ＳｈｉｆｔＲｏｗｓ変換に従って前記複数の第１変換バイトを前記状態ブロックに書き込む段階と、
前記ＧＰＵにおける第２ルックアップテーブルと第３ルックアップテーブルの両方を参照して、前記状態ブロックの前記第１変換バイトに基づいて複数の第２変換バイトを取得する段階と、
を含む方法。
【請求項２】
前記第１ルックアップテーブルは、ＡｄｄＲｏｕｎｄＫｅｙ及びＳｕｂＢｙｔｅｓ変換テーブルの組み合わせであることを特徴とする請求項１に記載の方法。
【請求項３】
前記第２ルックアップテーブルは、ＸＯＲルックアップテーブルであり、前記第２ルックアップテーブルと前記第３ルックアップテーブルの両方を参照する段階が、ＭｉｘＣｏｌｕｍｎｓ変換を実施することを特徴とする請求項１に記載の方法。
【請求項４】
前記状態ブロックがラインダール暗号文を含むまでＧＰＵにおける暗号化変換を継続して実行する段階と、
前記ラインダール暗号文を少なくとも１つのレンダーターゲットに書き込む段階と、
を含む請求項１に記載の方法。
【請求項５】
システムプロセッサから前記ＧＰＵに前記第１、第２、及び第３ルックアップテーブルを有するルックアップテクスチャを伝達する段階を含む請求項１に記載の方法。
【請求項６】
前記データバイトを暗号化するため前記システムプロセッサと前記ＧＰＵとの間で通信を行い、前記ルックアップテクスチャ、前記非暗号化テクスチャ、前記第１ラウンド鍵を含む１０個のラウンド鍵のセット、暗号化プログラム、及び暗号化を開始するコマンドを前記ＧＰＵにアップロードすることだけを行う段階を含む請求項５に記載の方法。
【請求項７】
非暗号化データから前記非暗号化テクスチャを生成する段階と、
前記第１ラウンド鍵を含む複数のラウンド鍵に暗号鍵を拡大する段階と、
前記複数のラウンド鍵を前記ＧＰＵ内の定数レジスタに伝達する段階と、
暗号化プログラムを前記ＧＰＵに伝達する段階と、
を含む請求項１に記載の暗号化方法。
【請求項８】
前記第１、第２、及び第３ルックアップテーブルを参照するためのシェーダーコード命令を開始する段階を含む請求項１に記載の方法。
【請求項９】
前記暗号文をシステムプロセッサにアップロードする段階と、
前記暗号文をサーバーに送信する段階と、
を含む請求項４に記載の方法。
【請求項１０】
非暗号化テクスチャから複数のデータバイトを有する状態レジスタをロードし、ＧＰＵ内の第１ルックアップテーブルを参照して、前記複数のデータバイト及び第１ラウンド鍵に基づいて複数の第１変換バイトを取得し、ＳｈｉｆｔＲｏｗｓ変換に従って前記複数の第１変換バイトを前記状態レジスタに書き込み、更に前記ＧＰＵの第２ルックアップテーブルと第３ルックアップテーブルの両方を参照して、前記状態ブロック内の前記第１変換バイトに基づいて複数の第２変換バイトを取得するためのグラフィック処理ユニット（「ＧＰＵ」）実行可能命令を有するコンピュータ可読記憶媒体。
【請求項１１】
非暗号化データから前記非暗号化テクスチャを生成し、前記第１ラウンド鍵を含む複数のラウンド鍵に暗号鍵を拡大し、前記複数のラウンド鍵を前記ＧＰＵの定数レジスタに伝達し、前記第１ルックアップテーブル、前記第２ルックアップテーブル、及び前記第３ルックアップテーブルを有するルックアップテクスチャを前記ＧＰＵに伝達し、更に前記ＧＰＵ実行可能命令を有する暗号化プログラムを前記ＧＰＵに伝達するためのプロセッサ実行可能命令を有することを特徴とする請求項１０に記載のコンピュータ可読記憶媒体。
【請求項１２】
グラフィック処理ユニット（「ＧＰＵ」）と、
前記ＧＰＵと通信するシステムプロセッサと、
前記ＧＰＵと前記システムプロセッサとの間で通信して、前記システムプロセッサから前記ＧＰＵに、複数のデータバイト、第１ラウンド鍵を含む複数のラウンド鍵、ルックアップテクスチャ、暗号化プログラム、及び暗号化を開始するためのコマンドを有する非暗号化テクスチャをアップロードするためにだけ動作可能なセットアッププログラムと、
を備え、
前記暗号化プログラムは、前記ＧＰＵ上でだけ暗号化動作を実行することによって前記データを暗号化するよう動作可能である、
ことを特徴とする暗号化システム。
【請求項１３】
前記システムプロセッサと通信し、非暗号化データ及び暗号鍵を有するシステムメモリを備え、
前記セットアッププログラムが、前記暗号鍵に基づいて前記複数のラウンド鍵を生成し、前記非暗号化データに基づいて前記非暗号化テクスチャを生成するように動作可能である、
ことを特徴とする請求項１２に記載の暗号化システム。
【請求項１４】
ＡｄｄＲｏｕｎｄＫｅｙとＳｕｂＢｙｔｅｓの組み合わせ変換を実施するように構成された第１ルックアップテーブルと、
ＸＯＲ演算を実施するように構成された第２ルックアップテーブルと、
第３ルックアップテーブルと、
を更に備え、
前記第２ルックアップテーブルと前記第３ルックアップテーブルは、ＭｉｘＣｏｌｕｍｎｓ変換演算を共に実施するように構成されていることを特徴とする請求項１２に記載の暗号化システム。
【請求項１５】
前記ルックアップテクスチャは、前記第１、第２、及び第３ルックアップテーブルを含むことを特徴とする請求項１４に記載の暗号化システム。
【請求項１６】
前記暗号化プログラムは、前記非暗号化テクスチャから複数のデータバイトを有する状態ブロックをロードし、第１ルックアップテーブルを参照して、前記複数のデータバイト及び前記第１ラウンド鍵に基づいて複数の第１変換バイトを取得し、ＳｈｉｆｔＲｏｗｓ変換に従って前記複数の第１変換バイトを前記状態レジスタに書き込み、前記ＧＰＵにおける第２ルックアップテーブルと第３ルックアップテーブルの両方を参照して、前記状態ブロックの前記第１変換バイトに基づいて複数の第２変換バイトを取得し、更に前記ＧＰＵにおいて暗号化変換を継続的に実行して暗号文のブロックを取得するためにように動作可能である、
ことを特徴とする請求項１２に記載の暗号化システム。
【請求項１７】
前記暗号文のブロックを受け取るための複数のレンダーターゲットを備える、
ことを特徴とする請求項１６に記載の暗号化システム。
【請求項１８】
復号化システムであって、
グラフィック処理ユニット（「ＧＰＵ」）と、
前記ＧＰＵと通信するシステムプロセッサと、
前記ＧＰＵと前記システムプロセッサとの間で通信して、前記システムプロセッサから前記ＧＰＵに、暗号文を有する暗号化テクスチャ、第１ラウンド鍵を含む複数のラウンド鍵、ルックアップテクスチャ、復号化プログラム、及び復号化を開始するためのコマンドをアップロードするよう動作可能なセットアッププログラムと、
を備え、
前記復号化プログラムは、前記ＧＰＵ上でだけ復号化動作を実行することによって前記データを復号するよう動作可能である、
ことを特徴とするシステム。
【請求項１９】
前記ルックアップテクスチャは、
ＡｄｄＲｏｕｎｄＫｅｙ変換を実施するように構成された第１ルックアップテーブルと、
逆Ｓボックス置換変換を実施するための第２ルックアップテーブルと、
前記第１ルックアップテーブルと共にＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ事前処理変換演算を実施するように構成された第３ルックアップテーブルと、
前記第１ルックアップテーブルと共にＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換演算を実施するように構成された第４ルックアップテーブルと、
を含むことを特徴とする請求項１８に記載の復号化システム。
【請求項２０】
前記システムプロセッサと通信し、暗号化データ及び暗号鍵を有するシステムメモリを備え、
前記セットアッププログラムが、前記暗号鍵に基づいて前記複数のラウンド鍵を生成し、前記暗号化データに基づいて前記暗号化テクスチャを生成するように動作可能である、
ことを特徴とする請求項１８に記載の復号化システム。
【発明の詳細な説明】
【技術分野】
【０００１】
（著作権表示）
本特許文書の公開部分は、著作権保護の下にある内容を含む。著作権者は特許商標庁の特許ファイル又はレコード内に表されるように特許文書又は特許情報公開を正確にコピーすることについては異議がないが、それ以外は全ての著作権を留保する。
【０００２】
（コンピュータプログラムリスティング付属文書）
本出願は、次のファイル：Ｅｎｃｒｙｐｔｉｏｎ．ｔｘｔ、Ｄｅｃｒｙｐｔｉｏｎ．ｔｘｔ、及びＶｉｓｕａｌｉｚａｔｉｏｎ．ｔｘｔを有するコンパクトディスク（複製の「Ｃｏｐｙ１」及び「Ｃｏｐｙ２」にファイルされている）上に引用により本明細書に組み込まれるコンピュータプログラムリスティング付属文書を含む。複製コンパクトディスクは各々１８キロバイトを有し、２００６年１０月１３日に作成されたものである。
【０００３】
（関連出願の相互参照）
本出願は、引用により本明細書に組み込まれる、２００６年７月６日に出願された米国特許暫定出願第６０／８１９，１４４号の利益を主張する。
【０００４】
（技術分野）
本発明は、暗号化及び復号化技術に関する。詳細には、本発明は、暗号化及び復号化処理をグラフィック処理ユニットに任せることに関する。本発明はまた、グラフィック処理ユニットからの復号化データの表示に関する。
【背景技術】
【０００５】
暗号化は、データを隠して特別な知識なしには読み取ることができないコード（「暗号文」）を生成するプロセスである。復号化は、暗号文を解読してデータを復元するプロセスである。ブロック暗号法、ストリーム暗号法、及び公開鍵暗号法を含む、データを暗号化し復号化する多様な技術がある。国立標準技術研究所（ＮＩＳＴ）は、データ暗号化の次世代標準暗号方式（ＡＥＳ）としてＲｉｊｄａｅｌ（ラインダール）暗号化と呼ばれるブロック暗号法を採用した。
【０００６】
ラインダール暗号化は、ラインダールアルゴリズムと呼ばれるアルゴリズムにデータと暗号鍵を適用して暗号文を作成するプロセスである。ラインダール暗号化プロセスは、１６データバイトを有するブロックでデータを暗号化する。データバイトは、状態と呼ばれる４列×４行のブロックにグループ分けされる。データバイトは、英数字、記号、コマンド、アカウントデータ、又は他のタイプの情報に対応することができる。暗号化の前に、初期暗号鍵が１０個のラウンド鍵に拡大される。各ラウンド鍵は、４列×４行のラウンド鍵ブロックにグループ分けされた１６バイト（データの各バイトに対して１つのラウンド鍵）を有する。
【０００７】
ラインダールアルゴリズムは反復型であり、１０個のラウンドからなる。各ラウンドは、ＡｄｄＲｏｕｎｄＫｅｙ、ＳｕｂＢｙｔｅｓ、ＳｈｉｆｔＲｏｗｓ、及びＭｉｘＣｏｌｕｍｎｓとして知られる４つの変換のシーケンスである。各変換の結果は、「状態」と呼ばれ、各ラウンドは、前のラウンドからの状態に対して作用する。各ラウンドは、その固有のランド鍵を利用する。
【０００８】
ＡｄｄＲｏｕｎｄＫｅｙ変換は、ＸＯＲ演算によって状態の各バイトをラウンド鍵の対応するバイトと結合する。
【０００９】
ＳｕｂＢｙｔｅｓ変換は、状態の各バイトをラインダールＳボックスとして知られるルックアップテーブルからのバイトに置き換える。
【００１０】
ＳｈｉｆｔＲｏｗｓ変換は、状態の行に対して作用する。ＳｈｉｆｔＲｏｗｓは、出力状態の各列が入力状態の他の３列からの１バイトを有するように、各行のバイトを一定オフセットだけ繰り返しシフトする。ＳｈｉｆｔＲｏｗｓでは、第１行は変わらないままであり、第２行の各バイトが左に１列シフトされ、第３行の各バイトは、左に２列シフトされ、更に第４行の各バイトは、左に３列シフトされる。シフトが行われると、行の第１列のバイトは第４列にラップアラウンドする。
【００１１】
ＭｉｘＣｏｌｕｍｎｓ変換では、各列は多項式として扱われ、ラインダールの有限体において行列を乗算する。
【００１２】
プロセッサ上でラインダール暗号化プログラムを実行すると、プロセッサ時間のかなりの量を消費する。汎用システムプロセッサ上で動作すると、プログラムは、ワードプロセッサ、スプレッドシート、及び電子メールクライアントなどの他のシステムプログラムの性能をかなり低下させる可能性がある。ラインダール復号を実行するプログラムは、同様にプロセッサ時間のかなりの量を消費し、他のシステムプログラムに影響を与える。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
現在、コンピューティングシステムにおける汎用システムプロセッサ（「システムプロセッサ」）からデータの暗号化及び／又は復号化タスクを排除する必要性がある。
【課題を解決するための手段】
【００１４】
開示されるシステムは、システムプロセッサからデータの暗号化及び／又は復号タスクを排除する。本システムの第１の実施は、システムプロセッサと通信するグラフィック処理ユニット（「ＧＰＵ」）を含む。システムプロセッサは、セットアッププログラムなどの第１プロセッサ実行可能命令を実行し、ＧＰＵに第２プロセッサ実行可能命令を伝達する。第１プロセッサ実行可能命令は、非暗号化テクスチャ、暗号化ラウンド鍵、少なくとも１つのルックアップテクスチャ、及び第２プロセッサ実行可能命令をＧＰＵに伝達するための命令を含む。第２プロセッサ実行可能命令は、暗号化動作を実行するようＧＰＵを構成するための画素シェーダー暗号化プログラムなどの暗号化プログラムを含む。プロセッサ実行可能命令の第１及び第２セットは、１つ又はそれ以上のコンピュータ可読記憶媒体内に記憶することができる。
【００１５】
本システムの第２の実施は、システムプロセッサと通信するＧＰＵを含む。システムプロセッサは、セットアッププログラムなどの第１プロセッサ実行可能命令を実行し、ＧＰＵに第２プロセッサ実行可能命令を伝達する。第１プロセッサ実行可能命令は、暗号化テクスチャ、暗号化ラウンド鍵、少なくとも１つのルックアップテクスチャ、及び第２プロセッサ実行可能命令をＧＰＵに伝達するための命令を含む。第２プロセッサ実行可能命令は、ラインダール復号化変換を実行するようにＧＰＵを構成するための画素シェーダー復号化プログラムなどの復号化プログラムを含む。復号のためのプロセッサ実行可能命令の第１及び第２セットは、１つ又はそれ以上のコンピュータ可読記憶媒体内に記憶することができる。
【００１６】
１つのバージョンでは、復号のためのプロセッサ実行可能命令の第２セットはまた、システムプロセッサと通信することなく復号化データを表示するため、勾配テクスチャ、ＡＳＣＩＩテクスチャ、リニアライザテクスチャ、及び視覚化プログラムをＧＰＵに伝達するための命令を含む。他のバージョンでは、プロセッサ実行可能命令の第２セットとは別個に、プロセッサ実行可能命令の１つ又はそれ以上のセットは、システムプロセッサにテクスチャ及び視覚化プログラムをＧＰＵに伝達させる。
【００１７】
暗号化動作を行う開示される方法は、ＧＰＵによって実行することができる。本方法は、非暗号化テクスチャ、ルックアップテクスチャ、１０個の暗号化ラウンド鍵、及び暗号化プログラムをシステムプロセッサから受け取る段階を含む。１つのバージョンでは、暗号化プログラムは、ラインダール変換を行うための命令を有する。第１動作は、ＡｄｄＲｏｕｎｄＫｅｙ、ＳｕｂＢｙｔｅｓ、及びＳｈｉｆｔＲｏｗｓ変換を組み合わせる。第１動作は、状態ブロックでの各データバイトに対して、ルックアップテクスチャの修正されたＳボックスルックアップテーブルからの置換バイトを取得する段階を含む。修正されたＳボックスルックアップテーブルは、ＡｄｄＲｏｕｎｄＫｅｙ及びＳｕｂＢｙｔｅｓ変換を実施する。第１動作は、置換バイトをＳｈｉｆｔＲｏｗｓ変換に対応するロケーションの状態ブロックに書き込む段階を含む。
【００１８】
第２動作は、ＭｉｘＣｏｌｕｍｎｓ変換を実施するために
ルックアップテクスチャのＸＯＲルックアップテーブル及び組み合わされた有限体乗算／ＸＯＲルックアップテーブル（ｘＸＯＲテーブル）を参照する段階を含む。第２動作は、状態の各列に対して繰り返される。
【００１９】
復号化動作を行う開示される方法は、ＧＰＵによって実行することができる。本方法は、暗号化テクスチャ、少なくとも１つのルックアップテクスチャ、暗号化ラウンド鍵、及び復号化プログラムをシステムプロセッサから受け取る段階を含む。１つのバージョンでは、復号化プログラムは、ラインダール変換を行うための命令を有する。本方法の第１動作は、ＡｄｄＲｏｕｎｄＫｅｙ変換を実施するためにＸＯＲルックアップテーブルを有するルックアップテクスチャを参照する段階を含む。本方法の第２動作は、ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ事前処理変換を実施するために、組み合わせＸＯＲ及び２つの有限体乗算演算によって得られた値を有するルックアップテーブルを備えたルックアップテクスチャを参照する段階を含む。本方法の第３動作は、ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換を実施するために、組み合わされた有限体乗算／ＸＯＲルックアップテーブル（ｘＸＯＲテーブル）を有するルックアップテクスチャを参照する段階を含む。本方法の第４動作は、ｘＸＯＲテーブルから得られた値をＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換に対応する状態ブロック内のロケーションに書き込む段階を含む。本方法の第５動作は、ＩｎｖｅｒｓｅＳｕｂＢｙｔｅｓ変換を実施するために、１次元Ｓボックスルックアップテーブルを有するルックアップテクスチャを参照する段階を含む。
【００２０】
１つのバージョンでは、復号化データはＧＰＵレンダーターゲットに書き込まれ、視覚化ディスプレイプログラムは、ディスプレイ又は他の視覚的に知覚可能なデバイス上に可読フォーマットでデータを表示するために実行される。１つのバージョンでは、システムプロセッサが、視覚化プログラム、勾配テクスチャ、ＡＳＣＩＩテクスチャ、及びリニアライザテクスチャをＧＰＵにアップロードする。システムプロセッサは、ＧＰＵで視覚化プログラムの実行を開始するために信号を供給する。
【００２１】
視覚化プログラムの１つのバージョンによると、リニアライザテクスチャは、復号化データを出力のために利用可能にするよう拡大されタイルのように並べられる。ＡＳＣＩＩテクスチャの文字ブロックは、出力されたデータ値に基づいてインデックスされ、勾配テクスチャは、プログラムを文字ブロックの残りのＡＳＣＩＩテクセルに向ける。
【発明を実施するための最良の形態】
【００２２】
本発明は、以下の図面及び説明を参照するとより理解することができる。図中の構成要素は、必ずしも縮尺通りではなく、本発明の原理を例証する際に強調されている。更に図中、同じ参照符号は種々の図全体を通じて対応する要素を示す。
【００２３】
図１は、暗号化動作、復号化動作、及び／又はＧＰＵ視覚化動作を実行するように構成された暗号化／復号化システム１００を示す。暗号化及び復号化動作は、データの暗号化又は復号化をそれぞれ促進するための変換を含む。ＧＰＵ視覚化動作は、データを第２プロセッサに伝達することなくＧＰＵによって暗号文から導かれたデータを表示する段階を含む。
【００２４】
暗号化／復号化システム１００は、システムメモリ１０４及びＧＰＵ１０６と通信するシステムプロセッサ１０２を含む。システムプロセッサ１０２は、ＰＣ内の中央処理ユニット又は命令を実行するように構成された他のプロセッサなどの汎用システムプロセッサとすることができる。システムメモリ１０４は、好ましくはランダムアクセスメモリ（例えば、ＳＲＡＭ又はＤＲＡＭ）などのプロセッサメモリである。ＧＰＵ１０６は、複数のテクスチャレジスタ１５６、定数レジスタ１５８、一時レジスタ１６０、及び並行処理構造を有する。
【００２５】
暗号化／復号化システム１００は、ＲＯＭ、ハードドライブ、リムーバブルドライブ、又は他のコンピュータ可読記憶媒体などの記憶媒体１０８と通信することができる。暗号化／復号化システム１００は、１つより多い記憶媒体１０８と通信することができる。例えば、実行可能プログラムは、ＲＯＭ内に記憶することができ、データを暗号化するための情報は、フラッシュメモリデバイスなどの第１の可動メモリ内に記憶することができ、非暗号化データは、第２の可動メモリ内に記憶することができる。暗号化／復号化システム１００はまた、コンピュータネットワークを含む他のシステムと通信するサーバー１５２に通信するように構成することができる。
【００２６】
セットアッププログラム１１０は、暗号化、復号化、又はＧＰＵ復号視覚化のいずれかの組合せを行うように暗号化／復号化システム１００を構成するためのセットアップ命令を有する。セットアッププログラム１１０は、システムメモリ１０４などの暗号化／復号化システム１００内にあることができる。セットアッププログラム１１０はまた、暗号化／復号化システム１００によって読み取られることになる記憶媒体１０８内、又はサーバー１５２と通信するデバイス内、或いは暗号化／復号化システム１００によってアクセス可能な他のソースにあることができ、又はそうでなくてもよい。
【００２７】
セットアップ命令２００の１つのバージョンが図２に示されている。セットアップ命令２００は、データを暗号化するか又は暗号文を復号化するかどうかを判断する段階を含む（動作２０２）。１つのバージョンでは、この判断は、暗号化を指示する第１信号、又は復号化を指示する第２信号を受け取ることに基づく。このような信号は、ユーザーインターフェース、暗号化／復号化システム１００上で実行されるか又は該システムと通信するプログラム、セットアッププログラム１１０、又は他のソースから生じることができる。
【００２８】
暗号化／復号化システム１００がデータを暗号化する場合、非暗号化テクスチャ１３２が非暗号化データ１１２から作成され（動作２０４）、１０個のラウンド鍵１３４が暗号鍵１１６から導出される（動作２０６）。非暗号化テクスチャ１３２、ラウンド鍵１３４、及び１つ又はそれ以上の暗号化プログラム１３０（ａ）は、ＧＰＵ１０６にアップロードされる（動作２０８）。暗号化プログラム１３０（ａ）は、実施例としてＲｅｎｄｅｒＭａｎ又はＤｉｒｅｃｔＸシェーダー言語で記述されたシェーダープログラムとすることができる。暗号化プログラムの１つのバージョン（Ｅｎｃｒｙｐｔｉｏｎ．ｔｘｔ）は、本出願の付属文書に含まれる。
【００２９】
図３は、暗号化に使用されるデータ３００の実施例を示す。データ３００は、実施例において一連の英数字（「ＨＥＬＬＯ＿ＷＯＲＬＤ＿１２３４５＿ＡＢＣ１２３*＿％＿＜＿！＿」）である非暗号化データ１１２と１６バイトの暗号鍵１１６とを含む。ＧＰＵ上での暗号化処理では、非暗号化データ１１２が、非暗号化テクスチャ１３２にパックされる。本実施例では、非暗号化テクスチャ１３２は、８個のテクセルを備え、１×１で第１の非暗号化テクセル３０８を含む４×２（列×行）テクスチャである。非暗号化テクスチャ１３２、従って各非暗号化テクセルは、赤チャンネル３１０、青チャンネル３１２、緑チャンネル３１４、及びアルファチャンネル３１６を有する。各英数字は、８ビットバイナリ値で表記される（理解しやすいように、図面では同等の１６進数値が示されている）。例えば、第１の非暗号化テクセル３０８は、ＡＳＣＩＩ「Ｈ」（４８ｈｅｘ）を有する赤チャンネル３１０、「Ｅ」（４５）を有する青チャンネル３１２、「Ｌ」（４ｃ）を有する緑チャンネル３１４、及び「Ｌ」（４ｃ）を有するアルファチャンネル３１６を有する。
【００３０】
非暗号化データ１１２は、暗号化／復号化システム１００に伝達するか、或いは暗号化／復号化システム１００が検索することができる。例えば、非暗号化データ１１２は、ユーザーインターフェースを介してユーザーによって暗号化／復号化システム１００に伝達され、又は記憶媒体１０８から読み出され、或いはサーバー１５２もしくは他のデバイスから受け取ることができる。暗号鍵１１６はまた、種々の方法で暗号化／復号化システム１００に伝達され、或いは暗号化／復号化システム１００が検索することができる。
【００３１】
暗号鍵１１６は、１６個の８ビット（理解しやすいように、図面では同等の１６進数値が示されている）バイトを含む。システムプロセッサ１０２は、暗号鍵１１６を１０個の１６バイト暗号化ラウンド鍵１３４に拡大するよう命令を実行することができる。
【００３２】
暗号化プログラム１３０（ａ）の１つの実施は、ラインダール暗号化変換を実行するためにルックアップテーブルを利用する。ルックアップテーブルは、修正Ｓボックステーブル、ＸＯＲテーブル、及びｘＸＯＲテーブル（修正ＸＴｉｍｅテーブル）を含むことができ、１つ又はそれ以上の暗号化ルックアップテクスチャ１５４にパックすることができる。図４は、６５，５３６個のテクセルを有する２５６×２５６暗号化ルックアップテクスチャ４００の実施例を示す。各テクセルは、赤チャンネル４０２、青チャンネル４０４、緑チャンネル４０６、及びアルファチャンネル４０８を有する。ルックアップテクスチャの１つのバージョンでは、修正Ｓボックステーブルは、アルファチャンネル４０８にパックされ、ＸＯＲテーブルは青チャンネル４０６にパックされ、更にｘＸＯＲテーブルは緑チャンネル４０４にパックされる。
【００３３】
図５は、修正Ｓボックステーブル５００の一部を示す。修正Ｓボックステーブル５００は、００からｆｆの範囲にわたる状態値に対応する行アドレス値５０２と、００からｆｆの範囲にわたるラウンド鍵値に対応する列アドレス値５０４とを有する。修正Ｓボックステーブル５００は、（ｂ）ラインダールＳボックスからの値に置き換えられたＸＯＲ演算の全ての結果として得られる値を有する各行及び列アドレス値ペアに対する（ａ）ＸＯＲ演算テーブルである。例えば、状態値「０２」５０６及びラウンド鍵値「０３」５０８のＸＯＲ結果は、「０１」である。ラインダールＳボックスによると、「０１」の置換値は、「ｃａ」である。
【００３４】
図６は、ＸＯＲテーブル６００の一部を示す。ＸＯＲテーブル６００は、００からｆｆの範囲にわたる値に対応する行アドレス６０２と、００からｆｆの範囲にわたる値に対応する列アドレス６０４とを有する。ＸＯＲテーブル６００は、各行及びアドレス値ペアに対する事前計算されたＸＯＲ演算テーブルを提供する。例えば、「０２」６０６及び「０３」６０８のＸＯＲ結果は「０１」である。ＸＯＲテーブル６００は、以下に説明される暗号化用ＭｉｘＣｏｌｕｍｎｓ変換アルゴリズムの値を得るために参照される。
【００３５】
図７は、ｘＸＯＲテーブル７００の一部を示す。ｘＸＯＲテーブル７００は、修正ＸＴｉｍｅ演算テーブルである。ｘＸＯＲテーブル７００は、００からｆｆの範囲にわたる「ｘ」値に対応する行アドレス７０２と、００からｆｆの範囲にわたる「ｙ」値に対応する列アドレス７０４とを有する。要素は、式：ｘＸＯＲ（ｘ，ｙ）＝Ｘ＾（ＸＴｉｍｅ（ｘ＾ｙ））から得られ、ここでＸＴｉｍｅは、０２による有限体乗算を意味し、＾はＸＯＲ演算を意味する。言い換えると、ｘＸＯＲテーブルは、（ａ）各行及び列アドレスペアに対するＸＯＲ演算、（ｂ）ＸＯＲ演算結果に対しての０２による有限体乗算、及び（ｃ）行値と有限体乗算結果とのＸＯＲ演算から得られた値を有する要素が読み込まれる。例えば、ｘ＝０１，７０８，及びｙ＝０３，７０６であれば、ｘ＾ｙ＝「０２」；ＸＴｉｍｅ（０２）＝「０４」；及び０１＾０４＝「０５」である。従って、ｘＸＯＲテーブル７００の要素７１０は、「０５」である。ｘＸＯＲテーブル７００は、暗号化用のＭｉｘＣｏｌｕｍｎｓ変換アルゴリズムの値を得るために参照される。
【００３６】
図２に関して上述され、更に図８に示されるように、暗号化用のセットアップ命令２００の１つのバージョンの動作は、非暗号化テクスチャ１３２、ラウンド鍵１３４、少なくとも１つの暗号化プログラム１３０（ａ）、及びルックアップテクスチャ１５４をＧＰＵにアップロードする段階８００を含む。非暗号化テクスチャ１３２及びルックアップテクスチャ１５４は、ＧＰＵテクスチャレジスタ１５６にアップロードされ、ラウンド鍵１３４は、ＧＰＵ定数レジスタ１５８にアップロードされる。
【００３７】
ＧＰＵ１０６は、システムプロセッサ１０２から受け取られた開始命令に応答して暗号化プログラム１３０（ａ）を実行する。図９は、暗号化プログラム１３０（ａ）の好ましいバージョンに従って行われる暗号化動作９００を示す。１６バイト状態ブロック１３６は、暗号化状態のための一時レジスタ１６０に保存される（動作９０２）。状態ブロック１３６は、非暗号化テクスチャ１３２からデータの１６バイトの第１セットを受け取る（動作９０４）。状態ブロック１３６はまた、発生したときの暗号化変換の中間結果及び最終結果を保持する点に留意されたい。作成された状態ブロックの数は、ＧＰＵで実行中の暗号化プログラム１３０（ａ）の数に対応することができる。例えば、４つの並行プロセッサ上で実行中の４つの暗号化プログラム１３０（ａ）がある場合、４つの状態ブロックは、一時レジスタに保存されるのが好ましい。
【００３８】
１６バイトを有する第１ラウンド鍵は、第１ラウンドにおいてＧＰＵ定数レジスタからＧＰＵによって参照される（動作９０６）。次のラウンド鍵は、次の各ラウンドについて参照される点に留意されたい。言い換えると、第１ラウンド鍵は、第１ラウンドに対して参照され、第２ラウンド鍵は、第２ラウンドに対して参照され、更に第３ラウンド鍵は、第３ラウンドに対して参照される、などである。
【００３９】
暗号化変換は、２つの段階にグループ分けされる。第１段階９０８では、ＡｄｄＲｏｕｎｄＫｅｙ／ＳｕｂＢｙｔｅｓ、ＳｈｉｆｔＲｏｗｓ、及びＭｉｘＣｏｌｕｍｎｓ変換（９１２、９１４、及び９１６）が第２段階９１０に進む前に順次的に９回行われる。第１段階９０８が完了した後、１０番目のラウンド鍵が参照される（動作９２４）。第２段階９１０は、ＡｄｄＲｏｕｎｄＫｅｙ／ＳｕｂＢｙｔｅｓ変換（動作９１２）、ＳｈｉｆｔＲｏｗｓ変換（動作９１４）、及び４つのテクセルのセットに対する最終暗号化変換であるＡｄｄＲｏｕｎｄＫｅｙ変換（動作９２４）を含む。最終ＡｄｄＲｏｕｎｄＫｅｙ変換（動作９２４）の後、状態ブロック１３６は、ラインダール暗号文の１６バイトを保持する。
【００４０】
ここで暗号化変換について説明する。ＡｄｄＲｏｕｎｄＫｅｙ／ＳｕｂＢｙｔｅｓ変換（動作９１２）は、修正Ｓボックステーブル５００への１６個のルックアップを含む。各ルックアップは、１６個の状態バイトとラウンド鍵バイトメンバーのペアの１つに対するものである。ラインダールＡｄｄＲｏｕｎｄＫｅｙステップと同様に、各ペアのメンバーは、ラウンド鍵と状態ブロックにおけるマッチングロケーションから発生する。例えば、列３、行２の状態バイトは、列３、行２でのラウンド鍵バイトとペアになっている。修正Ｓボックステーブル５００における各ルックアップは、状態バイトに対応する行アドレス値５０２とラウンド鍵バイトに対応する列アドレス値５０４とを有する要素に対するものである。各検索されたバイトは、状態バイトの初期ロケーションに対してＳｈｉｆｔＲｏｗｓ変換（動作９１４）に対応するロケーションでの状態ブロックに書き込まれる。
【００４１】
ＭｉｘＣｏｌｕｍｎｓ変換（動作９１６）は、図１０に示される例示的な状態１０００を参照して最も良く説明される。例示的状態１０００は、ＭｉｘＣｏｌｕｍｎｓ変換の前に状態ブロックの値を保持する。例示的状態１０００の行１００２は、Ｒ１、Ｒ２、Ｒ３、及びＲ４で示され、列１００４は、Ｃ１、Ｃ２、Ｃ３、及びＣ４で示されている。要素は、変数ＡからＰで表わされる。ＭｉｘＣｏｌｕｍｎｓ変換（動作９１６）を実行するための好ましいアルゴリズム（Ｃ１について表わされる）は、暗号化ルックアップテクスチャ４００の幾つかのルックアップを利用する。アルゴリズムは、各列に対して行われる。
Ｔ＝（Ａ＾Ｅ）＾（Ｉ＾Ｍ）；列の全要素の中でＸＯＲ演算を行うためにＸＯＲテーブル６００を３回参照する
Ｕ＝Ａ；列の第１行の初期値をセーブする
Ｖ＝ｘＸＯＲ（Ａ，Ｅ）；Ｖを取得するためにｘＸＯＲテーブル７００を参照する
Ａ＝ＶＴ；１つのＸＯＲ演算に対してＸＯＲテーブル６００を参照する
Ｖ＝ｘＸＯＲ（Ｅ，Ｉ）；Ｖを取得するためにｘＸＯＲテーブル７００を参照する
Ｅ＝ＶＴ；１つのＸＯＲ演算に対してＸＯＲテーブル６００を参照する
Ｖ＝ｘＸＯＲ（Ｉ，Ｍ）；Ｖを取得するためにｘＸＯＲテーブル７００を参照する
Ｉ＝ＶＴ；１つのＸＯＲ演算に対してＸＯＲテーブル６００を参照する
Ｖ＝ｘＸＯＲ（Ｍ，Ｕ）；Ｖを取得するためにｘＸＯＲテーブル７００を参照する
Ｍ＝ＶＴ；１つのＸＯＲ演算に対してＸＯＲテーブル６００を参照する
アルゴリズム１：暗号化のためのＭｉｘＣｏｌｕｍｎｓ変換
【００４２】
第２段階９１０完了時、状態ブロック１３６からの暗号文のバイトは、４つのレンダーターゲットに書き込まれる（動作９１８）。状態ブロック１３６の第１列のバイトは、第１レンダーターゲット１５０（ａ）に書き込まれ、第２列のバイトは第２レンダーターゲット１５０（ｂ）に書き込まれ、第３列のバイトは第３レンダーターゲット１５０（ｃ）に書き込まれ、更に第４列のバイトは第４レンダーターゲット１５０（ｄ）に書き込まれる。
【００４３】
暗号化の状態が確定される（動作９２０）。暗号化が完了していない場合、非暗号化テクスチャ１３２における次の４つのテクセルからのデータバイトが状態ブロック１３６に書き込まれ（動作９２２）、第１ラウンド鍵がラウンド鍵定数レジスタから取得される（動作９０６）。暗号化変換段階が繰り返され、最終状態の暗号文が４つのレンダーターゲット１５０（ａ）−１５０（ｄ）に書き込まれる。暗号化動作は、暗号化が完了するまで継続することができる。
【００４４】
暗号化プログラムは、レンダーターゲット１５０（ａ）−１５０（ｄ）からの暗号文を、記憶、記録、転送、又は他の目的のためシステムプロセッサ１０２にアップロードする別の動作（図示せず）を含むことができる。
【００４５】
図１及び２を再度参照すると、セットアッププログラム１１０の１つのバージョンは、復号化動作を行うように暗号化／復号化システム１００を構成するためのセットアップ命令を有する。暗号化テクスチャ１３８が暗号化データ１１４から作成され（動作２１０）、１０個のラウンド鍵１３４が暗号鍵１１６から得られる（動作２１２）。暗号化テクスチャ１３８、１０個のラウンド鍵１３４、及び１つ又はそれ以上の復号化プログラム１３０（ｂ）は、ＧＰＵにアップロードされる（動作２１４）。復号化プログラム１３０（ｂ）は、実施例としてＲｅｎｄｅｒＭａｎ又はＤｉｒｅｃｔＸシェーダー言語のシェーダープログラムとすることができる。復号化プログラムの１つのバージョン（Ｄｅｃｒｙｐｔｉｏｎ．ｔｘｔ）は、本出願の付属文書に含まれる。
【００４６】
図１１は、復号化の際に使用されるデータ１１００の実施例を示す。データ１１００は、この実施例では１６個の８ビット値（０１，ｆ１，ａ２，６３，５ｄ，０９，９ｂ，６３，ｂｃ，２ａ，ｆａ，ｃｂ，ｅ３，１ｄ，０７，ｃ７）と、１６バイト暗号鍵１１６とのセットである暗号化データ１１４とを含む。ＧＰＵ上での復号化処理では、暗号化データ１１４が暗号化テクスチャ１３８にパックされる。本実施例では、暗号化テクスチャ１３８は、第１テクセル１１０２を含む４つのテクセルを備えた４×１テクスチャである。暗号化テクスチャ１３８（及び各暗号化されたテクセル）は、赤チャンネル１１０４、青チャンネル１１０６、緑チャンネル１１０８、及びアルファチャンネル１１１０を有する。例えば、第１の暗号化されたテクセル１１０２は、データ値「０１」を有する赤チャンネル１１０４、データ値「ｆ１」を有する青チャンネル１１０６、データ値「ａ２」を有する緑チャンネル１１０８、及びデータ値「６３」を有するアルファチャンネル１１１０を有する。
【００４７】
暗号化データ１１４は、暗号化／復号化システム１００に伝達するか、或いは暗号化／復号化システム１００が検索できることを理解されたい。例えば、暗号化データ１１４は、ユーザーインターフェースを介してユーザーによって暗号化／復号化システム１００に伝達され、又は記憶媒体１０８から読み出され、或いはサーバー１５２もしくは他のデバイスから受け取ることができる。暗号鍵１１６はまた、種々の方法で暗号化／復号化システム１００に伝達され、或いは暗号化／復号化システム１００が検索することができる。
【００４８】
暗号鍵１１６は、１６個の８ビット（理解しやすいように、図面では同等の１６進数値が示されている）バイトを含む。システムプロセッサ１０２は、暗号鍵１１６を１０個の１６バイト復号化ラウンド鍵１３４に拡大するように命令を実行することができる。
【００４９】
好ましいバージョンでは、復号化プログラム１３０（ｂ）は、ラインダール復号化変換を実行するために４つのルックアップテーブルを利用する。ルックアップテーブルは、ＸＯＲテーブル、逆Ｓボックステーブル、ｘＸＯＲテーブル（第１の修正ＸＴｉｍｅテーブル）、及びｘ−ｘＸＯＲテーブル（第２の修正ＸＴｉｍｅテーブル）を含む。１つのバージョンでは、上述の暗号化ルックアップテクスチャ４００はまた、復号化固有の青チャンネル４０６のＸＯＲテーブル６００と緑チャンネル４０４のｘＸＯＲテーブル７００用に利用することができる。このバージョンでは、ｘ−ｘＸＯＲテーブルは、暗号化ルックアップテクスチャ４００の以前の未使用の赤チャンネル４０２にパックされる。
【００５０】
図１２は、ｘ−ｘＸＯＲテーブルの一部を示す。ｘ−ｘＸＯＲテーブル１２００は、００からｆｆの範囲にわたる行アドレス値「ｘ」１２０２と、００からｆｆの範囲にわたる列アドレス値「ｙ」１２０４とを有する。要素が式：ｘ−ｘＸＯＲ（ｘ，ｙ）＝ＸＴｉｍｅ（ＸＴｉｍｅ（ｘ＾ｙ））から得られ、ここでＸＴｉｍｅは、０２による有限体乗算を意味し、＾はＸＯＲ演算を意味する。言い換えると、ｘ−ｘＸＯＲテーブルは、（ａ）各行及び列アドレスペアのＸＯＲ演算、（ｂ）ＸＯＲ演算結果（（ａ）から）に対する０２による第１有限体乗算、及び（ｃ）第１有限体乗算結果（（ｂ）から）に対する０２による第２有限体乗算から生じた値を有する要素が読み込まれる。例えば、行値ｘ＝「０１」，１２０６及び列値ｙ＝「０３」，１２０８であれば、ｘ＾ｙ＝「０２」；ＸＴｉｍｅ（０２）＝「０４」；ＸＴｉｍｅ（０４）＝「０８」である。従って、ｘ−ｘＸＯＲテーブル１２００の要素１２１０は、「０８」の値を有する。ｘ−ｘＸＯＲテーブルは、以下に説明される復号化のためのＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換アルゴリズムへの事前処理ステップの値を得るために参照される。
【００５１】
図１３に示される逆Ｓボックステーブル１３００は、復号化ルックアップテクスチャ１５４のアルファチャンネルにパックすることができる。逆Ｓボックステーブル１３００は、００からｆｆの範囲にわたる値に対応するアドレス１３０２を有する１次元ルックアップテーブルである。逆Ｓボックステーブル１３００は、ラインダールＳボックスの逆ルックアップに対応する要素１３０４が読み込まれる。例えば、「ａ６」のＳボックス置換は、「０２」である。従って、逆Ｓボックステーブル１３００では、値「０２」、１３０８は、「ａ６」、１３０６に置換される。
【００５２】
図２に関して上述されたように、復号化用のセットアップ命令２００の１つのバージョンの動作は、暗号化テクスチャ１３８、ラウンド鍵１３４、及び少なくとも１つの復号化プログラム１３０（ｂ）でＧＰＵ１０６をアップロードする段階を含む（動作２１４）。ＧＰＵ１０６は、システムプロセッサ１０２から受け取られた命令に応答して復号化プログラム１３０（ｂ）を開始する。
【００５３】
図１４は、復号化プログラム１３０（ｂ）の好ましいバージョンに従って行われる復号化動作１４００を示す。少なくとも１つの状態ブロック１３６は、復号状態用の一時レジスタ１６０に保存される（動作１４０２）。状態ブロック１３６は、暗号化テクスチャ１３８から暗号文の１６バイトの最初のセットを受け取る（動作１４０４）。状態ブロック１３６はまた、発生したときの復号化変換の中間結果及び最終結果を保持することになる点に留意されたい。作成された状態ブロックの数は、ＧＰＵ１６０で実行中の復号化プログラム（又は複数のプログラム）１３０（ｂ）の数に対応するのが好ましい。
【００５４】
１６バイトを有する第１ラウンド鍵は、第１ラウンドに対してＧＰＵ定数レジスタ１５８から参照される（動作１４０６）。次のラウンド鍵は、次の各ラウンドに対して参照される点に留意されたい。言い換えると、第１ラウンド鍵は、第１ラウンドに対して参照され、第２ラウンド鍵は、第２ラウンドに対して参照され、第３ラウンド鍵は、第３ラウンドに対して参照される、などである。
【００５５】
ここで復号化変換について説明する。ＡｄｄＲｏｕｎｄＫｅｙ変換１４０８は、ＸＯＲテーブル６００への１６個のルックアップを含む。各ルックアップは、１６個の状態バイトとラウンド鍵バイトメンバーペアの１つに対するものである。ラインダールＡｄｄＲｏｕｎｄＫｅｙステップと同様に、各ペアのメンバーは、ラウンド鍵と状態ブロック１３６におけるマッチングロケーションから発生する。例えば、列３、行２の状態バイトは、列３、行２のラウンド鍵バイトとペアにされる。
【００５６】
ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ事前処理変換１４１０は、図１０に示された例示的な状態１０００を参照して最も良く説明することができる。例示的な状態１０００は、ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ事前処理変換１４１０の前に状態ブロックの値を保持する。ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ事前処理変換１４１０を実行するための好ましいアルゴリズム（Ｃ２について表わされる）は、ｘ−ｘＸＯＲテーブル１２００とＸＯＲテーブル６００への幾つかのルックアップを利用する。アルゴリズムは、各列に対して実行される。
ｕ＝ｘ−ｘＸＯＲ（Ｂ＾Ｊ）
ｖ＝ｘ−ｘＸＯＲ（Ｆ＾Ｎ）
Ｂ＝Ｂ＾ｕ
Ｆ＝Ｆ＾ｖ
Ｊ＝Ｊ＾ｕ
Ｎ＝Ｎ＾ｖ
アルゴリズム２：復号化用のＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ事前処理変換
【００５７】
ＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ変換のためのアルゴリズムは、上述の暗号化のＭｉｘＣｏｌｕｍｎｓ変換アルゴリズムと同じである。結果として得られるバイトは、ＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ変換１４１４に対応するロケーションで状態ブロック１３６に書き込まれる。詳細には、状態の第１行のバイトは変化しないままである。第２行のバイトは各々、右に１列シフトされ、第３行のバイトは各々右に２列シフトされ、第４行のバイトは各々右に３列シフトされる。
【００５８】
ＩｎｖｅｒｓｅＳｕｂＢｙｔｅｓ変換１４１６は、逆Ｓボックステーブル１３００を参照し、状態ブロック１３６の各バイトを対応する置換バイトと置き換える。
【００５９】
復号化変換は、状態ブロック１３６に対して１０回繰り返される。１０回目の変換後、状態ブロック１３６は、非暗号化データの１６バイトを含む。非暗号化データは、４つのレンダーターゲットに書き込まれる（動作１４１８）。状態の第１列のバイトは、第１レンダーターゲット１５０（ａ）に書き込まれ、状態の第２列のバイトは、第２レンダーターゲット１５０（ｂ）に書き込まれ、状態の第３列のバイトは、第３レンダーターゲット１５０（ｃ）に書き込まれ、状態の第４列のバイトは、第４レンダーターゲット１５０（ｄ）に書き込まれる。
【００６０】
復号の状態が確定される（動作１４２０）。復号が完了していない場合、暗号化テクスチャ１３８における次の４つのテクセルからのバイトが状態ブロック１３６に書き込まれ（動作１４２２）、第１ラウンド鍵がラウンド鍵定数レジスタ１５８から取得される（動作１４０６）。復号化変換段階が繰り返され、最終状態のデータは、４つのレンダーターゲット１５０（ａ）から１５０（ｄ）に書き込まれる。復号化動作は、復号が完了するまで継続することができる。
【００６１】
復号化プログラム１３０（ｂ）は、レンダーターゲット１５０（ａ）−１５０（ｄ）からのデータを、記憶、記録、転送、又は他の目的のためシステムプロセッサ１０２にアップロードするなどの別の動作を含むことができる。好ましいバージョンでは、データはシステムプロセッサ１０２にアップロードされず、代わりにＧＰＵ１０６によって視覚化される。視覚化は、生データを可読フォーマットでディスプレイデバイスに表示する技術である。
【００６２】
図１５は、データを視覚化するためにＧＰＵ１０６を準備する動作のバージョン１５００を示す。システムプロセッサ１０２は、視覚化プログラム１４８、勾配テクスチャ１４０、ＡＳＣＩＩ又は他のタイプの文字テクスチャ１４２、及びリニアライザテクスチャ１４４をＧＰＵ１０６にアップロードする（動作１５０２）。システムプロセッサ１０２は、ＧＰＵの視覚化プログラム１４８の実行を開始する信号を供給する（動作１５０４）。視覚化プログラムの１つのバージョン（Ｖｉｓｕａｌｉｚａｔｉｏｎ．ｔｘｔ）が、本出願の付属文書に含まれている。
【００６３】
図１６は、４×６勾配テクスチャの１つのバージョン１４０を示す。各チャンネルの値は、理解し易いように各画素において垂直にリストされている（ｒ、ｇ、ｂ、α）。赤チャンネルの値は、列に沿って０から１に均一に増加し、緑チャンネルの値は、行の下方向に０から１に均一に増加する。青及びアルファチャンネルの値は、勾配テクスチャ全体を通じてゼロである。例えば、テクセル０×０  １６０２は、各チャンネルに対してゼロ値、又は（０，０，０，０）を有し、テクセル１×４は、赤チャンネル値＝０．３３及び緑チャンネル値＝０．８、又は（０．３３，０．８，０，０）を有する。４×６勾配テクスチャ１４０が示されているが（理解し易いように）、好ましいバージョンでは勾配テクスチャは８×２０テクスチャである（図示せず）。好ましいバージョンでは、赤チャンネルの値は、０から１に列に沿って０．１２５の増分ずつ均一に増加し、緑チャンネルの値は、０．０５の増分ずつ０から１に行の下方向に均一に増加する。
【００６４】
図１７は、１，０１６列及び２０行を有するＡＳＣＩＩテクスチャ１４２の好ましいバージョンの一部を示している。各ＡＳＣＩＩ文字は、１２７文字スペースを提供する８列×２０行を占める。ＡＳＣＩＩテクスチャ１４２の文字は、そのＡＳＣＩＩ値によってインデックスされる。例えば、文字「ｈ」に対するＡＳＣＩＩ値は、１０４（ｄｅｃ）である。
【００６５】
図１８は、リニアライザテクスチャ（「Ｌ」）の１つのバージョン１４４を示す。リニアライザテクスチャ１４４は、赤（１，０，０，０）、緑（０，１，０，０）、青（０，０，１，０）、及び透明（０，０，０，１）のように４つのテクセルを有する。
【００６６】
図１９は、視覚化プログラム１４８の好ましいバージョンに従って行われる視覚化動作１９００を示す。レンダーターゲット１５０（ａ）−１５０（ｄ）からの復号化データが、図２０に示されるデータテクスチャ（「ＤＴ１」から「ＤＴ４」）２００２に書き込まれる（動作１９０２）。リニアライザは、係数４で拡大される（動作１９０４）。一時テクスチャ（「ＴＴ」）２１００（図２１）は、拡大されたリニアライザ及びデータテクスチャ２００２に基づいて構成される（動作１９０６）。一時テクスチャ２１００は、以下のシェーダー式に基づく。
ＴＴ＝（ＥＬｒ*ＤＴ１）＋（ＥＬｇ*ＤＴ２）＋（ＥＬｂ*ＤＴ３）＋（ＥＬα*ＤＴ４）
ここで、ＥＬは拡大リニアライザであり、ＤＴはデータテクスチャである。
式１：一時テクスチャ
【００６７】
リニアライザはタイル状に並べられ（動作１９０８）、図２２に示されるタイル状リニアライザ（「ＴＬ」）２２００を生成する。
【００６８】
データ値は、以下のドット積式を各テクセルの４つの値及びタイル状リニアライザ２２００の各テクセルの４つの値に適用することによって、一時テクスチャ２１００の各テクセルから抽出される（動作１９１０）。
ＯＵＴＰＵＴ  ＤＡＴＡ  ＶＡＬＵＥ＝Ｌｒ・ＴＴ．ｒ＋Ｌｇ・ＴＴ．ｇ＋Ｌｂ・ＴＴ．ｂ＋Ｌα・ＴＴ．α
ここで、Ｌはリニアライザであり、ＴＴは一時テクスチャである。
式２：一時テクスチャテクセルとタイル状リニアライザテクセルのドット積
【００６９】
例えば、データテクスチャ２００２に基づいて、第１の５つの出力値は、
ＯＵＴＰＵＴ  ＶＡＬＵＥ＝１０４（「ｈ」）
ＯＵＴＰＵＴ  ＶＡＬＵＥ＝１０１（「ｅ」）
ＯＵＴＰＵＴ  ＶＡＬＵＥ＝１０８（「ｌ」）
ＯＵＴＰＵＴ  ＶＡＬＵＥ＝１０８（「ｌ」）
ＯＵＴＰＵＴ  ＶＡＬＵＥ＝１１０（「ｏ」）
である。
【００７０】
出力値は、ＡＳＣＩＩ文字のロケーションに対応するＡＳＣＩＩテクスチャ１４２の列へのインデックスを参照される（動作１９１２）。例えば、出力値「１０４」は、図１７に示されるように８３２番目の列（８*１０４＝８３２）にある文字「ｈ」に対する第１テクセルにインデックスする。文字「ｈ」に対する残りのテクセルは、勾配テクスチャ１４０の各赤及び緑テクセルからの値に基づいてＡＳＣＩＩテーブル１４２に更にインデックスすることによって得られる。インデックスの前に、勾配小数値は整数にスケール調整される。例えば、勾配テクスチャの好ましいバージョン（８×２０）では、チャンネル値（０．２５，０．２，０，０）を有するテクセルは、（２，４，０，０）にスケール調整される。オフセットとして「１０４」を使用して、勾配テクセル（２，４，０，０）は、ＡＳＣＩＩテクスチャ１４２からテクセル８３４×４の「ｈ」領域にインデックスする。ＡＳＣＩＩ文字は、勾配テクスチャ１４０に基づく座標に従ってＡＳＣＩＩテクスチャのテクセルにアクセスすることによって、フレームバッファなどのディスプレイデバイスにレンダーされる。次の出力値（例えば、１０１，「ｅ」）は、次のＡＳＣＩＩ文字をディスプレイデバイスにレンダーするために、ＡＳＣＩＩテクスチャ１４２の列に戻されるインデックスを参照される。従って、復号化データ値は、データ値をシステムプロセッサ１０２に伝達することなくＧＰＵ１０６によって視覚化される。
【００７１】
記載されている特定の実施に関係なく、上述の全ては、限定ではなく実際には例示的なものである。例えば、実施の選択された態様、特徴、又は構成要素はメモリ内に記憶されるものとして示されているが、暗号化／復号化システムを達成するシステム及び方法の全て又は一部は、例えばハードディスク、フレキシブルディスク、及びＣＤ−ＲＯＭなどの二次記憶デバイス、ネットワークから受信される信号、又は現在公知もしくは将来開発されるかＲＯＭ又はＲＡＭの他の形式である他の機械可読媒体上に記憶し、他の機械可読媒体に分散させ、或いは機械可読媒体から読み取ることができる。
【００７２】
更に、暗号化／復号化システムの特定の構成要素について説明したが、本システムに適合する方法、システム、及び製造物品は、付加的な構成要素又は異なる構成要素を含むことができる。例えば、システムプロセッサは、マイクロプロセッサ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、ディスクリートロジック、或いは回路又はロジックの他のタイプの組み合わせとして実施することができる。同様に、メモリは、ＤＲＡＭ、ＳＲＡＭ、フラッシュ、又はいずれかの他のタイプのメモリとすることができる。パラメータ（例えば鍵）、データベース、テーブル、及び他のデータ構造は、別個に記憶及び管理することができ、又は単一のメモリもしくはデータベース内に組み込むことができ、或いは多くの様々な方法で論理的物理的に編成することができる。プログラムは、単一のプログラムの一部、別々のプログラム、或いは幾つかのメモリ及びプロセッサにわたって分散させることができる。
【００７３】
本発明の種々の実施形態に関して説明してきたが、より多くの実施形態及び実施が本発明の範囲内で実施可能であることは当業者には明らかであろう。従って、本発明は、添付の請求項及びその均等物の観点以外で限定されるものではない。
【図面の簡単な説明】
【００７４】
【図１】暗号化／復号化システムを示す図である。
【図２】図１の暗号化／復号化システムのセットアップ命令を示す図である。
【図３】非暗号化データ及び暗号鍵を含む暗号化データを示す図である。
【図４】ラインダール暗号化／復号化変換を実施するために使用するルックアップテーブルを有するチャンネルを備えた暗号化ルックアップテクスチャを表わす図である。
【図５】図４のルックアップテクスチャのチャンネルの修正ラインダールＳボックスルックアップテーブルのサンプル領域を示す図である。
【図６】図４のルックアップテクスチャのチャンネルのＸＯＲルックアップテーブルのサンプル領域を示す図である。
【図７】図４のルックアップテクスチャのチャンネルのｘＸＯＲルックアップテーブルのサンプル領域を示す図である。
【図８】システムプロセッサからの暗号化データ及びプログラムファイルをＧＰＵにアップロードするためにシステムが行い得る動作を示す図である。
【図９】ＧＰＵ上でデータを暗号化するためにシステムが行い得る動作を示す図である。
【図１０】ＭｉｘＣｏｌｕｍｎｓ変換の状態を示す図である。
【図１１】暗号化データ及び暗号鍵を含む復号データの実施例を示す図である。
【図１２】図４のルックアップテクスチャのチャンネルのｘ−ｘＸＯＲルックアップテーブルのサンプル領域を示す図である。
【図１３】ルックアップテクスチャの逆Ｓボックスルックアップテーブルのサンプル領域を示す図である。
【図１４】復号化プログラムが行う動作を示す図である。
【図１５】復号化データをＧＰＵ上で視覚化するためのセットアップ命令を示す図である。
【図１６】復号化データをＧＰＵ上で視覚化する際に使用される勾配テクスチャを示す図である。
【図１７】復号化データをＧＰＵ上で視覚化する際に使用されるＡＳＣＩＩテクスチャを示す図である。
【図１８】復号化データをＧＰＵ上で視覚化する際に使用されるリニアライザテクスチャを示す図である。
【図１９】視覚化プログラムが行い得る動作を示す図である。
【図２０】視覚化プログラムによって使用されるデータテクスチャに書き込まれた復号化データを示す図である。
【図２１】復号化データをＧＰＵ上で視覚化する際に使用される一時テクスチャを示す図である。
【図２２】復号化データをＧＰＵ上で視覚化する際に使用されるタイル状に並べられたリニアライザを示す図である。
【符号の説明】
【００７５】
１００  暗号化／復号化システム
１０２  システムプロセッサ
１０４  システムメモリ
１０６  グラフィック処理ユニット
１０８  記憶媒体
１１０  セットアッププログラム
１１２  非暗号化データ
１１４  暗号化データ
１１６  暗号鍵
１３０（ａ）  暗号化プログラム
１３０（ｂ）  復号化プログラム
１３２  非暗号化テクスチャ
１３４  ラウンド鍵
１３６  状態ブロック
１３８  暗号化テクスチャ
１４０  勾配テクスチャ
１４２  ＡＳＣＩＩテクスチャ
１４４  リニアライザテクスチャ
１４８  視覚化プログラム
１５０（ａ）レンダーターゲット
１５０（ｂ）レンダーターゲット
１５０（ｃ）レンダーターゲット
１５０（ｄ）レンダーターゲット
１５２  サーバー
１５４  ルックアップテクスチャ
１５６  テクスチャレジスタ
１５８  定数レジスタ
１６０  一時レジスタ
【図１】
2008017489.tif 000003
【図２】
2008017489.tif 000004
【図３】
2008017489.tif 000005
【図４】
2008017489.tif 000006
【図５】
2008017489.tif 000007
【図６】
2008017489.tif 000008
【図７】
2008017489.tif 000009
【図８】
2008017489.tif 000010
【図９】
2008017489.tif 000011
【図１０】
2008017489.tif 000012
【図１１】
2008017489.tif 000013
【図１２】
2008017489.tif 000014
【図１３】
2008017489.tif 000015
【図１４】
2008017489.tif 000016
【図１５】
2008017489.tif 000017
【図１６】
2008017489.tif 000018
【図１７】
2008017489.tif 000019
【図１８】
2008017489.tif 000020
【図１９】
2008017489.tif 000021
【図２０】
2008017489.tif 000022
【図２１】
2008017489.tif 000023
【図２２】
2008017489.tif 000024