(57)【特許請求の範囲】
【請求項１】
コンピュータに、
圧縮符号を用いたファイル圧縮の際に、対象ファイルより順次生成される圧縮符号を含む圧縮データを、固定長のブロック単位で順次生成し、
生成されたブロック単位の圧縮データのブロックと先頭の圧縮符号に対応する単語データと、当該単語データの前記ファイル内の位置とを対応付けた対応情報を生成し、
前記圧縮データを、前記ブロック単位で暗号化し、
前記対応情報を生成する処理によって生成された対応情報を、前記ブロック単位で生成され、暗号化された圧縮データが記録されたデータの第１の領域に登録し、前記第１の領域の先頭位置を前記データの第２の領域に登録する
処理を実行させることを特徴とする処理プログラム。
【請求項２】
前記暗号化する処理は、前記データの第１の領域に登録された対応情報を、前記ブロック単位で暗号化する
処理を実行させることを特徴とする請求項１に記載の処理プログラム。
【請求項３】
伸長時の開始終了位置を指定した伸長要求を取得すると、前記対応情報に基づいて、前記開始終了位置に対応するブロックを特定し、
前記特定する処理によって特定されたブロックを復号化し、
前記復号化する処理によって復号化されたブロックに含まれる圧縮符号を伸長し、
前記伸長する処理によって伸長されたデータから、前記開始終了位置に対応するデータを抽出する
処理を実行させることを特徴とする請求項１に記載の処理プログラム。
【請求項４】
圧縮符号を用いたファイル圧縮の際に、対象ファイルより順次生成される圧縮符号を含む圧縮データを、固定長のブロック単位で順次生成する第１の生成部と、
生成されたブロック単位の圧縮データのブロックと先頭の圧縮符号に対応する単語データと、当該単語データの前記ファイル内の位置とを対応付けた対応情報を生成する第２の生成部と、
前記圧縮データを、前記ブロック単位で暗号化する暗号化部と、
前記第２の生成部によって生成された対応情報を、前記ブロック単位で生成され、暗号化された圧縮データが記録されたデータの第１の領域に登録し、前記第１の領域の先頭位置を前記データの第２の領域に登録する登録部と、
を有することを特徴とする処理装置。
【請求項５】
コンピュータが、
圧縮符号を用いたファイル圧縮の際に、対象ファイルより順次生成される圧縮符号を含む圧縮データを、固定長のブロック単位で順次生成し、
生成されたブロック単位の圧縮データのブロックと先頭の圧縮符号に対応する単語データと、当該単語データの前記ファイル内の位置とを対応付けた対応情報を生成し、
前記圧縮データを、前記ブロック単位で暗号化し、
前記対応情報を生成する処理によって生成された対応情報を、前記ブロック単位で生成され、暗号化された圧縮データが記録されたデータの第１の領域に登録し、前記第１の領域の先頭位置を前記データの第２の領域に登録する
各処理を実行することを特徴とする処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理プログラムなどに関する。
【背景技術】
【０００２】
電子書籍や電子辞書などの配信において、データ転送量の縮小や著作権保護のため、圧縮や暗号化が必須の技術である。まず、圧縮では、ＺＩＰなどスライド窓を用いて最長一致文字列探索を行うＬＺ７７系が主流である。次に、暗号化では、ＡＥＳ（Advanced  Encryption  Standard）の共通鍵やＲＳＡ（Rivest  Shamir  Adleman）の公開鍵が主流である。圧縮と暗号化が必要な場合、一般的に圧縮処理の後に暗号化処理が２パスで実行される。そして、再生時には、復号化処理の後に伸長処理が２パスで実行される。
【０００３】
圧縮処理は、文字の出現頻度などの特性をもとにサイズ縮小を行うため、暗号化処理の前に実行する必要がある。また、ＺＩＰなどのスライド窓を用いるＬＺ７７系圧縮は、伸長時にスライド窓にデータを復元するため、必ず、先頭から伸長処理を実行しなければならない。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第００／５２６８４号
【特許文献２】特開平７−２２２１５２号公報
【特許文献３】特開２０００−３３０８７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、電子辞書などでは、高速な検索が要求される。圧縮と暗号化が施された辞書データを検索する場合、部分的に復号化処理と伸長処理を行うことができないという問題がある。特に、ビット単位に可変長で圧縮された辞書データを、バイト単位の固定長のブロックにまとめて暗号化が実行される。そのため、暗号化のブロック間で圧縮符号が分断されるという問題がある。
【０００６】
かかる問題について、図１を参照して説明する。図１は、圧縮暗号化処理および復号化伸長処理の一例を示す図である。なお、図１では、１ブロック／１セクタ（２０４８バイト）であるとする。図１に示すように、圧縮暗号化処理は、圧縮元のソースファイルのテキストデータを圧縮し、圧縮データを生成する。圧縮暗号化処理は、生成した圧縮データを固定長のブロック毎に分割すると、ブロック（セクタ）境界で圧縮符号の「泣き別れ」（分断）が発生する。すなわち、ブロック間で圧縮符号が分断される。
【０００７】
圧縮暗号化処理は、ビット単位に可変長の圧縮データをバイト単位の固定長のブロックにまとめ、ＣＢＣモードのＡＥＳで暗号化し、圧縮暗号化データを生成する。
【０００８】
再生時には、復号化伸長処理が、先頭ブロックから、復号化処理、伸長処理の順に実行される。本来、ＣＢＣモードのＡＥＳで暗号化された暗号化ファイルは、途中のブロックから部分的に復号化が可能なアルゴリズムであるにも係わらず、部分的に復号化伸長ができない。ＺＩＰなどのＬＺ７７系圧縮と暗号化を組み合わせると、ブロック間の圧縮符号の「泣き別れ」の問題と、先頭データから順にスライド窓を復元する必要がある問題が発生し、途中から部分的に復号化と伸長をすることができない。
【０００９】
１つの側面では、ファイル中の暗号化単位で区切られた部分に対し、部分的に復号化と伸長をすることを目的とする。１つの側面では、固定長のブロック間で圧縮符号が分断されることを防止することを目的とする。
【課題を解決するための手段】
【００１０】
第１の案では、コンピュータに、下記の処理を実行させる。コンピュータに、圧縮符号を用いたファイル圧縮の際に、対象ファイルより順次生成される圧縮符号を含む圧縮データを、固定長のブロック単位で順次生成し、生成された圧縮データの各ブロックの先頭の圧縮符号と前記圧縮符号に対応するデータの前記ファイル内の位置とを対応付けた対応情報を生成し、前記圧縮データを、前記ブロック単位で暗号化する処理を実行させる。
【発明の効果】
【００１１】
１つの態様によれば、ファイル中の暗号化単位で区切られた部分に対し、部分的に復号化と伸長をすることができる。また、固定長のブロック間で圧縮符号が分断されることを防止できる。
【図面の簡単な説明】
【００１２】
【図１】図１は、圧縮暗号化処理および復号化伸長処理の一例を示す図である。
【図２】図２は、本実施例に係る情報処理装置の圧縮暗号化処理の一例を示す図である。
【図３Ａ】図３Ａは、本実施例に係る情報処理装置の圧縮暗号化処理の流れの一例を示す図（１）である。
【図３Ｂ】図３Ｂは、本実施例に係る情報処理装置の圧縮暗号化処理の流れの一例を示す図（２）である。
【図４】図４は、動的辞書部の一例を示す図である。
【図５】図５は、圧縮ファイルの構成例を示す図である。
【図６】図６は、本実施例に係る情報処理装置の部分復号化伸長処理の一例を示す図である。
【図７Ａ】図７Ａは、本実施例に係る情報処理装置の部分復号化伸長処理の流れの一例を示す図（１）である。
【図７Ｂ】図７Ｂは、本実施例に係る情報処理装置の部分復号化伸長処理の流れの一例を示す図（２）である。
【図８】図８は、本実施例に係る情報処理装置の構成を示す機能ブロック図である。
【図９】図９は、圧縮用のケヤキ木のデータ構造の一例を示す図である。
【図１０】図１０は、伸長用のケヤキ木のデータ構造の一例を示す図である。
【図１１】図１１は、本実施例に係る圧縮暗号化部の構成を示す機能ブロック図である。
【図１２】図１２は、本実施例に係る部分復号化伸長部の構成を示す機能ブロック図である。
【図１３Ａ】図１３Ａは、本実施例に係る圧縮暗号化部の処理手順を示すフローチャート（１）である。
【図１３Ｂ】図１３Ｂは、本実施例に係る圧縮暗号化部の処理手順を示すフローチャート（２）である。
【図１３Ｃ】図１３Ｃは、本実施例に係る圧縮暗号化部の処理手順を示すフローチャート（３）である。
【図１４Ａ】図１４Ａは、本実施例に係る部分復号化伸長部の処理手順を示すフローチャート（１）である。
【図１４Ｂ】図１４Ｂは、本実施例に係る部分復号化伸長部の処理手順を示すフローチャート（２）である。
【図１５】図１５は、コンピュータのハードウェア構成例を示す図である。
【図１６】図１６は、コンピュータで動作するプログラムの構成例を示す図である。
【図１７】図１７は、実施形態のシステムにおける装置の構成例を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する処理プログラム、処理装置および処理方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１４】
図２は、本実施例に係る情報処理装置の圧縮暗号化処理の一例を示す図である。図２に示すように、情報処理装置は、ソースファイルを圧縮する際に、ソースファイルを読み出し、ソースファイルの先頭から順番に単語を抽出する。情報処理装置は、抽出した単語を圧縮し、圧縮して得られた圧縮符号を固定長のブロックへ格納する。情報処理装置は、圧縮符号数やパディングを用いてブロック間で分断しないように圧縮符号を固定長のブロックに格納する。圧縮符号数は、ブロック内に格納された圧縮符号の数である。パディングは、ブロック長に足りない分を補完することをいい、一例として、ビット単位に複数の０で補完する。固定長のブロックの長さは、一例として、２ＫＢであり、単一のセクタであっても、複数のセクタを纏めたものであっても良い。実施例では、１ブロック／１セクタであるとする。
【００１５】
情報処理装置は、圧縮符号化して得られた圧縮符号をブロックへ格納するのと並行して、論理アドレステーブルＬ１を生成する。論理アドレステーブルＬ１は、各ブロックの最初の圧縮符号に対する、圧縮前のソースアドレスと圧縮後の圧縮先アドレスとの相互のアドレス情報を記憶するテーブルである。例えば、論理アドレステーブルＬ１は、対象単語や文字、ソースアドレスおよび圧縮先アドレスを対応付けて記憶する。対象単語や文字は、ブロックの最初に格納される圧縮符号に対するソースファイル内の単語や文字のことである。ソースアドレスは、対象単語のソースファイル内のアドレスであり、例えば番地で表わされる。圧縮先アドレスは、対象単語に対する圧縮符号が格納されるブロックの先頭のアドレスであり、番地およびビットオフセットで表わされる。一例として、対象単語が「単語α」である場合、単語αのソースアドレスとして「３７４８」番地、ｂｌｏｃｋαの圧縮先アドレスとして「２０４８」番地および「０」ビットオフセットと記憶する。
【００１６】
情報処理装置は、固定のブロック毎に、各ブロックに含まれる情報を暗号化する。例えば、暗号化は、ブロック毎に、ＣＢＣモードのＡＥＳによって行われる。ＣＢＣモードによる暗号化は、暗号化対象のブロックと前ブロックとのＥＯＲ演算により行われる。なお、暗号化は、ＣＢＣモードに限定されず、部分伸長が可能であるブロック毎の暗号化を行うモードであれば良い。
【００１７】
次に、図３Ａおよび図３Ｂは、本実施例に係る情報処理装置の圧縮暗号化処理の流れの一例を示す図である。図３Ａでは、情報処理装置が圧縮符号化して得られた圧縮符号をブロックαへ格納するのと並行して、論理アドレステーブルＬ１を生成する処理について説明する。情報処理装置は、圧縮処理のワークエリアとして、メモリに記憶領域Ａ１、記憶領域Ａ２、記憶領域Ａ３、記憶領域Ａ４を設ける。以下の説明では適宜、記憶領域Ａ１、記憶領域Ａ２、記憶領域Ａ３をそれぞれ、符号化部、参照部、動的辞書部と呼ぶ。なお、図３Ａでは、ソースファイルＦ１内の対象単語を単語α１とし、単語α１は、ブロックαの最初に格納される圧縮符号に対する単語であるとする。単語α１のソースアドレスをａｄｄｒαとする。
【００１８】
情報処理装置は、ビットフィルタＣ１と単語α１の文字列とを比較して、単語α１の文字列がビットフィルタＣ１にヒットするか否かを判定する。ビットフィルタは、静的辞書を用いて圧縮する単語の文字列を特定するフィルタである。情報処理装置は、単語α１の文字列がビットフィルタＣ１にヒットした場合には、静的辞書に基づいて単語α１に対応する圧縮符号に変換し、記憶領域Ａ４に格納する。例えば、情報処理装置は、識別子「０」と単語α１の圧縮符号とを含む圧縮データｄ１を生成する。識別子「０」は、文字列が静的辞書に基づいて符号化されたことを示す情報である。情報処理装置は、圧縮データｄ１を記憶領域Ａ４に対して出力する。記憶領域Ａ４は、圧縮バッファであり、ブロック長の長さを有する。ここでは、記憶領域Ａ４は、ブロックαに対応する圧縮データを記憶する。
【００１９】
静的辞書とは、一般的な英語辞書、国語辞典などを基にして文書中に出現する単語や文字の出現頻度を特定し、出現頻度のより高い単語や文字に対して、より短い圧縮符号を割当てた辞書である。
【００２０】
これに対して、情報処理装置は、単語α２の文字列がビットフィルタＣ１の静的辞書にヒットしない場合には、動的辞書に登録された単語の文字列に対応する圧縮符号に変換し、記憶領域Ａ４に格納する。すなわち、動的辞書は、ビットフィルタＣ１にヒットしない単語はスライド窓の符号化部に格納され、格納された参照部の文字列と照合される。一致した文字列は、動的辞書に登録され、その登録番号が圧縮符号に割り当てられる。動的辞書に関する詳しい説明は後述する。例えば、情報処理装置は、単語α２の文字列を記憶領域Ａ１に格納し、記憶領域Ａ２に格納された文字列と、記憶領域Ａ１の文字列とを比較して、最長一致文字列を検索する。最長一致文字列は、記憶領域Ａ１に格納された文字列と、記憶領域Ａ２に格納された文字列のうち、最も長く一致する文字列である。
【００２１】
情報処理装置は、最長一致文字列を動的辞書部の記憶領域Ａ３に登録する。情報処理装置は、動的辞書部の登録内容に基づいて圧縮符号を生成する。すなわち、情報処理装置は、動的辞書部に登録した最長一致文字列の登録番号を、単語α２の文字列の圧縮符号として特定する。情報処理装置は、識別子「１」と単語α２の文字列の圧縮符号とを含む圧縮データｄ２を生成する。識別子「１」は、文字列が動的辞書に基づいて符号化されたことを示す情報である。情報処理装置は、圧縮データｄ２を記憶領域Ａ４に対して出力する。また、情報処理装置は、記憶領域Ａ１に格納された単語α２の文字列を、記憶領域Ａ２に追記することで、記憶領域Ａ２を更新する。
【００２２】
記憶領域Ａ２は、それぞれのデータサイズが定められたデータ領域である。例えば、記憶領域Ａ２は、例えば６４キロバイトの記憶領域である。情報処理装置は、記憶領域Ａ２に定められたデータサイズ以上のデータを格納する場合には、記憶領域Ａ２の先頭に格納された古いデータの上から新しいデータを格納する。記憶領域Ａ２内に格納されるデータは、データの格納に応じて更新される書き込み位置からの相対的なアドレスにより、先頭位置が示される。
【００２３】
記憶領域Ａ３は、入力ファイルの大きさに応じて、データサイズが定められた記憶領域である。例えば、記憶領域Ａ３は、例えば６４キロバイトの記憶領域である。例えば、情報処理装置は、記憶領域Ａ３に定められたデータサイズ以上のデータを格納する場合には、新たなデータの格納を抑止する。
【００２４】
情報処理装置は、仮に圧縮データを記憶領域Ａ４に書き込むとブロック長を超えるか否かを判定する。情報処理装置は、仮に圧縮データを記憶領域Ａ４に書き込むとブロック長を超えない場合には、圧縮データをブロックαとしての記憶領域Ａ４に書き込む。
【００２５】
これに対して、情報処理装置は、仮に圧縮データを記憶領域Ａ４に書き込むとブロック長を超える場合には、当該圧縮データをブロックαとしての記憶領域Ａ４に書き込まない。情報処理装置は、ブロックαとしての記憶領域Ａ４に既に書き込まれた圧縮データの数を示す圧縮符号数を記憶領域Ａ４の先頭に書き込む。情報処理装置は、ビット単位のパディングを用いてブロックαに対応する記憶領域Ａ４を補完する。そして、情報処理装置は、記憶領域Ａ４に格納されたブロックαのデータを、圧縮ファイルＦ２に格納する。なお、情報処理装置は、記憶領域Ａ４に書き込むとブロック長を超えると判定された圧縮データを、次のブロックα＋１としての記憶領域Ａ４に書き込み、次の単語の処理に移行する。
【００２６】
情報処理装置は、ブロックαに関する情報を論理アドレステーブルＬ１に追加する。例えば、情報処理装置は、対象単語としてブロックαの先頭単語である「単語α１」、ソースアドレスとしてａｄｄｒαを示す「３７４８」番地、圧縮先アドレスとしてｂｌｏｃｋα＋０を示す「２０４８」番地および「０」ビットオフセットを含むレコードを追加する。
【００２７】
図３Ｂでは、情報処理装置がブロックαを暗号化する場合の処理について説明する。情報処理装置は、圧縮処理のワークエリアとして、メモリに記憶領域Ａ４、記憶領域Ａ５、記憶領域Ａ６、記憶領域Ａ７を設ける。記憶領域Ａ４は、圧縮バッファであり、ブロックαに対応するデータを記憶する。記憶領域Ａ５、記憶領域Ａ６、記憶領域Ａ７は、ブロックを暗号化するために用いられる。
【００２８】
情報処理装置は、記憶領域Ａ４に記憶された圧縮符号化されたブロックαのデータと記憶領域Ａ５に記憶された暗号化されたブロックα―１のデータとのＥＯＲ演算を行い、ＥＯＲ演算結果を記憶領域Ａ６に格納する。なお、ブロックが最初のブロックである場合には、ｎビットの初期値ＩＶとのＥＯＲ演算が行われ、ＥＯＲ演算結果が記憶領域Ａ６に格納される。記憶領域Ａ５は、例えば、暗号化バッファである。記憶領域Ａ６は、ＥＯＲ演算結果バッファである。情報処理装置は、ＥＯＲ演算結果をアフィン暗号化関数（Ｅｋ）で演算して、ブロックαの暗号化を行い、記憶領域Ａ７に格納する。記憶領域Ａ７は、暗号化（Ｅｋ）バッファである。情報処理装置は、記憶領域Ａ７に格納された圧縮暗号化ブロックのデータを、圧縮暗号化ファイルＦ３に格納する。すなわち、情報処理装置は、圧縮符号化されたブロックαを暗号化する。
【００２９】
図４は、動的辞書部の一例を示す図である。図４に示される動的辞書部は、記憶領域Ａ３と参照テーブルＴ１とを含む。参照テーブルＴ１は、登録番号と、格納位置と、データ長とを対応づけて保持する。図４に示す例では、登録番号、格納位置、データ長を２進数で表す。登録番号は、記憶領域Ａ３に登録された最長一致の文字列が、何番目に登録されたデータであるかを示す情報である。なお、本実施例では、１番目に登録されたデータの登録番号を「００００００００」とする。格納位置は、最長一致文字列の先頭文字が格納された記憶領域Ａ３内の位置（バイト）を示す情報である。データ長は、最長一致文字列の長さを示す情報である。
【００３０】
例えば、最長一致文字列「Kataoka△」が記憶領域Ａ３に５番目に登録された最長一致文字列である場合には、情報処理装置は、最長一致文字列「Kataoka△」に対応する登録番号として、参照テーブルＴ１の登録番号に「０００００００１」を登録する。また、情報処理装置は、最長一致文字列「Kataoka△」の先頭文字「K」が記憶領域Ａ３の「５」に格納されているため、格納位置に「０００００００００１０１」を登録する。情報処理装置は、最長一致文字列「Kataoka△」のデータ長が「８」であるため、データ長に「１０００」を登録する。
【００３１】
図４に示すように、最長一致文字列「Kataoka△」が動的辞書部に登録されたものとすると、最長一致文字列「Kataoka△」の登録番号は「０００００００１」となる。この場合には、情報処理装置は、文字列「Kataoka△」の圧縮符号を「０００００００１」とする。このため、情報処理装置は、文字列「Kataoka△」の圧縮データｄ２として、識別子「１」、登録番号「０００００００１」を含む圧縮データｄ２を生成する。
【００３２】
図５は、圧縮ファイルのブロック構成例を示す図である。図５に示すように、圧縮ファイルＦ２は、ヘッダ部と、圧縮データと、トレーラ部とを有する。トレーラ部は、圧縮処理が完了した後の論理アドレステーブルＬ１および動的辞書部Ａ３の情報を記憶する。論理アドレステーブルＬ１は、図３Ａに示した論理アドレステーブルに対応する。動的辞書部Ａ３の情報は、図４に示した動的辞書部の情報に対応する。ヘッダ部には、トレーラ部に格納された論理アドレステーブルＬ１へのポインタが格納される。また、ヘッダ部には、トレーラ部に格納された動的辞書部Ａ３の情報へのポインタが格納される。情報処理装置は、後述する部分復号化伸長時において、ヘッダ部の論理アドレステーブルＬ１へのポインタを利用し、論理アドレステーブルＬ１を参照できる。なお、論理アドレステーブルＬ１は、トレーラ部内の独立したブロックの先頭から格納されることが望ましい。これにより、トレーラ部は、圧縮データと同様に暗号化されるため、部分復号化伸長時に、情報処理装置は、論理アドレステーブルＬ１を高速に復号化することで、部分復号化伸長を高速化することができる。
【００３３】
図６は、本実施例に係る情報処理装置の部分復号化伸長処理の一例を示す図である。図６に示すように、情報処理装置は、圧縮暗号化データを部分復号化伸長する際に、アプリケーションからソースファイルＦ１の開始終了位置を指定した読み出し命令を取得する。情報処理装置は、ヘッダ部に記憶された論理アドレステーブルＬ１へのポインタが指すブロックを復号化する。論理アドレステーブルＬ１を復号化するためである。情報処理装置は、論理アドレステーブルＬ１を参照し、指定された開始終了位置に対応するブロックを伸長対象として特定する。情報処理装置は、伸長対象として特定されたブロックを復号化する。情報処理装置は、復号化されたブロックを伸長する。情報処理装置は、伸長されたブロックのデータから、開始終了位置に対応するデータを抽出する。
【００３４】
ここで、情報処理装置が、ソースファイルの５４３２番地〜７８５１番地の読み出し命令を取得した場合の部分復号化伸長処理について説明する。情報処理装置は、ヘッダ部に記憶された論理アドレステーブルＬ１へのポインタが指すブロックを復号化することで、論理アドレステーブルＬ１を復号化する。情報処理装置は、論理アドレステーブルＬ１を参照し、指定された開始位置である５４３２番地から終了位置である７８５１番地までのデータを含むブロックを伸長対象として特定する。ここでは、開始位置である５４３２番地は、ソースアドレスの３７４８番地から７３６３番地までの間にあるので、ブロックα（圧縮）に含まれる。終了位置である７８５１番地は、ソースアドレスの７３６３番地から９３２７番地までの間にあるので、ブロックβに含まれる。情報処理装置は、ブロックαおよびブロックβを伸長対象として特定する。
【００３５】
情報処理装置は、伸長対象として特定されたブロックα、ブロックβおよび復号化に必要なブロックを圧縮暗号化ファイルＦ３から読み出す。情報処理装置は、ブロックαおよびブロックβに対して、部分復号化処理を実行する。この結果、情報処理装置は、ブロックαを復号化したブロックである圧縮ブロック２およびブロックβを復号化したブロックである圧縮ブロック３を生成する。なお、部分復号化処理の詳細は、後述する。
【００３６】
情報処理装置は、圧縮ブロック２および圧縮ブロック３に対して、部分伸長処理を実行する。この結果、情報処理装置は、圧縮ブロック２に対して、ソースファイルＦ１上の３７４８番地から７３６２番地までの伸長データを生成する。情報処理装置は、圧縮ブロック３に対して、ソースファイルＦ１上の７３６３番地から９３２６番地までの伸長データを生成する。なお、部分伸長処理の詳細は、後述する。
【００３７】
情報処理装置は、生成した伸長データから、指定された開始位置である５４３２番地から終了位置である７８５１番地までの伸長データを抽出する。
【００３８】
情報処理装置は、抽出した伸長データを読み出し命令のあったアプリケーションに転送する。
【００３９】
次に、図７Ａおよび図７Ｂは、本実施例に係る部分復号化伸長処理の流れの一例を示す図である。図７Ａでは、情報処理装置の部分復号化処理について説明する。情報処理装置は、部分復号化処理のワークエリアとして、メモリに記憶領域Ｂ１、記憶領域Ｂ２、記憶領域Ｂ３を設ける。なお、図７Ａでは、情報処理装置は、論理アドレステーブルＬ１を参照し、ブロックαを伸長対象として特定したとする。
【００４０】
情報処理装置は、圧縮暗号化ファイルＦ３からブロックαを読み出し、ブロックαのデータを復号化関数（Ｄｋ）で演算して、ブロックαの復号化を行い、記憶領域Ｂ１に格納する。記憶領域Ｂ１は、復号化バッファ（Ｄｋ）である。情報処理装置は、圧縮暗号化ファイルＦ３からブロックαの１つ前のブロックα―１を読み出し、記憶領域Ｂ２に格納する。ブロックα―１は、ブロックαの復号化に必要なブロックである。そして、情報処理装置は、記憶領域Ｂ１に記憶された復号化されたブロックαのデータと記憶領域Ｂ２に記憶された圧縮暗号化されたブロックα―１のデータとのＥＯＲ演算を行い、ＥＯＲ演算結果を記憶領域Ｂ３に格納する。すなわち、情報処理装置は、圧縮暗号化されたブロックαを復号化し、圧縮符号数、圧縮データおよびパディングを含む平文を生成する。
【００４１】
図７Ｂでは、情報処理装置の部分伸長処理について説明する。情報処理装置は、部分伸長処理のワークエリアとして、メモリに記憶領域Ｂ３、記憶領域Ｂ４、記憶領域Ｂ５および記憶領域Ｂ６を設ける。情報処理装置は、記憶領域Ｂ５に、図５のトレーラ部に格納された動的辞書部の情報をロードする。情報処理装置は、記憶領域Ｂ３に記憶されたブロックαの圧縮データを順次読み出す。情報処理装置は、読み出した圧縮データに基づいて、伸長データの生成を行う。以下の説明では適宜、記憶領域Ｂ４を符号化部と呼び、記憶領域Ｂ５を動的辞書部と呼ぶ。図３Ａに示したブロックαに含まれる圧縮データｄ１，ｄ２に対する伸長処理を説明する。
【００４２】
情報処理装置は、圧縮データｄ１を読み出し、圧縮データｄ１の識別子を判定する。情報処理装置は、圧縮データｄ１の識別子が「０」である場合には、圧縮データｄ１が、静的辞書によって符号化されたと判定する。情報処理装置は、圧縮データｄ１と伸長用ケヤキ木とを比較して、伸長用ケヤキ木に示される伸長データを特定する。ここでは、伸長データは、単語α１である。情報処理装置は、伸長データである単語α１を、記憶領域Ｂ６に書き込む。記憶領域Ｂ６は、伸長バッファである。
【００４３】
情報処理装置は、圧縮データｄ２を読み出し、圧縮データｄ２の識別子を判定する。情報処理装置は、圧縮データｄ２の識別子が「１」である場合には、圧縮データｄ２が、動的辞書によって符号化されたと判定する。情報処理装置は、圧縮データｄ２内の圧縮符号に基づいて、動的辞書部を参照し、伸長データを生成する。ここでは、伸長データは、単号α２である。情報処理装置は、伸長データである単語α２を、記憶領域Ｂ６に書き込む。
【００４４】
このようにして、情報処理装置は、ブロックαに含まれる圧縮データを順次伸長し、伸長した伸長データを順次記憶領域Ｂ６に書き込む。情報処理装置は、記憶領域Ｂ６に書き込まれた伸長データから、指定された開始位置から終了位置までの伸長データ（リード領域）を抽出する。一例として、論理アドレステーブルＬ１によりブロックαに対応するソースファイルＦ１上の番地が３７４８番地であるとする。読み出し命令で指定された開始位置が５４３２番地、終了位置が７８５１番地であれば、記憶領域Ｂ６の先頭位置から（５４３２−３７４８＝１６８４）番地分オフセットした位置から（７８５１−５４３２）番地分の伸長データ（リード領域）を抽出する。
【００４５】
情報処理装置は、抽出した伸長データ（リード領域）を読み出し命令のあったアプリケーションに転送する。
【００４６】
図８は、本実施例に係る情報処理装置の構成を示す機能ブロック図である。図８に示すように、この情報処理装置１００は、圧縮暗号化部１００ａと、部分復号化伸長部１００ｂと、記憶部１００ｃとを有する。
【００４７】
圧縮暗号化部１００ａは、図２、図３Ａおよび図３Ｂに示した圧縮暗号化処理を実行する処理部である。部分復号化伸長部１００ｂは、図６、図７Ａおよび図７Ｂに示した部分復号化伸長処理を実行する処理部である。記憶部１００ｃは、圧縮暗号化対象のソースファイルＦ１、圧縮処理により得られる圧縮ファイルＦ２、圧縮ファイルＦ２を暗号化して得られる圧縮暗号化ファイルＦ３などを格納する。
【００４８】
また、情報処理装置１００は、図３Ａ、図３Ｂなどに示した記憶領域Ａ１，Ａ２，Ａ３，Ａ４，Ａ５，Ａ６，Ａ７を、記憶部１００ｃに設定する。情報処理装置１００は、図７Ａ、図７Ｂなどに示した記憶領域Ｂ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５，Ｂ６を、記憶部１００ｃに設定する。また、記憶部１００ｃは、圧縮用のケヤキ木および伸長用のケヤキ木を記憶する。
【００４９】
図９は、圧縮用のケヤキ木のデータ構造の一例を示す図である。図９に示すように、圧縮用のケヤキ木５０は、２グラム、ビットマップ、ポインタ、基礎単語、文字列長、出現頻度、符号長、圧縮符号を有する。このうち、２グラム、ビットマップ、ポインタ、単語、文字列長は、ビットフィルタＣ１に対応する。また、単語、文字列長、出現頻度、符号長、圧縮符号は、静的辞書Ｃ２に対応する。
【００５０】
２グラムは、２文字の文字列を示す情報である。ビットマップは、２グラムの文字列に対応するビットマップを示す。例えば、「aa」に対応するビットマップは「０＿０＿０＿０＿０」となる。ポインタは、ビットマップに対応する単語の位置を示すポインタである。
【００５１】
単語は、静的辞書Ｃ２に登録された単語である。単語には、英文字のみならず、日本語の単語やＣＪＫ文字なども含まれる。文字列長は、単語に対応する文字列長である。出現頻度は、単語の出現頻度である。符号長は、圧縮符号の符号長である。圧縮符号は、単語に割り当てられた圧縮符号である。
【００５２】
図１０は、伸長用のケヤキのデータ構造の一例を示す図である。図１０に示すように、伸長用のケヤキ６０は、複数の枝６０−１〜６０−ｎと、葉６１−１〜６０−ｍとを有する。各枝６０−１〜６０−ｎには、所定のビット列が割り当てられる。情報処理装置１００は、圧縮データのビット列と、枝６０−１〜６０−ｎに割り当てられたビット列とを比較して、圧縮データのビット列にヒットする枝に接続される葉を特定する。葉には、圧縮データに対応する文字列の情報が格納される。
【００５３】
例えば、葉のデータ構造は、６１に示すものとなる。例えば、葉には、葉識別情報と、圧縮符号長と、単語へのポインタとが格納される。葉識別情報は、葉を一意に識別する情報である。圧縮符号長は、各枝６０−１〜６０−ｎと比較した圧縮データのビット列の内、有効な長さを示す情報である。単語へのポインタは、圧縮符号を伸長した場合の伸長データを一意に示す情報である。
【００５４】
例えば、ビット列「０１０１１１１１０１１１１０１」が枝６０−４にヒットし、枝６０−４に接続される葉６１−４の圧縮符号長が「１１」であり、単語へのポインタで示される単語が「talk△」であるとする。この場合には、ビット列の先頭から１１ビット目までのビット列「０１０１１１１１０１１」が、単語「talk△」に対応する圧縮符号となる。
【００５５】
図１１は、本実施例に係る圧縮暗号化部の構成の一例を示す機能ブロック図である。図１１に示すように、この圧縮暗号化部１００ａは、ファイルリード部１０１、圧縮部１０２、ブロックライト部１０３、テーブル更新部１０４、テーブルライト部１０５、暗号化部１０６、ファイルライト部１０７を有する。
【００５６】
ファイルリード部１０１は、ソースファイルＦ１内のコンテンツ部分のデータを読み出す処理部である。ファイルリード部１０１は、単語を先頭から抽出し、抽出した単語を圧縮部１０２に順次出力する。例えば、ファイルリード部１０１は、ソースファイルＦ１内のコンテンツ部分のデータが単語α１、単語α２である場合には、単語α１、単語α２の順に、各単語を圧縮部１０２に出力する。
【００５７】
圧縮部１０２は、単語を圧縮する処理部である。圧縮部１０２は、単語の文字列とビットフィルタＣ１とを比較して、単語の文字列がビットフィルタＣ１にヒットするか否かを判定する。圧縮部１０２は、単語の文字列がビットフィルタＣ１にヒットした場合には、単語の文字列を静的辞書Ｃ２に基づいて符号化する。例えば、圧縮部１０２は、静的辞書Ｃ２を参照し、文字列に対応する単語を、静的辞書Ｃ２から特定し、特定した単語に対応する圧縮符号を特定する。そして、圧縮部１０２は、識別子に「０」と、静的辞書Ｃ２に登録されている文字列の圧縮符号を含む圧縮データを生成し、圧縮データをブロックライト部１０３に出力する。
【００５８】
圧縮部１０２は、単語の文字列がビットフィルタＣ１にヒットしない場合には、単語の文字列を動的辞書に基づいて符号化する。例えば、圧縮部１０２は、単語の文字列を符号化部となる記憶領域Ａ１に格納する。圧縮部１０２は、記憶領域Ａ１と、参照部となる記憶領域Ａ２に格納されたデータとを比較して、最長一致文字列を検索する。圧縮部１０２は、最長一致文字列を動的辞書部の記憶領域Ａ３に登録する。圧縮部１０２は、動的辞書部の登録内容に基づいて圧縮符号を生成する。すなわち、圧縮部１０２は、動的辞書部に登録した最長一致文字列の登録番号を、文字列の圧縮符号として特定する。圧縮部１０２は、識別子「１」と、動的辞書の登録番号とを含む圧縮データを生成し、圧縮データをブロックライト部１０３に出力する。
【００５９】
ブロックライト部１０３は、圧縮データを固定長のブロックに格納する処理部である。ブロックライト部１０３は、仮に圧縮データを記憶領域Ａ４に書き込むとブロック長を超えるか否かを判定する。ブロックライト部１０３は、仮に圧縮データを記憶領域Ａ４に書き込むとブロック長を超えない場合には、当該圧縮データを記憶領域Ａ４に書き込む。ブロックライト部１０３は、仮に圧縮データを記憶領域Ａ４に書き込むとブロック長を超える場合には、当該圧縮データを記憶領域Ａ４に書き込まない。ブロックライト部１０３は、記憶領域Ａ４に既に書き込まれた圧縮データの数を示す圧縮符号数を記憶領域Ａ４の先頭に書き込む。ブロックライト部１０３は、パディングを用いて記憶領域Ａ４の残りの領域を補完する。ブロックライト部１０３は、記憶領域Ａ４に記憶されたブロックを圧縮ブロックとして圧縮ファイルＦ２に格納する。ブロックライト部１０３は、記憶領域Ａ４に記憶された圧縮ブロックに関する情報をテーブル更新部１０４に出力する。
【００６０】
ブロックライト部１０３は、記憶領域Ａ４に書き込むとブロック長を超えると判定された圧縮データを、記憶領域Ａ４に書き込む。すなわち、ブロックライト部１０３は、次のブロックとしての記憶領域Ａ４に書き込む。
【００６１】
テーブル更新部１０４は、圧縮ブロックに関する情報を論理アドレステーブルＬ１に追加する処理部である。テーブル更新部１０４は、該当ブロックに対応する、対象単語、ソースアドレスおよび圧縮先アドレスを含むレコードを論理アドレステーブルＬ１に追加する。対象単語には、該当ブロックに対応するソースファイルＦ１上の先頭単語が設定される。ソースアドレスには、ソースファイルＦ１上の先頭単語のアドレス（番地）が設定される。圧縮先アドレスには、該当ブロックの圧縮ファイルＦ２上のアドレス（番地、ビットオフセット）が設定される。
【００６２】
テーブルライト部１０５は、論理アドレステーブルＬ１を圧縮ファイルＦ２のトレーラ部に格納する処理部である。テーブルライト部１０５は、ソースファイルＦ１内のデータの圧縮処理が完了した後、論理アドレステーブルＬ１を圧縮ファイルＦ２のトレーラ部に格納する。そして、テーブルライト部１０５は、トレーラ部に格納された論理アドレステーブルＬ１へのポインタを圧縮ファイルＦ２のヘッダ部に格納する。
【００６３】
暗号化部１０６は、ブロックを暗号化する処理部である。暗号化部１０６は、圧縮ファイルＦ２のブロックを先頭から抽出し、抽出したブロックを暗号化する。例えば、暗号化部１０６は、先頭のブロックを抽出した場合には、先頭の圧縮符号化されたブロックのデータと初期値ＩＶとのＥＯＲ演算を行い、ＥＯＲ演算結果を記憶領域Ａ６に格納する。暗号化部１０６は、先頭のブロック以降のブロックを抽出した場合には、圧縮符号化されたブロックのデータと１つ前の暗号化されたブロックのデータとのＥＯＲ演算を行い、ＥＯＲ演算結果を記憶領域Ａ６に格納する。暗号化部１０６は、ＥＯＲ演算結果をアフィン暗号化関数（Ｅｋ）で演算し、得られたブロックを圧縮暗号化ブロックとして記憶領域Ａ７に格納する。暗号化部１０６は、記憶領域Ａ７に格納された圧縮暗号化ブロックのデータを、ファイルライト部１０７に出力する。なお、暗号化部１０６は、圧縮ファイルＦ２の圧縮データおよびトレーラ部を暗号化する。
【００６４】
ファイルライト部１０７は、暗号化部１０６から圧縮暗号化ブロックを取得し、取得した圧縮暗号化ブロックを圧縮暗号化ファイルＦ３に書き込む処理部である。
【００６５】
図１２は、本実施例に係る部分復号化伸長部の構成の一例を示す機能ブロック図である。図１２に示すように、この部分復号化伸長部１００ｂは、ブロック特定部１１０、ファイルリード部１１１、部分復号化部１１２、部分伸長部１１３、伸長データ出力部１１４を有する。
【００６６】
ブロック特定部１１０は、圧縮暗号化ファイルＦ３内の、部分復号化伸長する圧縮暗号化ブロックを特定する処理部である。ブロック特定部１１０は、ソースファイルＦ１の開始終了位置を指定した読み出し命令を取得すると、論理アドレステーブルＬ１を復号化する。例えば、ブロック特定部１１０は、圧縮ファイルＦ２内のヘッダ部に記憶された論理アドレステーブルＬ１へのポインタが指す位置のブロックを復号化する。この結果、ブロック特定部１１０は、論理アドレステーブルＬ１を復号化できる。ブロック特定部１１０は、論理アドレステーブルＬ１を参照し、開始終了位置を含むブロック（圧縮暗号化ブロック）を伸長対象として特定する。ブロック特定部１１０は、伸長対象として特定された圧縮暗号化ブロックをファイルリード部１１１に出力する。
【００６７】
ファイルリード部１１１は、圧縮暗号化ファイルＦ３内の、伸長対象として特定された圧縮暗号化ブロックおよび復号化に必要な圧縮暗号化ブロックを読み出す処理部である。ファイルリード部１１１は、伸長対象として特定された圧縮暗号化ブロックを圧縮暗号化ファイルＦ３から読み出し、部分復号化部１１２に出力する。ファイルリード部１１１は、復号化に必要な圧縮暗号化ブロックとして、伸長対象として特定された圧縮暗号化ブロックの１つ前の圧縮暗号化ブロックを圧縮暗号化ファイルＦ３から読み出し、部分復号化部１１２に出力する。
【００６８】
部分復号化部１１２は、伸長対象として特定されたブロック（圧縮暗号化ブロック）を復号化する処理部である。部分復号化部１１２は、伸長対象として特定された圧縮暗号化ブロックのデータを復号化関数（Ｄｋ）で演算する。部分復号化部１１２は、演算した結果を記憶領域Ｂ１に格納する。部分復号化部１１２は、伸長対象として特定された圧縮暗号化ブロックの１つ前の圧縮暗号化ブロックのデータを記憶領域Ｂ２に格納する。部分復号化部１１２は、記憶領域Ｂ１に記憶されたデータと、記憶領域Ｂ２に記憶されたデータとのＥＯＲ演算を行い、ＥＯＲ演算結果を記憶領域Ｂ３に格納する。この結果、部分復号化部１１２は、伸長対象として特定された圧縮暗号化ブロックについて、圧縮符号数、圧縮データおよびパディングを含む圧縮ブロックを生成する。部分復号化部１１２は、圧縮ブロックを部分伸長部１１３に出力する。
【００６９】
部分伸長部１１３は、復号化した圧縮ブロックを伸長する処理部である。部分伸長部１１３は、圧縮ブロック内の圧縮データを先頭から読み出し、読み出した圧縮データの識別子に基づいて圧縮データを伸長する。識別子は、圧縮データの先頭ビットに対応する。部分伸長部１１３は、圧縮データの識別子を判定する。部分伸長部１１３は、圧縮データの識別子が「０」である場合には、伸長用のケヤキ木６０を用いて圧縮データを伸長する。例えば、伸長用のケヤキ木６０のデータ構造は、図１０に示したものに対応する。部分伸長部１１３は、ケヤキ木６０の各枝に割り当てられたビット列と、識別子を除いた圧縮データとを比較して、圧縮データと同一のビット列となる枝に対応付けられた葉を特定する。部分伸長部１１３は、特定した葉を参照し、単語のポインタに示される文字列を、圧縮データの伸長データとして生成し、生成した伸長データを記憶領域Ｂ６に格納する。
【００７０】
部分伸長部１１３は、圧縮データの識別子が「１」である場合には、記憶領域Ｂ２に格納された動的辞書部の情報を用いて圧縮データを伸長する。例えば、部分伸長部１１３は、圧縮データから識別子を取り除くことで、動的辞書部の登録番号を取得する。部分伸長部１１３は、取得した登録番号と、参照テーブルＴ１とを比較して、記憶領域Ｂ２に格納された伸長データの格納位置およびデータ長を特定する。部分伸長部１１３は、格納位置およびデータ長に対応する文字列を記憶領域Ｂ２から取得し、取得した文字列を伸長データとして生成する。部分伸長部１１３は、生成した伸長データを記憶領域Ｂ６に格納する。
【００７１】
伸長データ出力部１１４は、部分復号化伸長された伸長データを出力する処理部である。伸長データ出力部１１４は、記憶領域Ｂ６に書き込まれた伸長データから、読み出し命令で指定された開始終了位置の伸長データを抽出する。伸長データ出力部１１４は、抽出した伸長データを、読み出し命令のあったアプリケーションに出力する。
【００７２】
次に、図１３Ａ〜図１３Ｃおよび図１４Ａ〜図１４Ｂに示した圧縮暗号化部１００ａおよび部分復号化伸長部１００ｂの処理手順について説明する。
【００７３】
図１３Ａ〜図１３Ｃは、本実施例に係る圧縮暗号化部の処理手順を示すフローチャートである。図１３Ａに示すように、圧縮暗号化部１００ａは、前処理を実行する（ステップＳ１０１）。ステップＳ１０１の前処理において、圧縮暗号化部１００ａは、例えば、記憶領域Ａ１〜Ａ７を記憶部１００ｃに確保する。
【００７４】
圧縮暗号化部１００ａは、圧縮暗号化対象のソースファイルＦ１を読み出し（ステップＳ１０２）、単語を読み出す（ステップＳ１０３）。圧縮暗号化部１００ａは、読み出した単語の圧縮処理を実行する（ステップＳ１０４）。なお、圧縮処理の処理手順は、後述する。
【００７５】
圧縮暗号化部１００ａは、圧縮データを記憶領域Ａ４（圧縮バッファ）に書き込むとブロック長を超えるか否かを判定する（ステップＳ１０５）。
【００７６】
圧縮暗号化部１００ａは、圧縮データを記憶領域Ａ４（圧縮バッファ）に書き込むとブロック長を超えない場合には（ステップＳ１０５；Ｎｏ）、圧縮データを記憶領域Ａ４（圧縮バッファ）に書き込む（ステップＳ１０６）。そして、圧縮暗号化部１００ａは、ステップＳ１１１に移行する。
【００７７】
一方、圧縮暗号化部１００ａは、圧縮データを記憶領域Ａ４（圧縮バッファ）に書き込むとブロック長を超える場合には（ステップＳ１０５；Ｙｅｓ）、圧縮データを圧縮バッファに書き込む処理をしない。そして、圧縮暗号化部１００ａは、圧縮バッファに圧縮符号数およびパディングを設定する（ステップＳ１０７）。例えば、圧縮暗号化部１００ａは、圧縮バッファに既に書き込まれた圧縮データの数を示す圧縮符号数を圧縮バッファの先頭に書き込む。圧縮暗号化部１００ａは、パディングを用いて圧縮バッファの残りの領域を補完する。この結果、ブロックのデータが圧縮バッファに生成される。
【００７８】
続いて、圧縮暗号化部１００ａは、論理アドレステーブルＬ１を更新する（ステップＳ１０８）。例えば、圧縮暗号化部１００ａは、該当ブロックに対応する、対象単語、ソースアドレスおよび圧縮先アドレスを含むレコードを論理アドレステーブルＬ１に追加する。対象単語には、該当ブロックに対応するソースファイルＦ１上の先頭単語が設定される。ソースアドレスには、ソースファイルＦ１上の先頭単語のアドレス（番地）が設定される。圧縮先アドレスには、該当ブロックの圧縮ファイルＦ２上のアドレス（番地、ビットオフセット）が設定される。
【００７９】
圧縮暗号化部１００ａは、記憶領域Ａ４（圧縮バッファ）のデータを圧縮ファイルＦ２に書き込む（ステップＳ１０９）。そして、圧縮暗号化部１００ａは、圧縮バッファを初期化し、圧縮データを圧縮バッファに書き込む（ステップＳ１１０）。そして、圧縮暗号化部１００ａは、ステップＳ１１１に移行する。
【００８０】
ステップＳ１１１では、圧縮暗号化部１００ａは、ソースファイルＦ１の終点か否かを判定する（ステップＳ１１１）。圧縮暗号化部１００ａは、ソースファイルＦ１の終点でない場合には（ステップＳ１１１，Ｎｏ）、ステップＳ１０３に移行する。
【００８１】
一方、圧縮暗号化部１００ａは、ソースファイルＦ１の終点の場合には（ステップＳ１１１，Ｙｅｓ）、記憶領域Ａ４（圧縮バッファ）内の圧縮データについてブロックのデータを生成すべく、次の処理を行う。すなわち、圧縮暗号化部１００ａは、圧縮バッファに圧縮符号数およびパディングを設定する（ステップＳ１１２）。圧縮暗号化部１００ａは、論理アドレステーブルＬ１を更新する（ステップＳ１１３）。圧縮暗号化部１００ａは、圧縮バッファのデータを圧縮ファイルＦ２に書き込む（ステップＳ１１４）。
【００８２】
圧縮暗号化部１００ａは、論理アドレステーブルＬ１を圧縮ファイルＦ２のトレーラ部に書き込む（ステップＳ１１５）。加えて、圧縮暗号化部１００ａは、トレーラ部に格納した論理アドレステーブルＬ１へのポインタを圧縮ファイルＦ２のヘッダ部に書き込む。
【００８３】
そして、圧縮暗号化部１００ａは、圧縮ファイルＦ２の暗号化処理を実行し（ステップＳ１１６）、圧縮暗号化処理を終了する。なお、暗号化処理の処理手順は、後述する。
【００８４】
図１３Ｂは、圧縮暗号化部１００ａの処理手順のうち圧縮処理の処理手順を示すフローチャートである。図１３Ｂに示すように、圧縮暗号化部１００ａは、単語を取得すると（ステップＳ１２１）、単語の文字列とビットフィルタＣ１とを比較し、単語の文字列がビットフィルタＣ１にヒットするか否かを判定する（ステップＳ１２２）。
【００８５】
圧縮暗号化部１００ａは、単語の文字列がビットフィルタＣ１にヒットした場合には（ステップＳ１２２；Ｙｅｓ）、静的辞書Ｃ２に登録されている圧縮符号を特定する（ステップＳ１２３）。圧縮暗号化部１００ａは、識別子「０」と圧縮符号とを含む圧縮データを生成し（ステップＳ１２４）、圧縮処理を終了する。
【００８６】
一方、圧縮暗号化部１００ａは、単語の文字列がビットフィルタＣ１にヒットしない場合には（ステップＳ１２２，Ｎｏ）、動的辞書を参照する（ステップＳ１２５）。そして、圧縮暗号化部１００ａは、単語の文字列が動的辞書に既に存在しているか否かを判定する（ステップＳ１２６）。圧縮暗号化部１００ａは、単語の文字列が動的辞書に存在している場合には（ステップＳ１２６；Ｙｅｓ）、ステップＳ１２９に移行する。
【００８７】
一方、圧縮暗号化部１００ａは、単語の文字列が動的辞書に存在しない場合には（ステップＳ１２６；Ｎｏ）、最長一致文字列を検索する（ステップＳ１２７）。圧縮暗号化部１００ａは、動的辞書を更新し（ステップＳ１２８）、ステップＳ１２９に移行する。
【００８８】
ステップＳ１２９において、圧縮部１００ａは、識別子「１」と動的辞書の登録番号とを含む圧縮データを生成し（ステップＳ１２９）、圧縮処理を終了する。
【００８９】
図１３Ｃは、圧縮暗号化部１００ａの処理手順のうち暗号化処理の処理手順を示すフローチャートである。図１３Ｂに示すように、圧縮暗号化部１００ａは、圧縮ファイルＦ２を読み出し（ステップＳ１３１）、ブロック（圧縮ブロック）を読み出す（ステップＳ１３２）。
【００９０】
圧縮暗号化部１００ａは、読み出したブロックが先頭であるか否かを判定する（ステップＳ１３３）。圧縮暗号化部１００ａは、読み出したブロックが先頭である場合には（ステップＳ１３３；Ｙｅｓ）、当該ブロックのデータと初期値ＩＶとのＥＯＲ演算を行う（ステップＳ１３４）。一方、圧縮暗号化部１００ａは、読み出したブロックが先頭でない場合には（ステップＳ１３３；Ｎｏ）、当該ブロックのデータと１つ前の暗号化されたブロックのデータとのＥＯＲ演算を行う（ステップＳ１３５）。
【００９１】
続いて、圧縮暗号化部１００ａは、ＥＯＲ演算結果をアフィン暗号化関数（Ｅｋ）で演算し、暗号化する（ステップＳ１３６）。この結果、圧縮暗号化部１００ａは、読み出したブロックを暗号化したブロック（圧縮暗号化ブロック）を生成する。そして、圧縮暗号化部１００ａは、圧縮暗号化ファイルＦ３に、圧縮暗号化ブロックのデータを書き込む（ステップＳ１３７）。
【００９２】
圧縮暗号化部１００ａは、圧縮ファイルＦ２の終点か否かを判定する（ステップＳ１３８）。圧縮暗号化部１００ａは、圧縮ファイルＦ２の終点でない場合には（ステップＳ１３８；Ｎｏ）、次のブロックを読み出すべく、ステップＳ１３２に移行する。圧縮暗号化部１００ａは、圧縮ファイルＦ２の終点の場合には（ステップＳ１３８，Ｙｅｓ）、暗号化処理を終了する。
【００９３】
図１４Ａ〜図１４Ｂは、本実施例に係る部分復号化伸長部の処理手順を示すフローチャートである。図１４Ａに示すように、部分復号化伸長部１００ｂは、開始終了位置を指定した読み出しの要求があったか否かを判定する（ステップＳ２０１）。部分復号化伸長部１００ｂは、開始終了位置を指定した読み出しの要求がなかった場合には（ステップＳ２０１；Ｎｏ）、当該読み出しの要求があるまで、判定処理を繰り返す。
【００９４】
一方、部分復号化伸長部１００ｂは、開始終了位置を指定した読み出しの要求があった場合には（ステップＳ２０１；Ｙｅｓ）、前処理を実行する（ステップＳ２０２）。ステップＳ２０２の前処理において、部分復号化伸長部１００ｂは、例えば、記憶領域Ｂ１〜Ｂ６を記憶部１００ｃに確保する。
【００９５】
部分復号化伸長部１００ｂは、論理アドレステーブルＬ１を復号化する（ステップＳ２０３）。例えば、部分復号化伸長部１００ｂは、ヘッダ部に記憶された論理アドレステーブルＬ１へのポインタが指す位置のブロックを復号化する。
【００９６】
続いて、部分復号化伸長部１００ｂは、開始終了位置に対応するブロックを特定する（ステップＳ２０４）。例えば、部分復号化伸長部１００ｂは、論理アドレステーブルＬ１を参照し、開始終了位置を含むブロック（圧縮暗号化ブロック）を伸長対象として特定する。
【００９７】
部分復号化伸長部１００ｂは、圧縮暗号化ファイルＦ３から、伸長対象として特定されたブロックと１つ前のブロックを読み出す（ステップＳ２０５）。そして、部分復号化伸長部１００ｂは、前ブロックを用いて伸長対象として特定されたブロックを復号化する（ステップＳ２０６）。
【００９８】
部分復号化伸長部１００ｂは、復号化したブロックの伸長処理を実行し、伸長処理の結果を記憶領域Ｂ６（伸長バッファ）に書き込む（ステップＳ２０７）。なお、復号化したブロックの伸長処理の処理手順は、後述する。
【００９９】
部分復号化伸長部１００ｂは、伸長バッファから、開始終了位置のリード領域を抽出する（ステップＳ２０８）。そして、部分復号化伸長部１００ｂは、抽出したリード領域の伸長データを要求元に出力し（ステップＳ２０９）、部分復号化伸長処理を終了する。
【０１００】
図１４Ｂは、部分復号化伸長部１００ｂの処理手順のうち伸長処理の処理手順を示すフローチャートである。図１４Ｂに示すように、部分復号化伸長部１００ｂは、伸長対象として復号化したブロックを取得すると（ステップＳ２１１）、伸長用のケヤキ木６０および動的辞書を読み出す（ステップＳ２１２）。例えば、部分復号化伸長部１００ｂは、圧縮暗号化ファイルＦ３の暗号化されたトレーラ部に格納された動的辞書部に関する情報を復号化する。そして、部分復号化伸長部１００ｂは、復号化した動的辞書部に関する情報を記憶領域Ｂ５に格納する。
【０１０１】
部分復号化伸長部１００ｂは、圧縮データの識別子が「１」であるか否かを判定する（ステップＳ２１３）。部分復号化伸長部１００ｂは、識別子が「１」である場合には（ステップＳ２１３；Ｙｅｓ）、動的辞書の登録番号を基にして伸長データを特定し（ステップＳ２１４）、ステップＳ２１６に移行する。
【０１０２】
一方、部分復号化伸長部１００ｂは、識別子が「０」である場合には（ステップＳ２１３；Ｎｏ）、伸長用のケヤキ木６０と圧縮データとを比較して、伸長データを特定し（ステップＳ２１５）、ステップＳ２１６に移行する。
【０１０３】
ステップＳ２１６では、部分復号化伸長部１００ｂは、記憶領域Ｂ６（伸長バッファ）に伸長データの書き込みを行う（ステップＳ２１６）。
【０１０４】
部分復号化伸長部１００ｂは、伸長対象のブロックの終点であるか否かを判定する（ステップＳ２１７）。部分復号化伸長部１００ｂは、伸長対象のブロックの終点でない場合には（ステップＳ２１７；Ｎｏ）、ステップＳ２１３に移行する。一方、部分復号化伸長部１００ｂは、伸長対象のブロックの終点である場合には（ステップＳ２１７；Ｙｅｓ）、伸長処理を終了する。
【０１０５】
なお、実施例では、トレーラ部に格納された論理アドレステーブルＬ１の格納場所が、圧縮ファイルＦ２のヘッダ部のポインタに格納されると説明した。しかしながら、トレーラ部に格納された論理アドレステーブルＬ１の格納場所は、これに限定されず、独立したトレーラ部に格納されるとしても良い。かかる場合、独立したトレーラ部は、独立したブロックの先頭となる。これにより、情報処理装置は、部分復号化伸長時において、予め定められたトレーラ部にある論理アドレステーブルＬ１を参照できる。
【０１０６】
また、部分復号化伸長、すなわち部分復号および部分伸長が行われないのであれば、論理アドレステーブルＬ１（対応情報）は圧縮ファイルＦ２内に含まれる必要はない。論理アドレステーブルＬ１が圧縮ファイルＦ２内に含まれない場合であっても、別途、論理アドレステーブルＬ１を共有（入手）できれば、部分復号および部分伸長が可能である。
【０１０７】
次に、本実施例に係る情報処理装置１００の効果について説明する。情報処理装置１００は、圧縮符号を用いたファイル圧縮の際に、ソースファイルＦ１より順次生成される圧縮符号を含む圧縮データを、固定長のブロック単位で順次生成する。情報処理装置１００は、生成された圧縮データの各ブロックの先頭の圧縮符号と圧縮符号に対応するデータのソースファイルＦ１内の位置とを対応付けた論理アドレステーブルＬ１を生成する。情報処理装置１００は、圧縮データを、ブロック単位で暗号化する。このため、情報処理装置１００によれば、論理アドレステーブルＬ１を用いて、暗号化されたブロックとソースファイルＦ１上の位置とが対応付けられ、部分的に復号化および伸長をすることができる。また、固定長のブロック間で圧縮符号が分断されることを防ぐことができる。
【０１０８】
また、本実施例に係る情報処理装置１００は、論理アドレステーブルＬ１を、ブロック単位で生成された圧縮データが記録された圧縮ファイルＦ２のトレーラ部に登録し、トレーラ部の先頭位置を圧縮ファイルＦ２のヘッダ部に登録する。このため、情報処理装置１００によれば、論理アドレステーブルＬ１の登録位置を容易に把握することができ、高速に、部分的な復号化および伸長することができる。
【０１０９】
また、本実施例に係る情報処理装置１００は、トレーラ部に登録された論理アドレステーブルＬ１を、ブロック単位で暗号化し、暗号化した論理アドレステーブルＬ１を、圧縮暗号化ファイルＦ３のトレーラ部に対応する領域に登録する。このため、情報処理装置１００によれば、暗号化された論理アドレステーブルＬ１の登録位置を容易に把握することができ、暗号化された論理アドレステーブルＬ１を先行して復号化できる。また、復号化した論理アドレステーブルＬ１を用いて、高速に、部分的な復号化および伸長することができる。
【０１１０】
また、本実施例に係る情報処理装置１００は、ブロックの先頭に圧縮符号の数を設定する。このため、情報処理装置１００によれば、ブロックに含まれる圧縮符号の数を検知することができ、伸長すべき圧縮符号の数を把握することができる。
【０１１１】
また、本実施例に係る情報処理装置１００は、伸長時の開始終了位置を指定した読み出し要求を取得すると、論理アドレステーブルＬ１に基づいて、開始終了位置に対応するブロックを特定する。情報処理装置１００は、特定されたブロックを復号化する。情報処理装置１００は、復号化されたブロックに含まれる圧縮符号を伸長する。情報処理装置１００は、伸長されたデータから、開始終了位置に対応するデータを抽出する。このため、情報処理装置１００によれば、読み出し要求がされた開始終了位置に応じた部分的な復号化および伸長することができる。
【０１１２】
下記に、本実施形態に用いられるハードウェア及びソフトウェアについて説明する。図１５は、コンピュータ１のハードウェア構成例を示す図である。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【０１１３】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのフラッシュメモリ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ３００は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【０１１４】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する回路である。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる回路である。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう回路である。通信インターフェース３１０は、例えばネットワークインターフェースカード（ＮＩＣ）などである。ＳＡＮインターフェース３１１は、ストレージエリアネットワークによりコンピュータ１と接続された記憶装置との通信の制御を行なう回路である。ＳＡＮインターフェース３１１は、例えばホストバスアダプタ（ＨＢＡ）などである。
【０１１５】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。また、入力デバイス３０７及び出力デバイス３０９は、コンピュータ１と一体になっていてもよいし、コンピュータ１に含まれず、例えば、コンピュータ１に外部から接続する装置であってもよい。
【０１１６】
例えば、プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って圧縮暗号化部１００ａの処理または部分復号化伸長部１００ｂの処理の処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１００ｃの機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（圧縮対象のソースファイルＦ１、圧縮ファイルＦ２、圧縮暗号化ファイルＦ３など）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図１６を用いて説明する。
【０１１７】
図１６は、コンピュータ１で動作するプログラムの構成例を示す図である。コンピュータ１において、図１６に示すハードウェア群２１（３０１〜３１２）の制御を行なうＯＳ（オペレーティング・システム）２２が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ハードウェア群２１の制御・管理が行なわれることにより、アプリケーションプログラム２４やミドルウェア２３に従った処理がハードウェア群２１で実行される。さらに、コンピュータ１において、ミドルウェア２３またはアプリケーションプログラム２４が、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。
【０１１８】
プロセッサ３０１が、圧縮暗号化機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）圧縮暗号化部１００ａの機能が実現される。また、プロセッサ３０１が、部分復号化伸張機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）部分復号化伸長部１００ｂの機能が実現される。圧縮暗号化機能および部分復号化伸張機能は、それぞれアプリケーションプログラム２４自体に含まれてもよいし、アプリケーションプログラム２４に従って呼び出されることで実行されるミドルウェア２３の一部であってもよい。
【０１１９】
図１７は、実施形態のシステムにおける装置の構成例を示す。図１７のシステムは、コンピュータ１ａ、コンピュータ１ｂ、基地局２およびネットワーク３を含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。
【０１２０】
図８に示す圧縮暗号化部１００ａと部分復号化伸張部１００ｂとは、図１７に示すコンピュータ１ａとコンピュータ１ｂとのいずれに含まれてもよい。コンピュータ１ｂが圧縮暗号化部１００ａを含み、コンピュータ１ａが部分復号化伸張部１００ｂを含んでもよいし、コンピュータ１ｂが圧縮暗号化部１００ａを含み、コンピュータ１ａが部分復号化伸張部１００ｂを含んでもよい。また、コンピュータ１ａとコンピュータ１ｂとの双方が、圧縮暗号化部１００ａおよび部分復号化伸張部１００ｂを備えてもよい。
【０１２１】
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。圧縮暗号化処理の対象は、ファイル内のデータ以外にも、システムから出力される監視メッセージなどでもよい。例えば、バッファに順次格納される監視メッセージを上述の圧縮暗号化処理により圧縮および暗号化し、ログファイルとして格納するなどの処理が行なわれる。また、例えば、データベース内のページ単位に圧縮および暗号化が行なわれてもよいし、複数のページをまとめた単位で圧縮および暗号化が行なわれてもよい。
【０１２２】
また、上述の圧縮暗号化処理の対象となるデータは、上述の通り、文字情報に限定されるものでない。数値のみの情報であってもよいし、画像・音声などのデータに対して上述の圧縮暗号化処理を用いてもよい。例えば、音声合成により得られるデータを多量に含むファイルなどは、データ内に繰り返しを多く含むため動的辞書により圧縮率が向上することが見込まれる。当然その一部のみが利用される場合には、部分復号化伸張により余分な伸張処理が抑制される。また、固定カメラにより撮影された動画像についても各フレームの画像が似たものになることから繰り返しが多く含まれる。そのため、上述の圧縮暗号化処理を適用することにより、文書データや音声データと同様の効果を得ることができる。
【０１２３】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２４】
（付記１）コンピュータに、
圧縮符号を用いたファイル圧縮の際に、対象ファイルより順次生成される圧縮符号を含む圧縮データを、固定長のブロック単位で順次生成し、
生成された圧縮データの各ブロックの先頭の圧縮符号と前記圧縮符号に対応するデータの前記ファイル内の位置とを対応付けた対応情報を生成し、
前記圧縮データを、前記ブロック単位で暗号化する
処理を実行させることを特徴とする処理プログラム。
【０１２５】
（付記２）前記対応情報を生成する処理によって生成された対応情報を、前記ブロック単位で生成された圧縮データが記録されたデータの第１の領域に登録し、前記第１の領域の先頭位置を前記データの第２の領域に登録する
処理を実行させることを特徴とする付記１に記載の処理プログラム。
【０１２６】
（付記３）前記暗号化する処理は、前記データの第１の領域に登録された対応情報を、前記ブロック単位で暗号化する
処理を実行させることを特徴とする付記２に記載の処理プログラム。
【０１２７】
（付記４）前記圧縮データを生成する処理によって生成された圧縮データの先頭に圧縮符号の数を設定する
処理を実行させることを特徴とする付記１に記載の処理プログラム。
【０１２８】
（付記５）伸長時の開始終了位置を指定した伸長要求を取得すると、前記対応情報に基づいて、前記開始終了位置に対応するブロックを特定し、
前記特定する処理によって特定されたブロックを復号化し、
前記復号化する処理によって復号化されたブロックに含まれる圧縮符号を伸長し、
前記伸長する処理によって伸長されたデータから、前記開始終了位置に対応するデータを抽出する
処理を実行させることを特徴とする付記１に記載の処理プログラム。
【０１２９】
（付記６）圧縮符号を用いたファイル圧縮の際に、対象ファイルより順次生成される圧縮符号を含む圧縮データを、固定長のブロック単位で順次生成する第１の生成部と、
生成された圧縮データの各ブロックの先頭の圧縮符号と前記圧縮符号に対応するデータの前記ファイル内の位置とを対応付けた対応情報を生成する第２の生成部と、
前記圧縮データを、前記ブロック単位で暗号化する暗号化部と、
を有することを特徴とする処理装置。
【０１３０】
（付記７）コンピュータが、
圧縮符号を用いたファイル圧縮の際に、対象ファイルより順次生成される圧縮符号を含む圧縮データを、固定長のブロック単位で順次生成し、
生成された圧縮データの各ブロックの先頭の圧縮符号と前記圧縮符号に対応するデータの前記ファイル内の位置とを対応付けた対応情報を生成し、
前記圧縮データを、前記ブロック単位で暗号化する
各処理を実行することを特徴とする処理方法。
【符号の説明】
【０１３１】
１００  情報処理装置
１００ａ  圧縮暗号化部
１００ｂ  部分復号化伸長部
１００ｃ  記憶部
１０１  ファイルリード部
１０２  圧縮部
１０３  ブロックライト部
１０４  テーブル更新部
１０５  テーブルライト部
１０６  暗号化部
１０７  ファイルライト部
１１０  ブロック特定部
１１１  ファイルリード部
１１２  部分復号化部
１１３  部分伸長部
１１４  伸長データ出力部
【図１】
0006613568.tif 000002
【図２】
0006613568.tif 000003
【図３Ａ】
0006613568.tif 000004
【図３Ｂ】
0006613568.tif 000005
【図４】
0006613568.tif 000006
【図５】
0006613568.tif 000007
【図６】
0006613568.tif 000008
【図７Ａ】
0006613568.tif 000009
【図７Ｂ】
0006613568.tif 000010
【図８】
0006613568.tif 000011
【図９】
0006613568.tif 000012
【図１０】
0006613568.tif 000013
【図１１】
0006613568.tif 000014
【図１２】
0006613568.tif 000015
【図１３Ａ】
0006613568.tif 000016
【図１３Ｂ】
0006613568.tif 000017
【図１３Ｃ】
0006613568.tif 000018
【図１４Ａ】
0006613568.tif 000019
【図１４Ｂ】
0006613568.tif 000020
【図１５】
0006613568.tif 000021
【図１６】
0006613568.tif 000022
【図１７】
0006613568.tif 000023