以下に、本願の開示する暗号化プログラム、復号化プログラム、暗号化方法、復号化方法、システムおよびコンテンツの生成方法の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
[システム1の構成例]
実施例1に係るシステムについて説明する。図1は、実施例1に係るシステムの構成の一例を示す図である。本実施例に係るシステム1は、サーバ2と、利用者端末3とを有する。サーバ2と、利用者端末3とは、データの送受信が可能なように接続される。図1の例では、サーバ2と、利用者端末3とは、インターネット80を介して接続されている。なお、サーバ2と、利用者端末3とは、無線で接続されてもよい。サーバ2は、複数の辞書などの電子書籍のデータをブロック単位で圧縮し、圧縮した各ブロックを各ブロックに対応する暗号化アルゴリズム、鍵、ブロック長で暗号化し、暗号化した複数の電子書籍のデータを利用者端末3に送信する。利用者端末3は、受信した複数の電子書籍のデータをブロック単位で復号する。そして、利用者端末3は、復号した各ブロックを伸張しつつ、検索キーワードを含む項目を検索し、検索の結果得られた項目を出力する。
サーバ2は、入力部4と、出力部5と、送受信部6と、記憶部7と、制御部8とを有する。
入力部4は、各種情報を制御部8に入力する。例えば、入力部4は、ユーザから、後述の圧縮・暗号化処理を実行する指示を受け付けて、受け付けた指示を制御部8に入力する。入力部4のデバイスの一例としては、マウスやキーボードなどの操作受付デバイスが挙げられる。
出力部5は、各種の情報を出力する。例えば、出力部5は、サーバ2の稼働状況を表示する。出力部5のデバイスの一例としては、LCD(Liquid Crystal Display)やCRT(Cathode Ray Tube)などの表示デバイスなどが挙げられる。
送受信部6は、サーバ2と利用者端末3との通信を行うための通信インタフェースである。例えば、送受信部6は、制御部8から後述の暗号化テーブル7a、圧縮パラメータ7b、出現マップ7dを受信すると、受信した暗号化テーブル7a、圧縮パラメータ7b、出現マップ7dを、インターネット80を介して利用者端末3へ送信する。また、送受信部6は、制御部8から暗号化された電子書籍を受信すると、受信した電子書籍を、インターネット80を介して利用者端末3へ送信する。
記憶部7は、各種情報を記憶する。例えば、記憶部7は、暗号化テーブル7a、圧縮パラメータ7b、無節点ハフマン木7c、出現マップ7dを記憶する。これに加えて、記憶部7は、複数の電子書籍のファイルを記憶する。
暗号化テーブル7aには、電子書籍のファイルが分割された各ブロックを暗号化する場合に、暗号化に用いられる暗号化アルゴリズムを示すアルゴリズム情報、鍵を示す鍵情報、ブロック長を示すブロック長情報などの暗号化パラメータが登録される。なお、ブロック長は、暗号化対象となるブロックのデータサイズを示す。また、暗号化テーブル7aには、後述の生成部8aにより、後述の無節点ハフマン木7cの葉の番号が、暗号化パラメータに対応付けられて登録される。これにより、アルゴリズム情報、鍵情報およびブロック長と、無節点ハフマン木7cの葉に対応付けられた文字とが関連付けられる。
ここで、暗号化テーブル7aに登録される暗号化アルゴリズム、鍵、ブロック長の組み合わせの一例について説明する。例えば、暗号化アルゴリズムとしてDES(Data Encryption Standard)を用いることができる。このDESを用いる場合には、54ビットの鍵、64ビットのブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてトリプルDESを用いることができる。このトリプルDESを用いる場合には、54ビットの鍵、64ビットのブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてAES(Advanced Encryption Standard)を用いることができる。このAESを用いる場合には、128、192または256ビットの鍵、128ビットのブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてRSA(Rivest Shamir Adleman)を用いることができる。このRSAを用いる場合には、65537ビットの鍵、1024ビットのブロック長で暗号化を行うことができる。
また、暗号化アルゴリズムとしてEXOR(排他的論理和)を用いることができる。このEXORを用いる場合には、任意の長さの鍵、ブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてビット転置を用いることができる。このビット転置を用いる場合には、例えば4バイトの鍵、任意のブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてデジット転置を用いることができる。このデジット転置を用いる場合には、例えば8バイトの鍵、任意のブロック長で暗号化を行うことができる。また、暗号化アルゴリズムとしてバイト転置を用いることができる。このバイト転置を用いる場合には、例えば256バイトの鍵、任意のブロック長で暗号化を行うことができる。
ここで、DES、トリプルDES、AES、RSAは、EXOR、ビット転置、デジット転置、バイト転置と比較すると暗号化の強度という観点では高いが、暗号化および復号化の処理速度という観点では遅くなる。すなわち、暗号化において、強度と処理速度とはトレードオフの関係にあるといえる。そこで、サーバ2では、暗号化の強度および処理速度を所定の基準を満たすように、各ブロックを暗号化する暗号化アルゴリズムを組み合わせることができる。
図2は、暗号化テーブルの一例を示す図である。図2の例では、暗号化アルゴリズム「α」と、鍵「a」と、ブロック長「n1」と、葉の番号「1」とが関連付けられた場合が示されている。また、図2の例では、暗号化アルゴリズム「β」と、鍵「b」と、ブロック長「n2」と、葉の番号「2」とが関連付けられた場合が示されている。また、図2の例では、暗号化アルゴリズム「γ」と、鍵「c」と、ブロック長「nY」と、葉の番号「Y」とが関連付けられた場合が示されている。
圧縮パラメータ7bには、無節点ハフマン木7cを生成する場合に用いられる、文字の出現頻度が登録される。例えば、圧縮パラメータ7bには、特開2010−93414号公報などに記載されているように、文字のコードと、複数の電子書籍に含まれる文字の出現回数とが出現回数の降順にソートされて登録される。図3は、圧縮パラメータの一例を示す図である。図3の例では、出現回数が「1068」回である「a」のコードの順位が1位である場合が示されている。また、図3の例では、出現回数が「1065」回である「b」のコードの順位が2位である場合が示されている。
無節点ハフマン木7cは、データを圧縮/伸張するために用いられる。図4は、無節点ハフマン木の一例を示す図である。図4に示すように、例えば、無節点ハフマン木7cとして、特開2010−93414号公報などに記載されている2m分岐の無節点ハフマン木を採用することができる。2m分岐の無節点ハフマン木の葉には、葉の番号と、圧縮符号と、圧縮符号長と、文字コードとが対応付けられて格納される。2m分岐の無節点ハフマン木を用いてデータを圧縮する場合では、内部節点がないため根に向かって探索する必要がなく、ポイントされた葉の構造体に格納されている圧縮符号が抽出され、抽出された圧縮符号が圧縮バッファに書き込まれる。無節点ハフマン木7cは、後述の圧縮部8bにより記憶部7に格納される。
出現マップ7dには、複数の電子書籍の各ファイルについて、複数の文字のそれぞれが含まれているか否かを示すフラグを有する出現マップを生成する。例えば、出現マップ7dには、国際公開第2006/123448号などに記載されているように、文字のコードと、出現回数と、出現ファイル数と、出現順位と、各ファイルに文字が含まれているか否かを示すフラグとが対応付けられて登録される。図5は、出現マップの一例を示す図である。図5の例では、文字「A」について、複数の電子書籍の全ファイルの出現回数が「1238」であり、出現したファイルの数が「230」であり、出現順位が「102」である場合が示されている。また、図5の例では、出現マップの項目の「1」は、対応するファイルに文字「A」が含まれていることを示し、「0」は、対応するファイルに文字「A」が含まれていないことを示す。すなわち、図5の例では、1番目、3番目、4番目、7番目、8番目のファイルに文字「A」が含まれていることを示し、2番目、5番目、6番目のファイルに文字「A」が含まれていないことを示す。
記憶部7は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部7は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部8は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図1に示すように、制御部8は、生成部8aと、圧縮部8bと、第1の暗号化部8cと、第2の暗号化部8dとを有する。
生成部8aは、電子書籍のファイルを分割したブロックの文字列の中から1文字取得する。そして、生成部8aは、取得した文字が格納されている無節点ハフマン木7cの葉の番号を取得する。続いて、生成部8aは、取得した葉の番号と、次のブロックの暗号化に用いられる暗号化アルゴリズム、鍵およびブロック長などの暗号化パラメータとを対応付けた情報を生成する。そして、生成部8aは、生成した情報を暗号化テーブル7aに登録する。生成部8aは、このような処理を、複数の電子書籍の各ファイルの各ブロックについて行う。生成部8aは、次のブロックの暗号化に用いられる暗号化アルゴリズムとして、上述したEXOR、ビット転置、デジット転置、バイト転置、DES、トリプルDES、AES、RSAを用いることができる。なお、暗号化に用いられる暗号化アルゴリズムは、これらに限られない。また、各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については予め定義されており、生成部8aは、その定義された情報にしたがって、ブロックごとに、葉の番号と暗号化パラメータとを対応付けた情報を生成する。各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については、ユーザが、入力部4を介して定義することができる。例えば、ユーザは、暗号化の強度および処理速度を所定の基準を満たすように、各ブロックを暗号化する暗号化アルゴリズム、鍵、各ブロックのブロック長などを定義することができる。
図6は、サーバの処理の一例を説明するための図である。図6の例では、生成部8aは、電子書籍のファイルの1ブロック目の先頭から所定数Xバイト目の文字「K」を取得する。そして、図6の例では、生成部8aは、文字「K」が格納された無節点ハフマン木7cの葉の番号「Y」を取得する。次に、図6の例では、生成部8aは、取得した葉の番号「Y」と、次のブロックである2ブロック目の暗号化に用いられる暗号化アルゴリズム「γ」、鍵「C」およびブロック長「nY」とを対応付けた情報を生成する。そして、図6の例では、生成部8aは、葉の番号「Y」と、暗号化アルゴリズム「γ」、鍵「C」およびブロック長「nY」とを対応付けた情報を暗号化テーブル7aに登録する。
また、図6の例では、生成部8aは、電子書籍のファイルの2ブロック目の先頭からXバイト目の文字「L」を取得する。そして、図6の例では、生成部8aは、文字「L」が格納された無節点ハフマン木7cの葉の番号「L」を取得する。次に、図6の例では、生成部8aは、取得した葉の番号「L」と、次のブロックである3ブロック目の暗号化に用いられる暗号化アルゴリズム「δ」、鍵「D」およびブロック長「nL」とを対応付けた情報を生成する。そして、図6の例では、生成部8aは、葉の番号「L」と、暗号化アルゴリズム「δ」、鍵「D」およびブロック長「nL」とを対応付けた情報を暗号化テーブル7aに登録する。
このように、生成部8aは、j番目のブロックの所定の位置に存在する文字を取得する。そして、生成部8aは、取得した文字が格納された葉の番号と、j番目のブロックに続く(j+1)番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。そして、生成部8aは、生成した情報を暗号化テーブル7aに登録する。ここで、複数の電子書籍の各ファイルからは、各ブロックに対応する葉の番号を把握することが困難である。そのため、暗号化テーブル7aの登録内容からは、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかについて把握することが困難である。よって、暗号化テーブル7aの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化された電子書籍を復号化することも困難となる。したがって、生成部8aによれば、データの解読をより困難にすることができる。
圧縮部8bは、無節点ハフマン木7cを用いて、電子書籍のファイルを分割した各ブロックを圧縮する。例えば、圧縮部8bは、特開2010−93414号公報に記載されているように、2m分岐の無節点ハフマン木7cを用いて葉の構造体に格納されている圧縮符号を抽出し、抽出した圧縮符号を圧縮バッファに書き込むことで、データ圧縮を行う。
具体例を挙げて説明すると、圧縮部8bは、まず、複数の電子書籍のファイルを記憶部7から取得する。そして、圧縮部8bは、複数の電子書籍のファイルから、文字の出現回数を算出し、圧縮パラメータ7bを算出する。続いて、圧縮部8bは、圧縮パラメータ7bから2n分岐ハフマン木を生成し、生成した2n分岐ハフマン木を無節点ハフマン木7cに変換することで、無節点ハフマン木7cを生成する。そして、圧縮部8bは、上述した出現マップ7dを生成する。続いて、圧縮部8bは、無節点ハフマン木7cを用いて、電子書籍のファイルを分割した各ブロックを圧縮する。
第1の暗号化部8cは、電子書籍のファイルの1ブロック目を暗号化する。例えば、第1の暗号化部8cは、EXOR、ビット転置、デジット転置、バイト転置と比較すると暗号化の強度が高いDES、トリプルDES、AES、RSAの暗号化アルゴリズムを用いて、所定の鍵、ブロック長で1ブロック目を暗号化する。1ブロック目の暗号化に強度の高い暗号化アルゴリズムを用いることで、攻撃者などは、暗号化された1ブロック目の解読が困難となるため、2ブロック目以降に用いられる暗号化パラメータを推測することが困難となる。そのため、1ブロック目の暗号化にEXOR、ビット転置、デジット転置、バイト転置などの暗号化アルゴリズムを用いた場合と比較して、全ブロックの暗号化の強度が高くなり、暗号化されたファイルの解読がより困難になる。
以下では、第1の暗号化部8cが、圧縮部8bにより圧縮された1ブロック目を、RSAの暗号化アルゴリズムを用いて、所定の鍵K1、1024ビットのブロック長で暗号化する場合を挙げて説明する。
第2の暗号化部8dは、電子書籍のファイルの2ブロック目以降のj番目のブロックを、生成部8aにより生成された情報が示すj番目のブロックの暗号化に用いられる暗号化パラメータを用いて暗号化する。
図6の例では、第2の暗号化部8dは、圧縮部8bにより圧縮された2ブロック目を、暗号化アルゴリズム「γ」、鍵「C」およびブロック長「nY」で暗号化する。また、図6の例では、第2の暗号化部8dは、圧縮部8bにより圧縮された3ブロック目を、暗号化アルゴリズム「δ」、鍵「D」およびブロック長「nL」で暗号化する。
また、第2の暗号化部8dは、暗号化テーブル7aと、圧縮パラメータ7bと、出現マップ7dとを1つのファイルにする。そして、第2の暗号化部8dは、ファイルをRSAで暗号化し、暗号化したファイルを記憶部7に格納する。また、第2の暗号化部8dは、利用者端末3から、暗号化テーブル7aと圧縮パラメータ7bと出現マップ7dとを送信する指示を受信すると、記憶部7に記憶されたファイルを送受信部6およびインターネット80を介して、利用者端末3へ送信する。また、第2の暗号化部8dは、利用者端末3から、電子書籍を送信する指示を受信すると、記憶部7に記憶された電子書籍であって、圧縮され暗号化された電子書籍を送受信部6およびインターネット80を介して、利用者端末3へ送信する。
制御部8は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部8は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
図1に戻り、利用者端末3は、入力部9と、出力部10と、送受信部11と、記憶部12と、制御部13とを有する。
入力部9は、各種情報を制御部13に入力する。例えば、入力部9は、ユーザから検索キーワード、および後述の検索処理を実行する指示を受け付けて、受け付けた検索キーワードおよび指示を制御部13に入力する。入力部9のデバイスの一例としては、マウスやキーボードなどの操作受付デバイスが挙げられる。
出力部10は、各種の情報を出力する。例えば、出力部10は、表示制御部13cによってキーワード検索された項目を表示する。出力部10のデバイスの一例としては、LCD(Liquid Crystal Display)やCRT(Cathode Ray Tube)などの表示デバイスが挙げられる。
送受信部11は、利用者端末3とサーバ2との通信を行うための通信インタフェースである。例えば、送受信部11は、制御部13から、暗号化テーブル7aと圧縮パラメータ7bと出現マップ7dとを送信する指示を受信すると、受信した指示を送受信部11およびインターネット80を介して、サーバ2へ送信する。また、送受信部11は、サーバ2からRSAで暗号化された暗号化テーブル7a、圧縮パラメータ7b、出現マップ7dのファイルを受信すると、受信した暗号化テーブル7a、圧縮パラメータ7b、出現マップ7dのファイルを制御部13へ送信する。また、送受信部11は、制御部13から、電子書籍を送信する指示を受信すると、受信した指示を送受信部11およびインターネット80を介して、サーバ2へ送信する。また、送受信部11は、サーバ2から送信された電子書籍であって、圧縮され暗号化された電子書籍を受信すると、受信した電子書籍を制御部13へ送信する。
記憶部12は、各種情報を記憶する。例えば、記憶部12には、後述の復号化部13aにより復号化された暗号化テーブル7a、圧縮パラメータ7b、出現マップ7dが格納される。また、記憶部12には、後述の伸張部13bにより生成された無節点ハフマン木7cが格納される。
記憶部12は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部12は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部13は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図1に示すように、制御部13は、復号化部13aと、伸張部13bと、表示制御部13cとを有する。
復号化部13aは、電子書籍のファイルの各ブロックを復号化する。復号化部13aが実行する処理の一例について説明する。復号化部13aは、入力部9を介して検索処理を実行する処理を受信すると、電子書籍を送信する指示、および暗号化テーブル7aと圧縮パラメータ7bと出現マップ7dとを送信する指示を、送受信部11およびインターネット80を介してサーバ2へ送信する。復号化部13aは、サーバ2から、暗号化された暗号化テーブル7aと圧縮パラメータ7bと出現マップ7dのファイルを受信すると、受信したファイルをRSAで復号化する。
また、復号化部13aは、サーバ2から送信された電子書籍のうち、後述の伸張部13bで特定された電子書籍について、ファイルの1ブロック目を、RSAのアルゴリズムを用いて、所定の鍵K1、1024ビットのブロック長で復号化する。
また、復号化部13aは、後述の伸張部13bにより伸張されたj番目のブロックの文字列の中から1文字取得する。そして、復号化部13aは、取得した文字が格納されている無節点ハフマン木7cの葉の番号を取得する。続いて、復号化部13aは、記憶部12に記憶された暗号化テーブル7aから、葉の番号に対応する暗号化パラメータを、次の(j+1)番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、復号化部13aは、電子書籍のファイルの(j+1)番目のブロックを、取得した(j+1)番目のブロックに対応する復号化パラメータを用いて復号化する。
図7は、利用者端末の処理の一例を説明するための図である。図7の例では、復号化部13aは、復号化された電子書籍のファイルの1ブロック目の先頭から所定数Xバイト目の文字「K」を取得する。そして、図7の例では、復号化部13aは、文字「K」が格納された無節点ハフマン木7cの葉の番号「Y」を取得する。次に、図7の例では、復号化部13aは、取得した葉の番号「Y」に対応するアルゴリズム「γ」、鍵「C」およびブロック長「nY」を、次の2番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図7の例では、復号化部13aは、暗号化された電子書籍のファイルの2番目のブロックを、取得したアルゴリズム「γ」、鍵「C」およびブロック長「nY」を用いて復号化する。
また、図7の例では、復号化部13aは、復号化された電子書籍のファイルの2ブロック目の先頭から所定数Xバイト目の文字「L」を取得する。そして、図7の例では、復号化部13aは、文字「L」が格納された無節点ハフマン木7cの葉の番号「L」を取得する。次に、図7の例では、復号化部13aは、取得した葉の番号「L」に対応するアルゴリズム「δ」、鍵「D」およびブロック長「nL」を、次の3番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図7の例では、復号化部13aは、暗号化された電子書籍のファイルの3番目のブロックを、取得したアルゴリズム「δ」、鍵「D」およびブロック長「nL」を用いて復号化する。
このように、復号化に用いられる暗号化テーブル7aには、j番目のブロックの所定の位置に存在する文字が格納された葉の番号と、j番目のブロックに続く(j+1)番目のブロックの復号化に用いられる復号化パラメータとを対応付けた情報が登録される。ここで、電子書籍の各ファイルからは、各ブロックに対応する葉の番号を把握することが困難である。そのため、暗号化テーブル7aの登録内容からは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することが困難である。よって、記憶部12に記憶された暗号化テーブル7aの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。
伸張部13bは、無節点ハフマン木7cを用いて、電子書籍のファイルを分割した各ブロックを伸張する。例えば、伸張部13bは、特開2010−93414号公報に記載されているように、圧縮パラメータ7bから2n分岐ハフマン木を生成し、生成した2n分岐ハフマン木を無節点ハフマン木7cに変換することで、無節点ハフマン木7cを生成する。そして、伸張部13bは、生成した無節点ハフマン木7cを記憶部12に格納する。
また、伸張部13bは、記憶部12に記憶された出現マップ7dを用いて、復号化された電子書籍のファイルのうち、検索キーワードを全て含むファイルを特定する。すなわち、全ての検索キーワードが含まれるファイルが、復号化部13aでの復号化対象および伸張部13bでの伸張対象のファイルとなる。このように、処理対象のファイルを絞りこむことで、処理の高速化が図れる。
そして、伸張部13bは、レジスタに圧縮符号列をセットし、マスクパターンにより圧縮符号を抽出する。続いて、伸張部13bは、抽出した圧縮符号を、1枝分のアクセス、すなわち1パスで2m分岐の無節点ハフマン木7cの根から探索する。次に、伸張部13bは、アクセスした葉の構造体に格納されている文字コードを読み出して記憶部12の伸張バッファに格納する。
表示制御部13cは、電子書籍に対する検索結果が表示されるように出力部10の表示を制御する。例えば、表示制御部13cは、国際公開第2006/123448号に記載されているように、伸張したファイルの中から、キーワードを含む項目を出力部10に表示させる。
制御部13は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部13は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
[処理の流れ]
次に、本実施例に係るサーバ2の処理の流れを説明する。図8は、実施例1に係る圧縮・暗号化処理の手順を示すフローチャートである。この圧縮・暗号化処理は、入力部4から圧縮・暗号化処理を実行する指示が制御部8に入力された場合に、実行される。
図8に示すように、圧縮部8bは、複数の電子書籍のファイルを記憶部7から取得する(ステップS101)。圧縮部8bは、複数の電子書籍のファイルから、文字の出現回数を算出し、圧縮パラメータ7bを算出する(ステップS102)。圧縮部8bは、圧縮パラメータ7bから2n分岐ハフマン木を生成し、生成した2n分岐ハフマン木を無節点ハフマン木に変換することで、無節点ハフマン木を生成する(ステップS103)。圧縮部8bは、出現マップ7dを生成する(ステップS104)。
圧縮部8bは、変数iの値として1を設定する(ステップS105)。圧縮部8bは、変数jの値として1を設定する(ステップS106)。
生成部8aは、電子書籍のi番目のファイルのj番目のブロックの文字列の中から1文字取得する(ステップS107)。生成部8aは、取得した文字が格納されている無節点ハフマン木7cの葉の番号を取得する(ステップS108)。生成部8aは、取得した葉の番号と、i番目のファイルの(j+1)番目のブロックの暗号化に用いられる暗号化アルゴリズム、鍵およびブロック長などの暗号化パラメータとを対応付けた情報を生成する(ステップS109)。生成部8aは、生成した情報を暗号化テーブル7aに登録する(ステップS110)。
圧縮部8bは、i番目のファイルのj番目のブロックを無節点ハフマン木7cを用いて圧縮する(ステップS111)。第1の暗号化部8cまたは第2の暗号化部8dは、i番目のファイルのj番目のブロックを暗号化する(ステップS112)。ここで、変数jの値が1である場合には、第1の暗号化部8cは、電子書籍のファイルの1番目のブロックを暗号化する。また、変数jの値が2以上である場合には、第2の暗号化部8dは、生成部8aにより生成された情報が示す暗号化パラメータであって、j番目のブロックの暗号化に用いられる暗号化パラメータを用いて、j番目のブロックを暗号化する。
圧縮部8bは、変数jの値を1つインクリメントする(ステップS113)。圧縮部8bは、変数jの値が、i番目のファイルを分割したブロックの個数Kを超えたか否かを判定する(ステップS114)。変数jの値が、個数Kを超えていない場合(ステップS114否定)には、ステップS107へ戻る。
一方、変数jの値が、個数Kを超えた場合(ステップS114肯定)には、圧縮部8bは、変数iの値を1つインクリメントする(ステップS115)。圧縮部8bは、変数iの値が、電子書籍のファイルの個数Pを超えたか否かを判定する(ステップS116)。変数iの値が、個数Pを超えていない場合(ステップS116否定)には、ステップS106へ戻る。一方、変数iの値が、個数Pを超えた場合(ステップS116肯定)には、第2の暗号化部8dは、次のような処理を行う。すなわち、第2の暗号化部8dは、暗号化テーブル7aと、圧縮パラメータ7bと、出現マップ7dとを1つのファイルにし、RSAで暗号化し、暗号化したファイルを記憶部7に格納し(ステップS117)、処理を終了する。
次に、本実施例に係る利用者端末3の処理の流れを説明する。図9は、実施例1に係る検索処理の手順を示すフローチャートである。この検索処理は、入力部9から検索キーワード、および検索処理を実行する指示が制御部13に入力された場合に、実行される。
図9に示すように、復号化部13aは、サーバ2から受信した、暗号化された暗号化テーブル7aと圧縮パラメータ7bと出現マップ7dとのファイルをRSAで復号化する(ステップS201)。伸張部13bは、圧縮パラメータ7bから2n分岐ハフマン木を生成し、生成した2n分岐ハフマン木を無節点ハフマン木7cに変換することで、無節点ハフマン木7cを生成する(ステップS202)。伸張部13bは、記憶部12に記憶された出現マップ7dを用いて、復号化された電子書籍のファイルのうち、検索キーワードを全て含むファイルを特定する(ステップS203)。伸張部13bは、変数jの値として1を設定する(ステップS204)。
復号化部13aは、変数jの値が1であるか否かを判定する(ステップS205)。変数jの値が1である場合(ステップS205肯定)には、復号化部13aは、ステップS203で特定された電子書籍のファイルの1ブロック目を、RSAのアルゴリズムを用いて、所定の鍵K1、1024ビットのブロック長で復号化する(ステップS206)。一方、変数jの値が1でない場合(ステップS205否定)には、復号化部13aは、次のような処理を行う。すなわち、復号化部13aは、後述のステップS211で取得された復号化パラメータであって、jブロック目に対応する復号化パラメータを用いて、ステップS203で特定された電子書籍のファイルのjブロック目を復号化する(ステップS207)。そして、伸張部13bは、無節点ハフマン木7cを用いて、ファイルのj番目のブロックを伸張する(ステップS208)。復号化部13aは、伸張されたj番目のブロックの文字列の中から1文字取得する(ステップS209)。
復号化部13aは、取得した文字が格納されている無節点ハフマン木7cの葉の番号を取得する(ステップS210)。復号化部13aは、記憶部12に記憶された暗号化テーブル7aから、葉の番号に対応する復号化パラメータを、次の(j+1)番目のブロックの復号化に用いる復号化パラメータとして取得する(ステップS211)。復号化部13aは、変数jの値を1つインクリメントする(ステップS212)。復号化部13aは、変数jの値が、上述した個数Kを超えたか否かを判定する(ステップS213)。
変数jの値が、個数Kを超えていない場合(ステップS213否定)には、ステップS205へ戻る。一方、変数jの値が、個数Kを超えた場合(ステップS213肯定)には、表示制御部13cは、伸張したファイルの中から、キーワードを含む項目を出力部10に表示させ(ステップS214)、処理を終了する。
上述してきたように、本実施例に係るサーバ2は、暗号化対象のファイルに含まれるj番目のブロックのうちの所定の文字のデータと、暗号化アルゴリズム、鍵およびブロック長とを関連付けた情報を生成する。そして、本実施例に係るサーバ2は、j番目のブロックを、予め定められた鍵、または(j−1)番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて暗号化する。次に、本実施例に係るサーバ2は、j番目のブロックの所定の文字のデータに関連付けられたブロック長の(j+1)番目のブロックを、j番目のブロックの所定の文字のデータと関連付けられた鍵を用いて暗号化する。このように、本実施例に係るサーバ2は、j番目のブロックの所定の位置に存在する文字と、(j+1)番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。ここで、電子書籍のファイルや生成された情報から、各ブロックの所定の位置に存在する文字を把握することは、困難である。そのため、生成された情報から、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかについて把握することは、困難である。よって、生成された情報が外部に漏洩した場合であっても、攻撃者などは、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化されたファイルを復号化することも困難となる。したがって、本実施例に係るサーバ2によれば、データの解読をより困難にすることができる。
また、本実施例に係るサーバ2は、文字のデータを圧縮符号のデータに変換するための無節点ハフマン木7cを用いて、各ブロックを圧縮する。そして、本実施例に係るサーバ2は、無節点ハフマン木7cの葉に格納された文字のデータと、次のブロックの暗号化パラメータとを対応付けた情報を生成する。したがって、本実施例に係るサーバ2によれば、圧縮と暗号化とがブロック単位で行うことが実現できるため、記憶容量がより小さい圧縮バッファなどを用いて圧縮および暗号化を行うことができる。
また、本実施例に係る利用者端末3は、復号化対象のファイルに含まれるj番目のブロックを、予め定められた鍵、または、(j−1)番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。また、本実施例に係る利用者端末3は、復号化対象のファイルに含まれる(j+1)番目のブロックを、j番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。本実施例に係る利用者端末3は、復号化に用いられるj番目のブロックの所定の位置に存在する文字が格納された葉の番号と、j番目のブロックに続く(j+1)番目のブロックの復号化に用いられる復号化パラメータとを対応付けた情報をブロックの復号化に用いる。ここで、電子書籍のファイルや、復号化に用いられる情報から、各ブロックに対応する葉の番号を把握することは、困難である。そのため、復号化に用いられる情報から、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することは、困難である。よって、記憶部12に記憶された暗号化テーブル7aの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。また、暗号化データが解読困難性を有しつつ、暗号化処理または復号化処理の処理コストが抑制されることができる。
さて、上記の実施例1では、無接点ハフマン木を用いる場合を例示したが、開示の装置はこれに限定されない。そこで、実施例2では、LZ77の圧縮方式を用いる場合について説明する。
[システム20の構成例]
図10は、実施例2に係るシステムの構成の一例を示す図である。図10に示すように、システム20は、実施例1に係るサーバ2に代えてサーバ21、利用者端末3に代えて利用者端末22を有する。なお、以下では、上記の実施例1と同様の機能を果たす各部や各機器については図1と同様の符号を付し、その説明は省略する場合がある。
サーバ21は、入力部4と、出力部5と、送受信部6と、記憶部23と、制御部24とを有する。
送受信部6は、サーバ21と利用者端末22との通信を行うための通信インタフェースである。例えば、送受信部6は、制御部24から後述の暗号化テーブル23aを受信すると、受信した暗号化テーブル23aを、インターネット80を介して利用者端末22へ送信する。また、送受信部6は、制御部24から圧縮され暗号化された電子書籍を受信すると、受信した電子書籍を、インターネット80を介して利用者端末22へ送信する。
記憶部23は、各種情報を記憶する。例えば、記憶部23は、暗号化テーブル23aを記憶する。
暗号化テーブル23aには、実施例1の暗号化テーブル7aと同様に、各ブロックを暗号化する場合に、暗号化に用いられる暗号化アルゴリズムを示すアルゴリズム情報、鍵を示す鍵情報、ブロック長を示すブロック長情報が登録される。また、暗号化テーブル23aには、後述の生成部24aにより、取得した文字のスライド辞書の参照部からの先頭アドレスが、アルゴリズム情報、鍵情報およびブロック長に対応付けられて登録される。これにより、アルゴリズム情報、鍵情報およびブロック長と、先頭アドレスに対応付けられた文字とが関連付けられる。
ここで、暗号化テーブル23aに登録される暗号化アルゴリズム、鍵、ブロック長の組み合わせについては、実施例1の暗号化テーブル7aに登録される暗号化アルゴリズム、鍵、ブロック長の組み合わせと同様であるので説明を省略する。
図11は、暗号化テーブルの一例を示す図である。図11の例では、暗号化アルゴリズム「α」と、鍵「a」と、ブロック長「nE」と、先頭アドレス「E」とが関連付けられた場合が示されている。また、図11の例では、暗号化アルゴリズム「β」と、鍵「b」と、ブロック長「nF」と、先頭アドレス「F」とが関連付けられた場合が示されている。
記憶部23は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部23は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部24は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図10に示すように、制御部24は、生成部24aと、圧縮部24bと、第1の暗号化部24cと、第2の暗号化部24dとを有する。
生成部24aは、処理対象のブロックの先頭文字が、スライド窓の符号化部の先頭にセットされている場合に、符号化部の文字列の中から1文字取得する。そして、生成部24aは、後述の圧縮部24bによりスライド窓を1ブロック分スライドされた場合に、取得した文字が位置する参照部の先頭からのアドレスを取得する。続いて、生成部24aは、取得したアドレスと、次のブロックの暗号化に用いられる暗号化アルゴリズム、鍵およびブロック長などの暗号化パラメータとを対応付けた情報を生成し、生成した情報を暗号化テーブル23aに登録する。生成部24aは、このような処理を、複数の電子書籍の各ファイルの各ブロックについて行う。生成部24aは、次のブロックの暗号化に用いられる暗号化アルゴリズムとして、上述したEXOR、ビット転置、デジット転置、バイト転置、DES、トリプルDES、AES、RSAを用いることができる。なお、暗号化に用いられる暗号化アルゴリズムはこれらに限られない。また、各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については予め定義されており、生成部24aは、その定義された情報にしたがって、ブロックごとに、葉の番号と暗号化パラメータとを対応付けた情報を生成する。各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については、ユーザが、入力部4を介して定義することができる。
図12は、サーバの処理の一例を説明するための図である。図12の例では、生成部24aは、電子書籍のファイルの1ブロック目の先頭文字が、スライド窓30の符号化部32の先頭にセットされた場合に、符号化部32の先頭から所定数Xバイト目の文字「B」を取得する。そして、図12の例では、後述の圧縮部24bにより1ブロック目が圧縮され、スライド窓が1ブロック分スライドされた場合に、生成部24aは、取得した文字「B」が位置する参照部31の先頭からのアドレスQを取得する。次に、図12の例では、生成部24aは、取得したアドレス「Q」と、次のブロックである2ブロック目の暗号化に用いられる暗号化アルゴリズム「α」、鍵「E」およびブロック長「nQ」とを対応付けた情報を生成する。そして、図12の例では、生成部24aは、アドレス「Q」と、暗号化アルゴリズム「α」、鍵「E」およびブロック長「nQ」とを対応付けた情報を暗号化テーブル23aに登録する。
また、図12の例では、生成部24aは、電子書籍のファイルの2ブロック目の先頭文字が、スライド窓30の符号化部32の先頭にセットされた場合に、符号化部32の先頭から所定数Xバイト目の文字「N」を取得する。そして、図12の例では、後述の圧縮部24bにより2ブロック目が圧縮され、スライド窓が1ブロック分スライドされた場合に、生成部24aは、取得した文字「N」が位置する参照部31の先頭からのアドレスRを取得する。次に、図12の例では、生成部24aは、取得したアドレス「R」と、次のブロックである3ブロック目の暗号化に用いられる暗号化アルゴリズム「β」、鍵「F」およびブロック長「nR」とを対応付けた情報を生成する。そして、図12の例では、生成部24aは、アドレス「R」と、暗号化アルゴリズム「β」、鍵「F」およびブロック長「nR」とを対応付けた情報を暗号化テーブル23aに登録する。
このように、生成部24aは、j番目のブロックの所定の位置に存在する文字を取得する。そして、生成部24aは、j番目のブロックが圧縮され、スライド窓30が1ブロック分スライドされた場合の文字の位置を示すアドレスと、j番目のブロックに続く(j+1)番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。そして、生成部24aは、生成した情報を暗号化テーブル23aに登録する。ここで、複数の電子書籍のファイルや生成された情報から、各ブロックに対応するアドレスを把握することは、困難である。そのため、暗号化テーブル23aの登録内容から、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかについて把握することは、困難である。よって、暗号化テーブル23aの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化された電子書籍を復号化することも困難となる。したがって、生成部24aによれば、データの解読をより困難にすることができる。
圧縮部24bは、参照部31および符号化部32を有するスライド窓30を用いたLZ77の圧縮方式により、電子書籍のファイルの各ブロックを圧縮する。
第1の暗号化部24cは、電子書籍のファイルの1ブロック目を暗号化する。例えば、第1の暗号化部24cは、EXOR、ビット転置、デジット転置、バイト転置と比較すると暗号化の強度が高いDES、トリプルDES、AES、RSAの暗号化アルゴリズムを用いて、所定の鍵、ブロック長で1ブロック目を暗号化する。
以下では、第1の暗号化部24cが、圧縮部24bにより圧縮された1ブロック目を、RSAの暗号化アルゴリズムを用いて、所定の鍵K1、1024ビットのブロック長で暗号化する場合を挙げて説明する。
第2の暗号化部24dは、電子書籍のファイルの2ブロック目以降のj番目のブロックを、生成部24aにより生成された情報が示すj番目のブロックの暗号化に用いられる暗号化パラメータを用いて暗号化する。
図12の例では、第2の暗号化部24dは、圧縮部24bにより圧縮された2ブロック目を、暗号化アルゴリズム「α」、鍵「E」およびブロック長「nQ」で暗号化する。また、図12の例では、第2の暗号化部24dは、圧縮部24bにより圧縮された3ブロック目を、暗号化アルゴリズム「β」、鍵「F」およびブロック長「nR」で暗号化する。
また、第2の暗号化部24dは、暗号化テーブル23aを、RSAで暗号化し、暗号化した暗号化テーブル23aを記憶部23に格納する。また、第2の暗号化部24dは、利用者端末22から、暗号化テーブル23aを送信する指示を受信すると、記憶部23に記憶された暗号化テーブル23aを送受信部6およびインターネット80を介して、利用者端末22へ送信する。また、第2の暗号化部24dは、利用者端末22から、電子書籍を送信する指示を受信すると、記憶部23に記憶された電子書籍を送受信部6およびインターネット80を介して、利用者端末22へ送信する。
制御部24は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部24は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
図10に戻り、利用者端末22は、入力部9と、出力部10と、送受信部11と、記憶部25と、制御部26とを有する。
出力部10は、各種の情報を出力する。例えば、出力部10は、表示制御部26cによってキーワード検索された項目を表示する。出力部10のデバイスの一例としては、LCD(Liquid Crystal Display)やCRT(Cathode Ray Tube)などの表示デバイスなどが挙げられる。
送受信部11は、利用者端末22とサーバ21との通信を行うための通信インタフェースである。例えば、送受信部11は、制御部26から、暗号化テーブル23aを送信する指示を受信すると、受信した指示を送受信部11およびインターネット80を介して、サーバ21へ送信する。また、送受信部11は、サーバ21からRSAで暗号化された暗号化テーブル23aを受信すると、受信した暗号化テーブル23aを制御部26へ送信する。また、送受信部11は、制御部26から、電子書籍を送信する指示を受信すると、受信した指示を送受信部11およびインターネット80を介して、サーバ21へ送信する。また、送受信部11は、サーバ21から送信された電子書籍を受信すると、受信した電子書籍を制御部26へ送信する。
記憶部25は、各種情報を記憶する。例えば、記憶部25には、後述の復号化部26aにより復号化された暗号化テーブル23aが格納される。
記憶部25は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部25は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部26は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図10に示すように、制御部26は、復号化部26aと、伸張部26bと、表示制御部26cとを有する。
復号化部26aは、電子書籍のファイルの各ブロックを復号化する。復号化部26aが実行する処理の一例について説明する。復号化部26aは、入力部9を介して検索処理を実行する処理を受信すると、電子書籍を送信する指示、および暗号化テーブル23aを送信する指示を送受信部11およびインターネット80を介してサーバ21へ送信する。復号化部26aは、サーバ21から、暗号化された暗号化テーブル23aを受信すると、受信した暗号化テーブル23aをRSAで復号化する。
また、復号化部26aは、サーバ21から送信された電子書籍について、ファイルの1ブロック目を、RSAのアルゴリズムを用いて、所定の鍵K1、1024ビットのブロック長で復号化する。
また、復号化部26aは、後述の伸張部26bにより伸張されたj番目のブロックの先頭文字を、スライド窓30の符号化部32の先頭にセットした場合の、符号化部32の先頭から所定数Xバイト目の文字を取得する。そして、復号化部26aは、後述の伸張部26bによりj番目のブロックを伸張するためにスライドされた後のスライド窓30の参照部31の先頭からのアドレスであって、取得した文字の位置を示すアドレスを取得する。続いて、復号化部26aは、記憶部25に記憶された暗号化テーブル23aから、アドレスに対応する復号化パラメータを、次の(j+1)番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、復号化部26aは、電子書籍のファイルの(j+1)番目のブロックを、取得した(j+1)番目のブロックに対応する復号化パラメータを用いて復号化する。
図13は、利用者端末の処理の一例を説明するための図である。図13の例では、復号化部26aは、伸張されたファイルの1ブロック目の先頭文字を符号化部32の先頭にセットした場合の、符号化部32の先頭から所定数Xバイト目の文字「B」を取得する。そして、図13の例では、復号化部26aは、1ブロック目が伸張された場合に、参照部31の先頭からの文字「B」のアドレス「Q」を取得する。次に、図13の例では、復号化部26aは、暗号化テーブル23aから、取得したアドレス「Q」に対応するアルゴリズム「α」、鍵「E」およびブロック長「nQ」を、次の2番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図13の例では、復号化部26aは、暗号化された電子書籍のファイルの2番目のブロックを、取得したアルゴリズム「α」、鍵「E」およびブロック長「nQ」を用いて復号化する。
また、図13の例では、復号化部26aは、伸張されたファイルの2ブロック目の先頭文字を符号化部32の先頭にセットした場合の、符号化部32の先頭から所定数Xバイト目の文字「N」を取得する。そして、図13の例では、復号化部26aは、2ブロック目が伸張された場合に、参照部31の先頭からの文字「N」のアドレス「R」を取得する。次に、図13の例では、復号化部26aは、暗号化テーブル23aから、取得したアドレス「R」に対応するアルゴリズム「β」、鍵「F」およびブロック長「nR」を、次の2番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図13の例では、復号化部26aは、暗号化された電子書籍のファイルの2番目のブロックを、取得したアルゴリズム「β」、鍵「F」およびブロック長「nR」を用いて復号化する。
このように、復号化に用いられる暗号化テーブル23aには、j番目のブロックの所定の位置に存在する文字の位置を示すアドレスと、j番目のブロックに続く(j+1)番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報が登録される。ここで、電子書籍のファイルや登録された情報から、各ブロックに対応するアドレスを把握することは、困難である。そのため、暗号化テーブル23aの登録内容から、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することは、困難である。よって、暗号化テーブル23aの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。
伸張部26bは、スライド窓30を用いたLZ77の圧縮方式により、電子書籍のファイルの各ブロックを伸張する。
表示制御部26cは、電子書籍に対する検索結果が表示されるように出力部10の表示を制御する。例えば、表示制御部26cは、伸張したファイルの中から、キーワードを含む項目を検索し、検索の結果得られた項目を出力部10に表示させる。
制御部26は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部26は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
[処理の流れ]
次に、本実施例に係るサーバ21の処理の流れを説明する。図14は、実施例2に係る圧縮・暗号化処理の手順を示すフローチャートである。この圧縮・暗号化処理は、入力部4から圧縮・暗号化処理を実行する指示が制御部24に入力された場合に、実行される。
図14に示すように、圧縮部24bは、複数の電子書籍のファイルを記憶部23から取得する(ステップS301)。圧縮部24bは、変数iの値として1を設定する(ステップS302)。圧縮部24bは、i番目のファイルのデータをスライド窓30にセットする(ステップS303)。圧縮部24bは、変数jの値として1を設定する(ステップS304)。
生成部24aは、i番目のファイルのj番目のブロックの先頭文字が、符号化部32の先頭にセットされた場合の、符号化部32の先頭から所定数Xバイト目の文字を取得する(ステップS305)。圧縮部24bは、スライド窓30を用いたLZ77の圧縮方式により、スライド窓30を1ブロック分スライドさせて、i番目のファイルのj番目のブロックを圧縮する(ステップS306)。生成部24aは、取得した文字が位置する参照部31の先頭からのアドレスを取得する(ステップS307)。生成部24aは、取得したアドレスと、次の(j+1)番目のブロックの暗号化に用いられる暗号化アルゴリズム、鍵およびブロック長などの暗号化パラメータとを対応付けた情報を生成する(ステップS308)。生成部24aは、生成した情報を暗号化テーブル23aに登録する(ステップS309)。
第1の暗号化部24cまたは第2の暗号化部24dは、i番目のファイルのj番目のブロックを暗号化する(ステップS310)。ここで、変数jの値が1である場合には、第1の暗号化部24cは、電子書籍のファイルの1番目のブロックを暗号化する。また、変数jの値が2以上である場合には、第2の暗号化部24dは、生成部24aにより生成された情報が示す暗号化パラメータであって、j番目のブロックの暗号化に用いられる暗号化パラメータを用いて、j番目のブロックを暗号化する。
圧縮部24bは、変数jの値を1つインクリメントする(ステップS311)。圧縮部24bは、変数jの値が、i番目のファイルを分割したブロックの個数Kを超えたか否かを判定する(ステップS312)。変数jの値が、個数Kを超えていない場合(ステップS312否定)には、ステップS305へ戻る。
一方、変数jの値が、個数Kを超えた場合(ステップS312肯定)には、圧縮部24bは、変数iの値を1つインクリメントする(ステップS313)。圧縮部24bは、変数iの値が、電子書籍のファイルの個数Pを超えたか否かを判定する(ステップS314)。変数iの値が、個数Pを超えていない場合(ステップS314否定)には、ステップS303へ戻る。一方、変数iの値が、個数Pを超えた場合(ステップS314肯定)には、第2の暗号化部24dは、暗号化テーブル23aをRSAで暗号化し、暗号化した暗号化テーブル23aを記憶部23に格納し(ステップS315)、処理を終了する。
次に、本実施例に係る利用者端末22の処理の流れを説明する。図15は、実施例2に係る検索処理の手順を示すフローチャートである。この検索処理は、入力部9から検索キーワード、および検索処理を実行する指示が制御部26に入力された場合に、実行される。
図15に示すように、復号化部26aは、サーバ21から受信した、暗号化された暗号化テーブル23aをRSAで復号化する(ステップS401)。伸張部26bは、変数iの値として1を設定する(ステップS402)。伸張部26bは、変数jの値として1を設定する(ステップS403)。
復号化部26aは、変数jの値が1であるか否かを判定する(ステップS404)。変数jの値が1である場合(ステップS404肯定)には、復号化部26aは、i番目のファイルの1ブロック目を、RSAのアルゴリズムを用いて、所定の鍵K1、1024ビットのブロック長で復号化する(ステップS405)。一方、変数jの値が1でない場合(ステップS404否定)には、復号化部26aは、後述のステップS410で取得されたi番目のファイルのj番目のブロックに対応する復号化パラメータを用いて、j番目のブロックを復号化する(ステップS406)。そして、伸張部26bは、スライド窓30をスライドさせて、j番目のブロックを伸張する(ステップS407)。復号化部26aは、伸張されたj番目のブロックの先頭文字を、符号化部32の先頭にセットした場合の、符号化部32の先頭から所定数Xバイト目の文字を取得する(ステップS408)。
復号化部26aは、j番目のブロックを伸張するためにスライドされた後のスライド窓30の参照部31の先頭からのアドレスであって、ステップS408で取得した文字の位置を示すアドレスを取得する(ステップS409)。復号化部26aは、記憶部25に記憶された暗号化テーブル23aから、アドレスに対応する復号化パラメータを、次の(j+1)番目のブロックの復号化に用いる復号化パラメータとして取得する(ステップS410)。復号化部26aは、変数jの値を1つインクリメントする(ステップS411)。復号化部26aは、変数jの値が、上述した個数Kを超えたか否かを判定する(ステップS412)。
変数jの値が、個数Kを超えていない場合(ステップS412否定)には、ステップS404へ戻る。一方、変数jの値が、個数Kを超えた場合(ステップS412肯定)には復号化部26aは、変数iの値を1つインクリメントする(ステップS413)。復号化部26aは、変数iの値が、個数Pを超えたか否かを判定する(ステップS414)。変数iの値が、個数Pを超えていない場合(ステップS414否定)には、ステップS402へ戻る。一方、変数iの値が、個数Pを超えた場合(ステップS414肯定)には、表示制御部26cは、伸張したファイルの中から、キーワードを含む項目を出力部10に表示させ(ステップS415)、処理を終了する。
上述してきたように、本実施例に係るサーバ21は、暗号化対象のファイルに含まれるj番目のブロックのうちの所定の文字のデータと、暗号化アルゴリズム、鍵およびブロック長とを関連付けた情報を生成する。そして、本実施例に係るサーバ21は、j番目のブロックを、予め定められた鍵、または(j−1)番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて暗号化する。次に、本実施例に係るサーバ21は、j番目のブロックの所定の文字のデータに関連付けられたブロック長が示すデータサイズの(j+1)番目のブロックを、j番目のブロックの所定の文字のデータと関連付けられた鍵を用いて暗号化する。このように、本実施例に係るサーバ21は、j番目のブロックの所定の位置に存在する文字と、(j+1)番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。ここで、暗号化対象の電子書籍のファイルや生成された情報から、各ブロックの所定の位置に存在する文字を把握することは、困難である。そのため、生成された情報から、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかについて把握することは、困難である。よって、生成された情報が外部に漏洩した場合であっても、攻撃者などは、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化されたファイルを復号化することも困難となる。したがって、本実施例に係るサーバ21によれば、データの解読をより困難にすることができる。
また、本実施例に係るサーバ21は、文字のデータを圧縮符号のデータに変換するためのスライド窓30を用いて、各ブロックを圧縮する。そして、本実施例に係るサーバ2は、スライド窓30に格納された文字のデータと、次のブロックの暗号化パラメータとを対応付けた情報を生成する。したがって、本実施例に係るサーバ21によれば、圧縮と暗号化とがブロック単位で行うことが実現できるため、記憶容量がより小さい圧縮バッファなどを用いて圧縮および暗号化を行うことができる。また、暗号化データが解読困難性を有しつつ、暗号化処理または復号化処理の処理コストが抑制されることができる。
また、本実施例に係る利用者端末22は、復号化対象の電子書籍のファイルに含まれるj番目のブロックを、予め定められた鍵、または、(j−1)番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。また、本実施例に係る利用者端末22は、復号化対象の電子書籍のファイルに含まれる(j+1)番目のブロックを、j番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。本実施例に係る利用者端末22は、復号化に用いられるj番目のブロックの所定の位置に存在する文字のアドレスと、j番目のブロックに続く(j+1)番目のブロックの復号化に用いられる復号化パラメータとを対応付けた情報をブロックの復号化に用いる。ここで、電子書籍のファイルや、ブロックの復号化に用いられる情報から、各ブロックに対応するアドレスを把握することは、困難である。そのため、ブロックの復号化に用いられる情報から、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することは、困難である。よって、記憶部25に記憶された暗号化テーブル23aの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。
さて、上記の実施例2では、LZ77の圧縮方式を用いる場合を例示したが、開示の装置はこれに限定されない。そこで、実施例3では、LZ78の圧縮方式を用いる場合について説明する。LZ78の圧縮方式では、動的辞書、いわゆるトライの木を生成し、生成したトライの木を用いて各ブロックの暗号化および復号化を行う。なお、トライの木の葉および節には、文字コードと文字と参照番号とが格納されている。図16は、トライの木の一例を示す図である。図16の例では、文字列「bit」の参照番号は、16進数で「104」である。図16の例では、文字列「bit」の圧縮符号列として参照番号「104」を用いることで、文字列「bit」の圧縮を行うことができる。また、図16の例では、圧縮されたファイルのデータ「104」を、文字列「bit」に置き換えることで、伸張を行うことができる。
[システム50の構成]
図17は、実施例3に係るシステムの構成の一例を示す図である。図17に示すように、システム50は、実施例1に係るサーバ2に代えてサーバ51、利用者端末3に代えて利用者端末52を有する。なお、以下では、上記の実施例1や実施例2と同様の機能を果たす各部や各機器については図1および図10と同様の符号を付し、その説明は省略する場合がある。
サーバ51は、入力部4と、出力部5と、送受信部6と、記憶部53と、制御部54とを有する。
送受信部6は、サーバ51と利用者端末52との通信を行うための通信インタフェースである。例えば、送受信部6は、制御部54から後述の暗号化テーブル53aを受信すると、受信した暗号化テーブル53aを、インターネット80を介して利用者端末52へ送信する。また、送受信部6は、制御部54から暗号化された電子書籍を受信すると、受信した電子書籍を、インターネット80を介して利用者端末52へ送信する。
記憶部53は、各種情報を記憶する。例えば、記憶部53は、暗号化テーブル53aを記憶する。
暗号化テーブル53aには、実施例1の暗号化テーブル7aと同様に、各ブロックを暗号化する場合に、暗号化に用いられる暗号化アルゴリズムを示すアルゴリズム情報、鍵を示す鍵情報、ブロック長を示すブロック長情報が登録される。また、暗号化テーブル53aには、後述の生成部54aにより、取得した文字が格納されたトライの木の葉の参照番号が、アルゴリズム情報、鍵情報およびブロック長に対応付けられて登録される。これにより、アルゴリズム情報、鍵情報およびブロック長と、各ブロックに対応する文字が格納されたトライの木の葉とが関連付けられる。
ここで、暗号化テーブル53aに登録される暗号化アルゴリズム、鍵、ブロック長の組み合わせについては、実施例1、2の暗号化テーブル7a、23aに登録される暗号化アルゴリズム、鍵、ブロック長の組み合わせと同様であるので説明を省略する。
図18は、暗号化テーブルの一例を示す図である。図18の例では、暗号化アルゴリズム「α」と、鍵「a」と、ブロック長「nX」と、参照番号「X」とが関連付けられた場合が示されている。また、図18の例では、暗号化アルゴリズム「β」と、鍵「b」と、ブロック長「nZ」と、先頭アドレス「Z」とが関連付けられた場合が示されている。
記憶部53は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部53は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部54は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図17に示すように、制御部54は、生成部54aと、圧縮部54bと、第1の暗号化部54cと、第2の暗号化部54dとを有する。
生成部54aは、電子書籍のファイルを分割したブロックの文字列の中から1文字取得する。そして、生成部54aは、後述の圧縮部54bによりブロックが圧縮され、トライの木が更新された場合に、取得した文字が格納されているトライの木の葉の参照番号を取得する。続いて、生成部54aは、取得した参照番号と、次のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成し、生成した情報を暗号化テーブル53aに登録する。生成部54aは、このような処理を、複数の電子書籍の各ファイルの各ブロックについて行う。生成部54aは、次のブロックの暗号化に用いられる暗号化アルゴリズムとして、上述したEXOR、ビット転置、デジット転置、バイト転置、DES、トリプルDES、AES、RSAなどを用いることができる。なお、ブロックの暗号化に用いられる暗号化アルゴリズムは、これに限られない。また、各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については予め定義されており、生成部54aは、その定義された情報にしたがって、ブロックごとに、葉の番号と暗号化パラメータとを対応付けた情報を生成する。各ブロックのブロック長、各ブロックの暗号化に用いられる暗号化アルゴリズムや鍵については、ユーザが、入力部4を介して定義することができる。
図19は、サーバの処理の一例を説明するための図である。図19の例では、生成部54aは、電子書籍のファイルの1ブロック目の先頭から所定数Xバイト目の文字「K」を取得する。そして、図19の例では、生成部54aは、文字「K」が格納されたトライの木の葉の参照番号「S」を取得する。次に、図19の例では、生成部54aは、取得した葉の参照番号「S」と、次のブロックである2ブロック目の暗号化に用いられる暗号化アルゴリズム「γ」、鍵「C」およびブロック長「nS」とを対応付けた情報を生成する。そして、図19の例では、生成部54aは、葉の参照番号「S」と、暗号化アルゴリズム「γ」、鍵「C」およびブロック長「nS」とを対応付けた情報を暗号化テーブル53aに登録する。
また、図19の例では、生成部54aは、電子書籍のファイルの2ブロック目の先頭から所定数Xバイト目の文字「L」を取得する。そして、図19の例では、生成部54aは、文字「L」が格納されたトライの木の葉の参照番号「T」を取得する。次に、図19の例では、生成部54aは、取得した葉の参照番号「T」と、次のブロックである3ブロック目の暗号化に用いられる暗号化アルゴリズム「δ」、鍵「D」およびブロック長「nT」とを対応付けた情報を生成する。そして、図19の例では、生成部54aは、葉の参照番号「T」と、暗号化アルゴリズム「δ」、鍵「D」およびブロック長「nT」とを対応付けた情報を暗号化テーブル53aに登録する。
このように、生成部54aは、j番目のブロックの所定の位置に存在する文字を取得し、圧縮部54bによりj番目のブロックが圧縮されてトライの木が更新された場合に、文字が格納されたトライの木の葉の参照番号を取得する。そして、生成部54aは、取得した参照番号と、j番目のブロックに続く(j+1)番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。そして、生成部54aは、生成した情報を暗号化テーブル53aに登録する。ここで、電子書籍のファイルや、生成した情報から、各ブロックに対応する参照番号を把握することは、困難である。そのため、暗号化テーブル53aの登録内容から、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかについて把握することは、困難である。よって、暗号化テーブル53aの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化された電子書籍を復号化することも困難となる。したがって、生成部54aによれば、データの解読をより困難にすることができる。
圧縮部54bは、トライの木を用いるLZ78の圧縮方式により、電子書籍のファイルの各ブロックを圧縮する。
第1の暗号化部54cは、電子書籍のファイルの1ブロック目を暗号化する。例えば、第1の暗号化部54cは、EXOR、ビット転置、デジット転置、バイト転置と比較すると暗号化の強度が高いDES、トリプルDES、AES、RSAの暗号化アルゴリズムを用いて、所定の鍵、ブロック長で1ブロック目を暗号化する。
以下では、第1の暗号化部54cが、圧縮部54bにより圧縮された1ブロック目を、RSAの暗号化アルゴリズムを用いて、所定の鍵K1、1024ビットのブロック長で暗号化する場合を挙げて説明する。
第2の暗号化部54dは、電子書籍のファイルの2ブロック目以降のj番目のブロックを、生成部54aにより生成された情報が示す暗号化パラメータであって、j番目のブロックの暗号化に用いられる暗号化パラメータを用いて暗号化する。
図19の例では、第2の暗号化部54dは、圧縮部54bにより圧縮された2ブロック目を、暗号化アルゴリズム「γ」、鍵「C」およびブロック長「nS」で暗号化する。また、図19の例では、第2の暗号化部54dは、圧縮部54bにより圧縮された3ブロック目を、暗号化アルゴリズム「δ」、鍵「D」およびブロック長「nT」で暗号化する。
また、第2の暗号化部54dは、暗号化テーブル53aを、RSAで暗号化し、暗号化した暗号化テーブル53aを記憶部53に格納する。また、第2の暗号化部54dは、利用者端末52から、暗号化テーブル53aを送信する指示を受信すると、記憶部53に記憶された暗号化テーブル53aを、送受信部6およびインターネット80を介して、利用者端末52へ送信する。また、第2の暗号化部54dは、利用者端末52から、電子書籍を送信する指示を受信すると、記憶部53に記憶された電子書籍を送受信部6およびインターネット80を介して、利用者端末52へ送信する。
制御部54は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部54は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
図17に戻り、利用者端末52は、入力部9と、出力部10と、送受信部11と、記憶部55と、制御部56とを有する。
出力部10は、各種の情報を出力する。例えば、出力部10は、表示制御部56cによってキーワード検索された項目を表示する。出力部10のデバイスの一例としては、LCD(Liquid Crystal Display)やCRT(Cathode Ray Tube)などの表示デバイスなどが挙げられる。
送受信部11は、利用者端末52とサーバ51との通信を行うための通信インタフェースである。例えば、送受信部11は、制御部56から、暗号化テーブル53aを送信する指示を受信すると、受信した指示を、送受信部11およびインターネット80を介して、サーバ51へ送信する。また、送受信部11は、サーバ51からRSAで暗号化された暗号化テーブル53aを受信すると、受信した暗号化テーブル53aを制御部56へ送信する。また、送受信部11は、制御部56から、電子書籍を送信する指示を受信すると、受信した指示を送受信部11およびインターネット80を介して、サーバ51へ送信する。また、送受信部11は、サーバ51から送信された電子書籍を受信すると、受信した電子書籍を制御部56へ送信する。
記憶部55は、各種情報を記憶する。例えば、記憶部55には、後述の復号化部56aにより復号化された暗号化テーブル53aが格納される。
記憶部55は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部55は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部56は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図17に示すように、制御部56は、復号化部56aと、伸張部56bと、表示制御部56cとを有する。
復号化部56aは、電子書籍のファイルの各ブロックを復号化する。復号化部56aが実行する処理の一例について説明する。復号化部56aは、入力部9を介して検索処理を実行する処理を受信すると、電子書籍を送信する指示、および暗号化テーブル53aを送信する指示を送受信部11およびインターネット80を介してサーバ51へ送信する。復号化部56aは、サーバ51から、暗号化された暗号化テーブル53aを受信すると、受信した暗号化テーブル53aをRSAで復号化する。
また、復号化部56aは、サーバ51から送信された電子書籍について、ファイルの1ブロック目を、RSAのアルゴリズムを用いて、所定の鍵K1、1024ビットのブロック長で復号化する。
また、復号化部56aは、後述の伸張部56bにより伸張されたj番目のブロックの文字列の中から1文字取得する。そして、復号化部56aは、取得した文字が格納されているトライの木の葉の参照番号を取得する。続いて、復号化部56aは、記憶部55に記憶された暗号化テーブル53aから、葉の参照番号に対応する暗号化パラメータを、次の(j+1)番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、復号化部56aは、電子書籍のファイルの(j+1)番目のブロックを、取得した(j+1)番目のブロックに対応する復号化パラメータを用いて復号化する。
図20は、利用者端末の処理の一例を説明するための図である。図20の例では、復号化部56aは、復号化され伸張された電子書籍のファイルの1ブロック目の先頭から所定数Xバイト目の文字「K」を取得する。そして、図20の例では、復号化部56aは、文字「K」が格納されたトライの木の葉の参照番号「S」を取得する。次に、図20の例では、復号化部56aは、取得した葉の参照番号「S」に対応するアルゴリズム「γ」、鍵「C」およびブロック長「nS」を、次の2番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図20の例では、復号化部56aは、暗号化された電子書籍のファイルの2番目のブロックを、取得したアルゴリズム「γ」、鍵「C」およびブロック長「nS」を用いて復号化する。
また、図20の例では、復号化部56aは、復号化され伸張された電子書籍のファイルの2ブロック目の先頭から所定数Xバイト目の文字「L」を取得する。そして、図20の例では、復号化部56aは、文字「L」が格納されたトライの木の葉の参照番号「T」を取得する。次に、図20の例では、復号化部56aは、取得した葉の参照番号「T」に対応するアルゴリズム「δ」、鍵「D」およびブロック長「nT」を、次の3番目のブロックの復号化に用いる復号化パラメータとして取得する。そして、図20の例では、復号化部56aは、暗号化された電子書籍のファイルの3番目のブロックを、取得したアルゴリズム「δ」、鍵「D」およびブロック長「nT」を用いて復号化する。
このように、復号化に用いられる暗号化テーブル53aには、j番目のブロックの所定の位置に存在する文字が格納された葉の参照番号と、j番目のブロックに続く(j+1)番目のブロックの復号化に用いられる復号化パラメータとを対応付けた情報が登録される。ここで、電子書籍のファイルや、登録された情報から、各ブロックに対応する葉の参照番号を把握することは、困難である。そのため、暗号化テーブル53aの登録内容から、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することは、困難である。よって、記憶部55に記憶された暗号化テーブル53aの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。
伸張部56bは、トライの木を用いたLZ78方式により、電子書籍のファイルの各ブロックを伸張する。
表示制御部56cは、電子書籍に対する検索結果が表示されるように出力部10の表示を制御する。例えば、表示制御部56cは、伸張したファイルの中から、キーワードを含む項目を検索し、検索の結果得られた項目を出力部10に表示させる。
制御部56は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部56は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
[処理の流れ]
次に、本実施例に係るサーバ51の処理の流れを説明する。図21は、実施例3に係る圧縮・暗号化処理の手順を示すフローチャートである。この圧縮・暗号化処理は、入力部4から圧縮・暗号化処理を実行する指示が制御部54に入力された場合に、実行される。
図21に示すように、圧縮部54bは、複数の電子書籍のファイルを記憶部53から取得する(ステップS501)。圧縮部54bは、変数iの値として1を設定する(ステップS502)。圧縮部54bは、変数jの値として1を設定する(ステップS503)。
生成部54aは、i番目のファイルのj番目のブロックの所定の位置に存在する文字を取得する(ステップS504)。圧縮部54bは、LZ78の圧縮方式により、トライの木を用いてi番目のファイルのj番目のブロックを圧縮するとともに、トライの木を更新する(ステップS505)。生成部54aは、取得した文字が格納されたトライの木の葉の参照番号を取得する(ステップS506)。生成部54aは、取得した参照番号と、次の(j+1)番目のブロックの暗号化に用いられる暗号化アルゴリズム、鍵およびブロック長などの暗号化パラメータとを対応付けた情報を生成する(ステップS507)。生成部54aは、生成した情報を暗号化テーブル53aに登録する(ステップS508)。
第1の暗号化部54cまたは第2の暗号化部54dは、i番目のファイルのj番目のブロックを暗号化する(ステップS509)。ここで、変数jの値が1である場合には、第1の暗号化部54cは、電子書籍のファイルの1番目のブロックを暗号化する。また、変数jの値が2以上である場合には、第2の暗号化部54dは、生成部54aにより生成された情報が示すj番目のブロックの暗号化に用いられる暗号化パラメータを用いて、j番目のブロックを暗号化する。
圧縮部54bは、変数jの値を1つインクリメントする(ステップS510)。圧縮部54bは、変数jの値が、i番目のファイルを分割したブロックの個数Kを超えたか否かを判定する(ステップS511)。変数jの値が、個数Kを超えていない場合(ステップS511否定)には、ステップS504へ戻る。
一方、変数jの値が、個数Kを超えた場合(ステップS511肯定)には、圧縮部54bは、変数iの値を1つインクリメントする(ステップS512)。圧縮部54bは、変数iの値が、電子書籍のファイルの個数Pを超えたか否かを判定する(ステップS513)。変数iの値が、個数Pを超えていない場合(ステップS513否定)には、ステップS503へ戻る。一方、変数iの値が、個数Pを超えた場合(ステップS513肯定)には、第2の暗号化部54dは、暗号化テーブル53aをRSAで暗号化し、暗号化した暗号化テーブル53aを記憶部53に格納し(ステップS514)、処理を終了する。
次に、本実施例に係る利用者端末52の処理の流れを説明する。図22は、実施例3に係る検索処理の手順を示すフローチャートである。この検索処理は、入力部9から検索キーワード、および検索処理を実行する指示が制御部56に入力された場合に、実行される。
図22に示すように、復号化部56aは、サーバ51から受信した、暗号化された暗号化テーブル53aをRSAで復号化する(ステップS601)。伸張部56bは、変数iの値として1を設定する(ステップS602)。伸張部56bは、変数jの値として1を設定する(ステップS603)。
復号化部56aは、変数jの値が1であるか否かを判定する(ステップS604)。変数jの値が1である場合(ステップS604肯定)には、復号化部56aは、i番目のファイルの1ブロック目を、RSAのアルゴリズムを用いて、所定の鍵K1、1024ビットのブロック長で復号化する(ステップS605)。一方、変数jの値が1でない場合(ステップS604否定)には、復号化部56aは、後述のステップS610で取得されたi番目のファイルのj番目のブロックに対応する復号化パラメータを用いて、j番目のブロックを復号化する(ステップS606)。そして、伸張部56bは、LZ77の圧縮方式によりトライの木を用いて、j番目のブロックを伸張するとともに、トライの木を更新する(ステップS607)。復号化部56aは、伸張されたi番目のファイルのj番目のブロックの所定の位置に存在する文字を取得する(ステップS608)。
復号化部56aは、取得した文字が格納されたトライの木の葉の参照番号を取得する(ステップS609)。復号化部56aは、記憶部55に記憶された暗号化テーブル53aから、参照番号に対応する復号化パラメータを、次の(j+1)番目のブロックの復号化に用いる復号化パラメータとして取得する(ステップS610)。復号化部56aは、変数jの値を1つインクリメントする(ステップS611)。復号化部56aは、変数jの値が、上述した個数Kを超えたか否かを判定する(ステップS612)。
変数jの値が、個数Kを超えていない場合(ステップS612否定)には、ステップS604へ戻る。一方、変数jの値が、個数Kを超えた場合(ステップS612肯定)には、復号化部56aは、変数iの値を1つインクリメントする(ステップS613)。復号化部56aは、変数iの値が、個数Pを超えたか否かを判定する(ステップS614)。変数iの値が、個数Pを超えていない場合(ステップS614否定)には、ステップS602へ戻る。一方、変数iの値が、個数Pを超えた場合(ステップS614肯定)には、表示制御部56cは、伸張したファイルの中から、キーワードを含む項目を出力部10に表示させ(ステップS615)、処理を終了する。
上述してきたように、本実施例に係るサーバ51は、暗号化対象のファイルに含まれるj番目のブロックのうちの所定の文字のデータと、暗号化アルゴリズム、鍵およびブロック長とを関連付けた情報を生成する。そして、本実施例に係るサーバ51は、j番目のブロックを、予め定められた鍵、または(j−1)番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて暗号化する。次に、本実施例に係るサーバ51は、j番目のブロックの所定の文字のデータに関連付けられたブロック長が示すデータサイズの(j+1)番目のブロックを、j番目のブロックの所定の文字のデータと関連付けられた鍵を用いて暗号化する。このように、本実施例に係るサーバ51は、j番目のブロックの所定の位置に存在する文字と、(j+1)番目のブロックの暗号化に用いられる暗号化パラメータとを対応付けた情報を生成する。ここで、暗号化対象の電子書籍のファイルや、生成された情報から、各ブロックの所定の位置に存在する文字を把握することは、困難である。そのため、生成された情報から、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかについて把握することは、困難である。よって、生成された情報が外部に漏洩した場合であっても、攻撃者などは、ファイルの各ブロックをどのような暗号化パラメータで暗号化するかのルールについて把握することが困難となる。それゆえ、攻撃者などは、暗号化されたファイルを復号化することも困難となる。したがって、本実施例に係るサーバ51によれば、データの解読をより困難にすることができる。
また、本実施例に係るサーバ51は、文字のデータを圧縮符号のデータに変換するためのトライの木を用いて、各ブロックを圧縮する。そして、本実施例に係るサーバ51は、トライの木の葉に格納された文字のデータと、次のブロックの暗号化パラメータとを対応付けた情報を生成する。したがって、本実施例に係るサーバ51によれば、圧縮と暗号化とがブロック単位で行うことが実現できるため、記憶容量がより小さい圧縮バッファなどを用いて圧縮および暗号化を行うことができる。また、暗号化データが解読困難性を有しつつ、暗号化処理または復号化処理の処理コストが抑制されることができる。
また、本実施例に係る利用者端末52は、復号化対象のファイルに含まれるj番目のブロックを、予め定められた鍵、または、(j−1)番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。また、本実施例に係る利用者端末52は、復号化対象のファイルに含まれる(j+1)番目のブロックを、j番目のブロックのうちの所定の文字のデータと関連付けられた鍵を用いて復号化する。本実施例に係る利用者端末52は、復号化に用いられるj番目のブロックの所定の位置に存在する文字が格納された葉の参照番号と、j番目のブロックに続く(j+1)番目のブロックの復号化に用いられる復号化パラメータとを対応付けた情報をブロックの復号化に用いる。ここで、電子書籍のファイルや、復号化に用いられる情報から、各ブロックに対応する葉の参照番号を把握することは、困難である。そのため、復号化に用いられる情報から、電子書籍の各ブロックをどのような復号化パラメータで復号化するかについて把握することは、困難である。よって、記憶部55に記憶された暗号化テーブル53aの内容が外部に漏洩した場合であっても、攻撃者などは、電子書籍の各ブロックをどのような復号化パラメータで復号化するかのルールについて把握することが困難となる。したがって、データの解読をより困難にすることができる。
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
例えば、実施例1〜3において説明した処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、本実施例において説明した各処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。例えば、ステップS101、301、501において、電子書籍のファイルをユーザが入力部4を介して制御部8に入力することで、制御部がファイルを取得することができる。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。例えば、ステップS113、S114をまとめて、圧縮部8bは、変数jの値を1つインクリメントし、変数jの値が、i番目のファイルを分割したブロックの個数Kを超えたか否かを判定することもできる。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。例えば、ステップS102の処理の前に、ステップS103の処理を行うこともできる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、実施例1〜3の各実施例の第1の暗号化部と第2の暗号化部とを1つにまとめて、暗号化部とすることができる。また、実施例1〜3の復号化部を、各ファイルの1番目のブロックを復号化する第1の復号化部と、各ファイルの2番目以降のブロックを復号化する第2の復号化部とすることができる。
[暗号化プログラム、復号化プログラム]
また、上記の実施例1〜3で説明したサーバ、利用者端末の各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図23、24を用いて、上記の実施例で説明したサーバ、利用者端末と同様の機能を有する暗号化プログラム、復号化プログラムを実行するコンピュータの一例を説明する。図23は、暗号化プログラムを実行するコンピュータを示す図である。また、図24は、復号化プログラムを実行するコンピュータを示す図である。
図23に示すように、コンピュータ300は、CPU(Central Processing Unit)310、ROM(Read Only Memory)320、HDD(Hard Disk Drive)330、RAM(Random Access Memory)340を有する。また、コンピュータ300は、入力装置350、出力装置360、インターネット80に接続された通信インタフェース370を有する。これら310〜370の各部は、バス380を介して接続される。
入力装置350は、各種の入力デバイスを含み、例えば、キーボードやマウスを含む。入力装置350は、各実施例のサーバが有する入力部4に対応する。
出力装置360は、各種の出力デバイスを含み、例えば、液晶ディスプレイを含む。出力装置360は、各実施例のサーバが有する出力部5に対応する。
通信インタフェース370は、各実施例のサーバが有する送受信部6に対応する。
ROM320には、上記の実施例で示す生成部、圧縮部、第1の暗号化部、第2の暗号化部と同様の機能を発揮する暗号化プログラム320aが予め記憶される。なお、暗号化プログラム320aについては、適宜分離しても良い。
そして、CPU310が、暗号化プログラム320aをROM320から読み出して実行する。
そして、HDD330には、暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップが設けられる。これらのうち、圧縮パラメータ、無節点ハフマン木、出現マップのそれぞれは、圧縮パラメータ7b、無節点ハフマン木7c、出現マップ7dのそれぞれに対応する。また、暗号化テーブルは、暗号化テーブル7a、暗号化テーブル23a、暗号化テーブル53aのいずれかに対応する。なお、HDD330に、暗号化テーブル23aまたは暗号化テーブル53aに対応する暗号化テーブルが設けられる場合には、HDD330には、圧縮パラメータ、無節点ハフマン木、出現マップを設けなくともよい。
そして、CPU310は、暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップを読み出してRAM340に格納する。さらに、CPU310は、RAM340に格納された暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップを用いて、暗号化プログラムを実行する。なお、RAM340に格納される各データは、常に全てのデータがRAM340に格納される必要はなく、処理に必要なデータのみがRAM340に格納されれば良い。
図24に示すように、コンピュータ400は、CPU410、ROM420、HDD430、RAM440を有する。また、コンピュータ400は、入力装置450、出力装置460、インターネット4に接続された通信インタフェース470を有する。これら410〜470の各部は、バス480を介して接続される。
入力装置450は、各種の入力デバイスを含み、例えば、キーボードやマウスを含む。入力装置450は、各実施例のサーバが有する入力部4に対応する。
出力装置460は、各種の出力デバイスを含み、例えば、液晶ディスプレイを含む。出力装置460は、各実施例のサーバが有する出力部5に対応する。
通信インタフェース470は、各実施例のサーバが有する送受信部7に対応する。
ROM420には、上記の実施例で示す復号化部、伸張部と同様の機能を発揮する復号化プログラム420aが予め記憶される。なお、復号化プログラム420aについては、適宜分離しても良い。
そして、CPU410が、復号化プログラム420aをROM420から読み出して実行する。
そして、HDD430には、暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップが設けられる。これらのうち、圧縮パラメータ、無節点ハフマン木、出現マップのそれぞれは、圧縮パラメータ7b、無節点ハフマン木7c、出現マップ7dのそれぞれに対応する。また、暗号化テーブルは、暗号化テーブル7a、暗号化テーブル23a、暗号化テーブル53aのいずれかに対応する。なお、HDD430に、暗号化テーブル23aまたは暗号化テーブル53aに対応する暗号化テーブルが設けられる場合には、HDD390には、圧縮パラメータ、無節点ハフマン木、出現マップを設けなくともよい。
そして、CPU410は、暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップを読み出してRAM440に格納する。さらに、CPU410は、RAM440に格納された暗号化テーブル、圧縮パラメータ、無節点ハフマン木、出現マップを用いて、復号化プログラムを実行する。
なお、上記した暗号化プログラムおよび復号化プログラムについては、必ずしも最初からROMに記憶させておく必要はない。
例えば、コンピュータに挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」にプログラムを記憶させておく。そして、コンピュータがこれらからプログラムを読み出して実行するようにしてもよい。
さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータに接続される「他のコンピュータ(またはサーバ)」などにプログラムを記憶させておく。そして、コンピュータがこれらからプログラムを読み出して実行するようにしてもよい。