(57)【要約】例えばクラウドコンピューティング処理を適用したソフトウェア（プログラム）による暗号処理の高速化を実現する。多数のユーザ端末やセンサが個別の暗号鍵で暗号化したデータを送信し、サーバがこれらの暗号化データを受信し、復号処理シーケンスを規定したプログラムに従ってデータ処理を実行する。復号対象となる複数の暗号化データに対するビットスライス処理によりビットスライス表現データを生成し、暗号化データ各々の暗号鍵に基づくビットトスライス表現鍵を生成し、ビットスライス表現鍵に基づいてラウンド鍵を生成し、ビットスライス表現データのブロック単位の演算、移動処理、ラウンド鍵を適用した演算等を含む復号処理を実行し、復号処理結果に対するデータの逆変換により、多数の暗号化データに対応する多数の平文データを生成する。
2013129056.tif 000002
【特許請求の範囲】
【請求項１】
データ送信装置の送信する暗号化データを受信する通信部と、
前記通信部を介して受信した暗号化データの復号処理を実行するデータ処理部を有し、
前記データ処理部は、復号処理シーケンスを規定したプログラムに従ってデータ処理を実行する構成であり、
前記データ処理部は、前記プログラムに従って、
復号処理対象となる暗号化データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記暗号化データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、復号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した復号処理と、
前記復号処理の結果に対する前記ビットスライス処理の逆変換により、前記暗号化データに対応する平文データを生成するデータ逆変換処理を、
実行する情報処理装置。
【請求項２】
前記通信部は、暗号化データとともに該暗号化データの送信機器の機器ＩＤを受信し、
前記データ処理部は、
前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を所定の演算で導出し、
前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する請求項１に記載の情報処理装置。
【請求項３】
前記データ処理部は、
前記復号処理において、前記ビットスライス表現データを構成する各暗号化データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、
によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した復号処理を実行する請求項１に記載の情報処理装置。
【請求項４】
前記データ処理部は、
前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、
によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する請求項１に記載の情報処理装置。
【請求項５】
暗号化データを生成して送信する送信端末と、
前記送信端末の送信する暗号化データを受信するサーバを有し、
前記サーバは、
復号処理シーケンスを規定したプログラムに従ってデータ処理を実行するデータ処理部を有し、
前記データ処理部は、前記プログラムに従って、
復号処理対象となる暗号化データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記暗号化データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、復号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した復号処理と、
前記復号処理の結果に対する前記ビットスライス処理の逆変換により、前記暗号化データに対応する平文データを生成するデータ逆変換処理を、
実行する情報処理システム。
【請求項６】
前記送信端末は、暗号化データとともに該暗号化データの送信機器の機器ＩＤを送信し、
前記サーバのデータ処理部は、
前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を所定の演算で導出し、
前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する請求項５に記載の情報処理システム。
【請求項７】
前記サーバのデータ処理部は、
前記復号処理において、前記ビットスライス表現データを構成する各暗号化データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、
によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した復号処理を実行する請求項５に記載の情報処理システム。
【請求項８】
前記サーバのデータ処理部は、
前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、
によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する請求項５に記載の情報処理システム。
【請求項９】
データ受信装置に対して暗号化データを送信する通信部と、
前記通信部を介して送信する暗号化データの生成処理を実行するデータ処理部を有し、
前記データ処理部は、暗号処理シーケンスを規定したプログラムに従ってデータ処理を実行する構成であり、
前記データ処理部は、前記プログラムに従って、
暗号化処理対象となる平文データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記平文データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、暗号化処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した暗号処理と、
前記暗号処理の結果に対する前記ビットスライス処理の逆変換により、前記平文データに対応する暗号化データを生成するデータ逆変換処理を、
実行する情報処理装置。
【請求項１０】
前記データ処理部は、
暗号化データを送信する送信先の機器ＩＤに基づいて各平文データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を所定の演算で導出し、
前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する請求項９に記載の情報処理装置。
【請求項１１】
前記データ処理部は、
前記暗号処理において、前記ビットスライス表現データを構成する各平文データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、
によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した暗号化処理を実行する請求項９に記載の情報処理装置。
【請求項１２】
前記データ処理部は、
前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、
によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する請求項９に記載の情報処理装置。
【請求項１３】
暗号化データを生成して送信するサーバと、
前記サーバの送信する暗号化データを受信する受信端末を有し、
前記サーバは、
暗号処理シーケンスを規定したプログラムに従ってデータ処理を実行するデータ処理部を有し、
前記データ処理部は、前記プログラムに従って、
暗号処理対象となる平文データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記平文データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、暗号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した暗号処理と、
前記暗号処理の結果に対する前記ビットスライス処理の逆変換により、前記平文データに対応する暗号化データを生成するデータ逆変換処理を、
実行する情報処理システム。
【請求項１４】
前記サーバのデータ処理部は、
前記受信端末各々の機器ＩＤに基づいて、各平文データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各平文データに対応する暗号鍵を所定の演算で導出し、
前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する請求項１３に記載の情報処理システム。
【請求項１５】
前記サーバのデータ処理部は、
前記暗号化処理において、前記ビットスライス表現データを構成する各平文データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、
によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した暗号化処理を実行する請求項１３に記載の情報処理システム。
【請求項１６】
前記サーバの前記データ処理部は、
前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、
によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する請求項１３に記載の情報処理システム。
【請求項１７】
情報処理装置において実行する情報処理方法であり、
通信部が、データ送信装置の送信する暗号化データを受信する通信ステップと、
データ処理部が、前記通信部を介して受信した暗号化データの復号処理を実行するデータ処理ステップを実行し、
前記データ処理ステップは、復号処理シーケンスを規定したプログラムに従って、
復号処理対象となる暗号化データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記暗号化データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、復号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した復号処理と、
前記復号処理の結果に対する前記ビットスライス処理の逆変換により、前記暗号化データに対応する平文データを生成するデータ逆変換処理を、
実行する情報処理方法。
【請求項１８】
情報処理装置において実行する情報処理方法であり、
データ処理部が、暗号化データの生成処理を実行するデータ処理ステップと、
通信部が、前記データ処理部の生成した暗号化データの各々をデータ送信装置各々に送信する通信ステップを実行し、
前記データ処理ステップは、暗号処理シーケンスを規定したプログラムに従って、
暗号化処理対象となる平文データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記平文データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、暗号化処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した暗号処理と、
前記暗号処理の結果に対する前記ビットスライス処理の逆変換により、前記平文データに対応する暗号化データを生成するデータ逆変換処理を、
実行する情報処理方法。
【請求項１９】
情報処理装置において情報処理を実行させるプログラムであり、
データ処理部に、送信機が個別の暗号鍵で生成した暗号化データを入力させ、
前記データ処理に、
復号処理対象となる暗号化データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記暗号化データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、復号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した復号処理と、
前記復号処理の結果に対する前記ビットスライス処理の逆変換により、前記暗号化データに対応する平文データを生成するデータ逆変換処理を、
実行させるプログラム。
【請求項２０】
情報処理装置において情報処理を実行させるプログラムであり、
データ処理部に、暗号化データの生成処理を実行させるデータ処理ステップと、
通信部が、前記データ処理部の生成した暗号化データの各々をデータ送信装置各々に送信させる通信ステップを実行させ、
前記データ処理ステップにおいては、
暗号化処理対象となる平文データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記平文データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、暗号化処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した暗号処理と、
前記暗号処理の結果に対する前記ビットスライス処理の逆変換により、前記平文データに対応する暗号化データを生成するデータ逆変換処理を、
実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、情報処理装置、および情報処理方法、並びにプログラムに関する。さらに詳細には、大量データの暗号処理の高速化を実現する情報処理装置、および情報処理方法、並びにプログラムに関する。
【背景技術】
【０００２】
情報化社会が発展すると共に、扱う情報を安全に守るための情報セキュリティ技術の重要性が増してきている。情報セキュリティ技術の構成要素の一つとして暗号技術があり、現在では様々な製品やシステムで暗号技術が利用されている。【０００３】
例えばインターネット等のネットワークを介した通信が盛んに行われており、また、ＰＣ、携帯端末、ＲＦＩＤや様々なセンサ等の多種多様なデバイスがネットワークに接続し通信が行われている。このような環境の中で、個人のプライバシーを保護しながら利便性を高めるネットワーク社会を実現するための情報セキュリティ技術が不可欠となり、安全性が高く、かつ高速処理の可能な暗号技術が求められている。【０００４】
例えば個人の所有する端末から送信される情報や、家に設置されたセンサを介して取得された情報をサーバが収集し、サーバが収集情報に対して様々なデータ処理や解析を行うシステムが利用されている。
具体的には、例えば家庭やオフィスにセンサを配置して電力消費量を管理するシステムや、独居老人宅にセンサを配置して健康・安全管理に利用するサービス、道路や車両にセンサを配置して渋滞検知・緩和に利用する交通システムなどである。【０００５】
このようなシステムにおいて収集するデータには、個人のプライバシー情報を含む場合が多く、プライバシー保護のためにデータを暗号化することが望まれる。しかしながら、小型ハードウェア実装向けに設計された軽量暗号アルゴリズムでない従来の暗号アルゴリズムを実装したハードウェアはモジュール規模が大きく、例えばＲＦＩＤやセンサ等の小型装置に搭載するのが困難である。また、低コストでの実現も難しく、さらに消費電力が大きくバッテリ交換の頻度が高くなるなど運用性の点などで多くの課題がある。【０００６】
このような中、ハードウェア規模やメモリ等のリソースが限られた機器や、省電力性が求められる機器への実装に適した軽量暗号技術（Ｌｉｇｈｔｗｅｉｇｈｔ  ｃｒｙｐｔｏｇｒａｐｈｙ）へのニーズが高まっている。
このようなニーズを受けて、軽量暗号技術の研究開発が進んでおり、近年、小型ハードウェア実装の観点で優れた新しい軽量ブロック暗号がいくつか提案されている。代表例としてＰＲＥＳＥＮＴ，ＣＬＥＦＩＡ，ＫＡＴＡＮ，Ｐｉｃｃｏｌｏなどがある。【０００７】
これに伴い、軽量暗号技術の国際標準化も進められており、国際標準化機構ＩＳＯ  （Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｏｒｇａｎｉｚａｔｉｏｎ  ｆｏｒ  Ｓｔａｎｄａｒｄｉｚａｔｉｏｎ）と国際電気標準会議ＩＥＣ（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｅｌｅｃｔｒｏｔｅｃｈｎｉｃａｌ  Ｃｏｍｍｉｓｓｉｏｎ）の合同技術委員会下で情報セキュリティ技術の国際標準化を行っている委員会ＩＳＯ／ＩＥＣ  ＪＴＣ  １／ＳＣ  ２７で軽量暗号の国際標準ＩＳＯ／ＩＥＣ  ２９１９２の規格化が進められている。【０００８】
軽量暗号技術の一つである軽量ブロック暗号の多くは、小型のハードウェア実装のために最適化されている。
すなわち、ハードウェア実装時に小型化が可能なように、４ビット等の小さなＳ−ｂｏｘやビット演算を多用した「軽い」ラウンド関数を多数回繰り返す構造で設計されているものが多い。
この軽量暗号の構造は、進化を続けている汎用プロセッサの利点を生かしきることができず、ＰＣやサーバでのソフトウェア実装では一般に低速であるという課題がある。【０００９】
ＰＣやサーバでのソフトウェア実装による処理の一例として、ネットワーク接続された装置を利用するクラウドコンピューティングの利用が考えられるが、クラウド上では仮想マシン間（Ｃｒｏｓｓ  ＶＭ）サイドチャネル攻撃も脅威となっている［非特許文献１］。クラウドでは１台のサーバを複数のユーザが共有するマルチテナント方式をとる場合があり、ユーザが占有する仮想マシンＶＭは分離されているが、メモリやキャッシュなどの物理デバイスは共有される。仮想マシン間サイドチャネル攻撃とは、セットアソシアティブキャッシュを共有している「悪意のあるＶＭ」が連続してキャッシュを叩き、キャッシュの反応の遅れにより他のＶＭでアクセスしていることを検知して鍵を導出する攻撃である。このように、クラウド上で暗号処理をソフトウェア実装で行う際にはこのようなサイドチャネル攻撃に対する耐性も課題となっている。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】Ｔｈｏｍａｓ  Ｒｉｓｔｅｎｐａｒｔ，Ｅｒａｎ  Ｔｒｏｍｅｒ，Ｈｏｖａｖ  Ｓｈａｃｈａｍ，  Ｓｔｅｆａｎ  Ｓａｖａｇｅ，"Ｈｅｙ，  Ｙｏｕ，  Ｇｅｔ  Ｏｆｆ  ｏｆ  Ｍｙ  Ｃｌｏｕｄ：Ｅｘｐｌｏｒｉｎｇ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｌｅａｋａｇｅ  ｉｎ  Ｔｈｉｒｄ−Ｐａｒｔｙ  Ｃｏｍｐｕｔｅ  Ｃｌｏｕｄｓ，"ＡＣＭ  ＣＣＳ'０９，Ｎｏｖｅｍｂｅｒ９−１３，２００９．
【非特許文献２】Ｅｌｉ  Ｂｉｈａｍ，"Ａ  Ｆａｓｔ  Ｎｅｗ  ＤＥＳ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｉｎ  Ｓｏｆｔｗａｒｅ"，ＦＳＥ'９７，  １９９７．
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本開示は、例えば上述の状況に鑑みてなされたものであり、大量データの暗号処理の高速化を実現する情報処理装置、および情報処理方法、並びにプログラムを提供することを目的とする。
また、本開示の一実施例においては、汎用プロセッサ上で動作可能なソフトウェア（プログラム）を適用して暗号処理を実行した場合に、高速処理を可能とした情報処理装置、および情報処理方法、並びにプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本開示の第１の側面は、
複数のデータ送信装置の送信する暗号化データを受信する通信部と、
前記通信部を介して受信した複数の暗号化データの復号処理を実行するデータ処理部を有し、
前記データ処理部は、復号処理シーケンスを規定したプログラムに従ってデータ処理を実行する構成であり、
前記データ処理部は、前記プログラムに従って、
復号処理対象となる複数の暗号化データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の暗号化データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、復号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した復号処理と、
前記復号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の暗号化データに対応する複数の平文データを生成するデータ逆変換処理を、
実行する情報処理装置にある。【００１３】
さらに、本開示の情報処理装置の一実施態様において、前記通信部は、暗号化データとともに該暗号化データの送信機器の機器ＩＤを受信し、前記データ処理部は、前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を所定の演算で導出し、前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する。【００１４】
さらに、本開示の情報処理装置の一実施態様において、前記データ処理部は、前記復号処理において、前記ビットスライス表現データを構成する各暗号化データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現データブロックのデータによって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した復号処理を実行する。【００１５】
さらに、本開示の情報処理装置の一実施態様において、前記データ処理部は、前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する。【００１６】
さらに、本開示の第２の側面は、
暗号化データを生成して送信する複数の送信端末と、
前記複数の送信端末の送信する複数の暗号化データを受信するサーバを有し、
前記サーバは、
復号処理シーケンスを規定したプログラムに従ってデータ処理を実行するデータ処理部を有し、
前記データ処理部は、前記プログラムに従って、
復号処理対象となる複数の暗号化データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の暗号化データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、復号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した復号処理と、
前記復号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の暗号化データに対応する複数の平文データを生成するデータ逆変換処理を、
実行する情報処理システムにある。【００１７】
さらに、本開示の情報処理システムの一実施態様において、前記複数の送信端末は、暗号化データとともに該暗号化データの送信機器の機器ＩＤを送信し、前記サーバのデータ処理部は、前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を所定の演算で導出し、前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する。【００１８】
さらに、本開示の情報処理システムの一実施態様において、前記サーバのデータ処理部は、前記復号処理において、前記ビットスライス表現データを構成する各暗号化データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した復号処理を実行する。【００１９】
さらに、本開示の情報処理システムの一実施態様において、前記サーバのデータ処理部は、前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する。【００２０】
さらに、本開示の第３の側面は、
データ受信装置に対して暗号化データを送信する通信部と、
前記通信部を介して送信する複数の暗号化データの生成処理を実行するデータ処理部を有し、
前記データ処理部は、暗号処理シーケンスを規定したプログラムに従ってデータ処理を実行する構成であり、
前記データ処理部は、前記プログラムに従って、
暗号化処理対象となる複数の平文データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の平文データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、暗号化処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した暗号処理と、
前記暗号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の平文データに対応する複数の暗号化データを生成するデータ逆変換処理を、
実行する情報処理装置にある。【００２１】
さらに、本開示の情報処理装置の一実施態様において、前記データ処理部は、暗号化データを送信する送信先の機器ＩＤに基づいて各平文データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を所定の演算で導出し、前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する。【００２２】
さらに、本開示の情報処理装置の一実施態様において、前記データ処理部は、前記暗号処理において、前記ビットスライス表現データを構成する各平文データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した暗号化処理を実行する。【００２３】
さらに、本開示の情報処理装置の一実施態様において、前記データ処理部は、前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する。【００２４】
さらに、本開示の第４の側面は、
複数の暗号化データを生成して送信するサーバと、
前記サーバの送信する暗号化データを受信する複数の受信端末を有し、
前記サーバは、
暗号処理シーケンスを規定したプログラムに従ってデータ処理を実行するデータ処理部を有し、
前記データ処理部は、前記プログラムに従って、
暗号処理対象となる複数の平文データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の平文データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、暗号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した暗号処理と、
前記暗号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の平文データに対応する複数の暗号化データを生成するデータ逆変換処理を、
実行する情報処理システムにある。【００２５】
さらに、本開示の情報処理システムの一実施態様において、前記サーバのデータ処理部は、前記受信端末各々の機器ＩＤに基づいて、各平文データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各平文データに対応する暗号鍵を所定の演算で導出し、前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する。【００２６】
さらに、本開示の情報処理システムの一実施態様において、前記サーバのデータ処理部は、前記暗号化処理において、前記ビットスライス表現データを構成する各平文データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した暗号化処理を実行する。【００２７】
さらに、本開示の情報処理システムの一実施態様において、前記サーバの前記データ処理部は、前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、
によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する。【００２８】
さらに、本開示の第５の側面は、
情報処理装置において実行する情報処理方法であり、
通信部が、複数のデータ送信装置の送信する暗号化データを受信する通信ステップと、
データ処理部が、前記通信部を介して受信した複数の暗号化データの復号処理を実行するデータ処理ステップを実行し、
前記データ処理ステップは、復号処理シーケンスを規定したプログラムに従って、
復号処理対象となる複数の暗号化データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の暗号化データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、復号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した復号処理と、
前記復号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の暗号化データに対応する複数の平文データを生成するデータ逆変換処理を、
実行する情報処理方法にある。【００２９】
さらに、本開示の第６の側面は、
情報処理装置において実行する情報処理方法であり、
データ処理部が、複数の暗号化データの生成処理を実行するデータ処理ステップと、
通信部が、前記データ処理部の生成した複数の暗号化データの各々を複数のデータ送信装置各々に送信する通信ステップを実行し、
前記データ処理ステップは、暗号処理シーケンスを規定したプログラムに従って、
暗号化処理対象となる複数の平文データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の平文データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、暗号化処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した暗号処理と、
前記暗号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の平文データに対応する複数の暗号化データを生成するデータ逆変換処理を、
実行する情報処理方法にある。【００３０】
さらに、本開示の第７の側面は、
情報処理装置において情報処理を実行させるプログラムであり、
データ処理部に、複数の送信機が個別の暗号鍵で生成した暗号化データを入力させ、
前記データ処理に、
復号処理対象となる複数の暗号化データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の暗号化データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、復号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した復号処理と、
前記復号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の暗号化データに対応する複数の平文データを生成するデータ逆変換処理を、
実行させるプログラムにある。【００３１】
さらに、本開示の第８の側面は、
情報処理装置において情報処理を実行させるプログラムであり、
データ処理部に、複数の暗号化データの生成処理を実行させるデータ処理ステップと、
通信部が、前記データ処理部の生成した複数の暗号化データの各々を複数のデータ送信装置各々に送信させる通信ステップを実行させ、
前記データ処理ステップにおいては、
暗号化処理対象となる複数の平文データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の平文データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、暗号化処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した暗号処理と、
前記暗号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の平文データに対応する複数の暗号化データを生成するデータ逆変換処理を、
実行させるプログラムにある。【００３２】
なお、本開示のプログラムは、例えば、様々なプログラム・コードを実行可能な情報処理装置やコンピュータ・システムに対して例えば記憶媒体によって提供されるプログラムである。このようなプログラムを情報処理装置やコンピュータ・システム上のプログラム実行部で実行することでプログラムに応じた処理が実現される。【００３３】
本開示のさらに他の目的、特徴や利点は、後述する本発明の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【発明の効果】
【００３４】
本開示の一実施例によれば、例えばクラウドコンピューティング処理を適用したソフトウェア（プログラム）による軽量暗号の暗号処理の高速化が実現される。
具体的には、多数のユーザ端末やセンサが個別の暗号鍵で軽量暗号アルゴリズムにより暗号化したデータを送信し、サーバがこれらの暗号化データを受信し、復号処理シーケンスを規定したプログラムに従ってデータ処理を実行する。復号対象となる複数の暗号化データに対するビットスライス処理によりビットスライス表現データを生成し、暗号化データ各々の暗号鍵に基づくビットトスライス表現鍵を生成し、ビットスライス表現鍵に基づいてラウンド鍵を生成し、ビットスライス表現データのブロック単位の演算、移動処理、ラウンド鍵を適用した演算等を含む復号処理を実行し、復号処理結果に対するデータの逆変換により、多数の暗号化データに対応する多数の平文データを生成することが可能となる。【００３５】
なお、本開示の一実施例に従った復号処理では、レジスタに格納されたビットスライス表現ブロック単位の演算や移動処理によって処理が行われ、高速に大量のデータを処理することが可能となる。具体的には、Ｉｎｔｅｌ  Ｃｏｒｅ  ｉ７  ８７０プロセッサ上で暗号アルゴリズム［ＰＲＥＳＥＮＴ（鍵長８０ビット）］を実行した場合、１１．０６ｃｙｃｌｅｓ／ｂｙｔｅ、また、暗号アルゴリズム［Ｐｉｃｃｏｌｏ（鍵長８０ビット）］を実行した場合、５．５９ｃｙｃｌｅｓ／ｂｙｔｅという高速性を達成している。特にＰｉｃｃｏｌｏの速度は、従来知られていた同プラットフォーム上（Ｉｎｔｅｌ  Ｃｏｒｅ  ｉ７  ９２０）上での米国政府標準暗号ＡＥＳの速度記録６．９２ｃｙｃｌｅｓ／ｂｙｔｅを超えるものとなっている。
さらに、本開示の一実施例に従ったビットスライス実装ではＳ−ｂｏｘをテーブル参照でなく論理演算で計算するため、キャッシュ攻撃や仮想マシン間攻撃のようなサイドチャネル攻撃に対する耐性を高めることができる。さらに、クラウドコンピューティング処理におけるソフトウェアでの暗号処理の高速化は、より少ないサイクル数で暗号処理を完了することができ、クラウドやデータセンターの電力消費量を下げることにつながる。【００３６】
さらに、本開示の一実施例に従ったシステムでは、クラウドやデータセンターに暗号処理用の専用ハードウェア導入が不要となり、スケーラビリティが向上する。
さらに、軽量暗号にとってこれまで困難であったクラウドでの活用が可能になることで、センサでの軽量暗号実装が促進され、低コスト・低消費電力のセンサネットワークが実現できる。
【図面の簡単な説明】
【００３７】
【図１】本開示の処理が適用可能なシステムの一例について説明する図である。
【図２】本開示の処理が適用可能なシステムの動作例について説明する図である。
【図３】図１、図２に示す本開示の処理が適用可能なシステムを構成するサーバにおいて実行する処理の一例について説明する図である。
【図４】図１、図２に示す本開示の処理が適用可能なシステムを構成するサーバにおいて実行する処理のシーケンス例について説明する図である。
【図５】図１、図２に示す本開示の処理が適用可能なシステムを構成するサーバにおいて実行する処理のシーケンス例について説明する図である。
【図６】暗号処理アルゴリズムＰＲＥＳＥＮＴの処理シーケンスについて説明する図である。
【図７】本開示の暗号処理の処理シーケンスについて説明する図である。
【図８】鍵データの鍵変換処理によるビットスライス表現鍵データの生成処理例について説明する図である。
【図９】データの変換処理によるビットスライス表現データの生成処理例について説明する図である。
【図１０】鍵スケジュール処理におけるレジスタ格納データの一例を示す図である。
【図１１】鍵スケジュール処理におけるレジスタ格納データの一例を示す図である。
【図１２】鍵スケジュール処理のシーケンスを説明するフローチャートを示す図である。
【図１３】鍵スケジュール処理において実行するラウンド鍵生成更新処理の詳細処理シーケンスを説明するフローチャートを示す図である。
【図１４】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図１５】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図１６】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図１７】鍵スケジュール処理における非線形変換処理（Ｓｂｏｘ）の論理命令列について説明する図である。
【図１８】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図１９】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図２０】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図２１】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図２２】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図２３】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図２４】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図２５】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図２６】鍵スケジュール処理におけるレジスタ格納データと処理例を示す図である。
【図２７】鍵スケジュール処理のシーケンスを説明するフローチャートを示す図である。
【図２８】鍵スケジュール処理において実行する非線形変換処理（Ｓｂｏｘ）の事前計算処理の詳細シーケンスを説明するフローチャートを示す図である。
【図２９】鍵スケジュール処理において実行する非線形変換処理（Ｓｂｏｘ）の事前計算処理の詳細シーケンスを説明するフローチャートを示す図である。
【図３０】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図３１】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図３２】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図３３】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図３４】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図３５】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図３６】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図３７】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図３８】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図３９】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図４０】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図４１】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図４２】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図４３】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図４４】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図４５】非線形変換処理（Ｓｂｏｘ）の事前計算処理におけるレジスタ格納データと処理例を示す図である。
【図４６】ラウンド鍵生成更新処理のシーケンスを説明するフローチャートを示す図である。
【図４７】ラウンド鍵生成更新処理におけるレジスタ格納データと処理例を示す図である。
【図４８】ラウンド鍵生成更新処理におけるレジスタ格納データと処理例を示す図である。
【図４９】ラウンド鍵生成更新処理におけるレジスタ格納データと処理例を示す図である。
【図５０】ラウンド鍵生成更新処理におけるレジスタ格納データと処理例を示す図である。
【図５１】ラウンド鍵生成更新処理におけるレジスタ格納データと処理例を示す図である。
【図５２】ラウンド鍵生成更新処理におけるレジスタ格納データと処理例を示す図である。
【図５３】ラウンド鍵生成更新処理におけるレジスタ格納データと処理例を示す図である。
【図５４】ラウンド鍵生成更新処理におけるレジスタ格納データと処理例を示す図である。
【図５５】ラウンド鍵生成更新処理におけるレジスタ格納データと処理例を示す図である。
【図５６】ラウンド鍵生成更新処理におけるレジスタ格納データと処理例を示す図である。
【図５７】暗号処理の詳細シーケンスを説明するフローチャートを示す図である。
【図５８】暗号処理部の実行する暗号処理を実行するハードウェア構成例を示す図である。
【図５９】暗号処理の実行時のレジスタ格納データと、データ処理例について説明する図である。
【図６０】暗号処理の実行時のデータ処理例について説明する図である。
【図６１】暗号処理に際して実行する線形変換処理の詳細シーケンスを説明するフローチャートを示す図である。
【図６２】暗号処理に際して実行する線形変換処理実行時のレジスタ格納データと処理例について説明する図である。
【図６３】暗号処理に際して実行する線形変換処理実行時のレジスタ格納データと処理例について説明する図である。
【図６４】暗号処理に際して実行する線形変換処理実行時のレジスタ格納データと処理例について説明する図である。
【図６５】暗号処理に際して実行する線形変換処理実行時のレジスタ格納データと処理例について説明する図である。
【図６６】暗号処理に際して実行する線形変換処理実行時のレジスタ格納データと処理例について説明する図である。
【図６７】暗号処理に際して実行する線形変換処理実行時のレジスタ格納データと処理例について説明する図である。
【図６８】暗号処理に際して実行する線形変換処理実行時のレジスタ格納データと処理例について説明する図である。
【図６９】暗号処理に際して実行する線形変換処理実行時のレジスタ格納データと処理例について説明する図である。
【図７０】暗号処理に際して実行する線形変換処理実行時のレジスタ格納データと処理例について説明する図である。
【図７１】暗号処理を実行する装置構成例を示す図である。
【発明を実施するための形態】
【００３８】
以下、図面を参照しながら本開示に係る情報処理装置、および情報処理方法、並びにプログラムの詳細について説明する。説明は、以下の項目に従って行う。
１．本開示の構成を適用可能なシステムの一例について
２．軽量ブロック暗号アルゴリズム「ＰＲＥＳＥＮＴ」について
３．情報処理装置（暗号処理装置）の構成と処理シーケンスの概要について
４．鍵変換処理とデータ変換処理について
５．鍵スケジュール処理について（鍵スケジュール処理例１）
６．鍵スケジュール処理について（鍵スケジュール処理例２）
６−１．非線形変換（Ｓｂｏｘ）の事前計算処理について
６−２．ラウンド鍵生成、更新処理について
７．暗号処理について
８．情報処理装置および暗号処理装置の構成例について
９．本開示の構成のまとめ
【００３９】
［１．本開示の構成を適用可能なシステムの一例について］
例えば各個人の所有する携帯電話やスマートフォン等の通信端末や、様々な物品に装着されたＲＦＩＤ、あるいは各家屋に配置されたセンサなどから情報を収集してサーバにおいて処理を行う構成を想定する。
多数の情報送信側の装置には暗号処理アルゴリズムを実行する小型のハードウェアを装着して高速で暗号化データを生成して送信することができる。
【００４０】
しかし、一方でサーバは、これら多数の端末やセンサが送信する大量の暗号化データを受信して復号処理を行う必要がある。また、サーバは多数の端末に送信する多数の暗号化データを生成しなければならない場合も想定される。
今後は、このように膨大で多岐にわたるビッグデータを収集、分析し、活用するニーズがますます高まることが予想される。
【００４１】
このような膨大なデータの処理には、クラウドコンピューティングの利用が有効であると考えられる。例えば、多数の端末やセンサ等から収集された大量の暗号化データの解析にクラウドコンピューティングを活用し、ネットワーク上のサーバの汎用プロセッサ上で動作可能なソフトウェアを適用して暗号処理（暗号化および復号処理の双方を含む）を行う構成である。
【００４２】
ＲＦＩＤやセンサなどでは低コスト・低消費電力で実装できることが最も重視され、軽量暗号で暗号化することが最適な選択肢であるが、前述したように、軽量暗号は、クラウド上のサーバの汎用プロセッサ上で動作する通常のソフトウェア実装では、一般に低速であるという課題がある。
【００４３】
クラウドコンピューティングは、ネットワークで接続された多くの情報処理装置を活用して処理を行うことでメリットがあるが、ネットワーク接続された全ての機器に特定の暗号処理アルゴリズムを実行するハードウェアを装着させて高速化をはかることはコスト上デメリットとなる。
大量の暗号化データを収集してクラウド構成サーバにアップロードし、クラウドで解析を行うようなケースでは、多くの安価なサーバ上で実行可能なソフトウェア（プログラム）を利用して処理を行わせるスケールアウトの手法が望ましいと考えられる。
【００４４】
このように、例えば、クラウドコンピューティング等の技術を利用して暗号処理を行う場合、ソフトウェア（プログラム）を利用した暗号処理（暗号化処理と復号処理）を行うことが求められる。しかし、前述したように、軽量暗号においてはソフトウェアに従った暗号処理の処理速度が低下してしまうという問題があり、処理速度の高速化を実現する手法が求められている。
【００４５】
暗号アルゴリズムには様々なものがあるが、基本的な技術の一つとして、ブロック暗号と呼ばれるものがある。ブロック暗号の通常のソフトウェア実装は、非線形変換処理を行うＳｂｏｘをテーブル参照で実装するため、キャッシュ攻撃が脅威となることがある。キャッシュ攻撃とは、サイドチャネル攻撃の一つで、キャッシュヒットの有無によりメモリアクセス時間が異なることを利用して暗号化鍵を導出するタイミング攻撃である。
【００４６】
本開示の構成は、例えばこのような問題を解決するものである。図１以下を参照して、本開示の構成を適用可能なシステムの一例について説明する。
本開示の構成が適用可能なシステムとして、例えば図１に示すようなネットワークシステムがある。
図１には、複数の末端ノードが接続されたセンサネットワーク２０と、末端ノードの送信データを収集してデータ処理を行うネットワーク接続サーバ群によって構成されるクラウド１０を示している。
【００４７】
末端ノードは、例えばユーザの所有するＰＣや携帯電話、スマートフォン、タブレット端末等の携帯端末、あるいは家庭やオフィスに配置された電力消費量検出センサや、独居老人宅に配置して安全・健康管理情報を収集するセンサやヘルスケアデバイス、道路や車両に備えられた渋滞検知・緩和に利用する端末やセンサ、その他の様々な機器が含まれる。
なお、以下、これらの様々な末端ノード構成機器をまとめて、センサとして説明する。センサには上述した様々な機器が含まれる。
【００４８】
末端ノードを構成するセンサは、様々な情報を、データ処理を行うネットワーク接続サーバ群によって構成されるクラウド１０に送信する。
なお、多くの場合、送信データは例えば中継ノード等を介してクラウド１０を構成するネットワーク接続サーバに提供される。
【００４９】
このようなシステムで収集されるデータは、例えば個人のプライバシーや機密情報が含まれる場合が多く、データ漏えいを防止するため暗号化されて送信される。
センサは、送信データの暗号化を実行して暗号化データを送信する。センサは、例えば軽量暗号アルゴリズムを実行する専用ハードウェアを実装し、これを用いて暗号化を行う。この暗号化のための暗号鍵は、各センサがメモリに保持する個別の暗号鍵、あるいは、例えばセンサＩＤから所定の演算で導出できる鍵などが利用される。
【００５０】
センサの数は、膨大であり、図２に示すように、各センサは暗号化データにセンサＩＤを付与してクラウドに送信する。
図２に示す例では、末端ノードＡ，Ｂ，Ｃをデータ送信ノードの代表例として示している。それぞれのノードはノード固有鍵である暗号鍵を適用して送信データの暗号化を実行して暗号化データによって構成されるブロック（例えば６４ビット）を生成し、生成した暗号化データに各センサ（末端ノード）の識別子であるセンサＩＤを付与して送信する。
代表例として示すセンサＡ〜Ｃ以外の多数のセンサからも大量の暗号化データがクラウド上のサーバ、例えば図２に示すサーバＳ３０に送信される。
【００５１】
なお、以下に説明する実施例では、各センサの生成する暗号化データのデータ長は暗号化処理に使う軽量ブロック暗号アルゴリズムのブロック長１ブロック分として説明する。１ブロックは例えば６４ビット等の固定ビットのデータである。各センサは、センサ固有鍵（例えば８０ビット）を適用した暗号化処理によって、６４ビットの暗号化ブロックを生成して送信する。
【００５２】
各センサの生成する暗号化データのデータは１ブロック分に限らず、複数ブロックとしてもよい。各センサは、各暗号化データブロックとセンサＩＤとの対応を明確にしたデータを送信する。なお、例えば、各ブロックのデータ順序情報が必要な場合は、データにデータ順序を示すシリアル番号やタイムスタンプを含め、これらをブロック属性情報として付与して送信する。
【００５３】
なお、末端ノードであるセンサからの送信データは、センサネットワークが例えばツリー構造で管理されている場合、センサ（末端ノード）から中継ノード、さらに中継ノードの上位ノードとして設定されるルートノードに送信され、ルートノードからクラウド上のサーバに送信される。
【００５４】
（クラウド上サーバでの処理の概要）
次に、図１、図２を参照して説明したネットワークシステムにおいて、センサ（末端ノード）の送信データを収集して処理を行うクラウド上のサーバの実行する処理の概要について説明する。
【００５５】
クラウド上のサーバは、多数のセンサ（末端ノード）から送信されてきた暗号化データブロックを多数、集めて、汎用プロセッサ上で動作可能なソフトウェア（プログラム）を適用した暗号処理を実行する。例えば、多数の暗号化データを復号する処理を実行する。あるいは各末端ノードに送信する多数の暗号化データの生成処理などを行う。
【００５６】
サーバは、ソフトウェア（プログラム）を適用した暗号処理（暗号化および復号処理を含む）として、ビットスライス暗号処理を実行する。
なお、以下の説明において、「暗号処理」とはデータの暗号化処理と復号処理の双方を含むものとする。
ビットスライス暗号処理（暗号化および復号処理を含む）は１９９７年にＢｉｈａｍにより提案された処理であり、あるクラスの暗号アルゴリズムが、ビットスライス実装により従来のソフトウェア実装よりも高速に実装できることが示された。
【００５７】
ビットスライス暗号処理については、例えば非特許文献２［Ｅｌｉ  Ｂｉｈａｍ，"Ａ  Ｆａｓｔ  Ｎｅｗ  ＤＥＳ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｉｎ  Ｓｏｆｔｗａｒｅ"，ＦＳＥ'９７，  １９９７．］に詳細が記載されている。最も基本的なビットスライス実装では、暗号処理対象となる複数のデータブロックの先頭からビット単位でデータを切り出して、各データブロックから切り出した同一ビット目、あるいはｎビットおきのビット、ただしｎは２，４，８，１６，６４，１２８などの２のべき数、これらのビットのデータの集合からなる新たなブロック（ビットスライス表現データブロック）を設定して処理を行う。
【００５８】
例えば、各センサが送信してきた個々の暗号化データをまとめて復号する場合のビットスライス復号処理例について図３を参照して説明する。
図３には、図２に示すサーバＳ３０の、
（Ａ）保持データ
（Ｂ）暗号処理シーケンス（復号）
これらを説明する図を示している。
【００５９】
図３（Ａ）に示すサーバの保持データ中、
暗号鍵３１は、各センサ（末端ノード）固有の鍵として、予めサーバＳ３０が保持しているデータである。
センサＩＤ３２と暗号化データ３３の各データは、各センサからネットワークを介して受信したデータである。
センサＩＤに基づいて、各暗号化データの暗号化処理に適用された暗号鍵を選択することができる。
【００６０】
図３（Ｂ）は、サーバＳ３０の暗号処理部５０において実行する処理を説明する図である。なお、図に示す暗号処理部５０は、プログラム実行機能を持つＣＰＵ等によって構成されるデータ処理部であり、所定の暗号アルゴリズムのシーケンスを規定したプログラムに従ったデータ処理によって暗号処理（暗号化処理や復号処理）を実行する。すなわちソフトウェア（プログラム）を適用した暗号処理を実行する。
図３（Ｂ）には、各センサからネットワークを介して受信した暗号化データの復号処理を行う場合の処理例を示している。
【００６１】
サーバは、まず、暗号化データ３３に付加されているセンサＩＤ３２を適用して、各々の復号に使う暗号鍵３１を選択する。クラウド上のサーバは、各センサで使われる暗号鍵をセンサＩＤに対応付けた管理データとして保持している。あるいは、各センサ固有の暗号鍵を各センサＩＤから所定の演算で導出する構成としてもよい。
【００６２】
サーバは、図３（Ｂ）に示すように各センサの暗号鍵３１を、各センサの生成した暗号化データ３３の各ブロックに対応する順序に並べる。
ビットスライス暗号処理の処理単位として予め規定した所定のブロック数の暗号化データ３３と暗号鍵３１が揃ったら、ビットスライス暗号処理に従ったデータ復号処理を行う。
【００６３】
前述したように、ビットスライス暗号処理では、暗号処理対象となる各ブロックの先頭からビット単位でデータを切り出して、各ブロックの同一ビット目、あるいはｎビットおきのビット、ただしｎは２，４，８，１６，６４，１２８などの２のべき数、これらのビットのデータの集合（ビットスライス表現データブロック）を設定して処理を行う。
まず、サーバは、
多数のセンサから受信した暗号化データ３３を構成する多数の暗号化データブロックから、
１ｂｉｔ目だけを集めたブロック（ビットスライス表現データブロック）、
２ｂｉｔ目だけを集めたブロック（ビットスライス表現データブロック）、
以降最終ｂｉｔ目まで同じビット位置のデータだけを集めたブロック（ビットスライス表現データブロック）、
これらの複数のビットスライス表現データブロックを生成する。
【００６４】
サーバは、このようにして、暗号化データ３３を構成する多数の暗号化データブロックから複数のビットスライス表現データブロックを生成する。
さらに、暗号化データ３３の生成に適用された暗号鍵３１についても、同様の処理、すなわち、複数の鍵データに対応する複数のビットスライス表現鍵ブロックを生成する。
なお、暗号鍵３１の各々は、例えば８０ｂｉｔの鍵データからなる暗号鍵ブロックであり、この暗号鍵３１について、各暗号鍵ブロックの同一ビット目、あるいはｎビットおきのビット、ただしｎは２，４，８，１６，６４，１２８などの２のべき数、これらのビットのデータの集合（ビットスライス表現鍵ブロック）を設定する。
【００６５】
このブロック変換処理は、図３（Ｂ）に示す暗号処理部５０中に示すステップＳ１１の鍵変換処理（Ｋｅｙ  Ｃｏｎｖｅｒｓｉｏｎ）と、ステップＳ２１のデータ変換処理（Ｄａｔａ  Ｃｏｎｖｅｒｓｉｏｎ）として実行する処理である。
【００６６】
これらビットスライス処理によって生成したビットスライス表現ブロックを処理単位とした処理を実行して、所定の暗号アルゴリズムに従った処理を実行する。
本開示の装置では、このビットスライス表現ブロックを処理単位とした演算（ＡＮＤ，ＯＲ，ＸＯＲなど）や、レジスタ格納データのシフト処理や、シャッフルなどのビット位置の転置処理などを、ソフトウェア（プログラム）の適用処理として実行して所定の暗号アルゴリズムに従った処理を実行する。
【００６７】
暗号処理部５０中のステップＳ１１の鍵変換処理（Ｋｅｙ  Ｃｏｎｖｅｒｓｉｏｎ）によって生成した多数の暗号鍵３１に基づくビットスライス鍵データに対して、ステップＳ１２における鍵スケジュール処理（Ｋｅｙ  Ｓｃｈｅｄｕｌｉｎｇ）により、ラウンド鍵を生成する。
【００６８】
一方、ステップＳ２１のデータ変換処理（Ｄａｔａ  Ｃｏｎｖｅｒｓｉｏｎ）では、センサから受信した多数の暗号化データ３３に対するビットスライス処理によってビットスライス暗号化データブロックを生成する。このビットスライスブロックが、次のステップＳ２２の暗号処理（Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ）ステップにおいて暗号処理（暗号化処理や復号処理）の処理対象として設定される。
【００６９】
ステップＳ２２の暗号処理（Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ）では、ステップＳ２１のデータ変換処理（Ｄａｔａ  Ｃｏｎｖｅｒｓｉｏｎ）において暗号化データに基づいて生成したビットスライス表現データブロックに対して、ラウンド鍵を適用した暗号処理、ここでは暗号化データの復号処理を実行する。
【００７０】
この暗号処理ステップでは、例えば、ラウンド鍵との加算（ＸＯＲ）処理、線形変換処理、非線形変換処理など、所定の暗号アルゴリズムに従った処理がソフトウェア（プログラム）に従って実行される。
なお、ステップＳ１２の鍵スケジューリング（Ｋｅｙ  Ｓｃｈｅｄｕｌｉｎｇ）処理では、このラウンド演算の各ラウンドにおいて適用するラウンド鍵を生成する。
【００７１】
次のステップＳ２３は、ステップＳ２２の暗号処理（Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ）結果として得られたブロック群に対し、データ逆変換処理（Ｄａｔａ  Ｃｏｎｖｅｒｓｉｏｎ−１）を実行する。この処理によって、ビットスライスされたブロックを元のブロックに戻す処理を行う。この処理により、センサから送付された暗号化データ３３に対応する平文データ７０が生成される。
【００７２】
図４、図５にサーバにおいて実行する処理の２つのシーケンス例を示す。
図４に示すフローチャートは、暗号化データに付加されているセンサＩＤをもとに、各ブロックの復号鍵を用意するステップを、所定のブロック数の暗号化データが揃ってから行う場合のシーケンスを説明するフローチャートである。
図５に示すフローチャートは、暗号化データに付加されているセンサＩＤをもとに、各ブロックの復号鍵を用意するステップを、各暗号文データブロックの到着ごとに行う場合のシーケンスを説明するフローチャートである。
【００７３】
まず、図４に示すフローの各ステップの処理について説明する。
まず、ステップＳ３１において、ノードから送付される暗号化データブロックを受信する。図３（Ａ）に示すセンサＩＤ３２と暗号化データ３３との組み合わせデータである。
【００７４】
次に、ステップＳ３２において、予め処理単位として規定した所定ブロック数の暗号化データを受信したか否かを判定する。所定ブロック数に達していない場合は、ステップＳ３１に戻り、受信処理を継続する。
【００７５】
所定ブロック数に達した場合は、ステップＳ３３に進み、暗号化データに付加されているセンサＩＤを適用して各暗号化データの暗号鍵（＝復号鍵）を選択する。
最後に、ステップＳ３４において、暗号化データと暗号鍵の対応セットを暗号処理部５０に入力してビットスライス暗号処理に従った復号処理を実行する。
【００７６】
図５に示すフローは、暗号文データブロックの到着ごとに処理を実行するシーケンスである。
まず、ステップＳ４１において、ノードから送付される暗号化データブロックを受信する。図３（Ａ）に示すセンサＩＤ３２と暗号化データ３３との組み合わせデータである。
【００７７】
次に、ステップＳ４２において、暗号化データに付加されているセンサＩＤを適用して各暗号化データの暗号鍵（＝復号鍵）を選択する。
【００７８】
次に、ステップＳ４３において、予め処理単位として規定した所定ブロック数の暗号化データを受信したか否かを判定する。所定ブロック数に達していない場合は、ステップＳ４１に戻り、受信処理を継続する。
【００７９】
所定ブロック数に達した場合は、ステップＳ４４に進み、暗号化データと暗号鍵の対応セットを暗号処理部５０に入力してビットスライス暗号処理に従った復号処理を実行する。
【００８０】
なお、上述した処理例では、センサから多数の暗号化データを受信してサーバにおいて復号処理を行う例を説明したが、例えば、サーバが、多数のユーザ端末等に送信する暗号化データを生成する場合、多数の平文データに対してビットスライス暗号処理を適用して多数の暗号化データを生成することになる。この暗号化処理も、図３に示す暗号処理部５０の構成を適用して処理が実行される。
【００８１】
暗号化処理を行う場合は、平文データからなる多数のブロックと各平文データに対応する暗号鍵を入力して処理を実行し、多数の暗号化データを生成する。
例えば、暗号化データを送信する送信先の機器ＩＤに基づいて各平文データに対応する暗号鍵を記憶部から選択取得し、記憶部から選択取得した暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する。
さらに、平文データに基づくビットスライス表現データブロックと、暗号鍵に基づくビットスライス表現鍵ブロックを適用して、図３（Ｂ）に示す暗号処理部５０に示す処理シーケンスに従って暗号化処理を実行して、暗号化データを生成して出力する。
【００８２】
暗号処理部５０の実行するビットスライス暗号処理は、前述したように汎用プロセッサ上で動作可能なソフトウェア（プログラム）を適用した処理として実行される。すなわち特定の暗号アルゴリズム専用のハードウェア構成を備えていないＰＣ等の機器において、以下に説明する暗号処理アルゴリズムの実行シーケンスを規定したソフトウェア（プログラム）を実行することで処理が行われる。
【００８３】
ソフトウェア（プログラム）に従って実行する処理としては、例えば、レジスタに格納されたビットスライス表現ブロックデータを利用したブロックデータ間の演算（ＡＮＤ，ＯＲ，ＸＯＲなど）や、レジスタに格納されたデータのシフト処理やシャッフルなどのビット位置の移動、転置処理などが含まれる。
【００８４】
ソフトウェア（プログラム）に従った暗号処理を、例えば６４ビットレジスタをもつプロセッサで行う場合、６４ブロックを並列に処理するＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａｓｔｒｅａｍ）型並列処理として実行することが可能である。基本的なビットスライス実装法では、プロセッサのビット幅分だけ並列処理が可能である。暗号アルゴリズムで多用されるビット位置の転置は、コストゼロのレジスタのリネーム処理で実現できるため、高速化が図れる。
【００８５】
なお、ビットスライス暗号処理において並列処理可能なブロック数は、暗号アルゴリズムやビットスライス実装アルゴリズム、プロセッサアーキテクチャ、使用するレジスタのサイズなどによってさまざまであるが、例えば、並列処理ブロック数として、８、１６、３２、６４、１２８などの設定が可能である。
【００８６】
なお、ビットスライス暗号処理においては、並列処理する暗号文ブロックは互いに独立であるため、鍵データブロックとの対応がついていれば、複数のセンサから受信したブロックが混在していても、また受信順序に関わらずどのような順序で並んでいても構わない。多数のセンサから非同期で受信される暗号化センシングデータの順序を問わず復号処理を行える点もビットスライス暗号処理を活用したこのシステムの利点である。
【００８７】
このビットスライス型の暗号処理で、処理速度に最も影響が大きい１つの要素として非線形変換処理（Ｓｂｏｘ）がある。この非線形変換処理をいかに少ない論理演算（命令）で表現できるかが、高速化を実現するために重要なポイントとなる。
なお、近年のプロセッサは複数の命令を同時発行できるので、レジスタの依存関係等の制約を減らし、なるべく少ないサイクル数で実行できる命令系列で表現できるほど高速化が可能となる。
【００８８】
［２．軽量ブロック暗号アルゴリズム「ＰＲＥＳＥＮＴ」について］
次に、本開示の実行する暗号処理アルゴリズムの一例である軽量ブロック暗号アルゴリズム「ＰＲＥＳＥＮＴ」について説明する。
本開示の装置では、ビットスライスを適用した暗号処理として、例えば、ブロックサイズ６４ビット，鍵長８０ビット及び１２８ビットに対応した軽量ブロック暗号アルゴリズムである「ＰＲＥＳＥＮＴ」を実行する。
【００８９】
軽量ブロック暗号アルゴリズム「ＰＲＥＳＥＮＴ」に従った暗号処理シーケンスの概要について図６を参照して説明する。
軽量ブロック暗号アルゴリズム「ＰＲＥＳＥＮＴ」では、図６に示すように、６４ビットの平文ブロックと、例えば８０ビットの暗号鍵を入力する。
まず、８０ビット暗号鍵に基づいて６４ビットのラウンド鍵を生成し、以下の処理を行う。
【００９０】
（ステップＳ７１）６４ビットの平文ブロックと６４ビットのラウンド鍵との加算処理（排他的論理和演算：ＸＯＲ）を実行する。
（ステップＳ７２）さらに、この加算結果に対する非線形変換処理（ＳｂｏｘＬａｙｅｒ）を実行する。
（ステップＳ７３）さらに、この非線形変換結果に対して、線形変換処理（ｐＬａｙｅｒ）を行う。
【００９１】
このステップＳ７１〜Ｓ７３の処理、すなわち、ラウンド鍵との加算処理、非線形変換処理、線形変換処理を１単位のラウンド演算として、このラウンド演算を繰り返し実行する。例えば３１ラウンドを繰り返し実行し、最終ラウンド後に再度、ラウンド鍵との演算を実行して暗号文を生成して出力する。
なお、入力鍵データに基づく更新処理（Ｕｐｄａｔｅ）を逐次、実行して、各ラウンドに適用するラウンド鍵（６４ビット）の生成処理が行われる。
【００９２】
本開示の情報処理装置は、例えば、図６に示す軽量ブロック暗号アルゴリズム「ＰＲＥＳＥＮＴ」に従った暗号処理を、ビットスライス処理によって生成したビットスライス表現データブロックを処理単位として、ソフトウェア（プログラム）に従って実行する。具体的には、ブロック間演算（ＡＮＤ，ＯＲ，ＸＯＲなど）や、レジスタ格納データのシフト処理、ビット位置の転置処理などの処理を規定したソフトウェア（プログラム）に従った暗号処理を実現するものである。
【００９３】
［３．情報処理装置（暗号処理装置）の構成と処理シーケンスの概要について］
本開示の「ＰＲＥＳＥＮＴ」に従った暗号処理を実行する情報処理装置（暗号処理装置）の構成と処理シーケンスについて、図７を参照して説明する。
【００９４】
図７は、情報処理装置１００の構成と処理について説明する図である。
情報処理装置１００は、例えばＰＣ等によって構成可能であり、特定のアルゴリズムに従った暗号処理を実行するための専用ハードウェアは必須構成として持たない装置として構成可能である。
暗号処理を実行するためのソフトウェア（プログラム）をメモリに格納して、プログラムに従った処理を実行して暗号処理を行う。
【００９５】
図７に示す情報処理装置１００の暗号処理部１１０は、例えばプログラム実行機能を有するＣＰＵ等からなるデータ処理部、さらにデータや各種パラメータ、プログラムを格納するメモリ（ＲＡＭ，ＲＯＭ，レジスタ等）等によって構成され、データ処理部（ＣＰＵ等）がプログラムに従って、図に示すステップＳ１１１〜Ｓ１１２、ステップＳ１２１〜Ｓ１２３の処理を実行して暗号処理を行う。
【００９６】
なお、以下では、入力データ８０として、平文データ８２と暗号鍵８１を入力し、出力データ９０として暗号化データ９１を生成して出力する暗号化処理例について説明する。
なお、前述したように暗号処理部１１０は、平文データを暗号化して暗号化データを生成する暗号化処理においても、暗号化データを復号して平文データを生成する復号処理においても、図に示すステップＳ１１１〜Ｓ１１２、ステップＳ１２１〜Ｓ１２３の処理に従った暗号処理を行う。
以下では、暗号化処理と復号処理の１つの代表例として暗号化処理を行う場合の実施例について説明する。
【００９７】
入力データ８０は、複数の暗号鍵８１と、複数の平文データ８２である。
これらの暗号鍵と平文データは１対１に対応づけられている。すなわち、
暗号鍵ａによって暗号化される平文データａ、
暗号鍵ｂによって暗号化される平文データｂ、
暗号鍵ｃによって暗号化される平文データｃ、
：
暗号鍵Ｎによって暗号化される平文データＮ、
暗号処理部１１０は、これらＮ個の暗号鍵と平文データのセットを処理単位として入力して暗号処理を実行する。
【００９８】
なお、平文データａ，ｂ，ｃの各々は、所定データ長のデータブロック（例えば６４ｂｉｔ）によって構成される。
同様に、各暗号鍵ａ，ｂ，ｃの各々も、所定データ長の鍵データブロック（例えば８０ｂｉｔ）によって構成される。
なお、ビットサイズは一例であり、様々なビットサイズのデータや鍵の設定が可能である。
【００９９】
出力データ９０として生成する暗号化データ９１は、以下のデータである。
暗号鍵ａによって暗号化された暗号化データａ、
暗号鍵ｂによって暗号化された暗号化データｂ、
暗号鍵ｃによって暗号化された暗号化データｃ、
：
暗号鍵Ｎによって暗号化された暗号化データＮ、
暗号処理部１１０は、これらＮ個の暗号化データを生成して出力する。
【０１００】
例えばこれらのＮ個の暗号化データが、図１や図２に示すネットワークを介してＮ個のセンサ（末端ノード）に個別に送信され、各センサにおいて復号処理が実行される。なお、暗号化に適用する鍵と復号処理に適用する鍵は同じ設定とすることが可能であり、図７の入力データとして示す暗号鍵は、例えば各センサの保持するセンサ固有鍵によって構成される。
【０１０１】
図７に示す暗号処理部１１０の実行する処理は、以下の処理である。
ステップＳ１１１：鍵変換処理
ステップＳ１１２：鍵スケジュール処理
ステップＳ１２１：データ変換処理、
ステップＳ１２２：暗号処理、
ステップＳ１２３：データ逆変換処理、
これらの処理である。
【０１０２】
暗号処理部１１０は、上記ステップの実行によって、ビットスライス暗号処理を適用して、軽量ブロック暗号アルゴリズム「ＰＲＥＳＥＮＴ」に従った暗号処理を実現する。
まず、各処理の概要と全体の処理の流れについて簡単に説明し、その後、各処理の詳細について説明する。
【０１０３】
ステップＳ１１１の鍵変換処理は、暗号鍵８１、すなわち例えば８０ｂｉｔの鍵データからなる複数の暗号鍵ブロックの同一ビット目、あるいはｎビットおきのビット、ただしｎは２，４，８，１６，６４，１２８などの２のべき数、これらのビットのデータの集合であるビットスライス表現ブロックからなるビットスライス表現鍵データを生成する処理である。
ステップＳ１２１のデータ変換処理は、平文データ８２、すなわち例えば６４ｂｉｔの平文データからなる複数のデータブロックの同一ビット目、あるいはｎビットおきのビット、ただしｎは２，４，８，１６，６４，１２８などの２のべき数、これらのビットのデータの集合であるビットスライス表現ブロックからなるビットスライス表現平文データを生成する処理である。
【０１０４】
ステップＳ１１２の鍵スケジュール処理（Ｋｅｙ  Ｓｃｈｅｄｕｌｉｎｇ）は、ステップＳ１１１の鍵変換処理（Ｋｅｙ  Ｃｏｎｖｅｒｓｉｏｎ）において生成したビットスライス表現鍵データを適用して、暗号処理に適用する複数のラウンド鍵を生成する処理である。
【０１０５】
ステップＳ１２２の暗号処理（Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ）は、ステップＳ１１１のデータ変換処理（Ｄａｔａ  Ｃｏｎｖｅｒｓｉｏｎ）において平文データに基づいて生成したビットスライス表現データに対して、ラウンド鍵を適用した暗号処理を実行するステップである。
ビットスライス処理によって生成したビットスライス表現データを構成するブロックを単位としたラウンド鍵との加算（ＸＯＲ）処理、線形変換処理、非線形変換処理など、暗号アルゴリズムに従った処理をソフトウェア（プログラム）に従って実行する。
【０１０６】
次のステップＳ１２３は、ステップＳ１２２の暗号処理（Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ）結果に対し、データ逆変換処理（Ｄａｔａ  Ｃｏｎｖｅｒｓｉｏｎ−１）を実行する。この処理は、ビットスライス表現データをビットスライスされる前の平文データ８２に対応する暗号化データの集合に戻す処理である。この処理により、出力データ９０として、平文データ８２に対応する暗号化データ９１が生成される。
以下、各ステップの処理の詳細について、順次、説明する。
【０１０７】
［４．鍵変換処理とデータ変換処理について］
まず、図７に示す暗号処理部１１０の以下の処理、すなわち、
ステップＳ１１１：鍵変換処理
ステップＳ１２１：データ変換処理、
これらの処理について説明する。
【０１０８】
まず、ステップＳ１１１の鍵変換処理について、図８を参照して説明する。
ステップＳ１１１の鍵変換処理は、図７に入力データとして示す暗号鍵８１、すなわち例えば８０ｂｉｔの鍵データからなる複数の暗号鍵ブロックの同一ビット目、あるいはｎビットおきのビット、ただしｎは２，４，８，１６，６４，１２８などの２のべき数、これらのビットのデータの集合であるビットスライス表現鍵ブロックを生成する処理である。
【０１０９】
図８には、入力データである暗号鍵８１として、（ａ１）〜（ａ８）の８つの８０ｂｉｔの鍵データを示している。
ステップＳ１１１では、この（ａ１）〜（ａ８）の８つの８０ｂｉｔの鍵データから、ビットスライス表現鍵ブロックを生成して、情報処理装置内のメモリを構成するレジスタ（ＸＭＭレジスタ（ｒ０〜）や汎用レジスタ（ｇ０〜））に格納する。
図８に示す（ｂ１）〜（ｂ８）が、ステップＳ１１１の鍵変換処理の処理結果であるレジスタ格納データ、すなわち、ビットスライス表現鍵ブロックの格納データである。ここでは８個の１２８ビットレジスタをビットスライス表現鍵ブロックの格納領域として利用している。
【０１１０】
暗号処理部１１０は、例えば、図８に示す入力データである（ａ１）〜（ａ８）の８つの８０ｂｉｔの鍵データの１ビット目のみを集めた８ビットデータ［０，０］を図８（ｂ１）に示すように、ＸＭＭレジスタｒ０に格納する。
この８ビットデータ［０，０］は８つの８０ｂｉｔの鍵データの１ビット目のみからなる集合であり、１つのビットスライス表現ブロックである。
【０１１１】
次に、入力データ（ａ１）〜（ａ８）の２ビット目のみを集めた８ビットデータ［１，０］を図８（ｂ２）に示すように、ＸＭＭレジスタｒ１に格納する。
次に、入力データ（ａ１）〜（ａ８）の３ビット目のみを集めた８ビットデータ［２，０］を図８（ｂ３）に示すように、ＸＭＭレジスタｒ２に格納する。
次に、入力データ（ａ１）〜（ａ８）の４ビット目のみを集めた８ビットデータ［３，０］を図８（ｂ４）に示すように、ＸＭＭレジスタｒ３に格納する。
次に、入力データ（ａ１）〜（ａ８）の５ビット目のみを集めた８ビットデータ［０，１］を図８（ｂ１）に示すように、ＸＭＭレジスタｒ０に格納する。
このように、４ビット単位で、ＸＭＭレジスタｒ０〜ｒ３に８ビット単位でデータを格納し、入力データ（ａ１）〜（ａ８）の前半６４ビットまでのデータ（８×６４＝５１２ビット）を４つのＸＭＭレジスタｒ０〜ｒ３に格納する。
【０１１２】
さらに、入力データ（ａ１）〜（ａ８）の６５ビット以降のデータは、汎用レジスタ（ｇ０〜ｇ３）またはＸＭＭレジスタ（ｒ４〜ｒ７）を順番に適用して８ビット単位で格納する。
入力データ（ａ１）〜（ａ８）の６５ビット目のみを集めた８ビットデータ［０，１６］を図８（ｂ５）に示すように、ＸＭＭレジスタｒ４（または汎用レジスタｇ０）に格納する。
次に、入力データ（ａ１）〜（ａ８）の６６ビット目のみを集めた８ビットデータ［１，１６］を図８（ｂ６）に示すように、ＸＭＭレジスタｒ５（または汎用レジスタｇ１）に格納する。
次に、入力データ（ａ１）〜（ａ８）の６７ビット目のみを集めた８ビットデータ［１，１６］を図８（ｂ７）に示すように、ＸＭＭレジスタｒ６（または汎用レジスタｇ２）に格納する。
次に、入力データ（ａ１）〜（ａ８）の６８ビット目のみを集めた８ビットデータ［１，１６］を図８（ｂ８）に示すように、ＸＭＭレジスタｒ７（または汎用レジスタｇ３）に格納する。
【０１１３】
このように、暗号処理部１１０は、８０ビット鍵８本をビットスライスし、複数のレジスタに格納する。具体的には、例えば情報処理装置１００が、Ｉｎｔｅｌ拡張ＳＩＭＤ命令用のレジスタであるＸＭＭレジスタ８本（ｒ０〜ｒ７）、またはＸＭＭレジスタ４本（ｒ０〜ｒ３）と汎用レジスタ４本（ｇ０〜ｇ３）を有する構成である場合、これらのレジスタを利用してビットスライスデータを８ビット単位で分散して格納する。
【０１１４】
図８に示す例における各レジスタ格納データは以下の通りである。
入力データである（ａ１）〜（ａ８）の８つの８０ｂｉｔの鍵データブロックの、
１，５，９，・・・，６１ビット目をＸＭＭレジスタｒ０，
２，６，１０，・・・，６２ビット目をＸＭＭレジスタｒ１，
３，７，１１，・・・，６３ビット目をＸＭＭレジスタｒ２，
４，８，１２，・・・，６４ビット目をＸＭＭレジスタｒ３に格納する。
さらに、入力データである（ａ１）〜（ａ８）の８つの８０ｂｉｔの鍵データブロックの、
６５，６９，７３，７７ビット目をＸＭＭレジスタｒ４（または汎用レジスタｇ０）、
６６，７０，７４，７８ビット目をＸＭＭレジスタｒ５（または汎用レジスタｇ１）、
６７，７１，７５，７９ビット目をＸＭＭレジスタｒ６（または汎用レジスタｇ２）、
６８，７２，７６，８０ビット目をＸＭＭレジスタｒ７（または汎用レジスタｇ３）、
に格納する。
【０１１５】
このように入力データの６４ビットまでを４ビット単位で、４つのレジスタを繰り返し利用して格納する。６５ビット以降も同様に、４ビット単位で、新たな４つのレジスタを繰り返し利用して格納する。
【０１１６】
なお、図８に示すレジスタ格納データの［ｉ，ｊ］はいずれも８つの鍵データ（ａ１）〜（ａ８）の同一ビット目の集合としてのビットスライス表現ブロックであり、８ビットデータである。
なお、レジスタ格納データの識別子として示す［ｉ，ｊ］中、ｉは、（ａ１）〜（ａ８）の８つの８０ｂｉｔの鍵データブロックの各入力データの先頭から４ビット単位で０，１，２，３と繰り返し設定されるパラメータであり、４ビット単位の内，どのビットを格納しているかを表す変数を示す。
ｊは、８つの鍵データ（ａ１）〜（ａ８）の４ビット単位データの何番目の４ビット単位データであるかを示すパラメータに相当する。
【０１１７】
例えば、［ｉ，ｊ］＝［２，１］の、ｉ＝２は、各入力データの先頭から４ビット単位で区切った場合、
４ビット単位データ中の第１ビット目：ｉ＝０、
４ビット単位データ中の第２ビット目：ｉ＝１、
４ビット単位データ中の第３ビット目：ｉ＝２、
４ビット単位データ中の第４ビット目：ｉ＝３、
として設定されるので、
４ビット単位データ中の第３ビット目であることを示す。
【０１１８】
さらに、［ｉ，ｊ］＝［２，１］の、ｊ＝１は、各入力データの先頭からの４ビット単位データの、何番目の４ビット単位データであるかを示すパラメータである。
第１番目の４ビット単位データ：ｊ＝０、
第２番目の４ビット単位データ：ｊ＝１、
第３番目の４ビット単位データ：ｊ＝２、
：
このように設定される。
［ｉ，ｊ］＝［２，１］では、ｊ＝１であるので、第２番目の４ビット単位データであることが識別される。
【０１１９】
このように、例えば［２，１］は、
ｊ＝１によって、第２番目の４ビット単位データであり、
ｉ＝２によって、第２番目の４ビット単位データ中の３番目のデータであることが識別される。
すなわち、先頭からは、第７ビット目のデータの集合によって構成されていることが識別される。
【０１２０】
図７に示す暗号処理部１１０は、ステップＳ１１１の鍵変換処理において、このように［０，０］〜［３，１９］のビットスライス表現ブロックからなるヒットスライス表現鍵データを生成してレジスタに格納する。
【０１２１】
次に、ステップＳ１２１のデータ変換処理について図９を参照して説明する。
このデータ変換処理は、図８を参照して説明した鍵変換処理と同様のビットスライス表現データへの変換処理である。ただし、入力が８個の６４ビットの平文データとなる点が異なる。
【０１２２】
図９に示す例における各レジスタ格納データは以下の通りである。
入力データである（ａ１）〜（ａ８）の８つの６４ｂｉｔのデータブロックの、
１，５，９，・・・，６１ビット目をＸＭＭレジスタｒ０，
２，６，１０，・・・，６２ビット目をＸＭＭレジスタｒ１，
３，７，１１，・・・，６３ビット目をＸＭＭレジスタｒ２，
４，８，１２，・・・，６４ビット目をＸＭＭレジスタｒ３に格納する。
【０１２３】
このように入力データの６４ビットを４ビット単位で、４つのレジスタを繰り返し利用して格納する。
図９に示すレジスタ格納データの［ｉ，ｊ］はいずれも８つの平文データ（ａ１）〜（ａ８）の同一ビット目の集合であり、８ビットデータである。
ｉは、（ａ１）〜（ａ８）の８つの６４ｂｉｔの平文データブロックの各入力データの先頭から４ビット単位で０，１，２，３と繰り返し設定されるパラメータであり、４ビット単位の内，どのビットを格納しているかを表す変数を示す。
ｊは、８つの平文データ（ａ１）〜（ａ８）の４ビット単位データの何番目の４ビット単位データであるかを示すパラメータである。
【０１２４】
［５．鍵スケジュール処理について（鍵スケジュール処理例１）］
次に、図７に示す暗号処理部１１０の実行するステップＳ１１２の処理、すなわち、鍵スケジュール処理の詳細について説明する。
ステップＳ１１２の鍵スケジュール処理（Ｋｅｙ  Ｓｃｈｅｄｕｌｉｎｇ）は、ステップＳ１１１の鍵変換処理（Ｋｅｙ  Ｃｏｎｖｅｒｓｉｏｎ）において生成したビットスライス表現鍵ブロックを適用して、暗号処理に適用する複数のラウンド鍵を生成する処理である。
【０１２５】
先に、図８を参照して説明したように、ステップＳ１１１において、８つの８０ビット鍵のビットスライス表現鍵データがレジスタに分散して格納されている。
ステップＳ１１２では、これらのレジスタに格納されたビットスライス表現鍵データを利用してラウンド鍵の生成処理を行う。
【０１２６】
図１０以下を参照してこのラウンド鍵の生成処理の詳細について説明する。なお、図１０以下では、図８で示した各レジスタ格納データのデータ表現［ｉ，ｊ］を、簡略化して、以下のように、７９から０までの番号を割り振った表現に書き換えて説明する。
［０，０］＝７９，
［１，０］＝７８，
［２，０］＝７７，
［３，０］＝７６，
［０，１］〜［３，１］＝７５〜７２，
［０，２］〜［３，２］＝７１〜６８，
・・
［０，１４］〜［３，１４］＝７〜４
［０，１５］＝３
［１，１５］＝２
［２，１５］＝１
［３，１５］＝０
とする。
【０１２７】
なお、初期状態において、
［０，０］＝７９は、８つの８０ビット鍵の第１ビットを集めた８ビットデータである。以下、７８，７７，７６，７５・・・０は、８つの８０ビット鍵の第２，３，４，５・・・最終（８０ビット目）を集めた８ビットデータに対応する。
【０１２８】
ステップＳ１１１において生成したビットスライス表現鍵データのレジスタ格納データは、図１０に示す通りである。
図１０に示す通り、０〜７９まで８０個のビットスライスブロックがレジスタに分散して格納されている。
個々のブロックは、８つの暗号鍵の同一ビット目の集合からなる８ビットデータからなるブロック（ビットスライス表現ブロック）である。
以下に説明するように、このブロックを単位としたブロック単位の処理を実行することで、８つの鍵を個別に適用した暗号処理と同様の処理を１回の暗号処理で実行することができる。
【０１２９】
ステップＳ１１２では、これらのレジスタに格納されたビットスライス表現の８０ビット鍵８本を利用して、ラウンド鍵を生成する。暗号処理アルゴリズム「ＰＲＥＳＥＮＴ」ではラウンド数に応じた３２個のラウンド鍵を必要とし、ステップＳ１１２では、レジスタに格納されたビットスライス表現データを利用して、３２個のラウンド鍵を生成する。
【０１３０】
なお、以下に説明する処理によって生成するラウンド鍵は、ブロック（ビットスライス表現ブロック）単位の処理に適用するラウンド鍵である。
例えば、図６に示す通常のＰＲＥＳＥＮＴアルゴリズムにおいて、６４ビット平文に適用する各ラウンドのラウンド鍵は６４ビットとなるが、図７に示すビットスライスデータを適用した暗号処理を実行するステップＳ１２２の暗号処理は、ビットスライス表現ブロック単位の処理として実行する。
すなわち、平文は、６４ブロックを単位として暗号処理を行うことになり、この暗号処理に適用するラウンド鍵も６４ブロックのラウンド鍵となる。
【０１３１】
本実施例では、１つの鍵ブロック（ビットスライス表現鍵ブロック）には、元の８つの暗号鍵８１の同一ビット目のデータ、すなわち８ビットが格納されている。
本開示のビットスライス暗号処理に適用するラウンド鍵は、６４ブロックのラウンド鍵、すなわち６４×８ビット＝５１２ビットのラウンド鍵となる。
【０１３２】
暗号化処理対象となる平文も同様であり、図６に示す通常のＰＲＥＳＥＮＴアルゴリズムでは平分入力が６４ビットであるが、本開示のビットスライス暗号処理においては、ビットスライス表現データの６４ブロック、すなわち６４×８ビット＝５１２ビットの６４ブロックを入力して処理が実行される。
【０１３３】
ステップＳ１１２では、ビットスライス表現ブロック同士の暗号処理に適用する６４ブロックからなる３２個のラウンド鍵を生成する。
生成したラウンド鍵は、図１１に示すように、鍵ポインタ（ｐｔ）によって指定されるメモリ領域（ｍ０〜ｍ３）に書き出す。
【０１３４】
ステップＳ１１２において実行する鍵スケジュール処理の詳細フローを図１２に示す。
まず、ステップＳ２０１において、入力データと初期データの設定を行う。
具体的には、入力データとしてレジスタに格納したビットスライス表現鍵データを入力する。さらに、生成したラウンド鍵を書きだすメモリ領域を示すポインタ（ｐｔ）、生成するラウンド鍵のラウンド番号Ｒｎの設定を行う。初期設定としてはＲｎ＝０とし、以降、Ｒｎ＝１，２，３・・・と順次、増加してＲｎ＝３１までの３２本のラウンド鍵を生成する。
【０１３５】
ステップＳ２０２において、Ｒｎ＝３１に達したか否かを判定する。Ｒｎ＝３１未満である場合は、ステップＳ２０３に進み、生成したラウンド鍵を書きだすメモリアドレスを示すポインタ（ｐｔ）を更新する。ラウンド鍵の格納領域を確保しながらポイント（ｐｔ）を更新すればよい。
【０１３６】
ステップＳ２０４では、ラウンド鍵生成更新処理を実行して、ラウンド番号Ｒｎを１つ増分する。
この詳細処理については、後段で説明する。
【０１３７】
次に、ステップＳ２０２に戻り、Ｒｎ＝３１に達したか否かを判定する。Ｒｎ＝３１未満である場合は、ステップＳ２０３以下の処理を繰り返す。ステップＳ２０２において、Ｒｎ＝３１に達したと判定した場合は、ステップＳ２０４に進み、生成したラウンド鍵をメモリに書き出す処理を実行する。最後に、ステップＳ２０５において生成したラウンド鍵を読み出して暗号処理の実行に移行する。
【０１３８】
ステップＳ２０３において実行するラウンド鍵生成更新処理の詳細処理フローを図１３に示す。
なお、図１１に示すように、レジスタｒ０，ｒ１，ｒ２，ｒ３，ｒ４，ｒ５，ｒ６，ｒ７にビットスライス処理によって生成したビットスライス表現鍵ブロックが格納されているものとする。
【０１３９】
まず、図１３に示すフローチャートのステップＳ２２１において、レジスタｒ１，ｒ２，ｒ３，ｒ４をレジスタｒ９，ｒ１０，ｒ１１，ｒ８にコピーする。
すなわち、図１４に示すように、レジスタｒ１，ｒ２，ｒ３，ｒ４をレジスタｒ９，ｒ１０，ｒ１１，ｒ８にコピーする。
【０１４０】
次に、ステップＳ２２２において、レジスタｒ８にシャッフル命令を実行し、レジスタ８の格納データの入れ替えを行う。
なお、本開示の装置において実行するシャッフルは、１つのレジスタに格納されたデータをブロック単位で入れ替えて同じレジスタに格納する処理である。すなわち、レジスタ内のブロック単位のデータをブロック単位で入れ替える処理である。
【０１４１】
例えば、レジスタｒ８の格納データが、先頭から８ビット単位で、以下のデータである場合、
［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］
ステップＳ２２２のシフト処理は以下のシフト処理として実行する。
【０１４２】
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，１］，［０，２］，［０，３］，［０，０］，［０，０］，［０，０］，［０，０］，［０，０］，［０，０］，［０，０］，［０，０］，［０，０］，［０，０］，［０，０］，［０，０］，［０，０］），
すなわち、８ビットデータ単位の左方向シフトを実行する。
この結果が図１５に示すデータとなる。
【０１４３】
次に、ステップＳ２２３において、レジスタｒ９，ｒ１０，ｒ１１，ｒ８の格納データに対して予め定めた非線形変換（Ｓｂｏｘ論理命令列）に対応する演算処理を実行する。
図１６に示すように、レジスタｒ９，ｒ１０，ｒ１１，ｒ８の格納データであるブロック１８，１７，１６，１５に対して非線形変換（Ｓｂｏｘ論理命令列）処理を実行した結果を、レジスタｒ８，ｒ９，ｒ１０，ｒ１１に格納する。非線形変換処理結果は、図１６に示す以下のデータである。
レジスタｒ８のデータＳ０、
レジスタｒ９のデータＳ１、
レジスタｒ１０のデータＳ２、
レジスタｒ１１のデータＳ３、
なお、本実施例で適用する非線形変換（Ｓｂｏｘ論理命令列）処理は、例えば図１７に示す論理命令列をレジスタ間の格納データ間で実行する演算処理として実行される。
図１７の論理命令列として示すレジスタ：ｘ３，ｘ２，ｘ１，ｘ０，ｘ４は、それぞれ図１６に示すレジスタｒ９，ｒ１０，ｒ１１，ｒ８，ｒ１２に対応する。
なお、図１６に示すレジスタｒ１２は、図１７に示す論理命令列中のレジスタｘ４に対応し、演算処理の中間データ等を格納するテンポラリ領域として利用する。
【０１４４】
次にステップＳ２２４において、レジスタｒ８，ｒ９，ｒ１０，ｒ１１の格納データを左１２０ビットシフトする。
図１８に、レジスタｒ８，ｒ９，ｒ１０，ｒ１１の格納データを左１２０ビットシフトした結果を示す。
【０１４５】
次に、ステップＳ２２５において、レジスタｒ５，ｒ６，ｒ７の格納データを右８ビットシフトし、
レジスタｒ４と予め既定したデータからなるマスク０（ＭＡＳＫ０）とのＡＮＤ処理、
レジスタｒ５，ｒ６，ｒ７と予め既定したデータからなるマスク１（ＭＡＳＫ１）とのＡＮＤ処理を行う。
なお、マスクの値はレジスタに保持しておく必要はない。
【０１４６】
マスク０（ＭＡＳＫ０）は、図１９に示すように、８ビットデータ単位の２〜４番目のブロックのビットのみを１、その他を０としたマスクである。
マスク１（ＭＡＳＫ１）は、図１９に示すように、８ビットデータ単位の２〜５番目のブロックのビットのみを１、その他を０としたマスクである。
このマスクデータとのＡＮＤ処理によって、図１９に示すように、レジスタｒ４〜ｒ７の先頭８ビットデータは０に書き換えられる。
【０１４７】
次に、ステップＳ２２６において、レジスタｒ４，ｒ５，ｒ６，ｒ７とレジスタｒ１１，ｒ８，ｒ９，ｒ１０の排他的論理和演算（ＸＯＲ）を実行して、出力をレジスタｒ４，ｒ５，ｒ６，ｒ７に格納する。
図２０にこれらの排他的論理和演算（ＸＯＲ）処理と処理結果の格納データを示す。
これらの排他的論理和演算（ＸＯＲ）処理の結果、レジスタｒ４，ｒ５，ｒ６，ｒ７の先頭８ビットには、レジスタｒ１１，ｒ８，ｒ９，ｒ１０の先頭８ビットデータであるステップＳ２２３の非線形変換処理（Ｓｂｏｘ）の演算結果が格納される。
【０１４８】
次に、ステップＳ２２７において、レジスタｒ０，ｒ１，ｒ２，ｒ３に対してシャッフル命令を実行し，シャッフル結果をレジスタｒ０，ｒ１，ｒ２，ｒ３に格納する。
シャッフル処理の処理前と処理後のレジスタｒ０，ｒ１，ｒ２，ｒ３の格納データを図２１に示す。
【０１４９】
このシャッフル処理におけるデータ並び替えの順序はレジスタｒ０とレジスタｒ１，ｒ２，ｒ３で異なる。各レジスタの８ビット単位のデータを、先頭から、
［０，０，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］
とする。
【０１５０】
ステップＳ２２７のシャッフル処理は、レジスタｒ０に対しては、以下の設定で実行する。
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，１２］，［０，１３］，［０，１４］，［０，１５］，［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］）
【０１５１】
また、レジスタｒ１，ｒ２，ｒ３に対しては、以下の設定で実行する。
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］，［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］）
【０１５２】
次のステップＳ２２８では、レジスタｒ０，ｒ１，ｒ２，ｒ３のデータをレジスタｒ８，ｒ９，ｒ１０，ｒ１１にコピーし、さらに、
レジスタｒ８と、マスク２（ＭＡＳＫ２）のＡＮＤ処理、
レジスタｒ９，ｒ１０，ｒ１１と、マスク３（ＭＡＳＫ３）のＡＮＤ処理、
これらのＡＮＤ処理を実行して、その結果をレジスタｒ８，ｒ９，ｒ１０，ｒ１１に格納する。
これらの処理結果を図２２に示す。
【０１５３】
なお、マスク２（ＭＡＳＫ２）は、図２２に示すように、先頭３２ビット＝０、その後９６ビット＝１のマスクデータである。
マスク３（ＭＡＳＫ３）は、図２２に示すように、先頭４０ビット＝０、その後８８ビット＝１のマスクデータである。
【０１５４】
この処理の結果、レジスタｒ８の先頭３２ビットは０に設定され、レジスタｒ９，ｒ１０，ｒ１１の先頭４０ビットは０に設定される。
【０１５５】
次に、ステップＳ２２９において、レジスタｒ４，ｒ５，ｒ６，ｒ７とレジスタｒ８，ｒ９，ｒ１０，ｒ１１の排他的論理和演算（ＸＯＲ）を実行して，結果をｒ４，ｒ５，ｒ６，ｒ７に格納する。
この排他的論理和演算（ＸＯＲ）処理を図２３に示す。
【０１５６】
次に、ステップＳ２３０において、レジスタｒ５，ｒ６，ｒ７，ｒ４の右８ビット，ｒ１の左８ビットに対して，予め設定したカウント値であるラウンドカウンタ（ｒｏｕｎｄｃｏｕｎｔｅｒ）の値との排他的論理和演算（ＸＯＲ）を行う。
ラウンドカウンタは、
ラウンド数：０〜３１に応じた２進数表現としての０００００〜１１１１１の各カウント値に設定する。
【０１５７】
例えばラウンド数＝１３のラウンド鍵を生成する場合は、ラウンドカウンタは、２進数表現としての１３を示す０１１０１の各カウント値に設定する。
このカウント値０１１０１に対して、レジスタｒ５，ｒ６，ｒ７，ｒ４の右８ビット，ｒ１の左８ビットとのＸＯＲ演算を行う。
なお、ラウンドカウンタのカウント値０００００〜１１１１１とのＸＯＲ演算の順番は、各レジスタの格納値の元のデータの上位ビットからの順番とする。図２４に示す例では、値の大きい順番であり、３８，３７，３６，３５，３４の順番とする。
すなわちレジスタ順としては、ｒ５，ｒ６，ｒ７，ｒ４，ｒ１となる。
【０１５８】
図２４に示すように、
上位から、
カウント値０１１０１の第１ビット目の０に対して、レジスタｒ５の右８ビットデータ（図２４に示すレジスタｒ５の［３８］）
カウント値０１１０１の第２ビット目の１に対して、レジスタｒ６の右８ビットデータ（図２４に示すレジスタｒ６の［３７］）
カウント値０１１０１の第３ビット目の１に対して、レジスタｒ７の右８ビットデータ（図２４に示すレジスタｒ７の［３６］）
カウント値０１１０１の第４ビット目の０に対して、レジスタｒ４の右８ビットデータ（図２４に示すレジスタｒ６の［３５］）
カウント値０１１０１の第５ビット目の１に対して、レジスタｒ１の左８ビットデータ（図２４に示すレジスタｒ１の［３４］）
これらの値同士のＸＯＲ演算を実行して、それぞれのデータを更新する。
【０１５９】
なお、この排他的論理和（ＸＯＲ）演算には、図２５に示すようなマスク４（ＭＡＳＫ４）、マスク５（ＭＡＳＫ５）を適用することが可能である。
マスク４（ＭＡＳＫ４）は先行１２０ビット＝０、末尾８ビット＝１に設定されたマスクデータである。
マスク５（ＭＡＳＫ５）は、先行８ビット＝１、末尾１２０ビット＝０に設定されたマスクデータである。
レジスタｒ５，ｒ６，ｒ７，ｒ４とのＸＯＲにＭＡＳＫ４，レジスタｒ１とのＸＯＲにはＭＡＳＫ５を用いる。
【０１６０】
なお、このステップＳ２３０の排他的論理和演算（ＸＯＲ）は、ラウンドカウンタ（ｒｏｕｎｄｃｏｕｎｔｅｒ）＝０００００〜１１１１１の構成５ビット中、１が設定されたビットに対応するレジスタを対象として実行し、０の設定されたビットに対応するレジスタは処理を行わない設定としても同様の結果となる。
【０１６１】
すなわち、上述した、元のデータの上位から並べたレジスタ順：ｒ５，ｒ６，ｒ７，ｒ４，ｒ１に対して、例えばラアンドカウンタの値が１３＝０１１０１の場合は、ラウンドカウンタの第２，３，５ビットのみが１であるので、レジスタｒ５，ｒ６，ｒ７，ｒ４，ｒ１に対して、
レジスタｒ６，ｒ７とマスク４（ＭＡＳＫ４）とのＸＯＲ演算、
レジスタｒ１と、マスク５（ＭＡＳＫ５）とのＸＯＲ演算、
これらのみを実行する構成としてもよい。
【０１６２】
このステップＳ２３０の結果として得られるレジスタの、
レジスタｒ５，ｒ６，ｒ７，ｒ４，ｒ１，ｒ２，ｒ３，ｒ０の格納データを次のラウンド鍵生成用のブロックとする。
このレジスタｒ５，ｒ６，ｒ７，ｒ４，ｒ１，ｒ２，ｒ３，ｒ０に格納されたブロックから６４ブロックを次のラウンドのラウンド鍵として設定する。
以下、この更新されたレジスタ格納ブロックを適用して、図１３のフローに従った処理を繰り返して３２個のラウンド鍵を生成する。
【０１６３】
以上、図１３に示すフローチャートに従った具体的な処理について、説明してきたが、これらのラウンド鍵生成、更新処理を簡略化してまとめて示すと、図２６のように示すことができる。
【０１６４】
図２６（Ａ）は、図１０に示す複数のレジスタに格納された８０ブロックを上位から７９〜０まで並べて示したレジスタ初期格納データである。
この初期設定ブロックから６４ブロックが初期のラウンド鍵として選択される。
その後、この図２６（Ａ）に示すレジスタ初期格納データである８０ブロックに対して、図１３に示すフローに従った処理を実行する。すなわち、図１４〜図２５を参照して説明した処理を行いレジスタの更新を行う。
このレジスタ更新処理をまとめて示したのが図２６（Ｂ）である。
レジスタ更新処理は、
（ａ）ブロック単位のシフト処理やシャッフル処理等からなるローテーション処理、
（ｂ）ブロック単位の非線形変換処理（Ｓｂｏｘ）、
（ｃ）ブロックとラウンドカウンタ（０００００〜１１１１１１）との排他的論理和演算、
これらの各処理を含む処理として実行される。
これらの結果として、図２６（Ｂ）の再下段に示すレジスタ更新データ、すなわち次のラウンド鍵を生成するためのデータが設定される。このレジスタのブロックから左から６４ブロックを選択し、これをラウンド鍵として設定する。
その後は、この図２６（Ｂ）の再下段に示すレジスタ更新データに対して、図２６（Ｂ）の鍵更新を繰り返してレジスタ更新を行い、順次ラウンド鍵を生成する。
【０１６５】
図７に示すステップＳ１１２の鍵スケジュール処理では、このようにして、ラウンド鍵を生成する。
【０１６６】
［６．鍵スケジュール処理について（鍵スケジュール処理例２）］
次に、図７に示す暗号処理部１１０において実行するステップＳ１１２の鍵スケジュール処理のもう１つの実施例について説明する。
前章の［５．鍵スケジュール処理について（鍵スケジュール処理例１）］において説明した鍵スケジュール部では各ラウンド毎に、毎回、Ｓｂｏｘ、すなわち非線形変換処理を行うことが必要となる。すなわち、図１６、図１７を参照して説明した４つのブロックに対する非線形変換処理（Ｓｂｏｘ）である。
この非線形変換処理は、図１７に示すように演算ステップ数が多く、処理時間を増加させてしまうという問題がある。
【０１６７】
以下では、鍵スケジュール処理例２として、非線形変換処理（Ｓｂｏｘ）の実行回数を２回に減らした手法について説明する。
本処理例の鍵スケジュール部の実行する処理を説明するフローを図２７に示す。
【０１６８】
先に図１２を参照して説明した鍵スケジュール処理との違いは、１ラウンド目と、１７ラウンド目の前のステップＳ２５２とステップＳ２５７において非線形変換（Ｓｂｏｘ）の事前計算を行っている点と、ステップＳ２５５とステップＳ２６０のラウンド鍵生成更新処理の内容である。
【０１６９】
図２７のフローのステップＳ２５１の処理は、図１２のフローのステップＳ２０１の処理と同様の処理である。
図２７のフローのステップＳ２５４、Ｓ２５９の処理は、図１２のフローのステップＳ２０３の処理と同様の処理である。
図２７のフローのステップＳ２５６、Ｓ２６１の処理は、図１２のフローのステップＳ２０５の処理と同様の処理である。
図２７のフローのステップＳ２６２の処理は、図１２のフローのステップＳ２０６の処理と同様の処理である。
これらの処理についての説明は省略し、以下、図１２を参照して説明した鍵スケジュール処理と異なる処理について説明する。
【０１７０】
（６−１．非線形変換（Ｓｂｏｘ）の事前計算処理について）
ステップＳ２５２とステップＳ２５７において実行する非線形変換処理（Ｓｂｏｘ）の事前計算処理の詳細シーケンスを説明するフローを図２８、図２９に示す。
初期状態は、図３０に示すように、７９〜０の各ビットスライス表現鍵ブロックがレジスタに格納されているものとする。これば、先に図１０、図１１を参照して説明した設定と同様である。
例えば、［７９］のビットスライス表現鍵ブロックは、８つの８０ビット鍵の第１ビットを集めた８ビットデータである。以下、７８，７７，７６，７５・・・０は、８つの８０ビット鍵の第２，３，４，５・・・最終（８０ビット目）を集めた８ビットデータに対応する。
【０１７１】
図２８〜図２９に示すフローに従って、図２７のフローのステップＳ２５２とステップＳ２５７において実行する非線形変換（Ｓｂｏｘ）事前計算の詳細シーケンスについて説明する。
【０１７２】
まず、図２８のフローに示すステップＳ２８１において、
図３１に示すように、レジスタｒ０，ｒ１，ｒ２，ｒ３をレジスタｒ１２，ｒ１３，ｒ１４，ｒ１５にコピーし、レジスタｒ１２，ｒ１３，ｒ１４，ｒ１５に対してシャッフル命令を行う。
【０１７３】
このシャッフル処理における並び替えの順序は各レジスタ異なる。
レジスタｒ１２，ｒ１３，ｒ１４，ｒ１５のシャッフル前のデータの並び（＝レジスタｒ０，ｒ１，ｒ２，ｒ３と同じ）を左から、［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］としたとき、各レジスタのシャッフルは以下の設定とする。
【０１７４】
レジスタｒ１２，ｒ１３
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，１］，［０，２］，［０，３］，［０，４］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］，［０，０］，［０，０］，［０，０］）
【０１７５】
レジスタｒ１４
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，１］，［０，２］，［０，３］，［０，４］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１５］，［０，０］，［０，０］，［０，０］）
【０１７６】
レジスタｒ１５：
［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１５］，［０，０］，［０，０］，［０，０］
【０１７７】
次のステップＳ２８２において、
図３２に示すように、レジスタｒ４，ｒ５，ｒ６，ｒ７のデータをレジスタｒ８，ｒ９，１０，ｒ１１に格納し、ｒ８を右１２バイト論理シフト，ｒ９，ｒ１０，ｒ１１を右１３バイト論理シフトする。
【０１７８】
次のステップＳ２８３において、
図３３に示すように、
レジスタｒ１２とマスク６（ＭＡＳＫ６）とのＡＮＤ処理、
レジスタｒ１３，ｒ１４，ｒ１５とマスク７（ＭＡＳＫ７）とのＡＮＤ処理を実行する。
マスク６（ＭＡＳＫ６）は先頭９６ビット＝０、後続３２ビット＝１のマスクである。
マスク７（ＭＡＳＫ７）は先頭１０４ビット＝０、後続２４ビット＝１のマスクである。
【０１７９】
次のステップＳ２８４において、
図３４に示すように、レジスタｒ８，ｒ９，ｒ１０，ｒ１１とレジスタｒ１２，ｒ１３，ｒ１４，ｒ１５で排他的論理和演算（ＸＯＲ）を行い、レジスタｒ１２，ｒ１３，ｒ１４，ｒ１５に結果を格納する。
【０１８０】
次のステップＳ２８５において、
図３５に示すように、レジスタｒ１３，ｒ１４，ｒ１５に対して，シャッフル命令を行う。
レジスタｒ１３，ｒ１４，ｒ１５のシャッフル前のデータの並び（＝レジスタｒ０，ｒ１，ｒ２，ｒ３と同じ）を左から、［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］としたとき、各レジスタのシャッフルは以下の設定とする。
【０１８１】
レジスタｒ１３
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，１２］，［０，１３］，［０，１４］，［０，１５］，［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］）
【０１８２】
レジスタｒ１４
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］，［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］）
【０１８３】
レジスタｒ１５
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］，［０，０］，［０，１］，［０，２］，［０，３］）
【０１８４】
次のステップＳ２８６において、
図３６に示すように、レジスタｒ１３，１５をｒ９，ｒ１１にコピーする。
【０１８５】
次のステップＳ２８７において、
図３７に示すように、レジスタｒ１３，ｒ１４と，ｒ１５，ｒ１２の左６４ビットに対してバイト単位のアンパック処理を実行する。
なお、本開示の処理におけるアンパック処理とは、例えば２つのレジスタに格納されたデータを、上位または下位からブロックを最小単位として選択して、上記２つのレジスタ中の一方のレジスタに交互に格納する処理である。
具体的には、例えば、２つのレジスタから各レジスタに格納された全ブロックの１／２のブロックを各々選択して、１つのレジスタに再格納する処理である。
【０１８６】
図３７に示すように、レジスタｒ１３とレジスタｒ１４の左８ブロック（６４ビット）をブロック（８ビット）単位で、レジスタｒ１３に左から交互に格納するアンパック処理を実行する。
同様に、レジスタ１５とレジスタｒ１２の左８ブロック（６４ビット）をブロック（８ビット）単位で、レジスタｒ１５に左から交互に格納するアンパック処理を実行する。
【０１８７】
次のステップＳ２８８において、
図３８に示すように、レジスタｒ９，ｒ１４と，ｒ１１，ｒ１２の右６４ビットに対してバイト単位のアンパック処理を実行する。
図３８に示すように、レジスタｒ９とレジスタｒ１４の右８ブロック（６４ビット）をブロック（８ビット）単位で、レジスタｒ９に右から交互に格納するアンパック処理を実行する。
同様に、レジスタ１１とレジスタｒ１２の右８ブロック（６４ビット）をブロック（８ビット）単位で、レジスタｒ１１に右から交互に格納するアンパック処理を実行する。
【０１８８】
次に、ステップＳ２８９において、
図３９に示すように、レジスタｒ１３，ｒ９をｒ１２，ｒ１４にコピーする。
【０１８９】
次に、ステップＳ２９０において、
図４０に示すように、レジスタｒ１２，ｒ１５と，レジスタｒ１４，ｒ１１の左６４ビットに対して８ビットブロック２個単位のワード単位でアンパックする。
図４０に示すように、レジスタｒ１２とレジスタｒ１５の左８ブロック（６４ビット）を２ブロック（１６ビット）のワード単位で、レジスタｒ１２に左から交互に格納するアンパック処理を実行する。
同様に、レジスタｒ１４とレジスタｒ１１の左８ブロック（６４ビット）を２ブロック（１６ビット）のワード単位で、レジスタｒ１４に左から交互に格納するアンパック処理を実行する。
【０１９０】
次に、ステップＳ２９１において、
図４１に示すように、レジスタｒ１３，ｒ１５と，レジスタｒ９，ｒ１１の左６４ビットに対して８ビットブロック２個単位のワード単位でアンパックする。
図４１に示すように、レジスタｒ１３とレジスタｒ１５の右８ブロック（６４ビット）を２ブロック（１６ビット）のワード単位で、レジスタｒ１３に左から交互に格納するアンパック処理を実行する。
同様に、レジスタｒ９とレジスタｒ１１の右８ブロック（６４ビット）を２ブロック（１６ビット）のワード単位で、レジスタｒ９に左から交互に格納するアンパック処理を実行する。
【０１９１】
次に、ステップＳ２９２において、
図４２に示すように、レジスタｒ１３，ｒ１４，ｒ９に対して，シャッフル命令を実行する。
レジスタｒ１３，ｒ１４，ｒ９のシャッフル前のデータの並び（＝レジスタｒ０，ｒ１，ｒ２，ｒ３と同じ）を左から、［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］としたとき、各レジスタのシャッフルは以下の設定とする。
【０１９２】
レジスタｒ１３
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，１］，［０，２］，［０，３］，［０，０］，［０，５］，［０，６］，［０，７］，［０，４］，［０，９］，［０，１０］，［０，１１］，［０，８］，［０，１３］，［０，１４］，［０，１５］，［０，１２］）
【０１９３】
レジスタ１４
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，２］，［０，３］，［０，０］，［０，１］，［０，６］，［０，７］，［０，４］，［０，５］，［０，１０］，［０，１１］，［０，８］，［０，９］，［０，１４］，［０，１５］，［０，１２］，［０，１３］）
【０１９４】
レジスタ９
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，３］，［０，０］，［０，１］，［０，２］，［０，７］，［０，４］，［０，５］，［０，６］，［０，８］，［０，１１］，［０，９］，［０，１０］，［０，１５］，［０，１２］，［０，１３］，［０，１４］）
【０１９５】
次に、ステップＳ２９３において、
図４３に示すように、レジスタｒ１２，ｒ１３，ｒ１４，ｒ９と、マスク８（ＭＡＳＫ８），マスク９（ＭＡＳＫ９），マスク１０（ＭＡＳＫ１０），マスク１１（ＭＡＳＫ１１）のＡＮＤを求め、それぞれのレジスタに格納する。
なお、マスク８（Ｍａｓｋ８）は、先行６４ビット＝０、後続６４ビット＝１のマスク、
マスク９（ＭＡＳＫ９）は、先頭から３２ビット単位で０，１，０，１の設定されたマスクである。
マスク１０（ＭＡＳＫ１０）は先頭から１６ビット連続０と１６ビット連続１が交互に出現するマスク、
マスク１１（ＭＡＳＫ１１）は先頭から８ビット連続０と８ビット連続１が交互に出現するマスクである。
【０１９６】
次に、ステップＳ２９４において、
図４４に示すように、レジスタｒ１２，ｒ１３，ｒ１４，ｒ９のデータに対する非線形変換処理（Ｓｂｏｘ）を実行する。
非線形変換処理は、先に図１７を参照して説明した処理である。
この非線形変換処理結果を、レジスタｒ９，ｒ１４，ｒ１３，ｒ１２に格納する。なお、この処理に際して、レジスタｒ８をテンポラリ領域として利用する。
【０１９７】
この結果得られる図４５に示すレジスタｒ９，ｒ１４，ｒ１３，ｒ１２の左から８ビットずつの１６ブロックに格納されたデータが、１６ラウンド分の非線型変換処理（Ｓｂｏｘ）の結果となる。
なお、このＳｂｏｘ事前計算後，鍵更新処理を実行する前にレジスタｒ９，ｒ１４，ｒ１３，ｒ１２をｒ１２，ｒ１３，ｒ１４，ｒ１５に格納しておく。
なお、このレジスタの入れ替え処理は、プログラム上では，レジスタを読み替えるだけの処理で実行できる。
【０１９８】
このようにして、図２７に示すステップＳ２５２のＳｂｏｘ事前計算では、１〜１６ラウンドのラウンド鍵生成に適用する非線型変換処理（Ｓｂｏｘ）結果を生成し、図２７に示すステップＳ２５７のＳｂｏｘ事前計算では、１７〜３２ラウンドのラウンド鍵生成に適用する非線型変換処理（Ｓｂｏｘ）結果を生成する。
本実施例では、これらの２回の非線形変換処理（Ｓｂｏｘ）のみで、全ラウンドのラウンド鍵生成に必要となる非線型変換処理（Ｓｂｏｘ）結果を生成することが可能となる。
【０１９９】
（６−２．ラウンド鍵生成、更新処理について）
次に、図２７に示すフローのステップＳ２５５と、ステップＳ２６０のラウンド鍵生成更新処理の詳細について、図４６以下を参照して説明する。
【０２００】
図４６は、図２７に示すフローのステップＳ２５５と、ステップＳ２６０のラウンド鍵生成更新処理の詳細シーケンスを説明するフローチャートである。
図４６に示すフローに従って、図２７のフローのステップＳ２５５とステップＳ２６０において実行するラウンド鍵生成更新処理の詳細シーケンスについて説明する。
【０２０１】
なお、このラウンド鍵の生成、更新開始前のレジスタ設定は、図４７に示す通りである。
図４７に示すように、レジスタｒ０，ｒ１，ｒ２，ｒ３，ｒ４，ｒ５，ｒ６，ｒ７にビットスライス表現の鍵が格納されている。
また、レジスタｒ１２，ｒ１３，ｒ１４，ｒ１５に、前述した（６−１．非線形変換（Ｓｂｏｘ）の事前計算処理について）において説明した処理によって生成した事前計算した非線形変換（Ｓｂｏｘ）処理の結果が格納されているものとする。
【０２０２】
まず、図４６のステップＳ３０１において、
図４８に示すように、非線形変換（Ｓｂｏｘ）処理の結果が格納されているレジスタｒ１２，ｒ１３，ｒ１４，ｒ１５をレジスタｒ８，ｒ９，ｒ１０，ｒ１１にコピーし、マスク５（ＭＡＳＫ５）とＡＮＤ処理を実行する。
【０２０３】
なお、ここでは、一例として、１ラウンド目のＳｂｏｘの値を使用したラウンド鍵生成、更新処理例について説明する。
事前計算した非線型変換処理（Ｓｂｏｘ）の値は、レジスタｒ１２，ｒ１３，ｒ１４，ｒ１５の左８ビットを使用する。
【０２０４】
次に、ステップＳ３０２において、
図４９に示すように、レジスタｒ１２，ｒ１３，ｒ１４，ｒ１５を左８ビット論理シフトする。
【０２０５】
次に、ステップＳ３０３において、
図５０に示すように、レジスタｒ５，ｒ６，ｒ７を右８ビット論理シフトし，ｒ４とＭＡＳＫ０，ｒ５，ｒ６，ｒ７とＭＡＳＫ１でＡＮＤを取る。
この処理は、図１３のフローのステップＳ２２５の処理と同様の処理である。
【０２０６】
レジスタｒ５，ｒ６，ｒ７の格納データを右８ビットシフトし、
レジスタｒ４と予め既定したデータからなるマスク０（ＭＡＳＫ０）とのＡＮＤ処理、
レジスタｒ５，ｒ６，ｒ７と予め既定したデータからなるマスク１（ＭＡＳＫ１）とのＡＮＤ処理を行う。
なお、マスクの値はレジスタに保持しておく必要はない。
【０２０７】
マスク０（ＭＡＳＫ０）は、図５０に示すように、８ビットデータ単位の２〜４番目のブロックのビットのみを１、その他を０としたマスクである。
マスク１（ＭＡＳＫ１）は、図５０に示すように、８ビットデータ単位の２〜５番目のブロックのビットのみを１、その他を０としたマスクである。
このマスクデータとのＡＮＤ処理によって、図５０に示すように、レジスタｒ４〜ｒ７の先頭８ビットデータは０に書き換えられる。
【０２０８】
次に、ステップＳ３０４において、
図５１に示すように、レジスタｒ４，ｒ５，ｒ６，ｒ７とレジスタｒ１１，ｒ８，ｒ９，ｒ１０の排他的論理和演算（ＸＯＲ）を実行して、出力をレジスタｒ４，ｒ５，ｒ６，ｒ７に格納する。
この処理は、図１３のフローのステップＳ２２６の処理と同様の処理である。
【０２０９】
これらの排他的論理和演算（ＸＯＲ）処理の結果、レジスタｒ４，ｒ５，ｒ６，ｒ７の先頭８ビットには、レジスタｒ１１，ｒ８，ｒ９，ｒ１０の先頭８ビットデータであるステップＳ２２３の非線形変換処理（Ｓｂｏｘ）の演算結果が格納される。
【０２１０】
次に、ステップＳ３０５において、
図５２に示すように、レジスタｒ０，ｒ１，ｒ２，ｒ３に対してシャッフル命令を実行し，シャッフル結果をレジスタｒ０，ｒ１，ｒ２，ｒ３に格納する。
シャッフル処理の処理前と処理後のレジスタｒ０，ｒ１，ｒ２，ｒ３の格納データを図５２に示す。
この処理は、図１３のフローのステップＳ２２７の処理と同様の処理である。
【０２１１】
このシャッフル処理におけるデータ並び替えの順序はレジスタｒ０とレジスタｒ１，ｒ２，ｒ３で異なる。各レジスタの８ビット単位のデータを、先頭から、
［０，０，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］
とする。
【０２１２】
ステップＳ３０５のシャッフル処理は、レジスタｒ０に対しては、以下の設定で実行する。
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，１２］，［０，１３］，［０，１４］，［０，１５］，［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］）
【０２１３】
また、レジスタｒ１，ｒ２，ｒ３に対しては、以下の設定で実行する。
（［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］，［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］）→（［０，１１］，［０，１２］，［０，１３］，［０，１４］，［０，１５］，［０，０］，［０，１］，［０，２］，［０，３］，［０，４］，［０，５］，［０，６］，［０，７］，［０，８］，［０，９］，［０，１０］）
【０２１４】
次のステップＳ３０６では、
図５３に示すように、レジスタｒ０，ｒ１，ｒ２，ｒ３のデータをレジスタｒ８，ｒ９，ｒ１０，ｒ１１にコピーし、さらに、
レジスタｒ８と、マスク２（ＭＡＳＫ２）のＡＮＤ処理、
レジスタｒ９，ｒ１０，ｒ１１と、マスク３（ＭＡＳＫ３）のＡＮＤ処理、
これらのＡＮＤ処理を実行して、その結果をレジスタｒ８，ｒ９，ｒ１０，ｒ１１に格納する。
この処理は、図１３のフローのステップＳ２２８の処理と同様の処理である。
【０２１５】
なお、マスク２（ＭＡＳＫ２）は、図５３に示すように、先頭３２ビット＝０、その後９６ビット＝１のマスクデータである。
マスク３（ＭＡＳＫ３）は、図５３に示すように、先頭４０ビット＝０、その後８８ビット＝１のマスクデータである。
【０２１６】
この処理の結果、レジスタｒ８の先頭３２ビットは０に設定され、レジスタｒ９，ｒ１０，ｒ１１の先頭４０ビットは０に設定される。
【０２１７】
次のステップＳ３０７では、
図５４に示すように、レジスタｒ４，ｒ５，ｒ６，ｒ７とレジスタｒ８，ｒ９，ｒ１０，ｒ１１の排他的論理和演算（ＸＯＲ）を実行して，結果をｒ４，ｒ５，ｒ６，ｒ７に格納する。
この処理は、図１３のフローのステップＳ２２９の処理と同様の処理である。
【０２１８】
次のステップＳ３０８では、
図５５に示すように、レジスタｒ５，ｒ６，ｒ７，ｒ４の右８ビット，ｒ１の左８ビットに対して，予め設定したカウント値であるラウンドカウンタ（ｒｏｕｎｄｃｏｕｎｔｅｒ）の値との排他的論理和演算（ＸＯＲ）を行う。
この処理は、図１３のフローのステップＳ２３０の処理と同様の処理である。
ラウンドカウンタは、
ラウンド数：０〜３１に応じた２進数表現としての０００００〜１１１１１の各カウント値に設定する。
【０２１９】
例えばラウンド数＝１３のラウンド鍵を生成する場合は、ラウンドカウンタは、２進数表現としての１３を示す０１１０１の各カウント値に設定する。
このカウント値０１１０１に対して、レジスタｒ５，ｒ６，ｒ７，ｒ４の右８ビット，ｒ１の左８ビットとのＸＯＲ演算を行う。
なお、ラウンドカウンタのカウント値０００００〜１１１１１とのＸＯＲ演算の順番は、各レジスタの格納値の元のデータの上位ビットからの順番とする。図２４に示す例では、値の大きい順番であり、３８，３７，３６，３５，３４の順番とする。
すなわちレジスタ順としては、ｒ５，ｒ６，ｒ７，ｒ４，ｒ１となる。
【０２２０】
図５５に示すように、
上位から、
カウント値０１１０１の第１ビット目の０に対して、レジスタｒ５の右８ビットデータ（図５５に示すレジスタｒ５の［３８］）
カウント値０１１０１の第２ビット目の１に対して、レジスタｒ６の右８ビットデータ（図５５に示すレジスタｒ６の［３７］）
カウント値０１１０１の第３ビット目の１に対して、レジスタｒ７の右８ビットデータ（図５５に示すレジスタｒ７の［３６］）
カウント値０１１０１の第４ビット目の０に対して、レジスタｒ４の右８ビットデータ（図５５に示すレジスタｒ６の［３５］）
カウント値０１１０１の第５ビット目の１に対して、レジスタｒ１の左８ビットデータ（図５５に示すレジスタｒ１の［３４］）
これらの値同士のＸＯＲ演算を実行して、それぞれのデータを更新する。
【０２２１】
なお、この排他的論理和（ＸＯＲ）演算には、図５５に示すようなマスク４（ＭＡＳＫ４）、マスク５（ＭＡＳＫ５）を適用することが可能である。
マスク４（ＭＡＳＫ４）は先行１２０ビット＝０、末尾８ビット＝１に設定されたマスクデータである。
マスク５（ＭＡＳＫ５）は、先行８ビット＝１、末尾１２０ビット＝０に設定されたマスクデータである。
レジスタｒ５，ｒ６，ｒ７，ｒ４とのＸＯＲにＭＡＳＫ４，レジスタｒ１とのＸＯＲにはＭＡＳＫ５を用いる。
【０２２２】
なお、このステップＳ２３０の排他的論理和演算（ＸＯＲ）は、ラウンドカウンタ（ｒｏｕｎｄｃｏｕｎｔｅｒ）＝０００００〜１１１１１の構成５ビット中、１が設定されたビットに対応するレジスタを対象として実行し、０の設定されたビットに対応するレジスタは処理を行わない設定としても同様の結果となる。
【０２２３】
すなわち、上述した、元のデータの上位から並べたレジスタ順：ｒ５，ｒ６，ｒ７，ｒ４，ｒ１に対して、例えばラアンドカウンタの値が１３＝０１１０１の場合は、ラウンドカウンタの第２，３，５ビットのみが１であるので、レジスタｒ５，ｒ６，ｒ７，ｒ４，ｒ１に対して、
レジスタｒ６，ｒ７とマスク４（ＭＡＳＫ４）とのＸＯＲ演算、
レジスタｒ１と、マスク５（ＭＡＳＫ５）とのＸＯＲ演算、
これらのみを実行する構成としてもよい。
【０２２４】
このステップＳ３０８の結果として得られるレジスタの、
レジスタｒ５，ｒ６，ｒ７，ｒ４，ｒ１，ｒ２，ｒ３，ｒ０の格納データを次のラウンド鍵生成用のブロックとする。
このレジスタｒ５，ｒ６，ｒ７，ｒ４，ｒ１，ｒ２，ｒ３，ｒ０に格納されたブロックから６４ブロックを次のラウンドのラウンド鍵として設定する。
以下、この更新されたレジスタ格納ブロックを適用して、図４６のフローに従った処理を繰り返して３２個のラウンド鍵を生成する。
【０２２５】
このように、（鍵スケジュール処理例２）では、鍵スケジュール処理例１において必要となっていた４回の非線形変換処理（Ｓｂｏｘ）の実行回数を２回に少なくすることができる。
この（鍵スケジュール処理例２）の処理数の削減効果について考察する。
【０２２６】
先に説明した２つの鍵スケジュール処理、すなわち、
（Ａ）鍵スケジュール処理例１（図１２、図１３のフローに従った処理）
（Ｂ）鍵スケジュール処理例２（図２７〜図２９、図４６のローに従った処理）
これらの２つの鍵スケジュール処理の処理ステップ数を比較すると、以下の通りとなる。
【０２２７】
（Ａ）鍵スケジュール処理例１
Ｓｂｏｘ事前計算なしの鍵更新処理に要する命令数は、以下の通りである。
鍵更新処理：１８４７（＝５７×３１＋８０）
（Ｂ）鍵スケジュール処理例２
Ｓｂｏｘ事前計算ありの鍵更新処理に要する命令数は、以下の通りである。
Ｓｂｏｘ事前計算＋鍵更新処理：１４１１
（Ｓｂｏｘ事前計算：１３２（＝６６×２），鍵更新処理：１２８９（３９×３１＋８０））
このように、（Ｂ）鍵スケジュール処理例２は、（Ａ）鍵スケジュール処理例１に比較して処理ステップの数を削減でき、より高速な処理が実現される。
【０２２８】
［７．暗号処理について］
次に、図７に示す暗号処理部１１０の実行するステップＳ１２２の処理、すなわち、暗号処理の詳細について説明する。
ステップＳ１２２の暗号処理（Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ）は、ステップＳ１１１のデータ変換処理（Ｄａｔａ  Ｃｏｎｖｅｒｓｉｏｎ）において平文データに基づいて生成したビットスライス表現データに対して、ラウンド鍵を適用した暗号処理を実行するステップである。
【０２２９】
ビットスライス処理によって生成したビットスライス表現データを構成するブロックを単位としたラウンド鍵との加算（ＸＯＲ）処理、線形変換処理、非線形変換処理など、暗号アルゴリズムに従った処理をソフトウェア（プログラム）に従って実行する。
図５７以下を参照して、この暗号処理の詳細について説明する。
【０２３０】
図５７に示すフローチャートは、図７に示す暗号処理部１１０の実行するステップＳ１２２の処理、すなわち、暗号処理の詳細シーケンスを説明するフローチャートである。
【０２３１】
ステップＳ４０１においてデータ入力および初期設定を行う。
具体的には、レジスタに格納した暗号化処理対象となる平文データのビットスライス表現データを入力する。
これは、図７のステップＳ１２１のデータ変換処理において生成したデータであり、図９を参照して説明した平文データ８２の変換処理によって生成したビットスライス表現データある。すなわち、図９に示すビットスライス表現ブロック［０，０］〜［３，１５］の６４ブロックを入力する。
図９に示すビットスライス表現ブロック［０，０］〜［３，１５］は、本実施例では、暗号処理対象となる８つの平文の同一ビット目を格納したブロックであり、各々８ビットデータである。
【０２３２】
ステップＳ４０１では、このビットスライス表現データを入力し、さらに、暗号処理のラウンド数のカウント値に相当するラウンド番号Ｒｎ＝０の初期設定と、ラウンド鍵の格納されたメモリ領域を示す鍵ポインタ（ｐｔ）の初期設定を行う。鍵ポインタ（ｐｔ）はメモリ領域に書き込まれたラウンド鍵のメモリアドレスを表す。ラウンド番号Ｒｎの初期値を０として，各ラウンド終了後にＲｎをインクリメントする。
【０２３３】
ステップＳ４０２〜Ｓ４０４は、暗号処理の各ラウンド単位の処理であり、
ステップＳ４０２：ラウンド鍵加算、すなわちラウンド鍵と入力平文データ（ビットスライス表現データ）との排他的論理和演算処理（ａｄｄＲｏｕｎｄＫｅｙ）、
ステップＳ４０３：ラウンド鍵加算結果に対する非線形変換処理（ＳｂｏｘＬａｙｅｒ）、
ステップＳ４０４：非線形変換結果に対する線型変換処理（ｐＬａｙｅｒ）、
これらの処理を実行する。
なお、これらの処理の詳細については後述する。
【０２３４】
ステップＳ４０５では、処理ラウンドが最終ラウンドであるＲｎ＝３１に達したか否かを確認する。
Ｒｎ＝３１未満である場合は、次ラウンド処理として、ステップＳ４０２〜Ｓ４０４の処理を実行する。
【０２３５】
ステップＳ４０５において、処理ラウンドが最終ラウンドであるＲｎ＝３１に達したと判定した場合は、ステップＳ４０６において暗号文を出力する。
この出力暗号文に対して、図７に示すステップＳ２３のデータ逆変換処理が実行され、最終的な暗号文９０として出力される。
【０２３６】
図７に示す暗号処理部１１０の実行するステップＳ１２２の暗号処理ステップを例えばハードウェア構成で実行する場合の構成例を図５８に示す。
図５８は、２ラウンド分の、
（ａ）ラウンド鍵加算（ａｄｄＲｏｕｎｄＫｅｙ）、
（ｂ）非線形変換（ＳｂｏｘＬａｙｅｒ）、
（ｃ）線形変換（ｐＬａｙｅｒ）
これらの３処理を示している。
この３種類の処理からなるラウンド演算を複数ラウンド繰り返し実行して、暗号文を出力する。
【０２３７】
本開示の装置においては、例えば図５８に示すようなアンゴウショリ専用のハードウェアを適用することなく、レジスタに格納されたビットスライス表現データに対する演算処理や、レジスタ格納データのシフト処理等によってラウンド演算、すなわち、図５７のフローに示すステップＳ４０２〜Ｓ４０４の各処理、
（ａ）ラウンド鍵加算（ａｄｄＲｏｕｎｄＫｅｙ）、
（ｂ）非線形変換（ＳｂｏｘＬａｙｅｒ）、
（ｃ）線形変換（ｐＬａｙｅｒ）
これらの３処理を実行する。
【０２３８】
以下、本開示の装置で実行するこれらの各処理の詳細について説明する。
まず、ステップＳ４０２の鍵加算処理（ａｄｄＲｏｕｎｄＫｅｙ）についして、図５９を参照して説明する。
【０２３９】
このステップＳ４０２のラウンド鍵加算は、ラウンド鍵と入力平文データ（ビットスライス表現データ）との排他的論理和演算処理（ａｄｄＲｏｕｎｄＫｅｙ）である。
ラウンド鍵は、図７に示す暗号鍵８１を入力として、暗号処理部１１０におけるステップＳ１１１の鍵変換処理と、ステップＳ１１２の鍵スケジュール処理によって生成されたラウンド鍵である。
このラウンド鍵生成処理は、前述の［４．鍵変換処理とデータ変換処理について］、［５．鍵スケジュール処理について（鍵スケジュール処理例１）］、［６．鍵スケジュール処理について（鍵スケジュール処理例２）］、これらの項目において説明した処理である。
ラウンド鍵は、メモリに格納されており、鍵ボイント（ｐｔ）の示す領域からラウンド鍵を取得する。
【０２４０】
暗号処理対象となる平文データは、前述の［４．鍵変換処理とデータ変換処理について］において説明したように、図７に示す平文データ８２のビットスライス表現データである。すなわち、図９を参照して説明した処理によってレジスタに格納されたビットスライス表現データである。
なお、本実施例では、図９に示すように（ａ１）〜（ａ８）の８つの６４ビット平文に基づいて生成されたビットスライス表現データに対する暗号処理を行うものとして説明する。
【０２４１】
図５９には、４つの１２８ビットレジスタｒ０〜ｒ３に格納されたビットスライス表現データを示している。図５９のレジスタ格納データである［ｉ，ｊ］は、図９に示す８つの平文（ａ１）〜（ａ８）の同一ビットの集合からなるビットスライス表現ブロックである。
８つの平文（ａ１）〜（ａ８）の、
第１ビット目の集合からなるビットスライス表現ブロックが［０，０］
第２ビット目の集合からなるビットスライス表現ブロックが［１，０］
第３ビット目の集合からなるビットスライス表現ブロックが［２，０］
第４ビット目の集合からなるビットスライス表現ブロックが［３，０］
第５ビット目の集合からなるビットスライス表現ブロックが［０，１］
・・
第６３ビット目の集合からなるビットスライス表現ブロックが［２，１５］
第６４ビット目の集合からなるビットスライス表現ブロックが［３，１５］
であり、これらの８ビットからなるビットスライス表現ブロック［０，０］〜［３，１５］が４つのレジスタｒ０〜ｒ３に分散して格納されている。
【０２４２】
図５７のフローにおけるステップＳ４０２の鍵加算処理は、図５９に示す４本の１２８ビットレジスタｒ０〜ｒ３の格納データとメモリに各機能されたラウンド鍵との排他的論理和演算（ＸＯＲ）処理として実行される。
排他的論理和演算（ＸＯＲ）処理を実行する平文とラウンド鍵は、いずれも、８ビットのビットスライス表現ブロック６４ブロック分のデータである。
各レジスタ（＝１２８ビットレジスタ（１６ブロック分））単位で、ポインタ（ｐｔ）によって指定されるメモリ位置に格納されたラウンド鍵（１２８ビット（１６ブロック））との排他的論理和演算（ＸＯＲ）処理を実行する。
【０２４３】
ラウンド鍵は鍵ポインタ（ｐｔ）で指示された領域にあるデータを用いる。
１つのレジスタ（１２８ビット）の排他的論理和演算（ＸＯＲ）毎に、鍵ポインタ（ｐｔ）を１６ブロック（１２８ビット）ずつ進めながら，４本のレジスタｒ０〜ｒ３に格納された暗号化対象となる平文データのビットスライス表現データとの排他的論理和演算（ＸＯＲ）を実行して、演算結果をレジスタに格納する。
【０２４４】
次に、図５７に示すフローチャートのステップＳ４０３の処理について説明する。
ステップＳ４０３は、ステップＳ４０２におけるラウンド鍵加算結果に対する非線形変換処理（ＳｂｏｘＬａｙｅｒ）である。
【０２４５】
この非線形変換処理（ＳｂｏｘＬａｙｅｒ）は、ラウンド鍵加算結果を格納した１２８ビットレジスタ４本とテンポラリのレジスタ１本を利用して、レジスタ間の演算処理として実行する。
具体的には、図６０に示すように、レジスタ間の演算処理として実行する。
演算処理によって実現される。
図１７に示すレジスタ：ｘ３，ｘ２，ｘ１，ｘ０，ｘ４は、
レジスタｘ３〜ｘ０がラウンド鍵加算結果を格納した１２８ビットレジスタ４本、
レジスタｘ４が、テンポラリ領域として利用するレジスタに相当する。
この非線形変換処理（ＳｂｏｘＬａｙｅｒ）の結果は、4本の１２８ビットレジスタ、例えばレジスタｒ０〜ｒ４に格納する。
【０２４６】
次に、図５７に示すフローチャートのステップＳ４０４の処理について説明する。
ステップＳ４０４の処理は、ステップＳ４０３の非線形変換結果に対する線型変換処理（ｐＬａｙｅｒ）である。
【０２４７】
この線型変換処理（ｐＬａｙｅｒ）の詳細シーケンスを説明するフローチャートを図６１に示す。
図６１に示すフローチャートの各ステップの処理について、順次、説明する。
なお、型変換処理（ｐＬａｙｅｒ）処理対象となるデータは、ステップＳ４０３の非線形変換結果であり、このステップＳ４０３の非線形変換結果が図６２に示すように、４本の１２８ビットレジスタｒ０〜ｒ３に格納されている。
【０２４８】
まず、ステップＳ４５１において、
図６３に示すように、レジスタｒ０，ｒ１，ｒ２，ｒ３に対して，シャッフル命令を実行し，結果をｒ０，ｒ１，ｒ２，ｒ３に格納する。
【０２４９】
レジスタｒ０，ｒ１，ｒ２，ｒ３のシャッフル前のデータの並び（＝レジスタｒ０，ｒ１，ｒ２，ｒ３と同じ）を左から、［ｉ，０］，［ｉ，１］，［ｉ，２］，［ｉ，３］，［ｉ，４］，［ｉ，５］，［ｉ，６］，［ｉ，７］，［ｉ，８］，［ｉ，９］，［ｉ，１０］，［ｉ，１１］，［ｉ，１２］，［ｉ，１３］，［ｉ，１４］，［ｉ，１５］、
ただし、ｉ＝｛０，１，２，３｝
としたとき、各レジスタのシャッフルは以下の設定とする。
【０２５０】
レジスタｒｉ
ｉ＝｛０，１，２，３｝．
（［ｉ，０］，［ｉ，１］，［ｉ，２］，［ｉ，３］，［ｉ，４］，［ｉ，５］，［ｉ，６］，［ｉ，７］，［ｉ，８］，［ｉ，９］，［ｉ，１０］，［ｉ，１１］，［ｉ，１２］，［ｉ，１３］，［ｉ，１４］，［ｉ，１５］）→（［ｉ，０］，［ｉ，４］，［ｉ，８］，［ｉ，１２］，［ｉ，１］，［ｉ，５］，［ｉ，９］，［ｉ，１３］，［ｉ，２］，［ｉ，６］，［ｉ，１０］，［ｉ，１４］，［ｉ，３］，［ｉ，７］，［ｉ，１１］，［ｉ，１５］）
【０２５１】
次に、ステップＳ４５２において、
図６４に示すように、レジスタｒ０，ｒ２をレジスタｒ４，ｒ５にコピーする。
【０２５２】
次に、ステップＳ４５３において、
図６５に示すように、レジスタｒ０，ｒ１とレジスタｒ２，ｒ３の左６４ビットに対して，ダブルワード単位でアンパック命令を実行する。
図６５に示すように、レジスタｒ０とレジスタｒ２の左８ブロック（６４ビット）をダブルワード（３２ビット（４ブロック））単位で、レジスタｒ０に左から交互に格納するアンパック処理を実行する。
同様に、レジスタｒ２とレジスタｒ３の左８ブロック（６４ビット）をダブルワード（３２ビット（４ブロック））単位で、レジスタｒ２に左から交互に格納するアンパック処理を実行する。
【０２５３】
次に、ステップＳ４５４において、
図６６に示すように、レジスタｒ４，ｒ１とレジスタｒ５，ｒ３の右６４ビットに対して，ダブルワード単位でアンパック命令を実行する。
図６６に示すように、レジスタｒ４とレジスタｒ１の右８ブロック（６４ビット）をダブルワード（３２ビット（４ブロック））単位で、レジスタｒ４に左から交互に格納するアンパック処理を実行する。
同様に、レジスタ５とレジスタｒ３の右８ブロック（６４ビット）をダブルワード（３２ビット（４ブロック））単位で、レジスタｒ５に左から交互に格納するアンパック処理を実行する。
【０２５４】
次に、ステップＳ４５５において、
図６７に示すように、レジスタｒ０，ｒ４をレジスタｒ１，ｒ３にコピーする。
【０２５５】
次に、ステップＳ４５６において、
図６８に示すように、レジスタｒ０，ｒ２とレジスタｒ４，ｒ５の左６４ビットに対して，クワッドワード単位でアンパック命令を実行する。
図６８に示すように、レジスタｒ０とレジスタｒ２の左８ブロック（６４ビット）をクワッドワード（６４ビット（８ブロック））単位で、レジスタｒ０に左から交互に格納するアンパック処理を実行する。
同様に、レジスタｒ４とレジスタｒ５の左８ブロック（６４ビット）をクワッドワード（６４ビット（８ブロック））単位で、レジスタｒ４に左から交互に格納するアンパック処理を実行する。
【０２５６】
次に、ステップＳ４５７において、
図６９に示すように、レジスタｒ１，ｒ２とレジスタｒ３，ｒ５の右６４ビットに対して，クワッドワード単位でアンパック命令を実行する。
図６９に示すように、レジスタｒ１とレジスタｒ２の右８ブロック（６４ビット）をクワッドワード（６４ビット（８ブロック））単位で、レジスタｒ１に左から交互に格納するアンパック処理を実行する。
同様に、レジスタｒ３とレジスタｒ５の右８ブロック（６４ビット）をクワッドワード（６４ビット（８ブロック））単位で、レジスタｒ３に左から交互に格納するアンパック処理を実行する。
【０２５７】
これら図６１に示すフローのステップＳ４５１〜Ｓ４５７の処理結果として生成されたレジスタｒ０，ｒ１，ｒ４，ｒ３を線形変換結果として、次のラウンドの入力とする。
図７０に図５７のフローのステップＳ４０４の線形変換処理の入力と出力との対応関係を示す。
【０２５８】
このように、図５７に示すフローのステップＳ４０２のラウンド鍵加算、ステップＳ４０３の非線形変換、およびステップＳ４０４の線形変換によって1つのラウンド演算が構成される。
このラウンド演算処理における各処理の命令数は、以下の通りとなる。
（ａ）ラウンド鍵加算（ａｄｄＲｏｕｎｄＫｅｙ）：４
（ｂ）非線形変換（ＳｂｏｘＬａｙｅｒ）：２０
（ｃ）線形変換（ｐＬａｙｅｒ）：１６
【０２５９】
図７に示す暗号処理部１１０のステップＳ１２２では、図５７に示すフローに従ったラウンド演算を、暗号アルゴリズムに規定された所定回数（３２回）繰り返す。この処理結果に対して、次のステップＳ１２３においてデータ逆変換処理を実行する。
【０２６０】
このステップＳ１２３は、ステップＳ１２２の暗号処理（Ｄａｔａ  Ｐｒｏｃｅｓｓｉｎｇ）結果に対するデータ逆変換処理（Ｄａｔａ  Ｃｏｎｖｅｒｓｉｏｎ−１）であり、ビットスライス表現データをビットスライスされる前の平文データ８２に対応する暗号化データの集合に戻す処理である。この処理は、先に、図９を参照して説明したビットスライス表現データの生成処理の逆の処理として実行される。
この処理により、出力データ９０として、平文データ８２に対応する暗号化データ９１が生成される。
【０２６１】
なお、上述した実施例では、暗号アルゴリズムである［ＰＲＥＳＥＮＴ］の線形変換処理（ｐＬａｙｅｒ）をソフトウェアで効率よく実行するため、データのビットスライス表現を、図９を参照して説明したように、４ビット間隔で行う構成としている。この構成により、例えば、Ｉｎｔｅｌ拡張ＳＩＭＤ命令のシャッフル、アンパック命令を組み合わせて、図６１〜図７０を参照した処理に従って行うことで１ラウンドにつき、１６命令で線形変換（ｐＬａｙｅｒ）を実行することが可能となる。
【０２６２】
また、暗号アルゴリズム［ＰＲＥＳＥＮＴ］では１ラウンドに対応するラウンド鍵の更新処理に際して、１回のＳｂｏｘを適用した非線形変換処理を行う設定となっている。
これに対して、先に説明した［６．鍵スケジュール処理について（鍵スケジュール処理例２）］において説明した構成によれば、８０ビット鍵を入力して処理を行う鍵スケジュール部は、２回の非線型変換処理によって３２ラウンド分のラウンド鍵を生成することが可能であり、少ない命令数でのラウンド鍵生成が可能であり、高速処理が実現される。
【０２６３】
以上、説明したように、本開示の情報処理装置は、特定の暗号アルゴリズム、例えば上述した暗号アルゴリズム［ＰＲＥＳＥＮＴ］の処理を、暗号アルゴリズムを実行するための専用ハードウェアを有していない情報処理装置、例えばＰＣ等の情報処理装置において高速に実行することを可能としたものである。
【０２６４】
［８．情報処理装置および暗号処理装置の構成例について］
最後に、上述した実施例に従った暗号処理を実行する情報処理装置や暗号処理装置の装置構成例について説明する。情報処理装置には、例えば、図１〜図５を参照して説明したサーバなども含まれる。
上述した実施例に従った暗号処理は、暗号処理アルゴリズムを規定したソフトウェア（プログラム）を実行するＣＰＵ等から構成されるデータ処理部、プログラムや、データを格納するメモリを有する例えばＰＣやサーバ等の機器において実行可能である。
【０２６５】
図７１に、本開示の暗号処理を実行する情報処理装置や、暗号処理装置のハードウェア構成例を示す。
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）７０１は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）７０２、または記憶部７０８に記憶されているプログラムに従って各種の処理を実行するデータ処理部として機能する。例えば、上述したシーケンスに従った処理を実行する。
【０２６６】
ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）７０３には、ＣＰＵ７０１が実行するプログラムやデータなどが記憶される。例えば上述した暗号処理シーケンスを規定したプログラムが格納されている。ＲＡＭには、上述した各処理に適用するデータを格納するレジスタも含まれ、ワーク領域として使用されるメモリ領域なども含まれる。
これらのＣＰＵ７０１、ＲＯＭ７０２、およびＲＡＭ７０３は、バス７０４により相互に接続されている。
【０２６７】
ＣＰＵ７０１はバス７０４を介して入出力インタフェース７０５に接続され、入出力インタフェース７０５には、各種スイッチ、キーボード、マウス、マイクロホンなどよりなる入力部７０６、ディスプレイ、スピーカなどよりなる出力部７０７が接続されている。ＣＰＵ７０１は、入力部７０６から入力される指令に対応して各種の処理を実行し、処理結果を例えば出力部７０７に出力する。
【０２６８】
入出力インタフェース７０５に接続されている記憶部７０８は、例えばハードディスク等からなり、ＣＰＵ７０１が実行するプログラムや各種のデータを記憶する。通信部７０９は、インターネットやローカルエリアネットワークなどのネットワークを介して外部の装置と通信する。
例えば図１〜図５を参照して説明したサーバである場合、通信部７０９は、多数のユーザ端末やセンサ等からの暗号化データの受信処理、あるいは多数のユーザ端末やセンサ等に対する暗号化データの送信処理を実行する。
【０２６９】
入出力インタフェース７０５に接続されているドライブ７１０は、磁気ディスク、光ディスク、光磁気ディスク、あるいはメモリカード等の半導体メモリなどのリムーバブルメディア７１１を駆動し、データの記録または読み取りを実行する。
【０２７０】
なお、上述した実施例では、主に入力データとしての平文を暗号化する暗号化処理について説明したが、本開示の処理は、入力データとしての平文を暗号化する暗号化処理のみならず、入力データとしての暗号文を平文に復元する復号処理にも適用可能である。
【０２７１】
［９．本開示の構成のまとめ］
以上、特定の実施例を参照しながら、本開示の実施例について詳解してきた。しかしながら、本開示の要旨を逸脱しない範囲で当業者が実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本開示の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【０２７２】
なお、本開示の一実施例によれば、例えばクラウドコンピューティング処理を適用したソフトウェア（プログラム）による軽量暗号の暗号処理の高速化が実現される。
具体的には、多数のユーザ端末やセンサが個別の暗号鍵で軽量暗号アルゴリズムにより暗号化したデータを送信し、サーバがこれらの暗号化データを受信し、復号処理シーケンスを規定したプログラムに従ってデータ処理を実行する。復号対象となる複数の暗号化データに対するビットスライス処理によりビットスライス表現データを生成し、暗号化データ各々の暗号鍵に基づくビットトスライス表現鍵を生成し、ビットスライス表現鍵に基づいてラウンド鍵を生成し、ビットスライス表現データのブロック単位の演算、移動処理、ラウンド鍵を適用した演算等を含む復号処理を実行し、復号処理結果に対するデータの逆変換により、多数の暗号化データに対応する多数の平文データを生成することが可能となる。
【０２７３】
また、本開示の一実施例に従った復号処理では、レジスタに格納されたビットスライス表現ブロック単位の演算や移動処理によって処理が行われ、高速に大量のデータを処理することが可能となる。具体的には、Ｉｎｔｅｌ  Ｃｏｒｅ  ｉ７  ８７０プロセッサ上で暗号アルゴリズム［ＰＲＥＳＥＮＴ（鍵長８０ビット）］を実行した場合、１１．０６ｃｙｃｌｅｓ／ｂｙｔｅという高速性を達成している。
【０２７４】
なお、上記の実施例では、主として暗号アルゴリズム［ＰＲＥＳＥＮＴ（鍵長８０ビット）］の実行処理例について説明したが、本開示の処理は、他のアルゴリズムにも適用可能である。例えば本開示の処理に従って暗号アルゴリズム［Ｐｉｃｃｏｌｏ（鍵長８０ビット）］を実行した場合、５．５９ｃｙｃｌｅｓ／ｂｙｔｅという高速性が達成された。特にＰｉｃｃｏｌｏの速度は、従来知られていた同プラットフォーム上（Ｉｎｔｅｌ  Ｃｏｒｅ  ｉ７  ９２０）上での米国政府標準暗号ＡＥＳの速度記録６．９２ｃｙｃｌｅｓ／ｂｙｔｅを超えるものとなっている。
【０２７５】
さらに、本開示の一実施例に従ったビットスライス実装ではＳ−ｂｏｘをテーブル参照でなく論理演算で計算するため、キャッシュ攻撃や仮想マシン間攻撃のようなサイドチャネル攻撃に対する耐性を高めることができる。さらに、クラウドコンピューティング処理におけるソフトウェアでの暗号処理の高速化は、より少ないサイクル数で暗号処理を完了することができ、クラウドやデータセンターの電力消費量を下げることにつながる。
【０２７６】
さらに、本開示の一実施例に従ったシステムでは、クラウドやデータセンターに暗号処理用の専用ハードウェア導入が不要となり、スケーラビリティが向上する。
さらに、軽量暗号にとってこれまで困難であったクラウドでの活用が可能になることで、センサでの軽量暗号実装が促進され、低コスト・低消費電力のセンサネットワークが実現できる。
【０２７７】
なお、本明細書において開示した技術は、以下のような構成をとることができる。
（１）  複数のデータ送信装置の送信する暗号化データを受信する通信部と、
前記通信部を介して受信した複数の暗号化データの復号処理を実行するデータ処理部を有し、
前記データ処理部は、復号処理シーケンスを規定したプログラムに従ってデータ処理を実行する構成であり、
前記データ処理部は、前記プログラムに従って、
復号処理対象となる複数の暗号化データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の暗号化データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、復号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した復号処理と、
前記復号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の暗号化データに対応する複数の平文データを生成するデータ逆変換処理を、
実行する情報処理装置。
【０２７８】
（２）前記通信部は、暗号化データとともに該暗号化データの送信機器の機器ＩＤを受信し、前記データ処理部は、前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を所定の演算で導出し、前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する前記（１）に記載の情報処理装置。
（３）前記データ処理部は、前記復号処理において、前記ビットスライス表現データを構成する各暗号化データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、
によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した復号処理を実行する前記（１）または（２）に記載の情報処理装置。
【０２７９】
（４）前記データ処理部は、前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する前記（１）〜（３）いずれかに記載の情報処理装置。
【０２８０】
（５）暗号化データを生成して送信する複数の送信端末と、
前記複数の送信端末の送信する複数の暗号化データを受信するサーバを有し、
前記サーバは、
復号処理シーケンスを規定したプログラムに従ってデータ処理を実行するデータ処理部を有し、
前記データ処理部は、前記プログラムに従って、
復号処理対象となる複数の暗号化データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の暗号化データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、復号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した復号処理と、
前記復号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の暗号化データに対応する複数の平文データを生成するデータ逆変換処理を、
実行する情報処理システム。
【０２８１】
（６）前記複数の送信端末は、暗号化データとともに該暗号化データの送信機器の機器ＩＤを送信し、前記サーバのデータ処理部は、前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を所定の演算で導出し、前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する前記（５）に記載の情報処理システム。
（７）前記サーバのデータ処理部は、前記復号処理において、前記ビットスライス表現データを構成する各暗号化データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した復号処理を実行する前記（５）または（６）に記載の情報処理システム。
（８）前記データ処理部は、前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する前記（５）〜（７）いずれかに記載の情報処理システム。
【０２８２】
（９）  複数のデータ受信装置に対して暗号化データを送信する通信部と、
前記通信部を介して送信する複数の暗号化データの生成処理を実行するデータ処理部を有し、
前記データ処理部は、暗号処理シーケンスを規定したプログラムに従ってデータ処理を実行する構成であり、
前記データ処理部は、前記プログラムに従って、
暗号化処理対象となる複数の平文データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の平文データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、暗号化処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した暗号処理と、
前記暗号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の平文データに対応する複数の暗号化データを生成するデータ逆変換処理を、
実行する情報処理装置。
【０２８３】
（１０）前記データ処理部は、暗号化データを送信する送信先の機器ＩＤに基づいて各平文データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各暗号化データに対応する暗号鍵を所定の演算で導出し、
前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する前記（９）に記載の情報処理装置。
（１１）前記データ処理部は、前記暗号処理において、前記ビットスライス表現データを構成する各平文データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した暗号化処理を実行する前記（９）または（１０）に記載の情報処理装置。
（１２）前記データ処理部は、前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現鍵ブロック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する前記（９）〜（１１）いずれかに記載の情報処理装置。
【０２８４】
（１３）  複数の暗号化データを生成して送信するサーバと、
前記サーバの送信する暗号化データを受信する複数の受信端末を有し、
前記サーバは、
暗号処理シーケンスを規定したプログラムに従ってデータ処理を実行するデータ処理部を有し、
前記データ処理部は、前記プログラムに従って、
暗号処理対象となる複数の平文データに対するビットスライス処理によりビットスライス表現データを生成するデータ変換処理と、
前記複数の平文データ各々の暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する鍵変換処理と、
前記ビットスライス表現鍵を入力して、暗号処理における各ラウンド用のラウンド鍵を生成する鍵スケジュール処理と、
前記ビットスライス表現データに対して前記ラウンド鍵を適用した暗号処理と、
前記暗号処理の結果に対する前記ビットスライス処理の逆変換により、前記複数の平文データに対応する複数の暗号化データを生成するデータ逆変換処理を、
実行する情報処理システム。
【０２８５】
（１４）前記サーバのデータ処理部は、前記受信端末各々の機器ＩＤに基づいて、各平文データに対応する暗号鍵を記憶部から選択取得、または前記機器ＩＤに基づいて、各平文データに対応する暗号鍵を所定の演算で導出し、前記鍵変換処理において、前記暗号鍵に対するビットスライス処理によりビットスライス表現鍵を生成する前記（１３）に記載の情報処理システム。
【０２８６】
（１５）前記サーバのデータ処理部は、前記暗号化処理において、前記ビットスライス表現データを構成する各平文データの同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現データブロック単位の演算処理と移動処理を適用した暗号化処理を実行する前記（１３）まぬは（１４）いずれかに記載の情報処理システム。
【０２８７】
（１６）前記サーバの前記データ処理部は、前記鍵スケジュール処理において、前記ビットスライス表現鍵を構成する各暗号鍵の同一ビット目またはｎビットおきのビット、ただしｎは２のべき数、によって構成されるビットスライス表現鍵ブック単位の演算処理と移動処理を適用して前記ラウンド鍵を生成する前記（１３）〜（１５）いずれかに記載の情報処理システム。
【０２８８】
さらに、上記した装置およびシステムにおいて実行する処理の方法や、処理を実行させるプログラムも本開示の構成に含まれる。
【０２８９】
また、明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。例えば、プログラムは記録媒体に予め記録しておくことができる。記録媒体からコンピュータにインストールする他、ＬＡＮ（ＬｏｃａｌＡｒｅａＮｅｔｗｏｒｋ）、インターネットといったネットワークを介してプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【０２９０】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【符号の説明】
【０２９１】
１０  クラウド
２０  センサネットワーク
３０  サーバ
３１  暗号鍵
３２  センサＩＤ
３３  暗号化データ
７０  平文データ
８０  入力データ
８１  暗号鍵
８２  平文データ
９０  出力データ
９１  暗号化データ
１００  情報処理装置
１１０  暗号処理部
７０１  ＣＰＵ
７０２  ＲＯＭ
７０３  ＲＡＭ
７０４  バス
７０５  入出力インタフェース
７０６  入力部
７０７  出力部
７０８  記憶部
７０９  通信部
７１０  ドライブ
７１１  リムーバブルメディア
【図１】
2013129056.tif 000003
【図２】
2013129056.tif 000004
【図３】
2013129056.tif 000005
【図４】
2013129056.tif 000006
【図５】
2013129056.tif 000007
【図６】
2013129056.tif 000008
【図７】
2013129056.tif 000009
【図８】
2013129056.tif 000010
【図９】
2013129056.tif 000011
【図１０】
2013129056.tif 000012
【図１１】
2013129056.tif 000013
【図１２】
2013129056.tif 000014
【図１３】
2013129056.tif 000015
【図１４】
2013129056.tif 000016
【図１５】
2013129056.tif 000017
【図１６】
2013129056.tif 000018
【図１７】
2013129056.tif 000019
【図１８】
2013129056.tif 000020
【図１９】
2013129056.tif 000021
【図２０】
2013129056.tif 000022
【図２１】
2013129056.tif 000023
【図２２】
2013129056.tif 000024
【図２３】
2013129056.tif 000025
【図２４】
2013129056.tif 000026
【図２５】
2013129056.tif 000027
【図２６】
2013129056.tif 000028
【図２７】
2013129056.tif 000029
【図２８】
2013129056.tif 000030
【図２９】
2013129056.tif 000031
【図３０】
2013129056.tif 000032
【図３１】
2013129056.tif 000033
【図３２】
2013129056.tif 000034
【図３３】
2013129056.tif 000035
【図３４】
2013129056.tif 000036
【図３５】
2013129056.tif 000037
【図３６】
2013129056.tif 000038
【図３７】
2013129056.tif 000039
【図３８】
2013129056.tif 000040
【図３９】
2013129056.tif 000041
【図４０】
2013129056.tif 000042
【図４１】
2013129056.tif 000043
【図４２】
2013129056.tif 000044
【図４３】
2013129056.tif 000045
【図４４】
2013129056.tif 000046
【図４５】
2013129056.tif 000047
【図４６】
2013129056.tif 000048
【図４７】
2013129056.tif 000049
【図４８】
2013129056.tif 000050
【図４９】
2013129056.tif 000051
【図５０】
2013129056.tif 000052
【図５１】
2013129056.tif 000053
【図５２】
2013129056.tif 000054
【図５３】
2013129056.tif 000055
【図５４】
2013129056.tif 000056
【図５５】
2013129056.tif 000057
【図５６】
2013129056.tif 000058
【図５７】
2013129056.tif 000059
【図５８】
2013129056.tif 000060
【図５９】
2013129056.tif 000061
【図６０】
2013129056.tif 000062
【図６１】
2013129056.tif 000063
【図６２】
2013129056.tif 000064
【図６３】
2013129056.tif 000065
【図６４】
2013129056.tif 000066
【図６５】
2013129056.tif 000067
【図６６】
2013129056.tif 000068
【図６７】
2013129056.tif 000069
【図６８】
2013129056.tif 000070
【図６９】
2013129056.tif 000071
【図７０】
2013129056.tif 000072
【図７１】
2013129056.tif 000073
【国際調査報告】
2013129056.tif 000074
2013129056.tif 000075
2013129056.tif 000076
2013129056.tif 000077
2013129056.tif 000078
2013129056.tif 000079