(57)【特許請求の範囲】
【請求項１】
コンピュータに、
暗号化対象のファイルに含まれる第１のデータ部分の所定の位置に存在する文字が格納された、ルートから分岐した２ｍ（ｍは所定の自然数）個の葉を有する無接点ハフマン木の葉の番号である所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成して記憶部に記憶し、
前記第１のデータ部分を第１の鍵を用いて暗号化し、
前記暗号化対象のファイルに含まれる、前記第１のデータ部分と対応する葉の番号と関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
処理を実行させることを特徴とする暗号化プログラム。
【請求項２】
コンピュータに、
暗号化対象のファイルに含まれる第１のデータ部分の所定の位置に存在する文字の、該第１データ部分が圧縮され、スライド窓が１ブロック分スライドされた場合の位置を示すアドレスである所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成して記憶部に記憶し、
前記第１のデータ部分を第１の鍵を用いて暗号化し、
前記暗号化対象のファイルに含まれる、前記第１のデータ部分と対応するアドレスと関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
処理を実行させることを特徴とする暗号化プログラム。
【請求項３】
コンピュータに、
暗号化対象のファイルに含まれる第１のデータ部分の所定の位置に存在する文字が、該第１のデータ部分が圧縮されてトライ木が更新された場合に格納されるトライ木の葉の参照番号である所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成して記憶部に記憶し、
前記第１のデータ部分を第１の鍵を用いて暗号化し、
前記暗号化対象のファイルに含まれる、前記第１のデータ部分と対応する葉の参照番号と関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
処理を実行させることを特徴とする暗号化プログラム。
【請求項４】
前記コンピュータに、
さらに、前記関連付けた情報を生成後、文字を圧縮符号に変換するための情報を用いて、前記第１のデータ部分および前記第２のデータ部分を圧縮させた後に、前記第１のデータ部分および前記第２のデータ部分を暗号化させる、
ことを特徴とする請求項１、２または３に記載の暗号化プログラム。
【請求項５】
前記コンピュータに、
さらに、前記第１のデータ部分を圧縮させ、
前記第１のデータ部分を圧縮させた後に、該第１のデータ部分を前記第１の鍵を用いて暗号化させ、
前記暗号化対象のファイルにおいて、前記第１のデータ部分の次のデータ部分であって、前記第１のデータ部分と対応する前記所定のデータと関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
処理を実行させることを特徴とする請求項１〜４のいずれか１つに記載の暗号化プログラム。
【請求項６】
前記関連付けた情報を生成する処理は、さらに、前記所定のデータと、前記データサイズを示すサイズ情報と、暗号化アルゴリズムを示すアルゴリズム情報とを関連付けた前記情報を生成して前記記憶部に記憶する処理を含み、
前記第２のデータ部分を第２の鍵を用いて暗号化する処理は、さらに、前記記憶部に記憶される前記アルゴリズム情報が示す暗号化アルゴリズムを用いて、前記第２のデータ部分を第２の鍵を用いて暗号化する処理を含む、
ことを特徴とする請求項１〜５のいずれか１つに記載の暗号化プログラム。
【請求項７】
コンピュータに、
請求項１〜６のいずれか１つに記載の暗号化プログラムにより暗号化されたファイルに含まれる前記第１のデータ部分を、第１の鍵を用いて復号化し、
復号化された前記第１のデータ部分のうちの前記所定のデータに関連付けられた、前記記憶部に記憶される前記サイズ情報が示すデータサイズの前記第２のデータ部分を、前記第２の鍵を用いて復号化する、
処理を実行させることを特徴とする復号化プログラム。
【請求項８】
コンピュータが実行する暗号化方法であって、
暗号化対象のファイルに含まれる第１のデータ部分の所定の位置に存在する文字が格納された、ルートから分岐した２ｍ（ｍは所定の自然数）個の葉を有する無接点ハフマン木の葉の番号である所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成して記憶部に記憶し、
前記第１のデータ部分を第１の鍵を用いて暗号化し、
前記暗号化対象のファイルに含まれる、前記第１のデータ部分と対応する葉の番号と関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
ことを特徴とする暗号化方法。
【請求項９】
コンピュータが実行する暗号化方法であって、
暗号化対象のファイルに含まれる第１のデータ部分の所定の位置に存在する文字の、該第１のブロックが圧縮され、スライド窓が１ブロック分スライドされた場合の位置を示すアドレスである所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成して記憶部に記憶し、
前記第１のデータ部分を第１の鍵を用いて暗号化し、
前記暗号化対象のファイルに含まれる、前記第１のデータ部分と対応するアドレスと関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
ことを特徴とする暗号化方法。
【請求項１０】
コンピュータが実行する暗号化方法であって、
暗号化対象のファイルに含まれる第１のデータ部分の所定の位置に存在する文字が、第１のデータ部分が圧縮されてトライ木が更新された場合に格納されるトライ木の葉の参照番号である所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成して記憶部に記憶し、
前記第１のデータ部分を第１の鍵を用いて暗号化し、
前記暗号化対象のファイルに含まれる、前記第１のデータ部分と対応する葉の参照番号と関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
ことを特徴とする暗号化方法。
【請求項１１】
前記コンピュータが、
さらに、前記関連付けた情報を生成後、文字を圧縮符号に変換するための情報を用いて、前記第１のデータ部分および前記第２のデータ部分を圧縮した後に、前記第１のデータ部分および前記第２のデータ部分を暗号化する、
ことを特徴とする請求項８、９または１０に記載の暗号化方法。
【請求項１２】
前記コンピュータが、
さらに、前記第１のデータ部分を圧縮し、
前記第１のデータ部分を圧縮させた後に、該第１のデータ部分を前記第１の鍵を用いて暗号化し、
前記暗号化対象のファイルにおいて、前記第１のデータ部分の次のデータ部分であって、前記第１のデータ部分と対応する前記所定のデータと関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
処理を実行することを特徴とする請求項８〜１１のいずれか１つに記載の暗号化方法。
【請求項１３】
前記関連付けた情報を生成する処理は、さらに、前記所定のデータと、前記データサイズを示すサイズ情報と、暗号化アルゴリズムを示すアルゴリズム情報とを関連付けた前記情報を生成して前記記憶部に記憶する処理を含み、
前記第２のデータ部分を第２の鍵を用いて暗号化する処理は、さらに、前記記憶部に記憶される前記アルゴリズム情報が示す暗号化アルゴリズムを用いて、前記第２のデータ部分を第２の鍵を用いて暗号化する処理を含む、
ことを特徴とする請求項８〜１２のいずれか１つに記載の暗号化方法。
【請求項１４】
コンピュータが実行する復号化方法であって、
請求項８〜１３のいずれか１つに記載の暗号化方法により暗号化されたファイルに含まれる前記第１のデータ部分を、前記第１の鍵に対応する第１の復号化鍵を用いて復号化し、
復号化された前記第１のデータ部分のうちの前記所定のデータに関連付けられた、前記記憶部に記憶される前記サイズ情報が示すデータサイズの前記第２のデータ部分を、前記第２の鍵に対応する第２の復号化鍵を用いて復号化する、
ことを特徴とする復号化方法。
【請求項１５】
暗号化装置および復号化装置を備えるシステムであって、
前記暗号化装置は、
暗号化対象のファイルに含まれる第１のデータ部分の所定の位置に存在する文字が格納された、ルートから分岐した２ｍ（ｍは所定の自然数）個の葉を有する無接点ハフマン木の葉の番号である所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成する生成部と、
前記生成部により生成された情報を記憶する記憶部と、
前記第１のデータ部分を第１の鍵を用いて暗号化し、前記暗号化対象のファイルに含まれる、前記第１のデータ部分と対応する葉の番号に関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する暗号化部とを有し、
前記復号化装置は、
前記暗号化装置により暗号化されたファイルに含まれる前記第１のデータ部分を、前記第１の鍵を用いて復号化し、復号化された前記第１のデータ部分の所定の位置に存在する文字が格納された前記無接点ハフマン木の葉の番号と関連付けられた、前記記憶部に記憶される前記サイズ情報が示すデータサイズの前記第２のデータ部分を、前記第２の鍵を用いて復号化する復号化部
を有することを特徴とするシステム。
【請求項１６】
暗号化装置および復号化装置を備えるシステムであって、
前記暗号化装置は、
暗号化対象のファイルに含まれる第１のデータ部分の所定の位置に存在する文字の、該第１のブロックが圧縮され、スライド窓が１ブロック分スライドされた場合の位置を示すアドレスである所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成する生成部と、
前記生成部により生成された情報を記憶する記憶部と、
前記第１のデータ部分を第１の鍵を用いて暗号化し、前記暗号化対象のファイルに含まれる、前記第１のデータ部分と対応するアドレスと関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する暗号化部とを有し、
前記復号化装置は、
前記暗号化装置により暗号化されたファイルに含まれる前記第１のデータ部分を、前記第１の鍵を用いて復号化し、復号化された前記第１のデータ部分の所定の位置に存在する文字の、該第１のブロックが圧縮され、スライド窓が１ブロック分スライドされた場合の位置を示すアドレスと関連付けられた、前記記憶部に記憶される前記サイズ情報が示すデータサイズの前記第２のデータ部分を、前記第２の鍵を用いて復号化する復号化部
を有することを特徴とするシステム。
【請求項１７】
暗号化装置および復号化装置を備えるシステムであって、
前記暗号化装置は、
暗号化対象のファイルに含まれる第１のデータ部分の所定の位置に存在する文字が、第１のデータ部分が圧縮されてトライ木が更新された場合に格納されるトライ木の葉の参照番号である所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成する生成部と、
前記生成部により生成された情報を記憶する記憶部と、
前記第１のデータ部分を第１の鍵を用いて暗号化し、前記暗号化対象のファイルに含まれる、前記第１のデータ部分と対応する葉の参照番号と関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する暗号化部とを有し、
前記復号化装置は、
前記暗号化装置により暗号化されたファイルに含まれる前記第１のデータ部分を、前記第１の鍵を用いて復号化し、復号化された前記第１のデータ部分の所定の位置に存在する文字が、第１のデータ部分が圧縮されてトライ木が更新された場合に格納されるトライ木の葉の参照番号と関連付けられた、前記記憶部に記憶される前記サイズ情報が示すデータサイズの前記第２のデータ部分を、前記第２の鍵を用いて復号化する復号化部
を有することを特徴とするシステム。
【請求項１８】
前記暗号化部は、
さらに、前記関連付けた情報を生成後、文字を圧縮符号に変換するための情報を用いて、前記第１のデータ部分および前記第２のデータ部分を圧縮した後に、前記第１のデータ部分および前記第２のデータ部分を暗号化する、
ことを特徴とする請求項１５、１６または１７に記載のシステム。
【請求項１９】
前記暗号化部は、
さらに、前記第１のデータ部分を圧縮し、
前記第１のデータ部分を圧縮した後に、該第１のデータ部分を前記第１の鍵を用いて暗号化し、
前記暗号化対象のファイルにおいて、前記第１のデータ部分の次のデータ部分であって、前記第１のデータ部分と対応する前記所定のデータと関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
処理を実行することを特徴とする請求項１５〜１８のいずれか１つに記載のシステム。
【請求項２０】
前記生成部は、さらに、前記所定のデータと、前記データサイズを示すサイズ情報と、暗号化アルゴリズムを示すアルゴリズム情報とを関連付けた前記情報を生成して前記記憶部に記憶し、
前記暗号化部は、さらに、前記記憶部に記憶される前記アルゴリズム情報が示す暗号化アルゴリズムを用いて、前記第２のデータ部分を第２の鍵を用いて暗号化する、
ことを特徴とする請求項１５〜１９のいずれか１つに記載のシステム。
【請求項２１】
コンピュータが実行するコンテンツの生成方法であって、
暗号化対象のコンテンツに含まれる第１のデータ部分の所定の位置に存在する文字が格納された、ルートから分岐した２ｍ（ｍは所定の自然数）個の葉を有する無接点ハフマン木の葉の番号である所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成して記憶部に記憶し、
前記第１のデータ部分を第１の鍵を用いて暗号化し、
前記暗号化対象のコンテンツに含まれる、前記第１のデータ部分と対応する葉の番号と関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
ことを特徴とするコンテンツの生成方法。
【請求項２２】
コンピュータが実行するコンテンツの生成方法であって、
暗号化対象のコンテンツに含まれる第１のデータ部分の所定の位置に存在する文字の、該第１のブロックが圧縮され、スライド窓が１ブロック分スライドされた場合の位置を示すアドレスである所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成して記憶部に記憶し、
前記第１のデータ部分を第１の鍵を用いて暗号化し、
前記暗号化対象のコンテンツに含まれる、前記第１のデータ部分と対応するアドレスと関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
ことを特徴とするコンテンツの生成方法。
【請求項２３】
コンピュータが実行するコンテンツの生成方法であって、
暗号化対象のコンテンツに含まれる第１のデータ部分の所定の位置に存在する文字が、第１のデータ部分が圧縮されてトライ木が更新された場合に格納されるトライ木の葉の参照番号である所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成して記憶部に記憶し、
前記第１のデータ部分を第１の鍵を用いて暗号化し、
前記暗号化対象のコンテンツに含まれる、前記第１のデータ部分と対応する葉の参照番号と関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
ことを特徴とするコンテンツの生成方法。
【請求項２４】
前記コンピュータが、
さらに、前記関連付けた情報を生成後、文字を圧縮符号に変換するための情報を用いて、前記第１のデータ部分および前記第２のデータ部分を圧縮した後に、前記第１のデータ部分および前記第２のデータ部分を暗号化する、
ことを特徴とする請求項２１、２２または２３に記載のコンテンツの生成方法。
【請求項２５】
前記コンピュータが、
さらに、前記第１のデータ部分を圧縮し、
前記第１のデータ部分を圧縮した後に、該第１のデータ部分を前記第１の鍵を用いて暗号化し、
前記暗号化対象のファイルにおいて、前記第１のデータ部分の次のデータ部分であって、前記第１のデータ部分と対応する前記所定のデータと関連付けられた、前記記憶部に記憶される前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する、
処理を実行することを特徴とする請求項２１〜２４のいずれか１つに記載のコンテンツの生成方法。
【請求項２６】
前記関連付けた情報を生成する処理は、さらに、前記所定のデータと、前記データサイズを示すサイズ情報と、暗号化アルゴリズムを示すアルゴリズム情報とを関連付けた前記情報を生成して前記記憶部に記憶する処理を含み、
前記第２のデータ部分を第２の鍵を用いて暗号化する処理は、さらに、前記記憶部に記憶される前記アルゴリズム情報が示す暗号化アルゴリズムを用いて、前記第２のデータ部分を第２の鍵を用いて暗号化する処理を含む、
ことを特徴とする請求項２１〜２５のいずれか１つに記載のコンテンツの生成方法。
【請求項２７】
コンピュータが、
請求項２１〜２６のいずれか１つに記載のコンテンツの生成方法により暗号化されたファイルに含まれる前記第１のデータ部分を、第１の鍵を用いて復号化し、
復号化された前記第１のデータ部分のうちの前記所定のデータに関連付けられた、前記記憶部に記憶される前記サイズ情報が示すデータサイズの前記第２のデータ部分を、前記第２の鍵を用いて復号化する、
処理を実行させることを特徴とするコンテンツの復号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化プログラム、復号化プログラム、暗号化方法、復号化方法、システムおよびコンテンツの生成方法に関する。
【背景技術】
【０００２】
従来、暗号化したデジタルコンテンツを、ＰＣ（Personal  Computer）や携帯電話などの利用者端末に送信することが行われる。なお、デジタルコンテンツの一例としては、動画、音楽、書籍や辞書などが挙げられる。また、デジタルコンテンツを暗号化する理由としては、著作権を保護するためなどの理由が挙げられる。
【０００３】
また、データに対してＤＰＣＭ（Differential  Pulse  Code  Modulation）方式でデータ圧縮を行い、ＤＰＣＭ方式の差分０を表す符号と差分０以外を表す符号とで異なる暗号化アルゴリズムまたは暗号化鍵を用いて、データを暗号化する装置が存在する。
【０００４】
また、データを複数に分割し、分割したデータのそれぞれに対して複数の暗号化方式で暗号化することで、データを暗号化する装置が存在する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−１３００９８号公報
【特許文献２】特開２０００−５９３５５号公報
【特許文献３】国際公開第２００６／１２３４４８号
【特許文献４】特開２０１０−９３４１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
暗号化されたデータの解読困難性は暗号アルゴリズムによって異なるが、解読が困難な暗号化アルゴリズムであっても暗号化処理にコストがかかる場合がある。逆に、暗号化処理のコストが少ない暗号化アルゴリズムであっても、解読が容易になってしまう場合がある。
【０００７】
１つの側面では、本発明は、暗号化データが解読困難性を有しつつ、暗号化処理または復号化処理の処理コストが抑制されることを目的とする。
【課題を解決するための手段】
【０００８】
本願の開示する暗号化プログラムは、一つの態様において、コンピュータに、暗号化対象のファイルに含まれる第１のデータ部分のうちの所定のデータと、データサイズを示すサイズ情報とを関連付けた情報を生成する処理を実行させる。本願の開示する暗号化プログラムは、コンピュータに、前記第１のデータ部分を第１の鍵を用いて暗号化し、前記暗号化対象ファイルに含まれる前記サイズ情報に示されるデータサイズの第２のデータ部分を第２の鍵を用いて暗号化する処理を実行させる。
【発明の効果】
【０００９】
１態様によれば、暗号化データが解読困難性を有しつつ、暗号化処理または復号化処理の処理コストが抑制されることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係るシステムの構成の一例を示す図である。
【図２】図２は、暗号化テーブルの一例を示す図である。
【図３】図３は、圧縮パラメータの一例を示す図である。
【図４】図４は、無節点ハフマン木の一例を示す図である。
【図５】図５は、出現マップの一例を示す図である。
【図６】図６は、サーバの処理の一例を説明するための図である。
【図７】図７は、利用者端末の処理の一例を説明するための図である。
【図８】図８は、実施例１に係る圧縮・暗号化処理の手順を示すフローチャートである。
【図９】図９は、実施例１に係る検索処理の手順を示すフローチャートである。
【図１０】図１０は、実施例２に係るシステムの構成の一例を示す図である。
【図１１】図１１は、暗号化テーブルの一例を示す図である。
【図１２】図１２は、サーバの処理の一例を説明するための図である。
【図１３】図１３は、利用者端末の処理の一例を説明するための図である。
【図１４】図１４は、実施例２に係る圧縮・暗号化処理の手順を示すフローチャートである。
【図１５】図１５は、実施例２に係る検索処理の手順を示すフローチャートである。
【図１６】図１６は、トライの木の一例を示す図である。
【図１７】図１７は、実施例３に係るシステムの構成の一例を示す図である。
【図１８】図１８は、暗号化テーブルの一例を示す図である。
【図１９】図１９は、サーバの処理の一例を説明するための図である。
【図２０】図２０は、利用者端末の処理の一例を説明するための図である。
【図２１】図２１は、実施例３に係る圧縮・暗号化処理の手順を示すフローチャートである。
【図２２】図２２は、実施例３に係る検索処理の手順を示すフローチャートである。
【図２３】図２３は、暗号化プログラムを実行するコンピュータを示す図である。
【図２４】図２４は、復号化プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する暗号化プログラム、復号化プログラム、暗号化方法、復号化方法、システムおよびコンテンツの生成方法の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１２】
［システム１の構成例］
実施例１に係るシステムについて説明する。図１は、実施例１に係るシステムの構成の一例を示す図である。本実施例に係るシステム１は、サーバ２と、利用者端末３とを有する。サーバ２と、利用者端末３とは、データの送受信が可能なように接続される。図１の例では、サーバ２と、利用者端末３とは、インターネット８０を介して接続されている。なお、サーバ２と、利用者端末３とは、無線で接続されてもよい。サーバ２は、複数の辞書などの電子書籍のデータをブロック単位で圧縮し、圧縮した各ブロックを各ブロックに対応する暗号化アルゴリズム、鍵、ブロック長で暗号化し、暗号化した複数の電子書籍のデータを利用者端末３に送信する。利用者端末３は、受信した複数の電子書籍のデータをブロック単位で復号する。そして、利用者端末３は、復号した各ブロックを伸張しつつ、検索キーワードを含む項目を検索し、検索の結果得られた項目を出力する。
【００１３】
サーバ２は、入力部４と、出力部５と、送受信部６と、記憶部７と、制御部８とを有する。
【００１４】
入力部４は、各種情報を制御部８に入力する。例えば、入力部４は、ユーザから、後述の圧縮・暗号化処理を実行する指示を受け付けて、受け付けた指示を制御部８に入力する。入力部４のデバイスの一例としては、マウスやキーボードなどの操作受付デバイスが挙げられる。
【００１５】
出力部５は、各種の情報を出力する。例えば、出力部５は、サーバ２の稼働状況を表示する。出力部５のデバイスの一例としては、ＬＣＤ（Liquid  Crystal  Display）やＣＲＴ（Cathode  Ray  Tube）などの表示デバイスなどが挙げられる。
【００１６】
送受信部６は、サーバ２と利用者端末３との通信を行うための通信インタフェースである。例えば、送受信部６は、制御部８から後述の暗号化テーブル７ａ、圧縮パラメータ７ｂ、出現マップ７ｄを受信すると、受信した暗号化テーブル７ａ、圧縮パラメータ７ｂ、出現マップ７ｄを、インターネット８０を介して利用者端末３へ送信する。また、送受信部６は、制御部８から暗号化された電子書籍を受信すると、受信した電子書籍を、インターネット８０を介して利用者端末３へ送信する。
【００１７】
記憶部７は、各種情報を記憶する。例えば、記憶部７は、暗号化テーブル７ａ、圧縮パラメータ７ｂ、無節点ハフマン木７ｃ、出現マップ７ｄを記憶する。これに加えて、記憶部７は、複数の電子書籍のファイルを記憶する。
【００１８】
暗号化テーブル７ａには、電子書籍のファイルが分割された各ブロックを暗号化する場合に、暗号化に用いられる暗号化アルゴリズムを示すアルゴリズム情報、鍵を示す鍵情報、ブロック長を示すブロック長情報などの暗号化パラメータが登録される。なお、ブロック長は、暗号化対象となるブロックのデータサイズを示す。また、暗号化テーブル７ａには、後述の生成部８ａにより、後述の無節点ハフマン木７ｃの葉の番号が、暗号化パラメータに対応付けられて登録される。これにより、アルゴリズム情報、鍵情報およびブロック長と、無節点ハフマン木７ｃの葉に対応付けられた文字とが関連付けられる。
【００１９】
ここで、暗号化テーブル７ａに登録される暗号化アルゴリズム、鍵、ブロック長の組み合わせの一例について説明する。例えば、暗号化アルゴリズムとしてＤＥＳ（Data  Encryption  Standard）を用いることができる。このＤＥＳを用いる場合には、５４ビットの鍵、６４ビットのブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてトリプルＤＥＳを用いることができる。このトリプルＤＥＳを用いる場合には、５４ビットの鍵、６４ビットのブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてＡＥＳ（Advanced  Encryption  Standard）を用いることができる。このＡＥＳを用いる場合には、１２８、１９２または２５６ビットの鍵、１２８ビットのブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてＲＳＡ（Rivest  Shamir  Adleman）を用いることができる。このＲＳＡを用いる場合には、６５５３７ビットの鍵、１０２４ビットのブロック長で暗号化を行うことができる。
【００２０】
また、暗号化アルゴリズムとしてＥＸＯＲ（排他的論理和）を用いることができる。このＥＸＯＲを用いる場合には、任意の長さの鍵、ブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてビット転置を用いることができる。このビット転置を用いる場合には、例えば４バイトの鍵、任意のブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてデジット転置を用いることができる。このデジット転置を用いる場合には、例えば８バイトの鍵、任意のブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてバイト転置を用いることができる。このバイト転置を用いる場合には、例えば２５６バイトの鍵、任意のブロック長で暗号化を行うことができる。
【００２１】
ここで、ＤＥＳ、トリプルＤＥＳ、ＡＥＳ、ＲＳＡは、ＥＸＯＲ、ビット転置、デジット転置、バイト転置と比較すると暗号化の強度という観点では高いが、暗号化および復号化の処理速度という観点では遅くなる。すなわち、暗号化において、強度と処理速度とはトレードオフの関係にあるといえる。そこで、サーバ２では、暗号化の強度および処理速度を所定の基準を満たすように、各ブロックを暗号化する暗号化アルゴリズムを組み合わせることができる。
【００２２】
図２は、暗号化テーブルの一例を示す図である。図２の例では、暗号化アルゴリズム「α」と、鍵「ａ」と、ブロック長「ｎ１」と、葉の番号「１」とが関連付けられた場合が示されている。また、図２の例では、暗号化アルゴリズム「β」と、鍵「ｂ」と、ブロック長「ｎ２」と、葉の番号「２」とが関連付けられた場合が示されている。また、図２の例では、暗号化アルゴリズム「γ」と、鍵「ｃ」と、ブロック長「ｎＹ」と、葉の番号「Ｙ」とが関連付けられた場合が示されている。
【００２３】
圧縮パラメータ７ｂには、無節点ハフマン木７ｃを生成する場合に用いられる、文字の出現頻度が登録される。例えば、圧縮パラメータ７ｂには、特開２０１０−９３４１４号公報などに記載されているように、文字のコードと、複数の電子書籍に含まれる文字の出現回数とが出現回数の降順にソートされて登録される。図３は、圧縮パラメータの一例を示す図である。図３の例では、出現回数が「１０６８」回である「ａ」のコードの順位が１位である場合が示されている。また、図３の例では、出現回数が「１０６５」回である「ｂ」のコードの順位が２位である場合が示されている。
【００２４】
無節点ハフマン木７ｃは、データを圧縮／伸張するために用いられる。図４は、無節点ハフマン木の一例を示す図である。図４に示すように、例えば、無節点ハフマン木７ｃとして、特開２０１０−９３４１４号公報などに記載されている２ｍ分岐の無節点ハフマン木を採用することができる。２ｍ分岐の無節点ハフマン木の葉には、葉の番号と、圧縮符号と、圧縮符号長と、文字コードとが対応付けられて格納される。２ｍ分岐の無節点ハフマン木を用いてデータを圧縮する場合では、内部節点がないため根に向かって探索する必要がなく、ポイントされた葉の構造体に格納されている圧縮符号が抽出され、抽出された圧縮符号が圧縮バッファに書き込まれる。無節点ハフマン木７ｃは、後述の圧縮部８ｂにより記憶部７に格納される。
【００２５】
出現マップ７ｄには、複数の電子書籍の各ファイルについて、複数の文字のそれぞれが含まれているか否かを示すフラグを有する出現マップを生成する。例えば、出現マップ７ｄには、国際公開第２００６／１２３４４８号などに記載されているように、文字のコードと、出現回数と、出現ファイル数と、出現順位と、各ファイルに文字が含まれているか否かを示すフラグとが対応付けられて登録される。図５は、出現マップの一例を示す図である。図５の例では、文字「Ａ」について、複数の電子書籍の全ファイルの出現回数が「１２３８」であり、出現したファイルの数が「２３０」であり、出現順位が「１０２」である場合が示されている。また、図５の例では、出現マップの項目の「１」は、対応するファイルに文字「Ａ」が含まれていることを示し、「０」は、対応するファイルに文字「Ａ」が含まれていないことを示す。すなわち、図５の例では、１番目、３番目、４番目、７番目、８番目のファイルに文字「Ａ」が含まれていることを示し、２番目、５番目、６番目のファイルに文字「Ａ」が含まれていないことを示す。
【００２６】
記憶部７は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部７は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory)、ＲＯＭ（Read  Only  Memory)であってもよい。
【００２７】
制御部８は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図１に示すように、制御部８は、生成部８ａと、圧縮部８ｂと、第１の暗号化部８ｃと、第２の暗号化部８ｄとを有する。
【００２８】
生成部８ａは、電子書籍のファイルを分割したブロックの文字列の中から１文字取得する。そして、生成部８ａは、取得した文字が格納されている無節点ハフマン木７ｃの葉の番号を取得する。続いて、生成部８ａは、取得した葉の番号と、次のブロックの暗号化に用いられる暗号化アルゴリズム、鍵およびブロック長などの暗号化パラメータとを対応付けた情報を生成する。そして、生成部８ａは、生成した情報を暗号化テーブル７ａに登録する。生成部８ａは、このような処理を、複数の電子書籍の各ファイルの各ブロックについて行う。生成部８ａは、次のブロックの暗号化に用いられる暗号化アルゴリズムとして、上述したＥＸＯＲ、ビット転置、デジット転置、バイト転置、ＤＥＳ、トリプルＤＥＳ、ＡＥＳ、ＲＳＡを用いることができる。なお、暗号化に用いられる暗号化アルゴリズムは、これらに限られない。また、各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については予め定義されており、生成部８ａは、その定義された情報にしたがって、ブロックごとに、葉の番号と暗号化パラメータとを対応付けた情報を生成する。各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については、ユーザが、入力部４を介して定義することができる。例えば、ユーザは、暗号化の強度および処理速度を所定の基準を満たすように、各ブロックを暗号化する暗号化アルゴリズム、鍵、各ブロックのブロック長などを定義することができる。
【００２９】
図６は、サーバの処理の一例を説明するための図である。図６の例では、生成部８ａは、電子書籍のファイルの１ブロック目の先頭から所定数Ｘバイト目の文字「Ｋ」を取得する。そして、図６の例では、生成部８ａは、文字「Ｋ」が格納された無節点ハフマン木７ｃの葉の番号「Ｙ」を取得する。次に、図６の例では、生成部８ａは、取得した葉の番号「Ｙ」と、次のブロックである２ブロック目の暗号化に用いられる暗号化アルゴリズム「γ」、鍵「Ｃ」およびブロック長「ｎＹ」とを対応付けた情報を生成する。そして、図６の例では、生成部８ａは、葉の番号「Ｙ」と、暗号化アルゴリズム「γ」、鍵「Ｃ」およびブロック長「ｎＹ」とを対応付けた情報を暗号化テーブル７ａに登録する。
【００３０】
また、図６の例では、生成部８ａは、電子書籍のファイルの２ブロック目の先頭からＸバイト目の文字「Ｌ」を取得する。そして、図６の例では、生成部８ａは、文字「Ｌ」が格納された無節点ハフマン木７ｃの葉の番号「Ｌ」を取得する。次に、図６の例では、生成部８ａは、取得した葉の番号「Ｌ」と、次のブロックである３ブロック目の暗号化に用いられる暗号化アルゴリズム「δ」、鍵「Ｄ」およびブロック長「ｎＬ」とを対応付けた情報を生成する。そして、図６の例では、生成部８ａは、葉の番号「Ｌ」と、暗号化アルゴリズム「δ」、鍵「Ｄ」およびブロック長「ｎＬ」とを対応付けた情報を暗号化テーブル７ａに登録する。
【００３１】
このように、生成部８ａは、ｊ番目のブロックの所定の位置に存在する文字を取得する。そして、生成部８ａは、取得した文字が格納された葉の番号と、ｊ番目のブロックに続く（ｊ＋１）番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。そして、生成部８ａは、生成した情報を暗号化テーブル７ａに登録する。ここで、複数の電子書籍の各ファイルからは、各ブロックに対応する葉の番号を把握することが困難である。そのため、暗号化テーブル７ａの登録内容からは、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかについて把握することが困難である。よって、暗号化テーブル７ａの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化された電子書籍を復号化することも困難となる。したがって、生成部８ａによれば、データの解読をより困難にすることができる。
【００３２】
圧縮部８ｂは、無節点ハフマン木７ｃを用いて、電子書籍のファイルを分割した各ブロックを圧縮する。例えば、圧縮部８ｂは、特開２０１０−９３４１４号公報に記載されているように、２ｍ分岐の無節点ハフマン木７ｃを用いて葉の構造体に格納されている圧縮符号を抽出し、抽出した圧縮符号を圧縮バッファに書き込むことで、データ圧縮を行う。
【００３３】
具体例を挙げて説明すると、圧縮部８ｂは、まず、複数の電子書籍のファイルを記憶部７から取得する。そして、圧縮部８ｂは、複数の電子書籍のファイルから、文字の出現回数を算出し、圧縮パラメータ７ｂを算出する。続いて、圧縮部８ｂは、圧縮パラメータ７ｂから２ｎ分岐ハフマン木を生成し、生成した２ｎ分岐ハフマン木を無節点ハフマン木７ｃに変換することで、無節点ハフマン木７ｃを生成する。そして、圧縮部８ｂは、上述した出現マップ７ｄを生成する。続いて、圧縮部８ｂは、無節点ハフマン木７ｃを用いて、電子書籍のファイルを分割した各ブロックを圧縮する。
【００３４】
第１の暗号化部８ｃは、電子書籍のファイルの１ブロック目を暗号化する。例えば、第１の暗号化部８ｃは、ＥＸＯＲ、ビット転置、デジット転置、バイト転置と比較すると暗号化の強度が高いＤＥＳ、トリプルＤＥＳ、ＡＥＳ、ＲＳＡの暗号化アルゴリズムを用いて、所定の鍵、ブロック長で１ブロック目を暗号化する。１ブロック目の暗号化に強度の高い暗号化アルゴリズムを用いることで、攻撃者などは、暗号化された１ブロック目の解読が困難となるため、２ブロック目以降に用いられる暗号化パラメータを推測することが困難となる。そのため、１ブロック目の暗号化にＥＸＯＲ、ビット転置、デジット転置、バイト転置などの暗号化アルゴリズムを用いた場合と比較して、全ブロックの暗号化の強度が高くなり、暗号化されたファイルの解読がより困難になる。
【００３５】
以下では、第１の暗号化部８ｃが、圧縮部８ｂにより圧縮された１ブロック目を、ＲＳＡの暗号化アルゴリズムを用いて、所定の鍵Ｋ１、１０２４ビットのブロック長で暗号化する場合を挙げて説明する。
【００３６】
第２の暗号化部８ｄは、電子書籍のファイルの２ブロック目以降のｊ番目のブロックを、生成部８ａにより生成された情報が示すｊ番目のブロックの暗号化に用いられる暗号化パラメータを用いて暗号化する。
【００３７】
図６の例では、第２の暗号化部８ｄは、圧縮部８ｂにより圧縮された２ブロック目を、暗号化アルゴリズム「γ」、鍵「Ｃ」およびブロック長「ｎＹ」で暗号化する。また、図６の例では、第２の暗号化部８ｄは、圧縮部８ｂにより圧縮された３ブロック目を、暗号化アルゴリズム「δ」、鍵「Ｄ」およびブロック長「ｎＬ」で暗号化する。
【００３８】
また、第２の暗号化部８ｄは、暗号化テーブル７ａと、圧縮パラメータ７ｂと、出現マップ７ｄとを１つのファイルにする。そして、第２の暗号化部８ｄは、ファイルをＲＳＡで暗号化し、暗号化したファイルを記憶部７に格納する。また、第２の暗号化部８ｄは、利用者端末３から、暗号化テーブル７ａと圧縮パラメータ７ｂと出現マップ７ｄとを送信する指示を受信すると、記憶部７に記憶されたファイルを送受信部６およびインターネット８０を介して、利用者端末３へ送信する。また、第２の暗号化部８ｄは、利用者端末３から、電子書籍を送信する指示を受信すると、記憶部７に記憶された電子書籍であって、圧縮され暗号化された電子書籍を送受信部６およびインターネット８０を介して、利用者端末３へ送信する。
【００３９】
制御部８は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路を有する。なお、制御部８は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路を有してもよい。
【００４０】
図１に戻り、利用者端末３は、入力部９と、出力部１０と、送受信部１１と、記憶部１２と、制御部１３とを有する。
【００４１】
入力部９は、各種情報を制御部１３に入力する。例えば、入力部９は、ユーザから検索キーワード、および後述の検索処理を実行する指示を受け付けて、受け付けた検索キーワードおよび指示を制御部１３に入力する。入力部９のデバイスの一例としては、マウスやキーボードなどの操作受付デバイスが挙げられる。
【００４２】
出力部１０は、各種の情報を出力する。例えば、出力部１０は、表示制御部１３ｃによってキーワード検索された項目を表示する。出力部１０のデバイスの一例としては、ＬＣＤ（Liquid  Crystal  Display）やＣＲＴ（Cathode  Ray  Tube）などの表示デバイスが挙げられる。
【００４３】
送受信部１１は、利用者端末３とサーバ２との通信を行うための通信インタフェースである。例えば、送受信部１１は、制御部１３から、暗号化テーブル７ａと圧縮パラメータ７ｂと出現マップ７ｄとを送信する指示を受信すると、受信した指示を送受信部１１およびインターネット８０を介して、サーバ２へ送信する。また、送受信部１１は、サーバ２からＲＳＡで暗号化された暗号化テーブル７ａ、圧縮パラメータ７ｂ、出現マップ７ｄのファイルを受信すると、受信した暗号化テーブル７ａ、圧縮パラメータ７ｂ、出現マップ７ｄのファイルを制御部１３へ送信する。また、送受信部１１は、制御部１３から、電子書籍を送信する指示を受信すると、受信した指示を送受信部１１およびインターネット８０を介して、サーバ２へ送信する。また、送受信部１１は、サーバ２から送信された電子書籍であって、圧縮され暗号化された電子書籍を受信すると、受信した電子書籍を制御部１３へ送信する。
【００４４】
記憶部１２は、各種情報を記憶する。例えば、記憶部１２には、後述の復号化部１３ａにより復号化された暗号化テーブル７ａ、圧縮パラメータ７ｂ、出現マップ７ｄが格納される。また、記憶部１２には、後述の伸張部１３ｂにより生成された無節点ハフマン木７ｃが格納される。
【００４５】
記憶部１２は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部１２は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory)、ＲＯＭ（Read  Only  Memory)であってもよい。
【００４６】
制御部１３は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図１に示すように、制御部１３は、復号化部１３ａと、伸張部１３ｂと、表示制御部１３ｃとを有する。
【００４７】
復号化部１３ａは、電子書籍のファイルの各ブロックを復号化する。復号化部１３ａが実行する処理の一例について説明する。復号化部１３ａは、入力部９を介して検索処理を実行する処理を受信すると、電子書籍を送信する指示、および暗号化テーブル７ａと圧縮パラメータ７ｂと出現マップ７ｄとを送信する指示を、送受信部１１およびインターネット８０を介してサーバ２へ送信する。復号化部１３ａは、サーバ２から、暗号化された暗号化テーブル７ａと圧縮パラメータ７ｂと出現マップ７ｄのファイルを受信すると、受信したファイルをＲＳＡで復号化する。
【００４８】
また、復号化部１３ａは、サーバ２から送信された電子書籍のうち、後述の伸張部１３ｂで特定された電子書籍について、ファイルの１ブロック目を、ＲＳＡのアルゴリズムを用いて、所定の鍵Ｋ１、１０２４ビットのブロック長で復号化する。
【００４９】
また、復号化部１３ａは、後述の伸張部１３ｂにより伸張されたｊ番目のブロックの文字列の中から１文字取得する。そして、復号化部１３ａは、取得した文字が格納されている無節点ハフマン木７ｃの葉の番号を取得する。続いて、復号化部１３ａは、記憶部１２に記憶された暗号化テーブル７ａから、葉の番号に対応する暗号化パラメータを、次の（ｊ＋１）番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、復号化部１３ａは、電子書籍のファイルの（ｊ＋１）番目のブロックを、取得した（ｊ＋１）番目のブロックに対応する復号化パラメータを用いて復号化する。
【００５０】
図７は、利用者端末の処理の一例を説明するための図である。図７の例では、復号化部１３ａは、復号化された電子書籍のファイルの１ブロック目の先頭から所定数Ｘバイト目の文字「Ｋ」を取得する。そして、図７の例では、復号化部１３ａは、文字「Ｋ」が格納された無節点ハフマン木７ｃの葉の番号「Ｙ」を取得する。次に、図７の例では、復号化部１３ａは、取得した葉の番号「Ｙ」に対応するアルゴリズム「γ」、鍵「Ｃ」およびブロック長「ｎＹ」を、次の２番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図７の例では、復号化部１３ａは、暗号化された電子書籍のファイルの２番目のブロックを、取得したアルゴリズム「γ」、鍵「Ｃ」およびブロック長「ｎＹ」を用いて復号化する。
【００５１】
また、図７の例では、復号化部１３ａは、復号化された電子書籍のファイルの２ブロック目の先頭から所定数Ｘバイト目の文字「Ｌ」を取得する。そして、図７の例では、復号化部１３ａは、文字「Ｌ」が格納された無節点ハフマン木７ｃの葉の番号「Ｌ」を取得する。次に、図７の例では、復号化部１３ａは、取得した葉の番号「Ｌ」に対応するアルゴリズム「δ」、鍵「Ｄ」およびブロック長「ｎＬ」を、次の３番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図７の例では、復号化部１３ａは、暗号化された電子書籍のファイルの３番目のブロックを、取得したアルゴリズム「δ」、鍵「Ｄ」およびブロック長「ｎＬ」を用いて復号化する。
【００５２】
このように、復号化に用いられる暗号化テーブル７ａには、ｊ番目のブロックの所定の位置に存在する文字が格納された葉の番号と、ｊ番目のブロックに続く（ｊ＋１）番目のブロックの復号化に用いられる復号化パラメータとを対応付けた情報が登録される。ここで、電子書籍の各ファイルからは、各ブロックに対応する葉の番号を把握することが困難である。そのため、暗号化テーブル７ａの登録内容からは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することが困難である。よって、記憶部１２に記憶された暗号化テーブル７ａの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。
【００５３】
伸張部１３ｂは、無節点ハフマン木７ｃを用いて、電子書籍のファイルを分割した各ブロックを伸張する。例えば、伸張部１３ｂは、特開２０１０−９３４１４号公報に記載されているように、圧縮パラメータ７ｂから２ｎ分岐ハフマン木を生成し、生成した２ｎ分岐ハフマン木を無節点ハフマン木７ｃに変換することで、無節点ハフマン木７ｃを生成する。そして、伸張部１３ｂは、生成した無節点ハフマン木７ｃを記憶部１２に格納する。
【００５４】
また、伸張部１３ｂは、記憶部１２に記憶された出現マップ７ｄを用いて、復号化された電子書籍のファイルのうち、検索キーワードを全て含むファイルを特定する。すなわち、全ての検索キーワードが含まれるファイルが、復号化部１３ａでの復号化対象および伸張部１３ｂでの伸張対象のファイルとなる。このように、処理対象のファイルを絞りこむことで、処理の高速化が図れる。
【００５５】
そして、伸張部１３ｂは、レジスタに圧縮符号列をセットし、マスクパターンにより圧縮符号を抽出する。続いて、伸張部１３ｂは、抽出した圧縮符号を、１枝分のアクセス、すなわち１パスで２ｍ分岐の無節点ハフマン木７ｃの根から探索する。次に、伸張部１３ｂは、アクセスした葉の構造体に格納されている文字コードを読み出して記憶部１２の伸張バッファに格納する。
【００５６】
表示制御部１３ｃは、電子書籍に対する検索結果が表示されるように出力部１０の表示を制御する。例えば、表示制御部１３ｃは、国際公開第２００６／１２３４４８号に記載されているように、伸張したファイルの中から、キーワードを含む項目を出力部１０に表示させる。
【００５７】
制御部１３は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路を有する。なお、制御部１３は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路を有してもよい。
【００５８】
［処理の流れ］
次に、本実施例に係るサーバ２の処理の流れを説明する。図８は、実施例１に係る圧縮・暗号化処理の手順を示すフローチャートである。この圧縮・暗号化処理は、入力部４から圧縮・暗号化処理を実行する指示が制御部８に入力された場合に、実行される。
【００５９】
図８に示すように、圧縮部８ｂは、複数の電子書籍のファイルを記憶部７から取得する（ステップＳ１０１）。圧縮部８ｂは、複数の電子書籍のファイルから、文字の出現回数を算出し、圧縮パラメータ７ｂを算出する（ステップＳ１０２）。圧縮部８ｂは、圧縮パラメータ７ｂから２ｎ分岐ハフマン木を生成し、生成した２ｎ分岐ハフマン木を無節点ハフマン木に変換することで、無節点ハフマン木を生成する（ステップＳ１０３）。圧縮部８ｂは、出現マップ７ｄを生成する（ステップＳ１０４）。
【００６０】
圧縮部８ｂは、変数ｉの値として１を設定する（ステップＳ１０５）。圧縮部８ｂは、変数ｊの値として１を設定する（ステップＳ１０６）。
【００６１】
生成部８ａは、電子書籍のｉ番目のファイルのｊ番目のブロックの文字列の中から１文字取得する（ステップＳ１０７）。生成部８ａは、取得した文字が格納されている無節点ハフマン木７ｃの葉の番号を取得する（ステップＳ１０８）。生成部８ａは、取得した葉の番号と、ｉ番目のファイルの（ｊ＋１）番目のブロックの暗号化に用いられる暗号化アルゴリズム、鍵およびブロック長などの暗号化パラメータとを対応付けた情報を生成する（ステップＳ１０９）。生成部８ａは、生成した情報を暗号化テーブル７ａに登録する（ステップＳ１１０）。
【００６２】
圧縮部８ｂは、ｉ番目のファイルのｊ番目のブロックを無節点ハフマン木７ｃを用いて圧縮する（ステップＳ１１１）。第１の暗号化部８ｃまたは第２の暗号化部８ｄは、ｉ番目のファイルのｊ番目のブロックを暗号化する（ステップＳ１１２）。ここで、変数ｊの値が１である場合には、第１の暗号化部８ｃは、電子書籍のファイルの１番目のブロックを暗号化する。また、変数ｊの値が２以上である場合には、第２の暗号化部８ｄは、生成部８ａにより生成された情報が示す暗号化パラメータであって、ｊ番目のブロックの暗号化に用いられる暗号化パラメータを用いて、ｊ番目のブロックを暗号化する。
【００６３】
圧縮部８ｂは、変数ｊの値を１つインクリメントする（ステップＳ１１３）。圧縮部８ｂは、変数ｊの値が、ｉ番目のファイルを分割したブロックの個数Ｋを超えたか否かを判定する（ステップＳ１１４）。変数ｊの値が、個数Ｋを超えていない場合（ステップＳ１１４否定）には、ステップＳ１０７へ戻る。
【００６４】
一方、変数ｊの値が、個数Ｋを超えた場合（ステップＳ１１４肯定）には、圧縮部８ｂは、変数ｉの値を１つインクリメントする（ステップＳ１１５）。圧縮部８ｂは、変数ｉの値が、電子書籍のファイルの個数Ｐを超えたか否かを判定する（ステップＳ１１６）。変数ｉの値が、個数Ｐを超えていない場合（ステップＳ１１６否定）には、ステップＳ１０６へ戻る。一方、変数ｉの値が、個数Ｐを超えた場合（ステップＳ１１６肯定）には、第２の暗号化部８ｄは、次のような処理を行う。すなわち、第２の暗号化部８ｄは、暗号化テーブル７ａと、圧縮パラメータ７ｂと、出現マップ７ｄとを１つのファイルにし、ＲＳＡで暗号化し、暗号化したファイルを記憶部７に格納し（ステップＳ１１７）、処理を終了する。
【００６５】
次に、本実施例に係る利用者端末３の処理の流れを説明する。図９は、実施例１に係る検索処理の手順を示すフローチャートである。この検索処理は、入力部９から検索キーワード、および検索処理を実行する指示が制御部１３に入力された場合に、実行される。
【００６６】
図９に示すように、復号化部１３ａは、サーバ２から受信した、暗号化された暗号化テーブル７ａと圧縮パラメータ７ｂと出現マップ７ｄとのファイルをＲＳＡで復号化する（ステップＳ２０１）。伸張部１３ｂは、圧縮パラメータ７ｂから２ｎ分岐ハフマン木を生成し、生成した２ｎ分岐ハフマン木を無節点ハフマン木７ｃに変換することで、無節点ハフマン木７ｃを生成する（ステップＳ２０２）。伸張部１３ｂは、記憶部１２に記憶された出現マップ７ｄを用いて、復号化された電子書籍のファイルのうち、検索キーワードを全て含むファイルを特定する（ステップＳ２０３）。伸張部１３ｂは、変数ｊの値として１を設定する（ステップＳ２０４）。
【００６７】
復号化部１３ａは、変数ｊの値が１であるか否かを判定する（ステップＳ２０５）。変数ｊの値が１である場合（ステップＳ２０５肯定）には、復号化部１３ａは、ステップＳ２０３で特定された電子書籍のファイルの１ブロック目を、ＲＳＡのアルゴリズムを用いて、所定の鍵Ｋ１、１０２４ビットのブロック長で復号化する（ステップＳ２０６）。一方、変数ｊの値が１でない場合（ステップＳ２０５否定）には、復号化部１３ａは、次のような処理を行う。すなわち、復号化部１３ａは、後述のステップＳ２１１で取得された復号化パラメータであって、ｊブロック目に対応する復号化パラメータを用いて、ステップＳ２０３で特定された電子書籍のファイルのｊブロック目を復号化する（ステップＳ２０７）。そして、伸張部１３ｂは、無節点ハフマン木７ｃを用いて、ファイルのｊ番目のブロックを伸張する（ステップＳ２０８）。復号化部１３ａは、伸張されたｊ番目のブロックの文字列の中から１文字取得する（ステップＳ２０９）。
【００６８】
復号化部１３ａは、取得した文字が格納されている無節点ハフマン木７ｃの葉の番号を取得する（ステップＳ２１０）。復号化部１３ａは、記憶部１２に記憶された暗号化テーブル７ａから、葉の番号に対応する復号化パラメータを、次の（ｊ＋１）番目のブロックの復号化に用いる復号化パラメータとして取得する（ステップＳ２１１）。復号化部１３ａは、変数ｊの値を１つインクリメントする（ステップＳ２１２）。復号化部１３ａは、変数ｊの値が、上述した個数Ｋを超えたか否かを判定する（ステップＳ２１３）。
【００６９】
変数ｊの値が、個数Ｋを超えていない場合（ステップＳ２１３否定）には、ステップＳ２０５へ戻る。一方、変数ｊの値が、個数Ｋを超えた場合（ステップＳ２１３肯定）には、表示制御部１３ｃは、伸張したファイルの中から、キーワードを含む項目を出力部１０に表示させ（ステップＳ２１４）、処理を終了する。
【００７０】
上述してきたように、本実施例に係るサーバ２は、暗号化対象のファイルに含まれるｊ番目のブロックのうちの所定の文字のデータと、暗号化アルゴリズム、鍵およびブロック長とを関連付けた情報を生成する。そして、本実施例に係るサーバ２は、ｊ番目のブロックを、予め定められた鍵、または（ｊ−１）番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて暗号化する。次に、本実施例に係るサーバ２は、ｊ番目のブロックの所定の文字のデータに関連付けられたブロック長の（ｊ＋１）番目のブロックを、ｊ番目のブロックの所定の文字のデータと関連付けられた鍵を用いて暗号化する。このように、本実施例に係るサーバ２は、ｊ番目のブロックの所定の位置に存在する文字と、（ｊ＋１）番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。ここで、電子書籍のファイルや生成された情報から、各ブロックの所定の位置に存在する文字を把握することは、困難である。そのため、生成された情報から、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかについて把握することは、困難である。よって、生成された情報が外部に漏洩した場合であっても、攻撃者などは、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化されたファイルを復号化することも困難となる。したがって、本実施例に係るサーバ２によれば、データの解読をより困難にすることができる。
【００７１】
また、本実施例に係るサーバ２は、文字のデータを圧縮符号のデータに変換するための無節点ハフマン木７ｃを用いて、各ブロックを圧縮する。そして、本実施例に係るサーバ２は、無節点ハフマン木７ｃの葉に格納された文字のデータと、次のブロックの暗号化パラメータとを対応付けた情報を生成する。したがって、本実施例に係るサーバ２によれば、圧縮と暗号化とがブロック単位で行うことが実現できるため、記憶容量がより小さい圧縮バッファなどを用いて圧縮および暗号化を行うことができる。
【００７２】
また、本実施例に係る利用者端末３は、復号化対象のファイルに含まれるｊ番目のブロックを、予め定められた鍵、または、（ｊ−１）番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。また、本実施例に係る利用者端末３は、復号化対象のファイルに含まれる（ｊ＋１）番目のブロックを、ｊ番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。本実施例に係る利用者端末３は、復号化に用いられるｊ番目のブロックの所定の位置に存在する文字が格納された葉の番号と、ｊ番目のブロックに続く（ｊ＋１）番目のブロックの復号化に用いられる復号化パラメータとを対応付けた情報をブロックの復号化に用いる。ここで、電子書籍のファイルや、復号化に用いられる情報から、各ブロックに対応する葉の番号を把握することは、困難である。そのため、復号化に用いられる情報から、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することは、困難である。よって、記憶部１２に記憶された暗号化テーブル７ａの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。また、暗号化データが解読困難性を有しつつ、暗号化処理または復号化処理の処理コストが抑制されることができる。
【実施例２】
【００７３】
さて、上記の実施例１では、無接点ハフマン木を用いる場合を例示したが、開示の装置はこれに限定されない。そこで、実施例２では、ＬＺ７７の圧縮方式を用いる場合について説明する。
【００７４】
［システム２０の構成例］
図１０は、実施例２に係るシステムの構成の一例を示す図である。図１０に示すように、システム２０は、実施例１に係るサーバ２に代えてサーバ２１、利用者端末３に代えて利用者端末２２を有する。なお、以下では、上記の実施例１と同様の機能を果たす各部や各機器については図１と同様の符号を付し、その説明は省略する場合がある。
【００７５】
サーバ２１は、入力部４と、出力部５と、送受信部６と、記憶部２３と、制御部２４とを有する。
【００７６】
送受信部６は、サーバ２１と利用者端末２２との通信を行うための通信インタフェースである。例えば、送受信部６は、制御部２４から後述の暗号化テーブル２３ａを受信すると、受信した暗号化テーブル２３ａを、インターネット８０を介して利用者端末２２へ送信する。また、送受信部６は、制御部２４から圧縮され暗号化された電子書籍を受信すると、受信した電子書籍を、インターネット８０を介して利用者端末２２へ送信する。
【００７７】
記憶部２３は、各種情報を記憶する。例えば、記憶部２３は、暗号化テーブル２３ａを記憶する。
【００７８】
暗号化テーブル２３ａには、実施例１の暗号化テーブル７ａと同様に、各ブロックを暗号化する場合に、暗号化に用いられる暗号化アルゴリズムを示すアルゴリズム情報、鍵を示す鍵情報、ブロック長を示すブロック長情報が登録される。また、暗号化テーブル２３ａには、後述の生成部２４ａにより、取得した文字のスライド辞書の参照部からの先頭アドレスが、アルゴリズム情報、鍵情報およびブロック長に対応付けられて登録される。これにより、アルゴリズム情報、鍵情報およびブロック長と、先頭アドレスに対応付けられた文字とが関連付けられる。
【００７９】
ここで、暗号化テーブル２３ａに登録される暗号化アルゴリズム、鍵、ブロック長の組み合わせについては、実施例１の暗号化テーブル７ａに登録される暗号化アルゴリズム、鍵、ブロック長の組み合わせと同様であるので説明を省略する。
【００８０】
図１１は、暗号化テーブルの一例を示す図である。図１１の例では、暗号化アルゴリズム「α」と、鍵「ａ」と、ブロック長「ｎＥ」と、先頭アドレス「Ｅ」とが関連付けられた場合が示されている。また、図１１の例では、暗号化アルゴリズム「β」と、鍵「ｂ」と、ブロック長「ｎＦ」と、先頭アドレス「Ｆ」とが関連付けられた場合が示されている。
【００８１】
記憶部２３は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部２３は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory)、ＲＯＭ（Read  Only  Memory)であってもよい。
【００８２】
制御部２４は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図１０に示すように、制御部２４は、生成部２４ａと、圧縮部２４ｂと、第１の暗号化部２４ｃと、第２の暗号化部２４ｄとを有する。
【００８３】
生成部２４ａは、処理対象のブロックの先頭文字が、スライド窓の符号化部の先頭にセットされている場合に、符号化部の文字列の中から１文字取得する。そして、生成部２４ａは、後述の圧縮部２４ｂによりスライド窓を１ブロック分スライドされた場合に、取得した文字が位置する参照部の先頭からのアドレスを取得する。続いて、生成部２４ａは、取得したアドレスと、次のブロックの暗号化に用いられる暗号化アルゴリズム、鍵およびブロック長などの暗号化パラメータとを対応付けた情報を生成し、生成した情報を暗号化テーブル２３ａに登録する。生成部２４ａは、このような処理を、複数の電子書籍の各ファイルの各ブロックについて行う。生成部２４ａは、次のブロックの暗号化に用いられる暗号化アルゴリズムとして、上述したＥＸＯＲ、ビット転置、デジット転置、バイト転置、ＤＥＳ、トリプルＤＥＳ、ＡＥＳ、ＲＳＡを用いることができる。なお、暗号化に用いられる暗号化アルゴリズムはこれらに限られない。また、各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については予め定義されており、生成部２４ａは、その定義された情報にしたがって、ブロックごとに、葉の番号と暗号化パラメータとを対応付けた情報を生成する。各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については、ユーザが、入力部４を介して定義することができる。
【００８４】
図１２は、サーバの処理の一例を説明するための図である。図１２の例では、生成部２４ａは、電子書籍のファイルの１ブロック目の先頭文字が、スライド窓３０の符号化部３２の先頭にセットされた場合に、符号化部３２の先頭から所定数Ｘバイト目の文字「Ｂ」を取得する。そして、図１２の例では、後述の圧縮部２４ｂにより１ブロック目が圧縮され、スライド窓が１ブロック分スライドされた場合に、生成部２４ａは、取得した文字「Ｂ」が位置する参照部３１の先頭からのアドレスＱを取得する。次に、図１２の例では、生成部２４ａは、取得したアドレス「Ｑ」と、次のブロックである２ブロック目の暗号化に用いられる暗号化アルゴリズム「α」、鍵「Ｅ」およびブロック長「ｎＱ」とを対応付けた情報を生成する。そして、図１２の例では、生成部２４ａは、アドレス「Ｑ」と、暗号化アルゴリズム「α」、鍵「Ｅ」およびブロック長「ｎＱ」とを対応付けた情報を暗号化テーブル２３ａに登録する。
【００８５】
また、図１２の例では、生成部２４ａは、電子書籍のファイルの２ブロック目の先頭文字が、スライド窓３０の符号化部３２の先頭にセットされた場合に、符号化部３２の先頭から所定数Ｘバイト目の文字「Ｎ」を取得する。そして、図１２の例では、後述の圧縮部２４ｂにより２ブロック目が圧縮され、スライド窓が１ブロック分スライドされた場合に、生成部２４ａは、取得した文字「Ｎ」が位置する参照部３１の先頭からのアドレスＲを取得する。次に、図１２の例では、生成部２４ａは、取得したアドレス「Ｒ」と、次のブロックである３ブロック目の暗号化に用いられる暗号化アルゴリズム「β」、鍵「Ｆ」およびブロック長「ｎＲ」とを対応付けた情報を生成する。そして、図１２の例では、生成部２４ａは、アドレス「Ｒ」と、暗号化アルゴリズム「β」、鍵「Ｆ」およびブロック長「ｎＲ」とを対応付けた情報を暗号化テーブル２３ａに登録する。
【００８６】
このように、生成部２４ａは、ｊ番目のブロックの所定の位置に存在する文字を取得する。そして、生成部２４ａは、ｊ番目のブロックが圧縮され、スライド窓３０が１ブロック分スライドされた場合の文字の位置を示すアドレスと、ｊ番目のブロックに続く（ｊ＋１）番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。そして、生成部２４ａは、生成した情報を暗号化テーブル２３ａに登録する。ここで、複数の電子書籍のファイルや生成された情報から、各ブロックに対応するアドレスを把握することは、困難である。そのため、暗号化テーブル２３ａの登録内容から、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかについて把握することは、困難である。よって、暗号化テーブル２３ａの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化された電子書籍を復号化することも困難となる。したがって、生成部２４ａによれば、データの解読をより困難にすることができる。
【００８７】
圧縮部２４ｂは、参照部３１および符号化部３２を有するスライド窓３０を用いたＬＺ７７の圧縮方式により、電子書籍のファイルの各ブロックを圧縮する。
【００８８】
第１の暗号化部２４ｃは、電子書籍のファイルの１ブロック目を暗号化する。例えば、第１の暗号化部２４ｃは、ＥＸＯＲ、ビット転置、デジット転置、バイト転置と比較すると暗号化の強度が高いＤＥＳ、トリプルＤＥＳ、ＡＥＳ、ＲＳＡの暗号化アルゴリズムを用いて、所定の鍵、ブロック長で１ブロック目を暗号化する。
【００８９】
以下では、第１の暗号化部２４ｃが、圧縮部２４ｂにより圧縮された１ブロック目を、ＲＳＡの暗号化アルゴリズムを用いて、所定の鍵Ｋ１、１０２４ビットのブロック長で暗号化する場合を挙げて説明する。
【００９０】
第２の暗号化部２４ｄは、電子書籍のファイルの２ブロック目以降のｊ番目のブロックを、生成部２４ａにより生成された情報が示すｊ番目のブロックの暗号化に用いられる暗号化パラメータを用いて暗号化する。
【００９１】
図１２の例では、第２の暗号化部２４ｄは、圧縮部２４ｂにより圧縮された２ブロック目を、暗号化アルゴリズム「α」、鍵「Ｅ」およびブロック長「ｎＱ」で暗号化する。また、図１２の例では、第２の暗号化部２４ｄは、圧縮部２４ｂにより圧縮された３ブロック目を、暗号化アルゴリズム「β」、鍵「Ｆ」およびブロック長「ｎＲ」で暗号化する。
【００９２】
また、第２の暗号化部２４ｄは、暗号化テーブル２３ａを、ＲＳＡで暗号化し、暗号化した暗号化テーブル２３ａを記憶部２３に格納する。また、第２の暗号化部２４ｄは、利用者端末２２から、暗号化テーブル２３ａを送信する指示を受信すると、記憶部２３に記憶された暗号化テーブル２３ａを送受信部６およびインターネット８０を介して、利用者端末２２へ送信する。また、第２の暗号化部２４ｄは、利用者端末２２から、電子書籍を送信する指示を受信すると、記憶部２３に記憶された電子書籍を送受信部６およびインターネット８０を介して、利用者端末２２へ送信する。
【００９３】
制御部２４は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路を有する。なお、制御部２４は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路を有してもよい。
【００９４】
図１０に戻り、利用者端末２２は、入力部９と、出力部１０と、送受信部１１と、記憶部２５と、制御部２６とを有する。
【００９５】
出力部１０は、各種の情報を出力する。例えば、出力部１０は、表示制御部２６ｃによってキーワード検索された項目を表示する。出力部１０のデバイスの一例としては、ＬＣＤ（Liquid  Crystal  Display）やＣＲＴ（Cathode  Ray  Tube）などの表示デバイスなどが挙げられる。
【００９６】
送受信部１１は、利用者端末２２とサーバ２１との通信を行うための通信インタフェースである。例えば、送受信部１１は、制御部２６から、暗号化テーブル２３ａを送信する指示を受信すると、受信した指示を送受信部１１およびインターネット８０を介して、サーバ２１へ送信する。また、送受信部１１は、サーバ２１からＲＳＡで暗号化された暗号化テーブル２３ａを受信すると、受信した暗号化テーブル２３ａを制御部２６へ送信する。また、送受信部１１は、制御部２６から、電子書籍を送信する指示を受信すると、受信した指示を送受信部１１およびインターネット８０を介して、サーバ２１へ送信する。また、送受信部１１は、サーバ２１から送信された電子書籍を受信すると、受信した電子書籍を制御部２６へ送信する。
【００９７】
記憶部２５は、各種情報を記憶する。例えば、記憶部２５には、後述の復号化部２６ａにより復号化された暗号化テーブル２３ａが格納される。
【００９８】
記憶部２５は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部２５は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory)、ＲＯＭ（Read  Only  Memory)であってもよい。
【００９９】
制御部２６は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図１０に示すように、制御部２６は、復号化部２６ａと、伸張部２６ｂと、表示制御部２６ｃとを有する。
【０１００】
復号化部２６ａは、電子書籍のファイルの各ブロックを復号化する。復号化部２６ａが実行する処理の一例について説明する。復号化部２６ａは、入力部９を介して検索処理を実行する処理を受信すると、電子書籍を送信する指示、および暗号化テーブル２３ａを送信する指示を送受信部１１およびインターネット８０を介してサーバ２１へ送信する。復号化部２６ａは、サーバ２１から、暗号化された暗号化テーブル２３ａを受信すると、受信した暗号化テーブル２３ａをＲＳＡで復号化する。
【０１０１】
また、復号化部２６ａは、サーバ２１から送信された電子書籍について、ファイルの１ブロック目を、ＲＳＡのアルゴリズムを用いて、所定の鍵Ｋ１、１０２４ビットのブロック長で復号化する。
【０１０２】
また、復号化部２６ａは、後述の伸張部２６ｂにより伸張されたｊ番目のブロックの先頭文字を、スライド窓３０の符号化部３２の先頭にセットした場合の、符号化部３２の先頭から所定数Ｘバイト目の文字を取得する。そして、復号化部２６ａは、後述の伸張部２６ｂによりｊ番目のブロックを伸張するためにスライドされた後のスライド窓３０の参照部３１の先頭からのアドレスであって、取得した文字の位置を示すアドレスを取得する。続いて、復号化部２６ａは、記憶部２５に記憶された暗号化テーブル２３ａから、アドレスに対応する復号化パラメータを、次の（ｊ＋１）番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、復号化部２６ａは、電子書籍のファイルの（ｊ＋１）番目のブロックを、取得した（ｊ＋１）番目のブロックに対応する復号化パラメータを用いて復号化する。
【０１０３】
図１３は、利用者端末の処理の一例を説明するための図である。図１３の例では、復号化部２６ａは、伸張されたファイルの１ブロック目の先頭文字を符号化部３２の先頭にセットした場合の、符号化部３２の先頭から所定数Ｘバイト目の文字「Ｂ」を取得する。そして、図１３の例では、復号化部２６ａは、１ブロック目が伸張された場合に、参照部３１の先頭からの文字「Ｂ」のアドレス「Ｑ」を取得する。次に、図１３の例では、復号化部２６ａは、暗号化テーブル２３ａから、取得したアドレス「Ｑ」に対応するアルゴリズム「α」、鍵「Ｅ」およびブロック長「ｎＱ」を、次の２番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図１３の例では、復号化部２６ａは、暗号化された電子書籍のファイルの２番目のブロックを、取得したアルゴリズム「α」、鍵「Ｅ」およびブロック長「ｎＱ」を用いて復号化する。
【０１０４】
また、図１３の例では、復号化部２６ａは、伸張されたファイルの２ブロック目の先頭文字を符号化部３２の先頭にセットした場合の、符号化部３２の先頭から所定数Ｘバイト目の文字「Ｎ」を取得する。そして、図１３の例では、復号化部２６ａは、２ブロック目が伸張された場合に、参照部３１の先頭からの文字「Ｎ」のアドレス「Ｒ」を取得する。次に、図１３の例では、復号化部２６ａは、暗号化テーブル２３ａから、取得したアドレス「Ｒ」に対応するアルゴリズム「β」、鍵「Ｆ」およびブロック長「ｎＲ」を、次の２番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図１３の例では、復号化部２６ａは、暗号化された電子書籍のファイルの２番目のブロックを、取得したアルゴリズム「β」、鍵「Ｆ」およびブロック長「ｎＲ」を用いて復号化する。
【０１０５】
このように、復号化に用いられる暗号化テーブル２３ａには、ｊ番目のブロックの所定の位置に存在する文字の位置を示すアドレスと、ｊ番目のブロックに続く（ｊ＋１）番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報が登録される。ここで、電子書籍のファイルや登録された情報から、各ブロックに対応するアドレスを把握することは、困難である。そのため、暗号化テーブル２３ａの登録内容から、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することは、困難である。よって、暗号化テーブル２３ａの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。
【０１０６】
伸張部２６ｂは、スライド窓３０を用いたＬＺ７７の圧縮方式により、電子書籍のファイルの各ブロックを伸張する。
【０１０７】
表示制御部２６ｃは、電子書籍に対する検索結果が表示されるように出力部１０の表示を制御する。例えば、表示制御部２６ｃは、伸張したファイルの中から、キーワードを含む項目を検索し、検索の結果得られた項目を出力部１０に表示させる。
【０１０８】
制御部２６は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路を有する。なお、制御部２６は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路を有してもよい。
【０１０９】
［処理の流れ］
次に、本実施例に係るサーバ２１の処理の流れを説明する。図１４は、実施例２に係る圧縮・暗号化処理の手順を示すフローチャートである。この圧縮・暗号化処理は、入力部４から圧縮・暗号化処理を実行する指示が制御部２４に入力された場合に、実行される。
【０１１０】
図１４に示すように、圧縮部２４ｂは、複数の電子書籍のファイルを記憶部２３から取得する（ステップＳ３０１）。圧縮部２４ｂは、変数ｉの値として１を設定する（ステップＳ３０２）。圧縮部２４ｂは、ｉ番目のファイルのデータをスライド窓３０にセットする（ステップＳ３０３）。圧縮部２４ｂは、変数ｊの値として１を設定する（ステップＳ３０４）。
【０１１１】
生成部２４ａは、ｉ番目のファイルのｊ番目のブロックの先頭文字が、符号化部３２の先頭にセットされた場合の、符号化部３２の先頭から所定数Ｘバイト目の文字を取得する（ステップＳ３０５）。圧縮部２４ｂは、スライド窓３０を用いたＬＺ７７の圧縮方式により、スライド窓３０を１ブロック分スライドさせて、ｉ番目のファイルのｊ番目のブロックを圧縮する（ステップＳ３０６）。生成部２４ａは、取得した文字が位置する参照部３１の先頭からのアドレスを取得する（ステップＳ３０７）。生成部２４ａは、取得したアドレスと、次の（ｊ＋１）番目のブロックの暗号化に用いられる暗号化アルゴリズム、鍵およびブロック長などの暗号化パラメータとを対応付けた情報を生成する（ステップＳ３０８）。生成部２４ａは、生成した情報を暗号化テーブル２３ａに登録する（ステップＳ３０９）。
【０１１２】
第１の暗号化部２４ｃまたは第２の暗号化部２４ｄは、ｉ番目のファイルのｊ番目のブロックを暗号化する（ステップＳ３１０）。ここで、変数ｊの値が１である場合には、第１の暗号化部２４ｃは、電子書籍のファイルの１番目のブロックを暗号化する。また、変数ｊの値が２以上である場合には、第２の暗号化部２４ｄは、生成部２４ａにより生成された情報が示す暗号化パラメータであって、ｊ番目のブロックの暗号化に用いられる暗号化パラメータを用いて、ｊ番目のブロックを暗号化する。
【０１１３】
圧縮部２４ｂは、変数ｊの値を１つインクリメントする（ステップＳ３１１）。圧縮部２４ｂは、変数ｊの値が、ｉ番目のファイルを分割したブロックの個数Ｋを超えたか否かを判定する（ステップＳ３１２）。変数ｊの値が、個数Ｋを超えていない場合（ステップＳ３１２否定）には、ステップＳ３０５へ戻る。
【０１１４】
一方、変数ｊの値が、個数Ｋを超えた場合（ステップＳ３１２肯定）には、圧縮部２４ｂは、変数ｉの値を１つインクリメントする（ステップＳ３１３）。圧縮部２４ｂは、変数ｉの値が、電子書籍のファイルの個数Ｐを超えたか否かを判定する（ステップＳ３１４）。変数ｉの値が、個数Ｐを超えていない場合（ステップＳ３１４否定）には、ステップＳ３０３へ戻る。一方、変数ｉの値が、個数Ｐを超えた場合（ステップＳ３１４肯定）には、第２の暗号化部２４ｄは、暗号化テーブル２３ａをＲＳＡで暗号化し、暗号化した暗号化テーブル２３ａを記憶部２３に格納し（ステップＳ３１５）、処理を終了する。
【０１１５】
次に、本実施例に係る利用者端末２２の処理の流れを説明する。図１５は、実施例２に係る検索処理の手順を示すフローチャートである。この検索処理は、入力部９から検索キーワード、および検索処理を実行する指示が制御部２６に入力された場合に、実行される。
【０１１６】
図１５に示すように、復号化部２６ａは、サーバ２１から受信した、暗号化された暗号化テーブル２３ａをＲＳＡで復号化する（ステップＳ４０１）。伸張部２６ｂは、変数ｉの値として１を設定する（ステップＳ４０２）。伸張部２６ｂは、変数ｊの値として１を設定する（ステップＳ４０３）。
【０１１７】
復号化部２６ａは、変数ｊの値が１であるか否かを判定する（ステップＳ４０４）。変数ｊの値が１である場合（ステップＳ４０４肯定）には、復号化部２６ａは、ｉ番目のファイルの１ブロック目を、ＲＳＡのアルゴリズムを用いて、所定の鍵Ｋ１、１０２４ビットのブロック長で復号化する（ステップＳ４０５）。一方、変数ｊの値が１でない場合（ステップＳ４０４否定）には、復号化部２６ａは、後述のステップＳ４１０で取得されたｉ番目のファイルのｊ番目のブロックに対応する復号化パラメータを用いて、ｊ番目のブロックを復号化する（ステップＳ４０６）。そして、伸張部２６ｂは、スライド窓３０をスライドさせて、ｊ番目のブロックを伸張する（ステップＳ４０７）。復号化部２６ａは、伸張されたｊ番目のブロックの先頭文字を、符号化部３２の先頭にセットした場合の、符号化部３２の先頭から所定数Ｘバイト目の文字を取得する（ステップＳ４０８）。
【０１１８】
復号化部２６ａは、ｊ番目のブロックを伸張するためにスライドされた後のスライド窓３０の参照部３１の先頭からのアドレスであって、ステップＳ４０８で取得した文字の位置を示すアドレスを取得する（ステップＳ４０９）。復号化部２６ａは、記憶部２５に記憶された暗号化テーブル２３ａから、アドレスに対応する復号化パラメータを、次の（ｊ＋１）番目のブロックの復号化に用いる復号化パラメータとして取得する（ステップＳ４１０）。復号化部２６ａは、変数ｊの値を１つインクリメントする（ステップＳ４１１）。復号化部２６ａは、変数ｊの値が、上述した個数Ｋを超えたか否かを判定する（ステップＳ４１２）。
【０１１９】
変数ｊの値が、個数Ｋを超えていない場合（ステップＳ４１２否定）には、ステップＳ４０４へ戻る。一方、変数ｊの値が、個数Ｋを超えた場合（ステップＳ４１２肯定）には復号化部２６ａは、変数ｉの値を１つインクリメントする（ステップＳ４１３）。復号化部２６ａは、変数ｉの値が、個数Ｐを超えたか否かを判定する（ステップＳ４１４）。変数ｉの値が、個数Ｐを超えていない場合（ステップＳ４１４否定）には、ステップＳ４０２へ戻る。一方、変数ｉの値が、個数Ｐを超えた場合（ステップＳ４１４肯定）には、表示制御部２６ｃは、伸張したファイルの中から、キーワードを含む項目を出力部１０に表示させ（ステップＳ４１５）、処理を終了する。
【０１２０】
上述してきたように、本実施例に係るサーバ２１は、暗号化対象のファイルに含まれるｊ番目のブロックのうちの所定の文字のデータと、暗号化アルゴリズム、鍵およびブロック長とを関連付けた情報を生成する。そして、本実施例に係るサーバ２１は、ｊ番目のブロックを、予め定められた鍵、または（ｊ−１）番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて暗号化する。次に、本実施例に係るサーバ２１は、ｊ番目のブロックの所定の文字のデータに関連付けられたブロック長が示すデータサイズの（ｊ＋１）番目のブロックを、ｊ番目のブロックの所定の文字のデータと関連付けられた鍵を用いて暗号化する。このように、本実施例に係るサーバ２１は、ｊ番目のブロックの所定の位置に存在する文字と、（ｊ＋１）番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。ここで、暗号化対象の電子書籍のファイルや生成された情報から、各ブロックの所定の位置に存在する文字を把握することは、困難である。そのため、生成された情報から、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかについて把握することは、困難である。よって、生成された情報が外部に漏洩した場合であっても、攻撃者などは、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化されたファイルを復号化することも困難となる。したがって、本実施例に係るサーバ２１によれば、データの解読をより困難にすることができる。
【０１２１】
また、本実施例に係るサーバ２１は、文字のデータを圧縮符号のデータに変換するためのスライド窓３０を用いて、各ブロックを圧縮する。そして、本実施例に係るサーバ２は、スライド窓３０に格納された文字のデータと、次のブロックの暗号化パラメータとを対応付けた情報を生成する。したがって、本実施例に係るサーバ２１によれば、圧縮と暗号化とがブロック単位で行うことが実現できるため、記憶容量がより小さい圧縮バッファなどを用いて圧縮および暗号化を行うことができる。また、暗号化データが解読困難性を有しつつ、暗号化処理または復号化処理の処理コストが抑制されることができる。
【０１２２】
また、本実施例に係る利用者端末２２は、復号化対象の電子書籍のファイルに含まれるｊ番目のブロックを、予め定められた鍵、または、（ｊ−１）番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。また、本実施例に係る利用者端末２２は、復号化対象の電子書籍のファイルに含まれる（ｊ＋１）番目のブロックを、ｊ番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。本実施例に係る利用者端末２２は、復号化に用いられるｊ番目のブロックの所定の位置に存在する文字のアドレスと、ｊ番目のブロックに続く（ｊ＋１）番目のブロックの復号化に用いられる復号化パラメータとを対応付けた情報をブロックの復号化に用いる。ここで、電子書籍のファイルや、ブロックの復号化に用いられる情報から、各ブロックに対応するアドレスを把握することは、困難である。そのため、ブロックの復号化に用いられる情報から、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することは、困難である。よって、記憶部２５に記憶された暗号化テーブル２３ａの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。
【実施例３】
【０１２３】
さて、上記の実施例２では、ＬＺ７７の圧縮方式を用いる場合を例示したが、開示の装置はこれに限定されない。そこで、実施例３では、ＬＺ７８の圧縮方式を用いる場合について説明する。ＬＺ７８の圧縮方式では、動的辞書、いわゆるトライの木を生成し、生成したトライの木を用いて各ブロックの暗号化および復号化を行う。なお、トライの木の葉および節には、文字コードと文字と参照番号とが格納されている。図１６は、トライの木の一例を示す図である。図１６の例では、文字列「ｂｉｔ」の参照番号は、１６進数で「１０４」である。図１６の例では、文字列「ｂｉｔ」の圧縮符号列として参照番号「１０４」を用いることで、文字列「ｂｉｔ」の圧縮を行うことができる。また、図１６の例では、圧縮されたファイルのデータ「１０４」を、文字列「ｂｉｔ」に置き換えることで、伸張を行うことができる。
【０１２４】
［システム５０の構成］
図１７は、実施例３に係るシステムの構成の一例を示す図である。図１７に示すように、システム５０は、実施例１に係るサーバ２に代えてサーバ５１、利用者端末３に代えて利用者端末５２を有する。なお、以下では、上記の実施例１や実施例２と同様の機能を果たす各部や各機器については図１および図１０と同様の符号を付し、その説明は省略する場合がある。
【０１２５】
サーバ５１は、入力部４と、出力部５と、送受信部６と、記憶部５３と、制御部５４とを有する。
【０１２６】
送受信部６は、サーバ５１と利用者端末５２との通信を行うための通信インタフェースである。例えば、送受信部６は、制御部５４から後述の暗号化テーブル５３ａを受信すると、受信した暗号化テーブル５３ａを、インターネット８０を介して利用者端末５２へ送信する。また、送受信部６は、制御部５４から暗号化された電子書籍を受信すると、受信した電子書籍を、インターネット８０を介して利用者端末５２へ送信する。
【０１２７】
記憶部５３は、各種情報を記憶する。例えば、記憶部５３は、暗号化テーブル５３ａを記憶する。
【０１２８】
暗号化テーブル５３ａには、実施例１の暗号化テーブル７ａと同様に、各ブロックを暗号化する場合に、暗号化に用いられる暗号化アルゴリズムを示すアルゴリズム情報、鍵を示す鍵情報、ブロック長を示すブロック長情報が登録される。また、暗号化テーブル５３ａには、後述の生成部５４ａにより、取得した文字が格納されたトライの木の葉の参照番号が、アルゴリズム情報、鍵情報およびブロック長に対応付けられて登録される。これにより、アルゴリズム情報、鍵情報およびブロック長と、各ブロックに対応する文字が格納されたトライの木の葉とが関連付けられる。
【０１２９】
ここで、暗号化テーブル５３ａに登録される暗号化アルゴリズム、鍵、ブロック長の組み合わせについては、実施例１、２の暗号化テーブル７ａ、２３ａに登録される暗号化アルゴリズム、鍵、ブロック長の組み合わせと同様であるので説明を省略する。
【０１３０】
図１８は、暗号化テーブルの一例を示す図である。図１８の例では、暗号化アルゴリズム「α」と、鍵「ａ」と、ブロック長「ｎＸ」と、参照番号「Ｘ」とが関連付けられた場合が示されている。また、図１８の例では、暗号化アルゴリズム「β」と、鍵「ｂ」と、ブロック長「ｎＺ」と、先頭アドレス「Ｚ」とが関連付けられた場合が示されている。
【０１３１】
記憶部５３は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部５３は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory)、ＲＯＭ（Read  Only  Memory)であってもよい。
【０１３２】
制御部５４は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図１７に示すように、制御部５４は、生成部５４ａと、圧縮部５４ｂと、第１の暗号化部５４ｃと、第２の暗号化部５４ｄとを有する。
【０１３３】
生成部５４ａは、電子書籍のファイルを分割したブロックの文字列の中から１文字取得する。そして、生成部５４ａは、後述の圧縮部５４ｂによりブロックが圧縮され、トライの木が更新された場合に、取得した文字が格納されているトライの木の葉の参照番号を取得する。続いて、生成部５４ａは、取得した参照番号と、次のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成し、生成した情報を暗号化テーブル５３ａに登録する。生成部５４ａは、このような処理を、複数の電子書籍の各ファイルの各ブロックについて行う。生成部５４ａは、次のブロックの暗号化に用いられる暗号化アルゴリズムとして、上述したＥＸＯＲ、ビット転置、デジット転置、バイト転置、ＤＥＳ、トリプルＤＥＳ、ＡＥＳ、ＲＳＡなどを用いることができる。なお、ブロックの暗号化に用いられる暗号化アルゴリズムは、これに限られない。また、各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については予め定義されており、生成部５４ａは、その定義された情報にしたがって、ブロックごとに、葉の番号と暗号化パラメータとを対応付けた情報を生成する。各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については、ユーザが、入力部４を介して定義することができる。
【０１３４】
図１９は、サーバの処理の一例を説明するための図である。図１９の例では、生成部５４ａは、電子書籍のファイルの１ブロック目の先頭から所定数Ｘバイト目の文字「Ｋ」を取得する。そして、図１９の例では、生成部５４ａは、文字「Ｋ」が格納されたトライの木の葉の参照番号「Ｓ」を取得する。次に、図１９の例では、生成部５４ａは、取得した葉の参照番号「Ｓ」と、次のブロックである２ブロック目の暗号化に用いられる暗号化アルゴリズム「γ」、鍵「Ｃ」およびブロック長「ｎＳ」とを対応付けた情報を生成する。そして、図１９の例では、生成部５４ａは、葉の参照番号「Ｓ」と、暗号化アルゴリズム「γ」、鍵「Ｃ」およびブロック長「ｎＳ」とを対応付けた情報を暗号化テーブル５３ａに登録する。
【０１３５】
また、図１９の例では、生成部５４ａは、電子書籍のファイルの２ブロック目の先頭から所定数Ｘバイト目の文字「Ｌ」を取得する。そして、図１９の例では、生成部５４ａは、文字「Ｌ」が格納されたトライの木の葉の参照番号「Ｔ」を取得する。次に、図１９の例では、生成部５４ａは、取得した葉の参照番号「Ｔ」と、次のブロックである３ブロック目の暗号化に用いられる暗号化アルゴリズム「δ」、鍵「Ｄ」およびブロック長「ｎＴ」とを対応付けた情報を生成する。そして、図１９の例では、生成部５４ａは、葉の参照番号「Ｔ」と、暗号化アルゴリズム「δ」、鍵「Ｄ」およびブロック長「ｎＴ」とを対応付けた情報を暗号化テーブル５３ａに登録する。
【０１３６】
このように、生成部５４ａは、ｊ番目のブロックの所定の位置に存在する文字を取得し、圧縮部５４ｂによりｊ番目のブロックが圧縮されてトライの木が更新された場合に、文字が格納されたトライの木の葉の参照番号を取得する。そして、生成部５４ａは、取得した参照番号と、ｊ番目のブロックに続く（ｊ＋１）番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。そして、生成部５４ａは、生成した情報を暗号化テーブル５３ａに登録する。ここで、電子書籍のファイルや、生成した情報から、各ブロックに対応する参照番号を把握することは、困難である。そのため、暗号化テーブル５３ａの登録内容から、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかについて把握することは、困難である。よって、暗号化テーブル５３ａの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化された電子書籍を復号化することも困難となる。したがって、生成部５４ａによれば、データの解読をより困難にすることができる。
【０１３７】
圧縮部５４ｂは、トライの木を用いるＬＺ７８の圧縮方式により、電子書籍のファイルの各ブロックを圧縮する。
【０１３８】
第１の暗号化部５４ｃは、電子書籍のファイルの１ブロック目を暗号化する。例えば、第１の暗号化部５４ｃは、ＥＸＯＲ、ビット転置、デジット転置、バイト転置と比較すると暗号化の強度が高いＤＥＳ、トリプルＤＥＳ、ＡＥＳ、ＲＳＡの暗号化アルゴリズムを用いて、所定の鍵、ブロック長で１ブロック目を暗号化する。
【０１３９】
以下では、第１の暗号化部５４ｃが、圧縮部５４ｂにより圧縮された１ブロック目を、ＲＳＡの暗号化アルゴリズムを用いて、所定の鍵Ｋ１、１０２４ビットのブロック長で暗号化する場合を挙げて説明する。
【０１４０】
第２の暗号化部５４ｄは、電子書籍のファイルの２ブロック目以降のｊ番目のブロックを、生成部５４ａにより生成された情報が示す暗号化パラメータであって、ｊ番目のブロックの暗号化に用いられる暗号化パラメータを用いて暗号化する。
【０１４１】
図１９の例では、第２の暗号化部５４ｄは、圧縮部５４ｂにより圧縮された２ブロック目を、暗号化アルゴリズム「γ」、鍵「Ｃ」およびブロック長「ｎＳ」で暗号化する。また、図１９の例では、第２の暗号化部５４ｄは、圧縮部５４ｂにより圧縮された３ブロック目を、暗号化アルゴリズム「δ」、鍵「Ｄ」およびブロック長「ｎＴ」で暗号化する。
【０１４２】
また、第２の暗号化部５４ｄは、暗号化テーブル５３ａを、ＲＳＡで暗号化し、暗号化した暗号化テーブル５３ａを記憶部５３に格納する。また、第２の暗号化部５４ｄは、利用者端末５２から、暗号化テーブル５３ａを送信する指示を受信すると、記憶部５３に記憶された暗号化テーブル５３ａを、送受信部６およびインターネット８０を介して、利用者端末５２へ送信する。また、第２の暗号化部５４ｄは、利用者端末５２から、電子書籍を送信する指示を受信すると、記憶部５３に記憶された電子書籍を送受信部６およびインターネット８０を介して、利用者端末５２へ送信する。
【０１４３】
制御部５４は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路を有する。なお、制御部５４は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路を有してもよい。
【０１４４】
図１７に戻り、利用者端末５２は、入力部９と、出力部１０と、送受信部１１と、記憶部５５と、制御部５６とを有する。
【０１４５】
出力部１０は、各種の情報を出力する。例えば、出力部１０は、表示制御部５６ｃによってキーワード検索された項目を表示する。出力部１０のデバイスの一例としては、ＬＣＤ（Liquid  Crystal  Display）やＣＲＴ（Cathode  Ray  Tube）などの表示デバイスなどが挙げられる。
【０１４６】
送受信部１１は、利用者端末５２とサーバ５１との通信を行うための通信インタフェースである。例えば、送受信部１１は、制御部５６から、暗号化テーブル５３ａを送信する指示を受信すると、受信した指示を、送受信部１１およびインターネット８０を介して、サーバ５１へ送信する。また、送受信部１１は、サーバ５１からＲＳＡで暗号化された暗号化テーブル５３ａを受信すると、受信した暗号化テーブル５３ａを制御部５６へ送信する。また、送受信部１１は、制御部５６から、電子書籍を送信する指示を受信すると、受信した指示を送受信部１１およびインターネット８０を介して、サーバ５１へ送信する。また、送受信部１１は、サーバ５１から送信された電子書籍を受信すると、受信した電子書籍を制御部５６へ送信する。
【０１４７】
記憶部５５は、各種情報を記憶する。例えば、記憶部５５には、後述の復号化部５６ａにより復号化された暗号化テーブル５３ａが格納される。
【０１４８】
記憶部５５は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部５５は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory)、ＲＯＭ（Read  Only  Memory)であってもよい。
【０１４９】
制御部５６は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図１７に示すように、制御部５６は、復号化部５６ａと、伸張部５６ｂと、表示制御部５６ｃとを有する。
【０１５０】
復号化部５６ａは、電子書籍のファイルの各ブロックを復号化する。復号化部５６ａが実行する処理の一例について説明する。復号化部５６ａは、入力部９を介して検索処理を実行する処理を受信すると、電子書籍を送信する指示、および暗号化テーブル５３ａを送信する指示を送受信部１１およびインターネット８０を介してサーバ５１へ送信する。復号化部５６ａは、サーバ５１から、暗号化された暗号化テーブル５３ａを受信すると、受信した暗号化テーブル５３ａをＲＳＡで復号化する。
【０１５１】
また、復号化部５６ａは、サーバ５１から送信された電子書籍について、ファイルの１ブロック目を、ＲＳＡのアルゴリズムを用いて、所定の鍵Ｋ１、１０２４ビットのブロック長で復号化する。
【０１５２】
また、復号化部５６ａは、後述の伸張部５６ｂにより伸張されたｊ番目のブロックの文字列の中から１文字取得する。そして、復号化部５６ａは、取得した文字が格納されているトライの木の葉の参照番号を取得する。続いて、復号化部５６ａは、記憶部５５に記憶された暗号化テーブル５３ａから、葉の参照番号に対応する暗号化パラメータを、次の（ｊ＋１）番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、復号化部５６ａは、電子書籍のファイルの（ｊ＋１）番目のブロックを、取得した（ｊ＋１）番目のブロックに対応する復号化パラメータを用いて復号化する。
【０１５３】
図２０は、利用者端末の処理の一例を説明するための図である。図２０の例では、復号化部５６ａは、復号化され伸張された電子書籍のファイルの１ブロック目の先頭から所定数Ｘバイト目の文字「Ｋ」を取得する。そして、図２０の例では、復号化部５６ａは、文字「Ｋ」が格納されたトライの木の葉の参照番号「Ｓ」を取得する。次に、図２０の例では、復号化部５６ａは、取得した葉の参照番号「Ｓ」に対応するアルゴリズム「γ」、鍵「Ｃ」およびブロック長「ｎＳ」を、次の２番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図２０の例では、復号化部５６ａは、暗号化された電子書籍のファイルの２番目のブロックを、取得したアルゴリズム「γ」、鍵「Ｃ」およびブロック長「ｎＳ」を用いて復号化する。
【０１５４】
また、図２０の例では、復号化部５６ａは、復号化され伸張された電子書籍のファイルの２ブロック目の先頭から所定数Ｘバイト目の文字「Ｌ」を取得する。そして、図２０の例では、復号化部５６ａは、文字「Ｌ」が格納されたトライの木の葉の参照番号「Ｔ」を取得する。次に、図２０の例では、復号化部５６ａは、取得した葉の参照番号「Ｔ」に対応するアルゴリズム「δ」、鍵「Ｄ」およびブロック長「ｎＴ」を、次の３番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図２０の例では、復号化部５６ａは、暗号化された電子書籍のファイルの３番目のブロックを、取得したアルゴリズム「δ」、鍵「Ｄ」およびブロック長「ｎＴ」を用いて復号化する。
【０１５５】
このように、復号化に用いられる暗号化テーブル５３ａには、ｊ番目のブロックの所定の位置に存在する文字が格納された葉の参照番号と、ｊ番目のブロックに続く（ｊ＋１）番目のブロックの復号化に用いられる復号化パラメータとを対応付けた情報が登録される。ここで、電子書籍のファイルや、登録された情報から、各ブロックに対応する葉の参照番号を把握することは、困難である。そのため、暗号化テーブル５３ａの登録内容から、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することは、困難である。よって、記憶部５５に記憶された暗号化テーブル５３ａの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。
【０１５６】
伸張部５６ｂは、トライの木を用いたＬＺ７８方式により、電子書籍のファイルの各ブロックを伸張する。
【０１５７】
表示制御部５６ｃは、電子書籍に対する検索結果が表示されるように出力部１０の表示を制御する。例えば、表示制御部５６ｃは、伸張したファイルの中から、キーワードを含む項目を検索し、検索の結果得られた項目を出力部１０に表示させる。
【０１５８】
制御部５６は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路を有する。なお、制御部５６は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路を有してもよい。
【０１５９】
［処理の流れ］
次に、本実施例に係るサーバ５１の処理の流れを説明する。図２１は、実施例３に係る圧縮・暗号化処理の手順を示すフローチャートである。この圧縮・暗号化処理は、入力部４から圧縮・暗号化処理を実行する指示が制御部５４に入力された場合に、実行される。
【０１６０】
図２１に示すように、圧縮部５４ｂは、複数の電子書籍のファイルを記憶部５３から取得する（ステップＳ５０１）。圧縮部５４ｂは、変数ｉの値として１を設定する（ステップＳ５０２）。圧縮部５４ｂは、変数ｊの値として１を設定する（ステップＳ５０３）。
【０１６１】
生成部５４ａは、ｉ番目のファイルのｊ番目のブロックの所定の位置に存在する文字を取得する（ステップＳ５０４）。圧縮部５４ｂは、ＬＺ７８の圧縮方式により、トライの木を用いてｉ番目のファイルのｊ番目のブロックを圧縮するとともに、トライの木を更新する（ステップＳ５０５）。生成部５４ａは、取得した文字が格納されたトライの木の葉の参照番号を取得する（ステップＳ５０６）。生成部５４ａは、取得した参照番号と、次の（ｊ＋１）番目のブロックの暗号化に用いられる暗号化アルゴリズム、鍵およびブロック長などの暗号化パラメータとを対応付けた情報を生成する（ステップＳ５０７）。生成部５４ａは、生成した情報を暗号化テーブル５３ａに登録する（ステップＳ５０８）。
【０１６２】
第１の暗号化部５４ｃまたは第２の暗号化部５４ｄは、ｉ番目のファイルのｊ番目のブロックを暗号化する（ステップＳ５０９）。ここで、変数ｊの値が１である場合には、第１の暗号化部５４ｃは、電子書籍のファイルの１番目のブロックを暗号化する。また、変数ｊの値が２以上である場合には、第２の暗号化部５４ｄは、生成部５４ａにより生成された情報が示すｊ番目のブロックの暗号化に用いられる暗号化パラメータを用いて、ｊ番目のブロックを暗号化する。
【０１６３】
圧縮部５４ｂは、変数ｊの値を１つインクリメントする（ステップＳ５１０）。圧縮部５４ｂは、変数ｊの値が、ｉ番目のファイルを分割したブロックの個数Ｋを超えたか否かを判定する（ステップＳ５１１）。変数ｊの値が、個数Ｋを超えていない場合（ステップＳ５１１否定）には、ステップＳ５０４へ戻る。
【０１６４】
一方、変数ｊの値が、個数Ｋを超えた場合（ステップＳ５１１肯定）には、圧縮部５４ｂは、変数ｉの値を１つインクリメントする（ステップＳ５１２）。圧縮部５４ｂは、変数ｉの値が、電子書籍のファイルの個数Ｐを超えたか否かを判定する（ステップＳ５１３）。変数ｉの値が、個数Ｐを超えていない場合（ステップＳ５１３否定）には、ステップＳ５０３へ戻る。一方、変数ｉの値が、個数Ｐを超えた場合（ステップＳ５１３肯定）には、第２の暗号化部５４ｄは、暗号化テーブル５３ａをＲＳＡで暗号化し、暗号化した暗号化テーブル５３ａを記憶部５３に格納し（ステップＳ５１４）、処理を終了する。
【０１６５】
次に、本実施例に係る利用者端末５２の処理の流れを説明する。図２２は、実施例３に係る検索処理の手順を示すフローチャートである。この検索処理は、入力部９から検索キーワード、および検索処理を実行する指示が制御部５６に入力された場合に、実行される。
【０１６６】
図２２に示すように、復号化部５６ａは、サーバ５１から受信した、暗号化された暗号化テーブル５３ａをＲＳＡで復号化する（ステップＳ６０１）。伸張部５６ｂは、変数ｉの値として１を設定する（ステップＳ６０２）。伸張部５６ｂは、変数ｊの値として１を設定する（ステップＳ６０３）。
【０１６７】
復号化部５６ａは、変数ｊの値が１であるか否かを判定する（ステップＳ６０４）。変数ｊの値が１である場合（ステップＳ６０４肯定）には、復号化部５６ａは、ｉ番目のファイルの１ブロック目を、ＲＳＡのアルゴリズムを用いて、所定の鍵Ｋ１、１０２４ビットのブロック長で復号化する（ステップＳ６０５）。一方、変数ｊの値が１でない場合（ステップＳ６０４否定）には、復号化部５６ａは、後述のステップＳ６１０で取得されたｉ番目のファイルのｊ番目のブロックに対応する復号化パラメータを用いて、ｊ番目のブロックを復号化する（ステップＳ６０６）。そして、伸張部５６ｂは、ＬＺ７７の圧縮方式によりトライの木を用いて、ｊ番目のブロックを伸張するとともに、トライの木を更新する（ステップＳ６０７）。復号化部５６ａは、伸張されたｉ番目のファイルのｊ番目のブロックの所定の位置に存在する文字を取得する（ステップＳ６０８）。
【０１６８】
復号化部５６ａは、取得した文字が格納されたトライの木の葉の参照番号を取得する（ステップＳ６０９）。復号化部５６ａは、記憶部５５に記憶された暗号化テーブル５３ａから、参照番号に対応する復号化パラメータを、次の（ｊ＋１）番目のブロックの復号化に用いる復号化パラメータとして取得する（ステップＳ６１０）。復号化部５６ａは、変数ｊの値を１つインクリメントする（ステップＳ６１１）。復号化部５６ａは、変数ｊの値が、上述した個数Ｋを超えたか否かを判定する（ステップＳ６１２）。
【０１６９】
変数ｊの値が、個数Ｋを超えていない場合（ステップＳ６１２否定）には、ステップＳ６０４へ戻る。一方、変数ｊの値が、個数Ｋを超えた場合（ステップＳ６１２肯定）には、復号化部５６ａは、変数ｉの値を１つインクリメントする（ステップＳ６１３）。復号化部５６ａは、変数ｉの値が、個数Ｐを超えたか否かを判定する（ステップＳ６１４）。変数ｉの値が、個数Ｐを超えていない場合（ステップＳ６１４否定）には、ステップＳ６０２へ戻る。一方、変数ｉの値が、個数Ｐを超えた場合（ステップＳ６１４肯定）には、表示制御部５６ｃは、伸張したファイルの中から、キーワードを含む項目を出力部１０に表示させ（ステップＳ６１５）、処理を終了する。
【０１７０】
上述してきたように、本実施例に係るサーバ５１は、暗号化対象のファイルに含まれるｊ番目のブロックのうちの所定の文字のデータと、暗号化アルゴリズム、鍵およびブロック長とを関連付けた情報を生成する。そして、本実施例に係るサーバ５１は、ｊ番目のブロックを、予め定められた鍵、または（ｊ−１）番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて暗号化する。次に、本実施例に係るサーバ５１は、ｊ番目のブロックの所定の文字のデータに関連付けられたブロック長が示すデータサイズの（ｊ＋１）番目のブロックを、ｊ番目のブロックの所定の文字のデータと関連付けられた鍵を用いて暗号化する。このように、本実施例に係るサーバ５１は、ｊ番目のブロックの所定の位置に存在する文字と、（ｊ＋１）番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。ここで、暗号化対象の電子書籍のファイルや、生成された情報から、各ブロックの所定の位置に存在する文字を把握することは、困難である。そのため、生成された情報から、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかについて把握することは、困難である。よって、生成された情報が外部に漏洩した場合であっても、攻撃者などは、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化されたファイルを復号化することも困難となる。したがって、本実施例に係るサーバ５１によれば、データの解読をより困難にすることができる。
【０１７１】
また、本実施例に係るサーバ５１は、文字のデータを圧縮符号のデータに変換するためのトライの木を用いて、各ブロックを圧縮する。そして、本実施例に係るサーバ５１は、トライの木の葉に格納された文字のデータと、次のブロックの暗号化パラメータとを対応付けた情報を生成する。したがって、本実施例に係るサーバ５１によれば、圧縮と暗号化とがブロック単位で行うことが実現できるため、記憶容量がより小さい圧縮バッファなどを用いて圧縮および暗号化を行うことができる。また、暗号化データが解読困難性を有しつつ、暗号化処理または復号化処理の処理コストが抑制されることができる。
【０１７２】
また、本実施例に係る利用者端末５２は、復号化対象のファイルに含まれるｊ番目のブロックを、予め定められた鍵、または、（ｊ−１）番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。また、本実施例に係る利用者端末５２は、復号化対象のファイルに含まれる（ｊ＋１）番目のブロックを、ｊ番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。本実施例に係る利用者端末５２は、復号化に用いられるｊ番目のブロックの所定の位置に存在する文字が格納された葉の参照番号と、ｊ番目のブロックに続く（ｊ＋１）番目のブロックの復号化に用いられる復号化パラメータとを対応付けた情報をブロックの復号化に用いる。ここで、電子書籍のファイルや、復号化に用いられる情報から、各ブロックに対応する葉の参照番号を把握することは、困難である。そのため、復号化に用いられる情報から、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することは、困難である。よって、記憶部５５に記憶された暗号化テーブル５３ａの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。
【０１７３】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【０１７４】
例えば、実施例１〜３において説明した処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、本実施例において説明した各処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。例えば、ステップＳ１０１、３０１、５０１において、電子書籍のファイルをユーザが入力部４を介して制御部８に入力することで、制御部がファイルを取得することができる。
【０１７５】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。例えば、ステップＳ１１３、Ｓ１１４をまとめて、圧縮部８ｂは、変数ｊの値を１つインクリメントし、変数ｊの値が、ｉ番目のファイルを分割したブロックの個数Ｋを超えたか否かを判定することもできる。
【０１７６】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。例えば、ステップＳ１０２の処理の前に、ステップＳ１０３の処理を行うこともできる。
【０１７７】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、実施例１〜３の各実施例の第１の暗号化部と第２の暗号化部とを１つにまとめて、暗号化部とすることができる。また、実施例１〜３の復号化部を、各ファイルの１番目のブロックを復号化する第１の復号化部と、各ファイルの２番目以降のブロックを復号化する第２の復号化部とすることができる。
【実施例４】
【０１７８】
［暗号化プログラム、復号化プログラム］
また、上記の実施例１〜３で説明したサーバ、利用者端末の各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図２３、２４を用いて、上記の実施例で説明したサーバ、利用者端末と同様の機能を有する暗号化プログラム、復号化プログラムを実行するコンピュータの一例を説明する。図２３は、暗号化プログラムを実行するコンピュータを示す図である。また、図２４は、復号化プログラムを実行するコンピュータを示す図である。
【０１７９】
図２３に示すように、コンピュータ３００は、ＣＰＵ（Central  Processing  Unit）３１０、ＲＯＭ（Read  Only  Memory）３２０、ＨＤＤ（Hard  Disk  Drive）３３０、ＲＡＭ（Random  Access  Memory）３４０を有する。また、コンピュータ３００は、入力装置３５０、出力装置３６０、インターネット８０に接続された通信インタフェース３７０を有する。これら３１０〜３７０の各部は、バス３８０を介して接続される。
【０１８０】
入力装置３５０は、各種の入力デバイスを含み、例えば、キーボードやマウスを含む。入力装置３５０は、各実施例のサーバが有する入力部４に対応する。
【０１８１】
出力装置３６０は、各種の出力デバイスを含み、例えば、液晶ディスプレイを含む。出力装置３６０は、各実施例のサーバが有する出力部５に対応する。
【０１８２】
通信インタフェース３７０は、各実施例のサーバが有する送受信部６に対応する。
【０１８３】
ＲＯＭ３２０には、上記の実施例で示す生成部、圧縮部、第１の暗号化部、第２の暗号化部と同様の機能を発揮する暗号化プログラム３２０ａが予め記憶される。なお、暗号化プログラム３２０ａについては、適宜分離しても良い。
【０１８４】
そして、ＣＰＵ３１０が、暗号化プログラム３２０ａをＲＯＭ３２０から読み出して実行する。
【０１８５】
そして、ＨＤＤ３３０には、暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップが設けられる。これらのうち、圧縮パラメータ、無節点ハフマン木、出現マップのそれぞれは、圧縮パラメータ７ｂ、無節点ハフマン木７ｃ、出現マップ７ｄのそれぞれに対応する。また、暗号化テーブルは、暗号化テーブル７ａ、暗号化テーブル２３ａ、暗号化テーブル５３ａのいずれかに対応する。なお、ＨＤＤ３３０に、暗号化テーブル２３ａまたは暗号化テーブル５３ａに対応する暗号化テーブルが設けられる場合には、ＨＤＤ３３０には、圧縮パラメータ、無節点ハフマン木、出現マップを設けなくともよい。
【０１８６】
そして、ＣＰＵ３１０は、暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップを読み出してＲＡＭ３４０に格納する。さらに、ＣＰＵ３１０は、ＲＡＭ３４０に格納された暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップを用いて、暗号化プログラムを実行する。なお、ＲＡＭ３４０に格納される各データは、常に全てのデータがＲＡＭ３４０に格納される必要はなく、処理に必要なデータのみがＲＡＭ３４０に格納されれば良い。
【０１８７】
図２４に示すように、コンピュータ４００は、ＣＰＵ４１０、ＲＯＭ４２０、ＨＤＤ４３０、ＲＡＭ４４０を有する。また、コンピュータ４００は、入力装置４５０、出力装置４６０、インターネット４に接続された通信インタフェース４７０を有する。これら４１０〜４７０の各部は、バス４８０を介して接続される。
【０１８８】
入力装置４５０は、各種の入力デバイスを含み、例えば、キーボードやマウスを含む。入力装置４５０は、各実施例のサーバが有する入力部４に対応する。
【０１８９】
出力装置４６０は、各種の出力デバイスを含み、例えば、液晶ディスプレイを含む。出力装置４６０は、各実施例のサーバが有する出力部５に対応する。
【０１９０】
通信インタフェース４７０は、各実施例のサーバが有する送受信部７に対応する。
【０１９１】
ＲＯＭ４２０には、上記の実施例で示す復号化部、伸張部と同様の機能を発揮する復号化プログラム４２０ａが予め記憶される。なお、復号化プログラム４２０ａについては、適宜分離しても良い。
【０１９２】
そして、ＣＰＵ４１０が、復号化プログラム４２０ａをＲＯＭ４２０から読み出して実行する。
【０１９３】
そして、ＨＤＤ４３０には、暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップが設けられる。これらのうち、圧縮パラメータ、無節点ハフマン木、出現マップのそれぞれは、圧縮パラメータ７ｂ、無節点ハフマン木７ｃ、出現マップ７ｄのそれぞれに対応する。また、暗号化テーブルは、暗号化テーブル７ａ、暗号化テーブル２３ａ、暗号化テーブル５３ａのいずれかに対応する。なお、ＨＤＤ４３０に、暗号化テーブル２３ａまたは暗号化テーブル５３ａに対応する暗号化テーブルが設けられる場合には、ＨＤＤ３９０には、圧縮パラメータ、無節点ハフマン木、出現マップを設けなくともよい。
【０１９４】
そして、ＣＰＵ４１０は、暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップを読み出してＲＡＭ４４０に格納する。さらに、ＣＰＵ４１０は、ＲＡＭ４４０に格納された暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップを用いて、復号化プログラムを実行する。
【０１９５】
なお、上記した暗号化プログラムおよび復号化プログラムについては、必ずしも最初からＲＯＭに記憶させておく必要はない。
【０１９６】
例えば、コンピュータに挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」にプログラムを記憶させておく。そして、コンピュータがこれらからプログラムを読み出して実行するようにしてもよい。  
【０１９７】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータに接続される「他のコンピュータ（またはサーバ）」などにプログラムを記憶させておく。そして、コンピュータがこれらからプログラムを読み出して実行するようにしてもよい。
【符号の説明】
【０１９８】
１        システム
２        サーバ
３        利用者端末
７        記憶部
７ａ      暗号化テーブル
８        制御部
８ａ      生成部
８ｂ      圧縮部
８ｃ      第１の暗号化部
８ｄ      第２の暗号化部
１２      記憶部
１３      制御部
１３ａ    復号化部
１３ｂ    伸張部
【図１】
0005845824.tif 000002
【図２】
0005845824.tif 000003
【図３】
0005845824.tif 000004
【図４】
0005845824.tif 000005
【図５】
0005845824.tif 000006
【図６】
0005845824.tif 000007
【図７】
0005845824.tif 000008
【図８】
0005845824.tif 000009
【図９】
0005845824.tif 000010
【図１０】
0005845824.tif 000011
【図１１】
0005845824.tif 000012
【図１２】
0005845824.tif 000013
【図１３】
0005845824.tif 000014
【図１４】
0005845824.tif 000015
【図１５】
0005845824.tif 000016
【図１６】
0005845824.tif 000017
【図１７】
0005845824.tif 000018
【図１８】
0005845824.tif 000019
【図１９】
0005845824.tif 000020
【図２０】
0005845824.tif 000021
【図２１】
0005845824.tif 000022
【図２２】
0005845824.tif 000023
【図２３】
0005845824.tif 000024
【図２４】
0005845824.tif 000025