(57)【要約】【課題】  本発明は、サイドチャネル攻撃耐性と暗号処理性能とを両立させることを目的とする。【解決手段】  本発明は、暗号演算を行う情報処理装置であって、暗号ジョブを保持する保持手段と、前記保持手段から一つ以上の暗号ジョブを取得する取得手段と、前記一つ以上の暗号ジョブの暗号の演算から一つ以上のブロック暗号演算を作成する制御手段と、前記ブロック暗号演算が一つの時はダミーのブロック暗号演算を作成して、複数のブロック暗号演算のそれぞれの処理を所定の順序で行う演算手段と、を有することを特徴とする。【選択図】  図１
2020170073.tif 000002
【特許請求の範囲】
【請求項１】
暗号演算を行う情報処理装置であって、
暗号ジョブを保持する保持手段と、
前記保持手段から一つ以上の暗号ジョブを取得する取得手段と、
前記一つ以上の暗号ジョブの暗号の演算から一つ以上のブロック暗号演算を作成する制御手段と、
前記ブロック暗号演算が一つの時はダミーのブロック暗号演算を作成して、複数のブロック暗号演算のそれぞれの処理を所定の順序で行う演算手段と、を有することを特徴とする情報処理装置。
【請求項２】
前記取得手段は、
前記保持手段にキューイングされているジョブの数を管理する管理手段と、
前記保持手段からジョブを引き出すデキュー手段と、を有し、
前記デキュー手段はデキューした時の前記キューイングされているジョブの数が０であるときは、所定時間だけ待機してから前記暗号ジョブを取得することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御手段は、
前記取得手段から一つ以上の暗号ジョブを受信する受信手段と、
前記暗号ジョブを解析して初期値、鍵情報、暗号利用モード及びブロック入出力バッファ情報を取り出して暗号処理パラメータを作成する解析手段と、を有し、
前記暗号処理パラメータに対応した一つ以上のブロック暗号演算を管理するためのブロック暗号演算パラメータを作成し、前記ブロック暗号演算をブロックの単位で制御し、
前記暗号ジョブの処理が完了したことを前記取得手段へ通知することを特徴とする請求項１または請求項２に記載の情報処理装置。
【請求項４】
前記演算手段は、
前記ブロック暗号演算パラメータを取得し、前記ブロック暗号演算パラメータが一つである時はダミーの値を用いてブロック暗号演算パラメータを作成して、複数のブロック暗号演算をラウンド処理の単位で所定の順に実行し、
前記複数のブロック暗号演算の状態を保持し、
前記複数のブロック暗号演算のラウンド鍵を管理し、
所定のブロック暗号の方式で定義されたラウンド処理の演算を行うことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記演算手段は、前記取得手段から取得した全ての暗号ジョブが完了した場合に、ジョブの完了を前記取得手段へ通知することを特徴とする請求項１乃至請求項４のいずれか１項に記載の情報処理装置。
【請求項６】
前記演算手段は、前記取得手段から取得された暗号ジョブの一つの処理が完了するごとにジョブの完了を前記取得手段へ通知することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記ブロック暗号演算パラメータには、
暗号化対象データと、
鍵情報と、
ブロック暗号種別と、が含まれ、前記ブロック暗号種別には、暗号のアルゴリズムと鍵長とが含まれることを特徴とする請求項１乃至請求項６のいずれか１項に記載の情報処理装置。
【請求項８】
前記演算手段は、乱数を用いて前記複数のブロック暗号演算の実行の順序を決定することを特徴とする請求項１乃至請求項７のいずれか１項に記載の情報処理装置。
【請求項９】
前記演算手段は、ラウンド処理ごとに、乱数を用いてブロック暗号演算の実行の順序を決定することを特徴とする請求項１乃至請求項７のいずれか１項に記載の情報処理装置。
【請求項１０】
前記演算手段は、ラウンド処理の開始のタイミングをランダムに変更することを特徴とする請求項１乃至請求項９のいずれか１項に記載の情報処理装置。
【請求項１１】
前記演算手段は、取得した前記ブロック暗号演算パラメータが一つである場合、ダミーのブロック暗号演算パラメータを作成しないように制御することを特徴とする請求項３に記載の情報処理装置。
【請求項１２】
暗号演算を行う情報処理方法であって、
保持手段が、暗号ジョブを保持する保持工程と、
取得手段が、前記保持工程で保持されている一つ以上の暗号ジョブを取得する取得工程と、
制御手段が、前記一つ以上の暗号ジョブの暗号の演算から一つ以上のブロック暗号演算を作成する制御工程と、
演算手段が、前記ブロック暗号演算が一つの時はダミーのブロック暗号演算を作成して、複数のブロック暗号演算のそれぞれの処理を所定の順序で行う演算工程と、を有することを特徴とする情報処理方法。
【請求項１３】
コンピュータを、
暗号演算を行う情報処理装置であって、
暗号ジョブを保持する保持手段と、
前記保持手段から一つ以上の暗号ジョブを取得する取得手段と、
前記一つ以上の暗号ジョブの暗号の演算から一つ以上のブロック暗号演算を作成する制御手段と、
前記ブロック暗号演算が一つの時はダミーのブロック暗号演算を作成して、複数のブロック暗号演算のそれぞれの処理を所定の順序で行う演算手段と、を有することを特徴とする情報処理装置として機能させるためのコンピュータのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号演算を行う情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
情報処理装置間で情報をやり取りする際に、情報漏洩を防止するために暗号化技術が用いられている。近年、微小な漏洩電磁波測定技術の進歩に伴い、非特許文献１に示された差分電力解析に代表されるサイドチャネル攻撃（以降ＳＣＡと呼ぶ）を用いて、情報処理装置が暗号化に使用している鍵情報をリアルタイムで盗み出すことが可能となっている。ＳＣＡを用いた鍵情報盗聴を防止する技術として、例えば特許文献１では複数のダミー鍵を準備し、正規鍵による暗号処理とダミー鍵による暗号処理を交互に行って相関を低下させることで鍵の盗聴を防ぐ技術が開示されている。また、特許文献２ではＡＥＳの各ラウンドを構成する演算間に不特定のタイミングで逆演算を加えることで相関を低下させる技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−６７９４２号公報
【特許文献２】特許第５４３３４９８号公報
【非特許文献】
【０００４】
【非特許文献１】Ｐａｕｌ  Ｋｏｃｈｅｒ，  Ｊｏｓｈｕａ  Ｊａｆｆｅ，  ａｎｄ  Ｂｅｎｊａｍｉｎ  Ｊｕｎ，“Ｉｎｔｒｏｄｕｃｔｉｏｎ  ｔｏ  Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ  ａｎｄ  Ｒｅｌａｔｅｄ  Ａｔｔａｃｋｓ”，  １９９８
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来技術では正規の暗号化処理と非正規の暗号化処理とを常に同時に実行しなければならないため、処理性能が低下するという課題があった。本発明は、上記課題を鑑みてなされたものであり、サイドチャネル攻撃耐性と暗号処理性能とを両立させることを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、暗号演算を行う情報処理装置であって、暗号ジョブを保持する保持手段と、前記保持手段から一つ以上の暗号ジョブを取得する取得手段と、前記一つ以上の暗号ジョブの暗号の演算から一つ以上のブロック暗号演算を作成する制御手段と、前記ブロック暗号演算が一つの時はダミーのブロック暗号演算を作成して、複数のブロック暗号演算のそれぞれの処理を所定の順序で行う演算手段と、を有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、サイドチャネル攻撃耐性と暗号処理性能とを両立させることが出来る。
【図面の簡単な説明】
【０００８】
【図１】実施形態１の全体構成を表すブロック図
【図２】ブロック間演算制御部の内部構成
【図３】ブロック暗号演算部の内部構成
【図４】実施形態１の全体動作を表すフローチャート
【図５】暗号ジョブと暗号処理パラメータとの関係を示す図
【図６】暗号処理パラメータとブロック暗号演算パラメータとの関係を示す図
【図７】暗号ジョブ取得処理のフローチャート
【図８】複数ジョブ取得処理のフローチャート
【図９】ブロック暗号演算処理のフローチャート
【図１０】Ｓ１００１にて最初の演算実行であるかどうかを判断するフローチャート
【図１１】Ｓ１１０１において２つのブロック暗号演算のラウンドカウンタの比が規定値以上であるかどうかを判断するフローチャート
【図１２】暗号ジョブが一つの場合と二つの場合のブロック暗号演算部の動作を示す図
【図１３】実施形態２の構成
【図１４】実施形態２の全体動作を表す図
【図１５】ブロック暗号演算処理群制御ループ内処理
【図１６】暗号ジョブ取得処理のフローチャート
【図１７】複数ジョブ取得処理のフローチャート
【発明を実施するための形態】
【０００９】
（実施形態１）
第一実施形態について説明する。まず、本実施形態の全体構成について説明する。図１は本実施形態の全体構成を表すブロック図である。同図において１００は情報処理装置である。１２０は暗号処理クライアントであり暗号処理を起動するための暗号ジョブを作成する。１１０は暗号処理部であり暗号処理クライアント１２０から受け取った暗号ジョブを実行する。次に暗号処理部１１０の構成について説明する。１１１は暗号ジョブ保持部であり、暗号処理クライアント１２０から送付された暗号ジョブをキューイングしジョブ取得通知を発行する。１１２は暗号ジョブ取得部であり、暗号ジョブ保持部１１１からジョブ取得通知を受け取ると、暗号ジョブ保持部１１１にキューイングされた暗号ジョブを取得する。１１３はブロック間演算制御部であり暗号ジョブ取得手段１１２から一つまたは二つの暗号ジョブを受け取る。ブロック間演算制御部１１３は暗号ジョブを解析して暗号処理パラメータを作成する。受け取った暗号ジョブが二つの時は第一の暗号処理パラメータと第二の暗号処理パラメータを作成する。受け取った暗号ジョブが一つの時は第一の暗号処理パラメータのみを作成する。ブロック間演算制御部１１３は作成した暗号処理パラメータに沿って暗号処理をブロックごとに分解してブロック暗号演算パラメータを都度生成する。１１４はブロック暗号演算部である。ブロック暗号演算部１１４は、ブロック間演算制御部１１３から受け取ったブロック暗号演算パラメータが一つの時は自らダミー暗号パラメータを作成してこれを第二のブロック暗号演算パラメータとして用いる。ブロック暗号演算部１１４は第一及び第二のブロック暗号演算パラメータに対応する第一及び第二のラウンド処理をラウンド関数単位で所定の順序で実行する。尚、ブロック暗号演算部１１４が扱うアルゴリズムはＤＥＳ、ＡＥＳ等、ラウンド関数を用いる一般に知られたものを用いることが可能であり、特に限定されない。以上で本実施形態の全体構成についての説明を終わる。次に各部の内部構成について説明するが、暗号ジョブ保持部１１１及び暗号ジョブ取得部１１２は分解可能な構成を持たないため、説明を省く。最初にブロック間演算制御部１１３の構成について説明する。図２はブロック間演算制御部１１３の内部構成を表す。同図において２０１はジョブ命令受信部であり、暗号ジョブ取得部１１２から第一の暗号ジョブまたは第一及び第二の暗号ジョブを受け取る。（以降、第一の暗号ジョブまたは第一と第二の暗号ジョブのペアを暗号ジョブ群と呼ぶ。同様に「第一のＸＸまたは第一と第二のＸＸのペア」を一般化してＸＸ群と呼ぶことにする。）２０２はジョブ命令解析部であり、ジョブ命令受信部２０１から暗号ジョブ群を取得して解析し、対応する初期値群、鍵情報群、暗号利用モード群及びブロック入出力バッファ情報群を取り出して暗号処理パラメータ群を作成する。２０３はシーケンス制御部であり、ジョブ命令解析部２０２から暗号処理パラメータ群を取得する。シーケンス制御部２０３は取得した暗号処理パラメータ群を用いてブロック暗号演算パラメータ群を構成する。シーケンス制御部２０３はこれらのパラメータ群をブロック暗号演算部１１４へ渡し、対応したブロック暗号演算処理群の実行を指示する。ブロック暗号演算部１１４がブロック暗号演算処理群を終了するとシーケンス制御部２０３はブロック出力バッファ群へ結果を出力する。更にブロック入力バッファ群から次の入力を読み込んでブロック暗号演算パラメータ群を更新し、再度ブロック暗号演算部１１４にブロック暗号演算処理群の実行を指示する。シーケンス制御部２０３はブロック暗号演算処理群の終了を検知して完了通知を発行する。２０４はジョブ命令完了通知部であり、シーケンス制御部２０３から完了通知を受け取ると暗号ジョブ取得部１１２に対してジョブの完了を通知する。以上でブロック間演算制御部１１３の内部構成の説明を終わる。最後にブロック暗号演算部１１４の内部構成について説明する。図３はブロック暗号演算部１１４の内部構成を表す。３０１はブロック暗号演算制御部であり、ブロック間演算制御部１１３からブロック暗号演算処理群開始の指示を受けて制御を開始する。ブロック暗号演算制御部３０１は、ブロック間演算制御部１１３から受け取ったブロック暗号演算パラメータ群を解析し、２つのパラメータを含む場合は、これらを第一及び第二のブロック暗号演算パラメータとして用いる。受け取ったパラメータが一つである時は、これを第一のブロック暗号演算パラメータとして用い、ダミーの値を使って第二のブロック暗号演算パラメータを作成する。３０２は第一中間値保持部であり第一のブロック暗号演算処理のラウンド関数実行結果を格納する。３０３は第二中間値保持部であり第二のブロック暗号演算処理のラウンド関数実行結果を格納する。尚、ブロック暗号演算制御部３０１は演算開始時に第一中間値保持部３０２及び第二中間値保持部３０３を初期化する。３０４は第一鍵スケジューラであり第一のブロック暗号演算処理で用いる拡大鍵を生成・管理する。３０５は第二鍵スケジューラであり第二のブロック暗号演算処理で用いる拡大鍵を生成・管理する。尚、ブロック暗号演算制御部３０１は演算開始時に第一鍵スケジューラ３０４及び第二鍵スケジューラ３０５を初期化する。３０６はラウンド関数演算部であり、ブロック暗号演算制御部３０１からラウンド関数演算で用いる中間値及び拡大鍵を取得する。同時にブロック暗号演算制御部３０１から実行すべきラウンド関数を表すラウンド関数識別子を取得する。ラウンド関数演算部３０６は取得したラウンド関数識別子に該当するラウンド関数を選択してラウンド関数演算を実行する。以上で各部の内部構成の説明を終わる。
【００１０】
次に図１から図３を用いて説明した本実施形態の構成について、その動作を詳細に説明する。なお、ここでの説明は暗号化を対象に行うが、復号にも全く同様に適応できることは明らかである。まず全体動作について説明した後、必要に応じて個別動作を説明する。
【００１１】
図４は本実施形態の全体動作を表すフローチャートである。Ｓ４０１では暗号ジョブ保持部１１１及び暗号ジョブ取得部１１２が連携して、暗号処理クライアント１２０から渡される暗号ジョブの取得処理を行う。ここでの処理の詳細については後述する。暗号ジョブ取得部１１２はＳ４０１において取得した暗号ジョブ群をブロック間演算制御部１１３へ渡す。Ｓ４０２ではブロック間演算制御部１１３のジョブ命令受信部２０１が前記暗号ジョブ群を受け取り、ジョブ命令解析部２０２へ暗号処理パラメータ群の取得を指示する。ジョブ命令解析部２０２は受け取った暗号ジョブ群から暗号処理パラメータ群を取り出す。ここで、暗号ジョブと暗号処理パラメータの関係は図５のように表される。同図において５００及び５１０はそれぞれ暗号処理パラメータ及び暗号ジョブである。暗号処理パラメータ５００は同図に示した構成を持つ。５０１は暗号利用モードでありＥＣＢ、ＣＢＣ等一般に知られた利用モードを表す。５０２は初期化ベクタであり、暗号利用モード５０１に応じて必要な場合はジョブ命令解析部２０２が作成する。初期化ベクタは乱数を用いる等、一般に良く知られた方法を用いることが可能である。５０３は鍵情報であり、この暗号処理パラメータで制御される一連のブロック暗号演算で共通に用いられる。５０４は処理ブロック数であり、ブロック暗号演算数に一致する。５０５はブロック入出力バッファアドレスであり、各ブロック暗号演算の入出力値を格納するバッファのアドレスである。暗号ジョブ５１０の形態は特に限定しないが、同図に示したように暗号利用モード５０１、鍵情報５０３、処理ブロック数５０４及びブロック入出力バッファアドレス５０５が取得できる必要がある。再び図４に戻って動作説明を続ける。ジョブ命令解析部２０２はＳ４０２において作成した暗号処理パラメータ群をシーケンス制御部２０３へ渡す。シーケンス制御部２０３はＳ４０３においてブロック暗号演算パラメータ群を初期化する。ここに暗号処理パラメータとブロック暗号演算パラメータの関係は図６のように表される。同図において６００はブロック暗号演算パラメータである。６０１は暗号化対象データである。６０２は鍵情報である。６０３はブロック暗号種別であり、例えばＤＥＳ、ＡＥＳなど一般に知られたものを用いる。尚、ブロック暗号種別６０３はアルゴリズムと共に鍵長も指示する。Ｓ４０３における初期化時は図６に表された関係の通り、暗号処理パラメータ５００からブロック暗号演算パラメータ６００へのコピーをシーケンス制御部２０３が行う。尚、暗号化対象データ６０１の初期化の必要性は暗号利用モード５０１に応じて、シーケンス制御部２０３が判断する。再び図４に戻って動作説明を続ける。シーケンス制御部２０３はＳ４０３におけるブロック暗号演算パラメータ群の初期化が完了するとＳ４０４からＳ４１５で構成されるブロック暗号演算処理群制御ループを実行する。このループは、暗号ジョブ群を構成する全ての暗号ジョブが完了するまで継続する。即ち、二つの暗号ジョブが存在する場合は、処理ブロック数５０４が大きい方の暗号ジョブが完了するまで継続することになる。以下のブロック暗号演算処理群制御ループの説明において、特に断らない限り実行主体はシーケンス制御部２０３であるものとする。Ｓ４０５において第一の暗号ジョブが完了しているかどうかを判断する。もし完了していない場合はＳ４０６で第一の暗号処理パラメータ５００のブロック入出力バッファアドレス５０５における現在のブロックに該当するブロック入力アドレスへアクセスし、入力値を取得する。次にＳ４０７において第二の暗号ジョブが完了しているかどうかを判断する。もし、暗号ジョブ群がただ一つの暗号ジョブから構成されている場合は常に完了と判断する。もし完了していない場合はＳ４０８で第二の暗号処理パラメータ５００のブロック入出力バッファアドレス５０５における現在のブロックに該当するブロック入力アドレスへアクセスし、入力値を取得する。次にＳ４０９ではブロック暗号演算パラメータ群を更新する。更新対象は暗号化対象データ６０１である。更新方法は暗号利用モード５０１に応じて異なる方法を用いる。例えばＥＣＢの場合は、Ｓ４０６またはＳ４０８において取得した入力値をそのまま代入する。一方ＣＢＣの場合は、Ｓ４０６またはＳ４０８において取得した入力値と一つ前のブロック暗号演算結果との排他論理和をとってから代入する。（最初のブロックである時は、一つ前のブロック暗号演算結果の代わりに初期化ベクタ５０２を用いる。）何れにしても一般に知られた暗号利用モード全てを適用可能であり、特定のものに限定されることはない。次にＳ４１０では、Ｓ４０９で更新したブロック暗号演算パラメータ群をブロック暗号演算部１１４へ渡してブロック暗号演算処理群の実行を指示する。Ｓ４１０におけるブロック暗号演算処理はブロック暗号演算部１１４が行うが、詳細については後述する。Ｓ４１０におけるブロック暗号演算処理が終わると、ブロック暗号演算部１１４から処理結果を取得する。Ｓ４１１では第一の暗号ジョブが完了しているかどうかを判断する。もし完了していない場合はＳ４１２において、Ｓ４１０で取得した演算結果を暗号利用モード５０１に応じて必要な加工を加える。そしてその出力を第一の暗号処理パラメータ５００のブロック入出力バッファアドレス５０５における現在のブロックに該当するブロック出力アドレスへ格納する。尚、Ｓ４１２における演算結果の加工方法は一般に知られた暗号利用モードにおける定義全てを適用可能であり、特定のものに限定されることはない。Ｓ４１３では第二の暗号ジョブが完了しているかどうかを判断する。なお、暗号ジョブ群がただ一つの暗号ジョブから構成されている場合は常に完了と判断する。もし完了していない場合はＳ４１４において、第二のブロック出力バッファに対してＳ４１２と同様の手法を用いて出力値を格納する。以上の処理を暗号ジョブ群全てに適用したら、Ｓ４０４からＳ４１５で構成されるブロック暗号演算処理群制御ループを終了する。ブロック暗号演算処理群制御ループが完了すると、Ｓ４０２においてブロック間演算制御部１１３が受け取った全ての暗号ジョブ群が完了したことを意味する。Ｓ４１６ではシーケンス制御部２０３が暗号ジョブ群の完了をジョブ命令完了通知部２０４へ通知する。その後、ジョブ命令完了通知部２０４は暗号ジョブ完了通知を暗号ジョブ取得部１１２へ通知する。処理は再びＳ４０１の暗号ジョブ取得処理に戻る。以上で全体動作の説明を終わる。
【００１２】
次にＳ４０１における暗号ジョブ取得処理について説明する。図７は暗号ジョブ取得処理Ｓ４０１を表すフローチャートである。以下の図７の説明において、特に断らない限り実行主体は暗号ジョブ取得部１１２であるものとする。システム動作が開始すると、Ｓ７０１及びＳ７０２において実行ジョブ数及び待機ジョブ数をクリアする。（ここに実行ジョブ数は、ブロック間演算制御部１１３が現在実行しているジョブの数を表す。また待機ジョブ数は暗号ジョブ保持部１１１にキューイングされているジョブの数を表す。）その後Ｓ７０３で通知待ちループに入る。今、暗号処理クライアント１２０が暗号ジョブを生成し暗号ジョブ保持部１１１へ送付すると、暗号ジョブ保持部１１１がジョブ取得通知を暗号ジョブ取得部１１２へ送る。すると暗号ジョブ取得部１１２は通知待ちＳ７０３から抜けて、受け取った通知がジョブ取得通知かどうかをＳ７０４にて判断する。前述した通り、ジョブ取得通知を仮定しているのでここでは真と判断するものとする。次にＳ７０５において実行ジョブ数が０であるかどうかを判断する。実行ジョブ数が０でない時は、Ｓ７０７において待機ジョブ数をインクリメントして再びＳ７０３の通知待ちに入る。一方Ｓ７０５において実行ジョブ数が０である時はＳ７０６の複数ジョブ取得処理に入る。ここで複数ジョブ取得処理Ｓ７０６について図８のフローチャートを用いて説明する。以下の図８の説明において、特に断らない限り実行主体は暗号ジョブ取得部１１２であるものとする。Ｓ８０１では暗号ジョブ保持部１１１をデキューして暗号ジョブを一つ取得する。次にＳ８０２では所定時間だけ追加のジョブ取得通知の知らせを待つ。ここに通知待ちを行う時間は情報処理装置１００の性能を損なわない範囲で任意の待ち時間を設定することが出来る。例えば一定時間を設定することが出来る。また、情報処理装置が持つ他の暗号処理以外の処理割合を参照して、装置の処理能力が余っている場合は待ち時間を長く設定することが出来る。Ｓ８０２の通知待ちから抜けると、Ｓ８０３において所定時間以内にジョブ取得通知を受け取ったかどうかを判断する。もし新たな取得通知を受け取っていた場合は、Ｓ８０４において暗号ジョブ保持部１１１をデキューして二つ目の暗号ジョブを取得する。次にＳ８０５では実行ジョブ数を２に設定する。一方、Ｓ８０３において所定時間以内に通知が来なかったか、またはジョブ取得通知を受け取っていないと判断した時は、Ｓ８０６において実行ジョブ数を１に設定する。以上で複数ジョブ取得処理Ｓ７０６の説明を終わる。再び図７に戻って暗号ジョブ取得処理Ｓ４０１の説明を続ける。Ｓ７０６における複数ジョブ取得処理によって取得した一つまたは二つの暗号ジョブをＳ７０８においてブロック間演算制御部１１３へ送付する。その後、暗号ジョブ取得部１１２は再びＳ７０３における通知待ち状態に戻る。また、前述した通り暗号ジョブ群を受け取ったブロック間暗号制御部１１３は暗号処理パラメータ取得Ｓ４０２を実行する。次にＳ７０３において暗号ジョブ取得部１１２がブロック間演算制御部１１３からジョブ完了通知を受け取った場合の動作について説明する。この場合、Ｓ７０４におけるジョブ取得通知判定は偽となり、Ｓ７１０の処理に進む。Ｓ７１０で実行ジョブ数を０クリアした後、Ｓ７１１では待機ジョブ数が０であるかどうか判断する。待機ジョブ数が０である時はそのままＳ７０３の通知待ちに戻る。一方、Ｓ７１１において待機ジョブ数が０でない時は、続けてＳ７１２にて待機ジョブ数が２以上であるかどうかを判断する。ここで待機ジョブ数が２以上であったら、Ｓ７１４において暗号ジョブ保持部１１１から２つの暗号ジョブをデキューする。そしてＳ７１５において待機ジョブ数を−２しＳ７１６において実行ジョブ数を＋２して、暗号ジョブ送付（Ｓ７０８）を行い、Ｓ７０３の通知待ちに戻る。一方、Ｓ７１２において待機ジョブ数が１であると判断された場合、Ｓ７０６において複数ジョブ取得処理を行う。この処理は前述したので説明を省く。複数ジョブ取得処理（Ｓ７０６）が完了した後は、Ｓ７０８において暗号ジョブを送付してＳ７０３の通知待ちに戻る。以上で暗号ジョブ取得処理Ｓ４０１の説明を終わる。
【００１３】
次にＳ４１０におけるブロック暗号演算処理の実行について図９のフローチャートを用いて説明する。ブロック暗号演算制御部３０１は、Ｓ９０１においてブロック暗号演算パラメータ群を受け取る。次にＳ９０２では受け取ったパラメータが一つであるかどうかを判断する。ここで一つであると判断した場合は、ブロック暗号演算制御部３０１はＳ９０３からＳ９０５において第二のブロック暗号演算パラメータを作成する。まずＳ９０３では乱数を用いて暗号化対象データ６０１を作成する。次にＳ９０４では乱数を用いて鍵情報６０２を作成する。最後にＳ９０５ではＳ９０１で取得した第一のブロック暗号演算パラメータからブロック暗号種別６０３をコピーする。尚、Ｓ９０３及びＳ９０４で用いる乱数は一般に知られているどのような発生方式を用いても良く、特に限定されるわけではない。次にブロック暗号演算制御部３０１はＳ９０６において第一及び第二の暗号化対象データをそれぞれ第一中間値保持部３０２及び第二中間値保持部３０３に設定する。次にブロック暗号演算制御部３０１はＳ９０７において第一及び第二の鍵情報を用いてそれぞれ第一鍵スケジューラ３０４及び第二鍵スケジューラ３０５を初期化する。次にブロック暗号演算制御部３０１はＳ９０８において第一及び第二のラウンドカウンタ値を０に設定する。ここにラウンドカウンタは次に行うラウンド関数を表す識別子であり、ブロック暗号種別６０３によってその回数が規定される。例えばブロック暗号種別６０３がＡＥＳ−１２８ｂｉｔであればラウンド回数は１０回と決まっており、ラウンドカウンタは０から９の値をとる。次にブロック暗号演算制御部３０１はＳ９０９において実行する演算の決定処理を行う。ここで演算の決定処理Ｓ９０９について図１０及び図１１のフローチャートを用いて二種類の方式を説明する。図１０のフローでは、ブロック暗号演算制御部３０１がＳ１００１にて最初の演算実行であるかどうかを判断する。具体的には第一のラウンドカウンタと第二のラウンドカウンタが共に０であれば、最初の演算実行となる。Ｓ１００１で最初の演算であると判断すると、ブロック暗号演算制御部３０１はＳ１００２において乱数を用いて第一のブロック暗号演算と第二のブロック暗号演算のどちらを先に行うか決定する。一方、Ｓ１００１で二回目以降の演算であると判断された場合は、前回の処理と異なる方のブロック暗号演算を選択する。即ち図１０のフローでは、第一或いは第二のどちらのブロック暗号演算から開始するかを乱数で選択し、それ以後の処理は交番で実行する方法となる。図１１のフローではブロック暗号演算制御部３０１がＳ１１０１において２つのブロック暗号演算のラウンドカウンタの比が規定値以上であるかどうかを判断する。ここに既定値はどちらかの演算への偏りを補正するためのものであり、任意の値を設定可能である。ブロック暗号演算制御部３０１はＳ１１０１で規定値以上であると判断した場合、偏りを補正するためにＳ１１０３でラウンドカウンタが小さい方のブロック暗号演算を選択する。そうでない時はＳ１１０２において乱数を用いて対象のブロック暗号演算を選択する。尚、図１０及び図１１の何れのフローにおいても、選択した処理が既に終了していた場合は、もう一方の処理を選択するものとする。以上で演算の決定処理Ｓ９０９についての説明を終わり、再び図９に戻ってブロック暗号演算処理の実行Ｓ４１０についての説明を続ける。尚、Ｓ９０９では第一のブロック暗号演算処理が選択されたと仮定する。ブロック暗号演算制御部３０１はＳ９１０にて第一中間値保持部３０２から中間値を取得し、Ｓ９１１では第一鍵スケジューラ３０４からラウンド鍵を取得し、Ｓ９１２では第一のラウンドカウンタ値を取得する。ブロック暗号演算制御部３０１はこれらの値をラウンド関数演算部３０６へ渡し、Ｓ９１３でラウンド関数演算をキックする。ラウンド関数演算部３０６はＳ９１３においてブロック暗号種別６０３及びラウンドカウンタで定まるラウンド関数演算を実行する。ブロック暗号演算制御部３０１はＳ９１４にて演算実行結果を受け取り第一中間値保持部３０２を更新する。Ｓ９１５ではブロック暗号演算制御部３０１が第一のラウンドカウンタをインクリメントする。Ｓ９１６ではブロック暗号演算制御部３０１が全てのブロック暗号演算処理が完了しているかどうかを判断する。具体的には２つのラウンドカウンタ値が終了値に達しているかどうかで判断する。まだ処理が残っている場合はＳ９０９に戻って処理を続ける。一方、Ｓ９１６にて処理が完了していると判断した場合は、ブロック暗号演算制御部３０１はＳ９１７にて演算結果の出力を行う。Ｓ９０１において２つのブロック暗号演算を指示されていた場合は、第一中間値保持部３０２及び第二中間値保持部３０３から２つの中間値を取得する。一つだけ指示されていた場合は、第一中間値保持部３０２から中間値を取得する。ブロック暗号演算制御部３０１は取得した中間値群を演算結果群として、ブロック間演算制御部１１３へ渡す。以上でブロック暗号演算処理の実行Ｓ４１０に関する動作説明を終わり、全ての動作説明を終わる。
【００１４】
本実施形態における幾つかの応用的な事項について付け加えておく。第一に、Ｓ９１３におけるラウンド関数実行処理の開始タイミングをランダムに変更することでＳＣＡ攻撃に対する耐性を更に向上させることが可能である。第二にブロック暗号演算部１１４において中間値保持部（３０２、３０３）及び鍵スケジューラ（３０４、３０５）をＮ組に増やすことで、Ｎ組の暗号ジョブを並列化できることは明らかである。第三にブロック暗号演算部１１４における処理においてＳ９０２からＳ９０５の処理を省くことで低消費電力の要求に対応可能となる。
【００１５】
図１２は、暗号ジョブが一つの場合と二つの場合のブロック暗号演算部１１４の動作を模式的に表す。同図から明らかなように暗号ジョブが２つの時はダミージョブを省くことで無駄のない並列処理を実現する。以上で本実施形態の説明を終わる。
【００１６】
（実施形態２）
第二実施形態について説明する。尚、本実施形態の説明に用いる図面に関し、同じ機能を持つものについては同じ参照符号をつけ、説明を省く。図１３は本実施形態の構成を表す。同図において第一の実施形態と異なるのは、暗号ジョブ取得部１３０１及びシーケンス制御部１３０２のみである。全体構成は第一の実施形態と変わらないため構成の説明は省き、本実施形態の動作についてのみ説明する。図１４は本実施形態の全体動作を表すフローチャートである。以下、図１４を用いた説明において、特に断らない限り処理の実行主体はシーケンス制御部１３０２であるものとする。Ｓ１４０１では暗号ジョブ取得部１３０１が暗号ジョブ取得処理を行う。ここで暗号ジョブ取得処理Ｓ１４０１について図１６のフローチャートを用いて説明する。以下、図１６を用いた説明において、特に断らない限り処理の実行主体は暗号ジョブ取得部１３０１であるものとする。Ｓ１６０１において通知がジョブ取得通知であった場合は、Ｓ１６０２にて待機ジョブ数を＋１する。一方、Ｓ１６０１において通知がジョブ完了通知であった場合は、Ｓ１６０３において実行ジョブ数を−１する。次にＳ１６０４において待機ジョブ数が０であった場合は、Ｓ７０３に戻って通知待ちとなる。一方、Ｓ１６０４において待機ジョブ数が０でなかった場合は、Ｓ１６０５へ分岐する。尚、Ｓ１６０２を通過した時もＳ１６０５へ分岐する。Ｓ１６０５において実行ジョブ数が０である時は、複数ジョブ取得処理Ｓ１６０６を実行する。ここで複数ジョブ取得処理Ｓ１６０６について、図１７のフローチャートを用いて説明する。以下、図１７を用いた説明において、特に断らない限り処理の実行主体は暗号ジョブ取得部１３０１であるものとする。Ｓ１７０１において待機ジョブ数が２つ以上あると判断した場合は、Ｓ１７０４で暗号ジョブを２つ取得して実行ジョブ数と待機ジョブ数をそれぞれ更新する。一方、Ｓ１７０１において待機ジョブ数が１以下であると判断した場合はＳ８０３からＳ８０６の処理を行う。この処理は既に図８において説明済みであるのでここでは説明を省く。以上で、複数ジョブ取得処理Ｓ１６０６の説明を終わり、再び図１６に戻って暗号ジョブ取得処理Ｓ１４０１の説明を続ける。Ｓ１６０５において実行ジョブ数が０でない時はＳ１６０７にて実行ジョブ数が１に等しいかどうかを確認する。等しい場合は、Ｓ１６０８にて暗号ジョブ保持部１１１から暗号ジョブをデキューする。次にＳ１６０９で待機ジョブ数をデクリメントする。次にＳ１６１０にて実行ジョブ数をインクリメントする。Ｓ１６０６またはＳ１６１０の処理を行うと、Ｓ７０８にて暗号ジョブを送付した後Ｓ７０３の通知待ちに戻る。一方、Ｓ１６０７にて実行ジョブ数が規定値に達していると判断した場合もＳ７０３の通知待ちに戻る。以上で暗号ジョブ取得処理Ｓ１４０１の説明を終わり、再び図１４に戻って全体動作の説明を続ける。Ｓ１４０２では内部ステータスを検査して暗号ジョブ処理中かどうかを判断する。処理中であった場合は、Ｓ１４０３にて、取得した暗号ジョブを退避して再びＳ１４０１へ戻る。Ｓ１４０２において内部ステータスがジョブ待ちであった時はＳ４０３を経てＳ４０４からＳ４１５で構成されるループ処理に入る。ここで、Ｓ４０４からＳ４１５で構成されるループ処理とＳ１４０１からＳ１４０３の処理は並列に動作可能であるものとする。Ｓ１４０４では内部ステータスをジョブ処理中に設定する。Ｓ１４０５では退避中の暗号ジョブがあるかどうかをチェックする。退避ジョブがある場合はＳ１４０６にて退避中の暗号ジョブを用いてブロック暗号演算パラメータを初期化する。初期化方法はＳ４０３と同じであるので省略する。次にＳ１４０７のブロック暗号演算処理群制御ループ内処理を実行する。ここにＳ１４０７は図１５に示した通りＳ４０５からＳ４１４で構成される処理であり、既に説明済みなので省略する。次にＳ１４０８では終了した暗号ジョブがあるかどうかを確認する。終了ジョブがある時はＳ１４０９において、ジョブ完了通知部２０４を介してジョブ完了通知を暗号ジョブ取得部１３０１へ通知する。ただし、Ｓ１４０８で複数のジョブの終了が検出された場合は、終了したジョブの数と同じ回数だけジョブ完了通知を送付する。Ｓ４０４からＳ４１５で構成されるループ処理を脱したら、Ｓ１４１０にて内部ステータスをジョブ待ちに設定してＳ１４０１へ戻る。以上で本実施形態の動作説明を終わる。本実施形態における幾つかの応用的な事項について付け加えておく。まず、第一実施形態の最後に述べた３つの項目は本実施形態にも明らかに適用可能である。これらに加えて、本実施形態ではＳ１４０６において新たなジョブが加わった時、Ｓ４０５の直前で第一の暗号ジョブと第二の暗号ジョブを入れ替えることが出来る。これによりブロック暗号演算部１１４での使用リソースとブロック暗号演算パラメータとの組み合わせ関係がスイッチされるため、何らかの要因で相関を上げてしまうような偏りが生じた場合にそれをリセットできる。以上で本実施形態の説明を終わる。
【００１７】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００１８】
１００  情報処理装置
１１０  暗号処理部
１１１  暗号ジョブ保持部
１１２  暗号ジョブ取得部、
１１３  ブロック間演算制御部
１１４  ブロック暗号演算部
【図１】
2020170073.tif 000003
【図２】
2020170073.tif 000004
【図３】
2020170073.tif 000005
【図４】
2020170073.tif 000006
【図５】
2020170073.tif 000007
【図６】
2020170073.tif 000008
【図７】
2020170073.tif 000009
【図８】
2020170073.tif 000010
【図９】
2020170073.tif 000011
【図１０】
2020170073.tif 000012
【図１１】
2020170073.tif 000013
【図１２】
2020170073.tif 000014
【図１３】
2020170073.tif 000015
【図１４】
2020170073.tif 000016
【図１５】
2020170073.tif 000017
【図１６】
2020170073.tif 000018
【図１７】
2020170073.tif 000019