(57)【要約】【課題】暗号装置に対する演算命令の回数を削減する。【解決手段】アプリケーションから暗号化対象となるデータを１回以上に分けて受け取る。第１データを受け取ったら第１データの末尾から第１データを規定長で除算した余りサイズの端数データを検出および保存し、第１データにパディングデータを付加して規定長の整数倍の第１ブロックデータを生成し、第１ブロックデータの暗号化を暗号装置に依頼する。第１ブロックデータが暗号化された第１暗号化データの末尾から規定長のデータを第１暫定データとして切り出して保存し、残りの部分のデータをアプリケーションに出力する。アプリケーションから第２データを受け取ったら第２データの先頭に上記端数データを付加し、以降、上記と同様の処理を行う。第２データの後、アプリケーションから完了通知を受けたら、第２データから得られた第２暫定データをアプリケーションに出力する。【選択図】図２
2009069281.tif 000002
【特許請求の範囲】
【請求項１】
規定長の整数倍のデータを暗号化する暗号化装置にデータを供給して暗号化処理を実行させるためのコンピュータプログラムであって、
あるアプリケーションプログラムから、暗号化の対象となるデータを、１回以上の回数に分けて受信するデータ受信ステップと、
前記データ受信ステップで最初に受信した第１のデータを前記規定長で除算したときの余りのサイズ分のデータを前記第１のデータの末尾から検出し、検出したデータを第１端数データとして保存する第１端数保存ステップと、
前記第１のデータの末尾にパディングデータを付加することにより前記規定長の整数倍の長さをもつ第１ブロックデータを生成する第１ブロックデータ生成ステップと、
前記第１ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第１ブロックデータを暗号化した第１暗号化データを受け取る第１暗号化データ取得ステップと、
前記第１暗号化データの末尾から前記規定長のデータである第１暫定データを切り出して保存する第１暫定データ保存ステップと、
前記第１暗号化データから前記第１暫定データを切り出した後の残りのデータである第１確定データを前記あるアプリケーションプログラムに出力する第１確定データ出力ステップと、
前記データ受信ステップにより前記第１のデータに連続する第２のデータが受信されたら、前記第１端数保存ステップで保存された前記第１端数データを前記第２のデータの先頭に付加して端数データ付き第２データを生成するデータ付加ステップと、
前記端数データ付き第２データを前記規定長で除算したときの余りのサイズ分のデータを前記端数データ付き第２データの末尾から検出し、検出したデータを第２端数データとして保存する第２端数保存ステップと、
前記端数データ付き第２データの末尾にパディングデータを付加することにより前記規定長の整数倍の長さをもつ第２ブロックデータを生成する第２ブロックデータ生成ステップと、
前記第２ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第２ブロックデータを暗号化した第２暗号化データを受け取る第２暗号化データ取得ステップと、
前記第２暗号化データの末尾から前記規定長のデータである第２暫定データを切り出して保存する第２暫定データ保存ステップと、
前記第２暗号化データから前記第２暫定データを切り出した後の残りのデータである第２確定データを前記あるアプリケーションプログラムに出力する第２確定データ出力ステップと、
前記あるアプリケーションプログラムから前記暗号化の対象となるデータの送出完了を通知する完了通知を受信する完了通知受信ステップと、
前記第２のデータの受信の後、前記完了通知が受信されたら、前記第２暫定データ保存ステップで保存された前記第２暫定データを前記あるアプリケーションプログラムに出力する出力ステップと、
を備えたデータ処理プログラム。
【請求項２】
前記データ受信ステップにより前記第２のデータの後、さらに前記第２のデータに続く第３のデータが受信されたら、前記第２端数保存ステップで保存された前記第２端数データを前記第３のデータの先頭に付加して端数データ付き第３データを生成する第２のデータ付加ステップと、
前記端数データ付き第３データを前記規定長で除算したときの余りのサイズ分のデータを前記端数データ付き第３データの末尾から検出し、検出したデータを第３端数データとして保存する第３端数保存ステップと、
前記端数データ付き第３データに対してパディングデータを付加することにより前記規定長の整数倍の長さをもつ第３ブロックデータを生成する第３ブロックデータ生成ステップと、
前記第３ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第３ブロックデータを暗号化した第３暗号化データを受け取る第３暗号化データ取得ステップと、
前記第３暗号化データの末尾から前記規定長のデータである第３暫定データを切り出して保存する第３暫定データ保存ステップと、
前記第３暗号化データから前記第３暫定データを切り出した後の残りのデータである第３確定データを出力する第３確定データ出力ステップと、をさらに備え、
前記出力ステップは、前記第３のデータの受信の後、前記完了受信ステップにより前記完了通知が受信されたら、前記第３暫定データ保存ステップで保存された前記第３暫定データを前記あるアプリケーションプログラムに出力する、
ことを特徴とする請求項１に記載のデータ処理プログラム。
【請求項３】
前記出力ステップは、前記データ受信ステップにより前記第１のデータの受信の後、前記完了通知が受信された場合、前記第１暫定データを前記あるアプリケーションプログラムに出力することを特徴とする請求項１に記載のデータ処理プログラム。
【請求項４】
前記第１ブロックデータ生成ステップは、前記データ受信ステップにおいて前記規定長の整数倍のデータが受信された場合には、規定長のパディングデータを前記第１のデータの末尾に付加することを特徴とする請求項１に記載のデータ処理プログラム。
【請求項５】
規定長の整数倍のデータを暗号化する暗号化装置にデータを供給して暗号化処理を実行させるためのコンピュータプログラムであって、
暗号化の対象となるデータを１回以上の回数に分けて送出し前記暗号化の対象となるデータの送出が完了したら、前記暗号化の対象となるデータに加えると規定長の整数倍になるデータを送出するアプリケーションプログラムからデータを受信するデータ受信ステップと、
前記データ受信ステップで最初に受信した第１のデータを前記規定長で除算したときの余りのサイズ分のデータを前記第１のデータの末尾から検出し、検出したデータを第１端数データとして保存する第１端数保存ステップと、
前記第１のデータの末尾に第１パディングデータを付加することにより前記規定長の整数倍の長さをもつ第１ブロックデータを生成する第１ブロックデータ生成ステップと、
前記第１のデータの末尾に付加した前記第１パディングデータを保存する第１のパディング保存ステップと、
前記第１ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第１ブロックデータを暗号化した第１暗号化データを受け取る第１暗号化データ取得ステップと、
前記第１暗号化データの末尾から前記規定長のデータである第１暫定データを切り出して保存する第１暫定データ保存ステップと、
前記第１暗号化データから前記第１暫定データを切り出した後の残りのデータである第１確定データを前記アプリケーションプログラムに出力する第１確定データ出力ステップと、
前記データ受信ステップにより前記第１のデータに連続する第２のデータが受信されたら、前記第２のデータと前記第１パディングデータとが一致するかどうかを判定する第１判定ステップと、
一致する場合は、前記第１暫定データ保存ステップで保存された前記第１暫定データを前記アプリケーションプログラムに出力する第１の出力ステップと、
一致しない場合は、前記第１端数保存ステップで保存された第１端数データを前記第２のデータの先頭に付加して端数データ付き第２データを生成する第１のデータ付加ステップと、
前記端数データ付き第２データを前記規定長で除算したときの余りのサイズ分のデータを前記端数データ付き第２データの末尾から検出し、検出したデータを第２端数データとして保存する第２端数保存ステップと、
前記端数データ付き第２データの末尾に第２パディングデータを付加することにより前記規定長の整数倍の長さをもつ第２ブロックデータを生成する第２ブロックデータ生成ステップと、
前記端数データ付き第２データの末尾に付加した前記第２パディングデータを保存する第２パディング保存ステップと、
前記第２ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第２ブロックデータを暗号化した第２暗号化データを受け取る第２暗号化データ取得ステップと、
前記第２暗号化データの末尾から前記規定長のデータである第２暫定データを切り出して保存する第２暫定データ保存ステップと、
前記第２暗号化データから前記第２暫定データを切り出した後の残りのデータである第２確定データを前記アプリケーションプログラムに出力する第２確定データ出力ステップと、
前記データ受信ステップにより前記第２のデータに連続する第３のデータが受信されたら、前記第３のデータと前記第２パディングデータとが一致するかどうかを判定する第２判定ステップと、
一致する場合は、前記第２暫定データ保存ステップで保存された前記第２暫定データを前記アプリケーションプログラムに出力する第２の出力ステップと、
一致しない場合は、前記第２端数保存ステップで保存された第２端数データを前記第３のデータの先頭に付加して端数データ付き第３データを生成する第２のデータ付加ステップと、
を備えたデータ処理プログラム。
【請求項６】
規定長の整数倍のデータを暗号化する暗号化装置にデータを供給して暗号化処理を実行させるための方法であって、
あるアプリケーションプログラムから、暗号化の対象となるデータを、１回以上の回数に分けて受信するデータ受信ステップと、
前記データ受信ステップで最初に受信した第１のデータを前記規定長で除算したときの余りのサイズ分のデータを前記第１のデータの末尾から検出し、検出したデータを第１端数データとして保存する第１端数保存ステップと、
前記第１のデータの末尾にパディングデータを付加することにより前記規定長の整数倍の長さをもつ第１ブロックデータを生成する第１ブロックデータ生成ステップと、
前記第１ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第１ブロックデータを暗号化した第１暗号化データを受け取る第１暗号化データ取得ステップと、
前記第１暗号化データの末尾から前記規定長のデータである第１暫定データを切り出して保存する第１暫定データ保存ステップと、
前記第１暗号化データから前記第１暫定データを切り出した後の残りのデータである第１確定データを前記あるアプリケーションプログラムに出力する第１確定データ出力ステップと、
前記データ受信ステップにより前記第１のデータに連続する第２のデータが受信されたら、前記第１端数保存ステップで保存された前記第１端数データを前記第２のデータの先頭に付加して端数データ付き第２データを生成するデータ付加ステップと、
前記端数データ付き第２データを前記規定長で除算したときの余りのサイズ分のデータを前記端数データ付き第２データの末尾から検出し、検出したデータを第２端数データとして保存する第２端数保存ステップと、
前記端数データ付き第２データの末尾にパディングデータを付加することにより前記規定長の整数倍の長さをもつ第２ブロックデータを生成する第２ブロックデータ生成ステップと、
前記第２ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第２ブロックデータを暗号化した第２暗号化データを受け取る第２暗号化データ取得ステップと、
前記第２暗号化データの末尾から前記規定長のデータである第２暫定データを切り出して保存する第２暫定データ保存ステップと、
前記第２暗号化データから前記第２暫定データを切り出した後の残りのデータである第２確定データを前記あるアプリケーションプログラムに出力する第２確定データ出力ステップと、
前記あるアプリケーションプログラムから前記暗号化の対象となるデータの送出完了を通知する完了通知を受信する完了通知受信ステップと、
前記第２のデータの受信の後、前記完了通知が受信されたら、前記第２暫定データ保存ステップで保存された前記第２暫定データを前記あるアプリケーションプログラムに出力する出力ステップと、
を備えたデータ処理方法。
【請求項７】
規定長の整数倍のデータを暗号化する暗号化装置にデータを供給して暗号化処理を実行させるための方法であって、
暗号化の対象となるデータを１回以上の回数に分けて送出し前記暗号化の対象となるデータの送出が完了したら、前記暗号化の対象となるデータに加えると規定長の整数倍になるデータを送出するアプリケーションプログラムからデータを受信するデータ受信ステップと、
前記データ受信ステップで最初に受信した第１のデータを前記規定長で除算したときの余りのサイズ分のデータを前記第１のデータの末尾から検出し、検出したデータを第１端数データとして保存する第１端数保存ステップと、
前記第１のデータの末尾に第１パディングデータを付加することにより前記規定長の整数倍の長さをもつ第１ブロックデータを生成する第１ブロックデータ生成ステップと、
前記第１のデータの末尾に付加した前記第１パディングデータを保存する第１のパディング保存ステップと、
前記第１ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第１ブロックデータを暗号化した第１暗号化データを受け取る第１暗号化データ取得ステップと、
前記第１暗号化データの末尾から前記規定長のデータである第１暫定データを切り出して保存する第１暫定データ保存ステップと、
前記第１暗号化データから前記第１暫定データを切り出した後の残りのデータである第１確定データを前記アプリケーションプログラムに出力する第１確定データ出力ステップと、
前記データ受信ステップにより前記第１のデータに連続する第２のデータが受信されたら、前記第２のデータと前記第１パディングデータとが一致するかどうかを判定する第１判定ステップと、
一致する場合は、前記第１暫定データ保存ステップで保存された前記第１暫定データを前記アプリケーションプログラムに出力する第１の出力ステップと、
一致しない場合は、前記第１端数保存ステップで保存された第１端数データを前記第２のデータの先頭に付加して端数データ付き第２データを生成する第１のデータ付加ステップと、
前記端数データ付き第２データを前記規定長で除算したときの余りのサイズ分のデータを前記端数データ付き第２データの末尾から検出し、検出したデータを第２端数データとして保存する第２端数保存ステップと、
前記端数データ付き第２データの末尾に第２パディングデータを付加することにより前記規定長の整数倍の長さをもつ第２ブロックデータを生成する第２ブロックデータ生成ステップと、
前記端数データ付き第２データの末尾に付加した前記第２パディングデータを保存する第２パディング保存ステップと、
前記第２ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第２ブロックデータを暗号化した第２暗号化データを受け取る第２暗号化データ取得ステップと、
前記第２暗号化データの末尾から前記規定長のデータである第２暫定データを切り出して保存する第２暫定データ保存ステップと、
前記第２暗号化データから前記第２暫定データを切り出した後の残りのデータである第２確定データを前記アプリケーションプログラムに出力する第２確定データ出力ステップと、
前記データ受信ステップにより前記第２のデータに連続する第３のデータが受信されたら、前記第３のデータと前記第２パディングデータとが一致するかどうかを判定する第２判定ステップと、
一致する場合は、前記第２暫定データ保存ステップで保存された前記第２暫定データを前記アプリケーションプログラムに出力する第２の出力ステップと、
一致しない場合は、前記第２端数保存ステップで保存された第２端数データを前記第３のデータの先頭に付加して端数データ付き第３データを生成する第２のデータ付加ステップと、
を備えたデータ処理方法。
【請求項８】
請求項１ないし５のいずれか一項のデータ処理プログラムを記憶する記憶装置と、
前記記憶装置内の前記データ処理プログラムを実行するＣＰＵと、
前記暗号化装置と、
を備えた暗号処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理プログラム、データ処理方法および暗号処理システムに係わり、たとえばプロセッサユニットに対する負荷を低減可能なデータ処理プログラムに関する。
【背景技術】
【０００２】
暗号通信等ではブロック暗号方式が広く用いられる。OpenSSL（非特許文献１参照）等を用いたブロック方式の暗号処理においては、暗号化対象となるデータが、固定のブロックサイズの整数倍になるよう、暗号化対象となるデータに、パディングデータを付加するパディング処理を施した後に、暗号演算を実行する。
【０００３】
また、暗号化対象となるデータが複数に分割されて逐次供給される場合においては、分割データごとに暗号演算が順次実行される。ただし、各暗号演算のステップにおいて、ブロックサイズの整数倍を超える端数データは一時保存され、次の分割データの先頭に付加される。そして、端数データが付加された分割データにおいてブロックサイズの整数倍を超える端数データは一時保存され、さらに次の分割データの先頭に付加される。一連のデータ供給が終端した後、最後に保存された端数データに対してパディング処理が施され（パディングデータが付加され）、パディングデータが付加された端数データ（パディング部分）に対して暗号演算が実行される。
【０００４】
ところで、プロセッサユニットに対する暗号演算の処理負荷を低減するため、暗号演算処理を行う専用のハードウェア（暗号装置）が多く利用されている。ハードウェアを利用した場合、割り込み処理や排他制御、場合によってはシステムコールなど、固定的なオーバーヘッドが少なからず存在する。このため、ハードウェアに対する演算命令の回数が増加すると、システム全体のパフォーマンスが悪化するという一面がある。
【０００５】
特に、上述したような、各分割データに対して逐次、ブロック方式の暗号演算を施す場合には、分割データに対する暗号演算とは独立して上記パディング部分の暗号演算を実行するため、ハードウェアに対する演算命令の回数が少なくとも2回以上（分割数＋１回）になる。
【０００６】
特許文献１ではいくつかのデータをプロセッサユニットで処理する（ソフトウェア処理）ことでパフォーマンスの悪化を抑制する方法を開示しているが、ソフトウェア用の処理プログラムと専用ハードウェア用の処理プログラムの双方を実装せねばならず、また、プロセッサユニットの能力が低い場合にはパフォーマンスが更に悪化する可能性もある。
【特許文献１】特開２００３−６９５５５号公報
【非特許文献１】http://www.openssl.org/
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、暗号装置に対する演算命令の回数を削減することでシステム全体のパフォーマンスを向上させることを可能としたデータ処理プログラム、データ処理方法および暗号処理システムを提供しようとするものである。
【課題を解決するための手段】
【０００８】
本発明の一態様としてのデータ処理プログラムは、
規定長の整数倍のデータを暗号化する暗号化装置にデータを供給して暗号化処理を実行させるためのコンピュータプログラムであって、
あるアプリケーションプログラムから、暗号化の対象となるデータを、１回以上の回数に分けて受信するデータ受信ステップと、
前記データ受信ステップで最初に受信した第１のデータを前記規定長で除算したときの余りのサイズ分のデータを前記第１のデータの末尾から検出し、検出したデータを第１端数データとして保存する第１端数保存ステップと、
前記第１のデータの末尾にパディングデータを付加することにより前記規定長の整数倍の長さをもつ第１ブロックデータを生成する第１ブロックデータ生成ステップと、
前記第１ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第１ブロックデータを暗号化した第１暗号化データを受け取る第１暗号化データ取得ステップと、
前記第１暗号化データの末尾から前記規定長のデータである第１暫定データを切り出して保存する第１暫定データ保存ステップと、
前記第１暗号化データから前記第１暫定データを切り出した後の残りのデータである第１確定データを前記あるアプリケーションプログラムに出力する第１確定データ出力ステップと、
前記データ受信ステップにより前記第１のデータに連続する第２のデータが受信されたら、前記第１端数保存ステップで保存された前記第１端数データを前記第２のデータの先頭に付加して端数データ付き第２データを生成するデータ付加ステップと、
前記端数データ付き第２データを前記規定長で除算したときの余りのサイズ分のデータを前記端数データ付き第２データの末尾から検出し、検出したデータを第２端数データとして保存する第２端数保存ステップと、
前記端数データ付き第２データの末尾にパディングデータを付加することにより前記規定長の整数倍の長さをもつ第２ブロックデータを生成する第２ブロックデータ生成ステップと、
前記第２ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第２ブロックデータを暗号化した第２暗号化データを受け取る第２暗号化データ取得ステップと、
前記第２暗号化データの末尾から前記規定長のデータである第２暫定データを切り出して保存する第２暫定データ保存ステップと、
前記第２暗号化データから前記第２暫定データを切り出した後の残りのデータである第２確定データを前記あるアプリケーションプログラムに出力する第２確定データ出力ステップと、
前記あるアプリケーションプログラムから前記暗号化の対象となるデータの送出完了を通知する完了通知を受信する完了通知受信ステップと、
前記第２のデータの受信の後、前記完了通知が受信されたら、前記第２暫定データ保存ステップで保存された前記第２暫定データを前記あるアプリケーションプログラムに出力する出力ステップと、
を備える。
【０００９】
本発明の一態様としてのデータ処理プログラムは、
規定長の整数倍のデータを暗号化する暗号化装置にデータを供給して暗号化処理を実行させるためのコンピュータプログラムであって、
暗号化の対象となるデータを１回以上の回数に分けて送出し前記暗号化の対象となるデータの送出が完了したら、前記暗号化の対象となるデータに加えると規定長の整数倍になるデータを送出するアプリケーションプログラムからデータを受信するデータ受信ステップと、
前記データ受信ステップで最初に受信した第１のデータを前記規定長で除算したときの余りのサイズ分のデータを前記第１のデータの末尾から検出し、検出したデータを第１端数データとして保存する第１端数保存ステップと、
前記第１のデータの末尾に第１パディングデータを付加することにより前記規定長の整数倍の長さをもつ第１ブロックデータを生成する第１ブロックデータ生成ステップと、
前記第１のデータの末尾に付加した前記第１パディングデータを保存する第１のパディング保存ステップと、
前記第１ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第１ブロックデータを暗号化した第１暗号化データを受け取る第１暗号化データ取得ステップと、
前記第１暗号化データの末尾から前記規定長のデータである第１暫定データを切り出して保存する第１暫定データ保存ステップと、
前記第１暗号化データから前記第１暫定データを切り出した後の残りのデータである第１確定データを前記アプリケーションプログラムに出力する第１確定データ出力ステップと、
前記データ受信ステップにより前記第１のデータに連続する第２のデータが受信されたら、前記第２のデータと前記第１パディングデータとが一致するかどうかを判定する第１判定ステップと、
一致する場合は、前記第１暫定データ保存ステップで保存された前記第１暫定データを前記アプリケーションプログラムに出力する第１の出力ステップと、
一致しない場合は、前記第１端数保存ステップで保存された第１端数データを前記第２のデータの先頭に付加して端数データ付き第２データを生成する第１のデータ付加ステップと、
前記端数データ付き第２データを前記規定長で除算したときの余りのサイズ分のデータを前記端数データ付き第２データの末尾から検出し、第２端数データとして保存する第２端数保存ステップと、
前記端数データ付き第２データの末尾に第２パディングデータを付加することにより前記規定長の整数倍の長さをもつ第２ブロックデータを生成する第２ブロックデータ生成ステップと、
前記端数データ付き第２データの末尾に付加した前記第２パディングデータを保存する第２パディング保存ステップと、
前記第２ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第２ブロックデータを暗号化した第２暗号化データを受け取る第２暗号化データ取得ステップと、
前記第２暗号化データの末尾から前記規定長のデータである第２暫定データを切り出して保存する第２暫定データ保存ステップと、
前記第２暗号化データから前記第２暫定データを切り出した後の残りのデータである第２確定データを前記アプリケーションプログラムに出力する第２確定データ出力ステップと、
前記データ受信ステップにより前記第２のデータに連続する第３のデータが受信されたら、前記第３のデータと前記第２パディングデータとが一致するかどうかを判定する第２判定ステップと、
一致する場合は、前記第２暫定データ保存ステップで保存された前記第２暫定データを前記アプリケーションプログラムに出力する第２の出力ステップと、
一致しない場合は、前記第２端数保存ステップで保存された第２端数データを前記第３のデータの先頭に付加して端数データ付き第３データを生成する第２のデータ付加ステップと、
を備える。
【００１０】
本発明の一態様としてのデータ処理方法は、
規定長の整数倍のデータを暗号化する暗号化装置にデータを供給して暗号化処理を実行させるための方法であって、
あるアプリケーションプログラムから、暗号化の対象となるデータを、１回以上の回数に分けて受信するデータ受信ステップと、
前記データ受信ステップで最初に受信した第１のデータを前記規定長で除算したときの余りのサイズ分のデータを前記第１のデータの末尾から検出し、検出したデータを第１端数データとして保存する第１端数保存ステップと、
前記第１のデータの末尾にパディングデータを付加することにより前記規定長の整数倍の長さをもつ第１ブロックデータを生成する第１ブロックデータ生成ステップと、
前記第１ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第１ブロックデータを暗号化した第１暗号化データを受け取る第１暗号化データ取得ステップと、
前記第１暗号化データの末尾から前記規定長のデータである第１暫定データを切り出して保存する第１暫定データ保存ステップと、
前記第１暗号化データから前記第１暫定データを切り出した後の残りのデータである第１確定データを前記あるアプリケーションプログラムに出力する第１確定データ出力ステップと、
前記データ受信ステップにより前記第１のデータに連続する第２のデータが受信されたら、前記第１端数保存ステップで保存された前記第１端数データを前記第２のデータの先頭に付加して端数データ付き第２データを生成するデータ付加ステップと、
前記端数データ付き第２データを前記規定長で除算したときの余りのサイズ分のデータを前記端数データ付き第２データの末尾から検出し、検出したデータを第２端数データとして保存する第２端数保存ステップと、
前記端数データ付き第２データの末尾にパディングデータを付加することにより前記規定長の整数倍の長さをもつ第２ブロックデータを生成する第２ブロックデータ生成ステップと、
前記第２ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第２ブロックデータを暗号化した第２暗号化データを受け取る第２暗号化データ取得ステップと、
前記第２暗号化データの末尾から前記規定長のデータである第２暫定データを切り出して保存する第２暫定データ保存ステップと、
前記第２暗号化データから前記第２暫定データを切り出した後の残りのデータである第２確定データを前記あるアプリケーションプログラムに出力する第２確定データ出力ステップと、
前記あるアプリケーションプログラムから前記暗号化の対象となるデータの送出完了を通知する完了通知を受信する完了通知受信ステップと、
前記第２のデータの受信の後、前記完了通知が受信されたら、前記第２暫定データ保存ステップで保存された前記第２暫定データを前記あるアプリケーションプログラムに出力する出力ステップと、
を備える。
【００１１】
本発明の一態様としてのデータ処理方法は、
規定長の整数倍のデータを暗号化する暗号化装置にデータを供給して暗号化処理を実行させるための方法であって、
暗号化の対象となるデータを１回以上の回数に分けて送出し前記暗号化の対象となるデータの送出が完了したら、前記暗号化の対象となるデータに加えると規定長の整数倍になるデータを送出するアプリケーションプログラムからデータを受信するデータ受信ステップと、
前記データ受信ステップで最初に受信した第１のデータを前記規定長で除算したときの余りのサイズ分のデータを前記第１のデータの末尾から検出し、検出したデータを第１端数データとして保存する第１端数保存ステップと、
前記第１のデータの末尾に第１パディングデータを付加することにより前記規定長の整数倍の長さをもつ第１ブロックデータを生成する第１ブロックデータ生成ステップと、
前記第１のデータの末尾に付加した前記第１パディングデータを保存する第１のパディング保存ステップと、
前記第１ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第１ブロックデータを暗号化した第１暗号化データを受け取る第１暗号化データ取得ステップと、
前記第１暗号化データの末尾から前記規定長のデータである第１暫定データを切り出して保存する第１暫定データ保存ステップと、
前記第１暗号化データから前記第１暫定データを切り出した後の残りのデータである第１確定データを前記アプリケーションプログラムに出力する第１確定データ出力ステップと、
前記データ受信ステップにより前記第１のデータに連続する第２のデータが受信されたら、前記第２のデータと前記第１パディングデータとが一致するかどうかを判定する第１判定ステップと、
一致する場合は、前記第１暫定データ保存ステップで保存された前記第１暫定データを前記アプリケーションプログラムに出力する第１の出力ステップと、
一致しない場合は、前記第１端数保存ステップで保存された第１端数データを前記第２のデータの先頭に付加して端数データ付き第２データを生成する第１のデータ付加ステップと、
前記端数データ付き第２データを前記規定長で除算したときの余りのサイズ分のデータを前記端数付き第２データの末尾から検出し、検出したデータを第２端数データとして保存する第２端数保存ステップと、
前記端数データ付き第２データの末尾に第２パディングデータを付加することにより前記規定長の整数倍の長さをもつ第２ブロックデータを生成する第２ブロックデータ生成ステップと、
前記端数データ付き第２データの末尾に付加した前記第２パディングデータを保存する第２パディング保存ステップと、
前記第２ブロックデータの暗号化を指示する暗号化命令を前記暗号化装置に送って前記暗号化装置から前記第２ブロックデータを暗号化した第２暗号化データを受け取る第２暗号化データ取得ステップと、
前記第２暗号化データの末尾から前記規定長のデータである第２暫定データを切り出して保存する第２暫定データ保存ステップと、
前記第２暗号化データから前記第２暫定データを切り出した後の残りのデータである第２確定データを前記アプリケーションプログラムに出力する第２確定データ出力ステップと、
前記データ受信ステップにより前記第２のデータに連続する第３のデータが受信されたら、前記第３のデータと前記第２パディングデータとが一致するかどうかを判定する第２判定ステップと、
一致する場合は、前記第２暫定データ保存ステップで保存された前記第２暫定データを前記アプリケーションプログラムに出力する第２の出力ステップと、
一致しない場合は、前記第２端数保存ステップで保存された第２端数データを前記第３のデータの先頭に付加して端数データ付き第３データを生成する第２のデータ付加ステップと、
を備える。
【００１２】
本発明の一態様としての暗号処理システムは、
上記データ処理プログラムを記憶する記憶装置と、
前記記憶装置内の前記データ処理プログラムを実行するＣＰＵと、
前記暗号化装置と、
を備えたことを特徴とする。
【発明の効果】
【００１３】
本発明により、暗号装置に対する演算命令の回数を削減でき、これによりシステム全体のパフォーマンスを向上させることが可能となる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施形態について説明する。
【００１５】
（第１の実施形態）
図１は、本発明の第１の実施形態に係わるデータ処理プログラムをＣＰＵ（Central Processing Unit：中央演算処理装置）に実行させたときに得られる各機能の関係を表した機能ブロック図である。図示のように、データ処理プログラム１１０を実行するとき、ＣＰＵは、データ受信部１１１、出力データ判別部１１２、データ判別部１１３、データ更新部１１４、端数保存部１１５、ブロックデータ生成部１１６、暗号化データ処理部１１７として機能し、これら各機能ブロックが有機的に関連して動作することで、データ処理プログラム１１０に記述されたデータ処理が実現される。
【００１６】
アプリケーション１００は暗号化を必要とするデータを、データ処理プログラム１１０に対して供給し、データ処理プログラム１１０から暗号化されたデータを取得する。より詳細には、アプリケーション１００は、暗号化の対象となるデータ（全体データ）を１回以上の回数に分けてデータ処理プログラム１１０に送り出し、データ処理プログラム１１０から、暗号化されたデータを１回以上に分けて取得する。アプリケーション１００は全体データの送出が完了したら、全体データの送出完了を表す完了通知をデータ処理プログラム１１０に送出する。
【００１７】
暗号装置（ハードウェア）１２０は、暗号アルゴリズムによって定められた規定長（ブロックサイズ）の整数倍のサイズを有するデータを暗号化して、当該データと同一サイズの暗号化データを生成する。より詳細には、暗号装置１２０は、データ処理プログラム１１０により発行される暗号演算命令を受けて、データ処理プログラム１１０から渡される、上記規定長の整数倍のデータに対して暗号演算を実行し、同一サイズの暗号化データをデータ処理プログラム１１０に返す。ただし、暗号化前のデータのサイズと、暗号化後のデータのサイズとは同じであることは本発明の本質ではなく、本発明は、暗号化前と、暗号化後のサイズが異なる暗号アルゴリズムにも対応可能である。
【００１８】
データ処理プログラム１１０は、暗号装置１２０に対する暗号演算の命令回数ができるだけ少なくなるように、暗号化命令（演算命令）を暗号装置１２０に発行する。後に述べるように本実施形態では演算命令回数が従来よりも１回低減される。データ処理プログラム１１０は、暗号装置１２０から暗号化されたデータを受け取けたら、受け取った暗号化データをアプリケーション１００に返す。データ処理プログラム１１０は図示しない記憶装置に格納され、ＣＰＵによって読み出され、実行される。アプリケーション１００も同様に、上記と同一または別の記憶装置に記憶され、ＣＰＵによって読み出され、実行される。
【００１９】
図２は、データ処理プログラム１１０を実行するときのＣＰＵの動作を示すフローチャートである。図３は、図２のフローチャートにしたがって暗号化対象となるデータが暗号化される様子を示す。ここでは、アプリケーション１００によって暗号化の対象となるデータが2つ（データＡ・データＢ）に分割されてデータ処理プログラム１１０に供給される例を説明するものとし、以降、分割前のデータ（データＡとデータＢとの集合）を「全データ」と称する。
【００２０】
＜第1のデータＡの入力＞
まず、データ受信部１１１がアプリケーション１００からデータＡならびに処理依頼を受信する（S202）。処理依頼にはデータＡおよび全データを結びつけるためのデータ識別子（以降、「データＩＤ」と記す）と、依頼内容が「暗号演算依頼」または「完了通知」であることを示す依頼内容識別子（以降、「依頼内容ＩＤ」と記す）とが含まれる。ここでは、「暗号演算依頼」を示す依頼内容ＩＤが含まれる。
【００２１】
出力データ判別部１１２は、データ受信部１１１によって受信された依頼内容が、暗号演算依頼か、完了通知かを確認する（S203）。ここでは、依頼内容としてデータＡの暗号演算依頼がなされているため、データ判別部１１３に処理を移行する。
【００２２】
データ判別部１１３は、データＡが、最初のデータか、あるいは既に処理されたデータと連続するデータであるかをデータＩＤに基づき判別する（S204）。より詳細には、S202で受信された処理依頼に含まれるデータＩＤ（該当するデータＩＤ）を含むデータ構造（後述する図４のデータベースを参照。データベースの各レコードがデータ構造に相当）がまだ存在しない場合は最初のデータと判断し、既に存在する場合には、既に処理されたデータと連続するデータであると判断する。ここでは、データＡは、全データに対する最初のデータであるため、該当データ構造は存在せず、端数保存部１１５に処理を移行する。
【００２３】
端数保存部１１５は、データＡから端数データＡｌを抽出し、データＩＤと共にデータ構造に保存する（S205）。端数データＡｌは、データＡのサイズを上記規定長で除算したときの余りのサイズ（１ブロックサイズ未満）のデータをデータＡの末尾から抽出したものである。
【００２４】
次いで、ブロックデータ生成部１１６は、データＡに対して、パディング処理を施す（S206）。より詳細には、データＡの末尾にパディングデータ（上記規定長未満のサイズを有する）を付加することにより、上記規定長の整数倍のサイズからなるブロックデータを生成する。そして、ブロックデータ生成部１１６は、生成したブロックデータ（パディングデータが付加されたデータＡ）に対する暗号演算の依頼を暗号装置１２０に行う（S207）。すなわち暗号装置１２０に対し暗号演算命令を発行する。暗号装置１２０では暗号演算命令を受けて、ブロックデータ（パディングデータが付加されたデータＡ）を暗号化し、当該ブロックデータと同じサイズをもつ暗号化データＡＥを生成する。
【００２５】
暗号化データ処理部１１７は、暗号装置１２０から暗号化データＡＥを取得し、暗号化データＡＥから暫定データａを抽出し、暫定データａを、該当するデータ構造（データＩＤで識別）に保存する（S209）。暫定データａは、暗号化データＡＥの末尾から、上記端数データＡｌと、データＡに付加されたパディングデータとの合計サイズ分（上記規定長のサイズである）のデータを切り出したものに相当する。また、暗号化データ処理部１１７は、暗号化データＡＥのうち、暫定データａを除いた部分である確定データＡＲ（上記規定長の整数倍のサイズをもつ）を暗号化データとしてアプリケーション１００に出力する（S210）。
【００２６】
ここでデータ構造の例を図４のデータベースに示す。データベースの各レコード１つ１つがデータ構造に相当する。ここではアプリケーション１００がデータ処理プログラム１１０に複数の全体データ（データＩＤ４０１〜Ｎ）について暗号処理を依頼しているときの状態が示される。データ構造は、データＩＤと、端数データと、端数データの長さを表す端数サイズと、暫定データとを関連づけており、ここに挙げた以外の情報をさらに追加的に関連づけてもよい。
【００２７】
＜第2のデータＢの入力＞
次に、データ受信部１１１はアプリケーション１００からデータＢならびに処理依頼を受信する（S202）。処理依頼には、上記データＩＤと、「暗号演算依頼」を示す依頼内容ＩＤが含まれる。
【００２８】
出力データ判別部１１２は、データ受信部１１１によって受信された依頼内容を確認する（S203）。ここでは、依頼内容としてデータＢに対する暗号演算依頼がなされているため、データ判別部１１３に処理を移行する。
【００２９】
データ判別部１１３は、データＢが、最初のデータか、あるいは既に処理されたデータと連続するデータであるかを判別する（S204）。ここでは、既にデータＡが処理されており、上記データＩＤと同じＩＤを持つデータ構造が存在するため、データＢは、既に処理されたデータと連続するデータであると判断し、データ更新部１１４に処理を移行する。
【００３０】
データ更新部１１４は、データ構造中に保存しておいた端数データＡｌをデータＢの先頭に付加してデータＢＢを得る（S211）。
【００３１】
端数保存部１１５は、データＢＢから端数データＢｌを抽出し、該当するデータ構造（データＩＤで識別）にそのサイズとともに保存する（S205）。本例では先に保存されている端数データＡｌおよびそのサイズは上書きされるものとする。
【００３２】
ブロックデータ生成部１１６は、データＢＢの末尾にパディングデータ（上記規定長未満のサイズを有する）を付加することにより上記規定長の整数倍のサイズをもつブロックデータを生成し（S206）、生成したブロックデータ（パディングデータが付加されたデータＢＢ）に対する暗号演算を暗号装置１２０に依頼する（S207）。すなわち暗号装置１２０に暗号演算命令を発行する。暗号装置１２０では、この暗号演算命令を受けて、上記ブロックデータ（パディングデータが付加されたデータＢＢ）を暗号化して、当該ブロックデータと同じサイズをもつ暗号化データＢＥを生成する。
【００３３】
暗号化データ処理部１１７は、暗号装置１２０から暗号化データＢＥを取得し、取得した暗号化データＢＥの末尾から暫定データｂを抽出し、抽出した暫定データｂを該当するデータ構造（データＩＤで識別）に保存する（S209）。暫定データｂは、暗号化データＢＥの末尾から、上記端数データＢｌと、データＢＢに付加されたパディングデータとの合計サイズ分（上記規定長のサイズである）のデータを抽出したものに相当する。また、暗号化データ処理部１１７は、暗号化データＢＥのうち、暫定データｂを除いた部分である確定データＢＲ（上記規定長の整数倍のサイズをもつ）を暗号化データとしてアプリケーション１００に出力する（S210）。
【００３４】
＜完了＞
この後、データ受信部１１１はアプリケーション１００から、上記データＩＤと、「完了通知」を示す依頼内容ＩＤと、を含む処理依頼を受信する（S202）。
【００３５】
出力データ判別部１１２は、依頼内容を確認し（S203）、ここでは、依頼内容として完了通知が含まれているため、該当するデータ構造（データＩＤで識別）に保存されている暫定データｂを取得し（S212）、取得した暫定データｂを暗号化データとしてアプリケーション１００に出力する（S213）。そして、出力データ判別部１１２は、該当するデータ構造を解放する（たとえば消去する）。以上により、本処理は終了する。
【００３６】
以上の処理において、全データと各分割データとを関連づける識別子としてデータＩＤを用い、このデータＩＤおよびこれに関連するデータを、当該データＩＤをもつデータ構造に保存するとしたが、データ構造自身のアドレスなどのようにデータ構造を直接指定する値を、アプリケーション１００からの処理依頼に含めることで、データ構造へのデータＩＤの保存を省略しても良い。このときは、例えば上記アドレスにより指定されたデータ構造中に既に処理が行われていること（データ構造が確保済みであること）を示すフラグに入れるようにし、データ判別部１１３は、データ構造中のデータＩＤを確認するのではなく、このフラグを確認するようにすればよい。
【００３７】
また、依頼内容を示す依頼内容ＩＤを処理依頼に含めるとしたが、処理依頼をデータ処理プログラム１１０に行うためのAPI(Application Program Interface)を、依頼内容毎に用意し、“演算依頼のAPI”、“通知のAPI”といった様に、どのAPIから呼ばれたかにより、出力データ判別部１１２がその判断を行ってもよい。
【００３８】
なお、本例においては、全体データが2つに分割された場合について説明したが、全体データが分割されずにアプリケーション１００から渡された場合は＜第１のデータＡの入力＞の処理と＜完了＞の処理を実施すれば良い。また、全体データが3つ以上に分割されている場合には＜第2のデータＢの入力＞の処理を複数回繰り返せば良い。
【００３９】
以上のように、本実施の形態によれば、アプリケーションから処理依頼を受けるたびに、パディング処理を行い暗号化データの末尾（１ブロックサイズ分）を暫定データとして保存するようにしたため、アプリケーションから完了通知を受けた際には、改めて暗号化装置に暗号演算を依頼する必要はなく、単に、最新の暫定データをアプリケーションに送出するだけでよい。これにより、従来に比べて、暗号化装置（ハードウェア）へのアクセスが１回少なくなるため、暗号化装置を用いる際のオーバーヘッド分が削減され、システム全体のパフォーマンスを向上させることが可能となる。暗号化装置の処理サイズが各回で最大で１ブロックサイズ分だけ増加するが、暗号装置のアクセスに対するオーバーヘッドの大きさに比べると、ブロックサイズ分の処理時間の増加は非常に小さなものであり、暗号装置に対する暗号演算の指示回数を削減することの効果の方が大きい。
【００４０】
（第２の実施形態）
本実施形態が、第1の実施形態と異なる主な点は、出力データ判別部と、ブロックデータ生成部の処理内容にある。以下、本実施の形態について詳細に説明する。
【００４１】
図５は、本実施形態の動作を示すフローチャートである。図６は、図５のフローチャートにしたがって暗号化対象となるデータが暗号化される様子を示す。ここでは、アプリケーション１００によって暗号化の対象となるデータが2つ（データＡ・データＢ）に分割されて供給される場合を説明するものとする。以降、分割前のデータ（データＡとデータＢとの集合）を「全データ」と称する。ただし、本実施形態のアプリケーションは、全体データの送出が完了したら、全体データに加えると規定長の整数倍になるデータ（パディングデータ（後述するデータC））を送出するとする。
【００４２】
＜第1のデータＡの入力＞
データ受信部１１１は、アプリケーション１００からデータＡならびに処理依頼を受信する（S602）。処理依頼にはデータＡと全データを結びつけるためのデータＩＤが含まれる。ただし、第１の実施形態と異なり、処理依頼に、依頼内容ＩＤは含まれない。
【００４３】
出力データ判別部１１２は、データＡと、上記データＩＤに対応するデータ構造に含まれるパディングデータとを比較し、これらが一致するか否かを判断する。ここでは、データＡは全データに対する最初のデータであるため、該当するデータ構造は存在しない（パディングデータも存在しない）。したがって、一致しないと判断され、データ判別部１１３に処理を移行する。
【００４４】
データ判別部１１３は、データＡが最初のデータか、あるいは既に処理されたデータと連続するデータであるかを、第１の実施形態と同様にして、判別する（S604）。ここでは、データＡは、全データに対する最初のデータであるため、端数保存部１１５に処理を移行する。
【００４５】
端数保存部１１５は、データＡの末尾から端数データＡｌを抽出し、抽出した端数データＡｌおよびそのサイズを、データＩＤと共にデータ構造に保存する（S605）。
【００４６】
ブロックデータ生成部１１６は、データＡに対してパディングデータｐａｄＡ（上記規定長未満のサイズを有する）を付加することにより、上記規定長の整数倍のサイズをもつブロックデータを生成する（S606）。そして、ブロックデータ生成部１１６は、パディングデータｐａｄＡを、該当するデータ構造（データＩＤで識別）に保存し（S607）、そして、上記ブロックデータ（パディングデータｐａｄＡを付加されたデータＡ）に対する暗号演算を暗号装置１２０に依頼する（S608）。すなわち暗号装置１２０に暗号演算命令を発行する。暗号装置１２０では、この暗号演算命令を受けて、上記ブロックデータ（パディングデータｐａｄＡが付加されたデータＡ）を暗号化して、当該ブロックデータと同じサイズをもつ暗号化データＡＥを生成する。
【００４７】
暗号化データ処理部１１７は、暗号装置１２０から暗号化データＡＥを取得し、取得した暗号化データＡＥの末尾から暫定データａを抽出し、抽出した暫定データａをデータ構造（データＩＤで識別）に保存する（S610）。暫定データａは、暗号化データＡＥの末尾から、上記端数データＡｌと、データＡに付加されたパディングデータｐａｄＡとの合計サイズ分（上記規定長のサイズである）のデータを抽出したものに相当する。また、暗号化データ処理部１１７は、暗号化データＡＥのうち、暫定データａを除いた部分である確定データＡＲ（上記規定長の整数倍のサイズをもつ）を暗号化データとしてアプリケーション１００に出力する（S611）。
【００４８】
ここで本実施形態に係わるデータ構造の例を図７のデータベースに示す。データベースの各レコードが１つのデータ構造に相当する。ここではアプリケーション１００がデータ処理プログラム１１０に複数の全体データ（データＩＤ７０１〜Ｎ）について暗号処理を依頼しているときの状態が示される。このデータ構造は、データＩＤと、端数データと、端数サイズと、パディングデータと、暫定データとを関連づけており、ここに挙げた以外の情報をさらに追加的に関連づけてもよい。
【００４９】
＜第2のデータＢの入力＞
次に、データ受信部１１１は、アプリケーション１００からデータＢならびに処理依頼を受信する（S602）。ただし、第１の実施形態と異なり、処理依頼に、依頼内容ＩＤは含まれない。
【００５０】
出力データ判別部１１２は、データＢと、該当するデータ構造（データＩＤで識別）に含まれるパディングデータ（ここではｐａｄＡ）とを比較し、これらが一致するか否かを判別する（S603）。ここでは、データＢとパディングデータｐａｄＡとが異なるとし、データ判別部１１３に処理を移行する。
【００５１】
データ判別部１１３は、データＢが、最初のデータであるか、あるいは既に処理されたデータと連続するデータであるかを判別する（S604）。ここでは、既にデータＡが処理され、該当するデータＩＤを持つデータ構造が存在するため、連続するデータであると判断し、データ更新部１１４に処理を移行する。
【００５２】
データ更新部１１４は、データ構造中に保存しておいた端数データＡｌをデータＢの前に付加してデータＢＢを得る（S612）。
【００５３】
端数保存部１１５は、データＢＢの末尾から端数データＢｌを抽出し、抽出した端数データＢｌをそのサイズとともに、該当するデータ構造（データＩＤで識別）に保存する（S605）。本例では先に保存されている端数データＡｌおよびそのサイズは上書きされるものとする。
【００５４】
ブロックデータ生成部１１６は、データＢＢの末尾にパディングデータｐａｄＢ（上記規定長未満のサイズを有する）を付加することにより上記規定長の整数倍のサイズを有するブロックデータを生成し（S606）、パディングデータｐａｄＢを、該当するデータ構造（データＩＤで識別）に保存する（S607）。本例では先に保存されているパディングデータｐａｄＡは上書きされるものとする。そして、ブロックデータ生成部１１６は、上記ブロックデータ（パディングデータｐａｄＢが付加されたデータＢＢ）に対する暗号演算を暗号装置１２０に依頼する（S608）。すなわち暗号装置１２０に対し暗号演算命令を発行する。暗号装置１２０では、この暗号演算命令を受けて、上記ブロックデータ（パディングデータｐａｄＢが付加されたデータＢＢ）を暗号化して、当該ブロックデータと同じサイズをもつ暗号化データＢＥを生成する。
【００５５】
暗号化データ処理部１１７は、暗号装置１２０から暗号化データＢＥを取得し、取得した暗号化データＢＥの末尾から暫定データｂを抽出し、抽出した暫定データｂを該当するデータ構造（データＩＤで識別）に保存する（S610）。暫定データｂは、暗号化データＢＥの末尾から、上記端数データＢｌと、データＢＢに付加されたパディングデータｐａｄＢとの合計サイズ分（上記規定長のサイズである）のデータを抽出したものに相当する。また、暗号化データ処理部１１７は、暗号化データＢＥのうち、暫定データｂを除いた部分である確定データＢＲをアプリケーション１００に暗号化データとして出力する（S611）。
【００５６】
＜完了＞
次に、データ受信部１１１は、アプリケーション１００から、データＣならびに処理依頼を受信する（S602）。処理依頼にはデータＣと全データを結びつけるためのデータＩＤが含まれる。ただし、第１の実施形態と異なり、処理依頼には、依頼内容ＩＤは含まれない。ここで、データＣは、アプリケーション１００によって算出されたパディング部分である。つまり暗号化の対象となる全体データ（データＡおよびデータＢ）の送出はすべて完了したため、アプリケーション１００は、全体データと、規定長の整数倍（全体データのサイズ以上）との差（規定長未満の値）に応じて一意に決まるパディングデータを生成し、データＣとして送る。
【００５７】
出力データ判別部１１２は、データＣと、該当するデータ構造（データＩＤで識別）に含まれるパディングデータｐａｄＢとを比較し、これらが一致するか否かを判別する（S603）。ここでは、データＣとパディングデータｐａｄＢとは一致するため、出力データ判別部１１２は、該当するデータ構造（データＩＤで識別）に保存されている暫定データｂを取得（S613）し、取得した暫定データｂを暗号化データとしてアプリケーション１００に出力する（S614）。また、該当するデータ構造（レコード）を解放する。
【００５８】
ここで、＜第2のデータＢの入力＞の処理S603において、データＢとパディングデータｐａｄＡとが一致する場合も想定し得る。すなわち、通常、パディングデータと分割データ（データＢ）とが同じであることは極めて稀なケースであると考えられるが、偶然等しくなる場合もあり得る。この際には、暫定データａを出力し、暫定データａを出力する際に、該当するデータ構造（レコード）を解放する。アプリケーション１００によって再びデータＢに連続するデータが供給された場合には、データＢが新規のデータであると判断し、データＢに対し新たにデータ構造（レコード）を生成し、データＢならびにデータＢに続けて供給されたデータに対して処理を行う。
【００５９】
以上の処理において、全データと各分割データとを関連づける識別子としてデータＩＤを用い、このデータＩＤおよびこれに関連するデータを、当該データＩＤをもつデータ構造に保存するとしたが、データ構造自身のアドレスなどのようなデータ構造を直接指定する値を、アプリケーション１００からの処理依頼に含めることで、データ構造へのデータＩＤの保存を省略しても良い。このときは、例えば上記アドレスにより指定されたデータ構造中に既に処理が開始されていること（データ構造が確保済みであること）を示すフラグを、上記アドレスに対応するデータ構造に入れるようにし、データ判別部１１３は、データ構造中のデータＩＤを確認するのではなく、このフラグを確認するようにすればよい。この点は、第１の実施形態と同様である。
【００６０】
なお、本例においては、全体データが2つに分割された場合について説明したが、全体データが分割されていない場合には＜第１のデータＡの入力＞の処理と＜完了＞の処理を実施すれば良い。また、全体データが3つ以上に分割されている場合には＜第2のデータＢの入力＞の処理を複数回繰り返せば良い。
【００６１】
以上のように、本実施の形態によっても、第１の実施の形態と同様に、従来に比べて、暗号化装置（ハードウェア）へのアクセスが１回少なくなるため、暗号化装置を用いる際のオーバーヘッド分を削減でき、よってシステム全体のパフォーマンスを向上させることができる。
【図面の簡単な説明】
【００６２】
【図１】本発明に係るデータ処理プログラムをＣＰＵに実行させた場合のＣＰＵの機能ブロック図。
【図２】本発明の第１の実施形態の動作を示すフローチャート。
【図３】本発明の第１の実施形態において暗号化対象となるデータが処理される様子を示す図。
【図４】本発明の第１の実施形態に係る複数のデータ構造を含むデータベースの一例を示す図。
【図５】本発明の第２の実施形態の動作を示すフローチャート。
【図６】本発明の第２の実施形態において暗号化対象となるデータが処理される様子を示す図。
【図７】本発明の第２の実施形態に係る複数のデータ構造を含むデータベースの一例を示す図。
【図１】
2009069281.tif 000003
【図２】
2009069281.tif 000004
【図３】
2009069281.tif 000005
【図４】
2009069281.tif 000006
【図５】
2009069281.tif 000007
【図６】
2009069281.tif 000008
【図７】
2009069281.tif 000009