(57)【要約】【課題】鍵情報が類推されてしまうことを抑制すること。【解決手段】暗号・圧縮装置１６は、暗号化対象データの一部分である第１のデータ部分を第１の鍵情報に基づいて暗号化する暗号化部１６ａを有する。暗号・圧縮装置１６は、第１のデータ部分及び第１の鍵情報に基づいて所定のアルゴリズムで第２の鍵情報を生成する生成部１６ｂを有する。また、暗号化部１６ａは、暗号化対象データの第１のデータ部分と異なる一部分である第２のデータ部分を第２の鍵情報に基づいて暗号化する。【選択図】図１
2012212138.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
暗号化対象データの一部分である第１のデータ部分を第１の鍵情報に基づいて暗号化し、
前記第１のデータ部分及び前記第１の鍵情報に基づいて所定のアルゴリズムで第２の鍵情報を生成し、
前記暗号化対象データの前記第１のデータ部分と異なる一部分である第２のデータ部分を前記第２の鍵情報に基づいて暗号化する、
処理を実行させることを特徴とする暗号化プログラム。
【請求項２】
前記第２の鍵情報は、前記第１のデータ部分の圧縮処理に用いられたスライド窓に含まれるデータと、前記第１の鍵情報とに基づいて生成される、
ことを特徴とする請求項１に記載の暗号化プログラム。
【請求項３】
前記第２の鍵情報は、前記第１のデータ部分の圧縮処理に用いられた動的辞書に含まれるデータと、前記第１の鍵情報とに基づいて生成される、
ことを特徴とする請求項１に記載の暗号化プログラム。
【請求項４】
コンピュータに、さらに、
前記第２のデータ部分及び前記第１の鍵情報に基づいて所定のアルゴリズムで第３の鍵情報を生成し、
前記暗号化対象データの前記第１のデータ部分と前記第２のデータ部分とのいずれとも異なる一部分である第３のデータ部分を、前記第３の鍵情報に基づいて暗号化する
処理を実行させることを特徴とする請求項１〜３のいずれか１つに記載の暗号化プログラム。
【請求項５】
コンピュータに、
暗号化対象データの一部分であり、第１の鍵情報で暗号化された第１のデータ部分と、暗号化対象データのうち前記第１のデータ部分と異なる一部分であり、且つ、前記第１のデータ部分と前記第１の鍵情報に基づいて生成された第２の鍵情報で暗号化された、第２のデータ部分と、を含む暗号化対象データのうち、前記第１のデータ部分を前記第１の鍵情報に基づいて復号化し、
前記第１のデータ部分および前記第１の鍵情報に基づいて所定のアルゴリズムで前記第２の鍵情報を生成し、
前記第２のデータ部分を前記第２の鍵情報に基づいて復号化する、
処理を実行させることを特徴とする復号化プログラム。
【請求項６】
コンピュータが、
暗号化対象データの一部分である第１のデータ部分を第１の鍵情報に基づいて暗号化し、
前記第１のデータ部分及び前記第１の鍵情報に基づいて所定のアルゴリズムで第２の鍵情報を生成し、
前記暗号化対象データの前記第１のデータ部分と異なる一部分である第２のデータ部分を前記第２の鍵情報に基づいて暗号化する、
処理を実行させることを特徴とする暗号化方法。
【請求項７】
コンピュータが、
暗号化対象データの一部分であり、第１の鍵情報で暗号化された第１のデータ部分と、暗号化対象データのうち前記第１のデータ部分と異なる一部分であり、且つ、前記第１のデータ部分と前記第１の鍵情報に基づいて生成された第２の鍵情報で暗号化された、第２のデータ部分と、を含む暗号化対象データのうち、前記第１のデータ部分を前記第１の鍵情報に基づいて復号化し、
前記第１のデータ部分および前記第１の鍵情報に基づいて所定のアルゴリズムで前記第２の鍵情報を生成し、
前記第２のデータ部分を前記第２の鍵情報に基づいて復号化する、
処理を実行することを特徴とする復号化方法。
【請求項８】
暗号化対象データの一部分である第１のデータ部分を第１の鍵情報に基づいて暗号化する第１の暗号化部と、
前記第１のデータ部分及び前記第１の鍵情報に基づいて所定のアルゴリズムで第２の鍵情報を生成する第１の生成部と、
前記暗号化対象データの前記第１のデータ部分と異なる一部分である第２のデータ部分を前記第２の鍵情報に基づいて暗号化する第２の暗号化部と
を有する暗号化装置と、
暗号化された前記第１のデータ部分を前記第１の鍵情報に基づいて復号化する第１の復号化部と、
前記第１のデータ部分および前記第１の鍵情報に基づいて所定のアルゴリズムで前記第２の鍵情報を生成する第２の生成部と、
前記第２のデータ部分を前記第２の鍵情報に基づいて復号化する第２の復号化部と、
を有する復号化装置と、
を有することを特徴とするシステム。
【請求項９】
コンピュータが実行するコンテンツの生成方法であって、
コンテンツの一部分である第１のデータ部分を第１の鍵情報に基づいて暗号化し、
前記第１のデータ部分及び前記第１の鍵情報に基づいて所定のアルゴリズムで第２の鍵情報を生成し、
前記暗号化対象データの前記第１のデータ部分と異なる一部分である第２のデータ部分を前記第２の鍵情報に基づいて暗号化する、
ことを特徴とするコンテンツの生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化プログラム、復号化プログラム、暗号化方法、復号化方法、システムおよびコンテンツの生成方法に関する。
【背景技術】
【０００２】
従来、デジタルコンテンツを暗号化して送信する装置がある。例えば、従来の装置は、デジタルコンテンツを圧縮する。そして、従来の装置は、１つの暗号鍵などを用いて、圧縮したデジタルコンテンツを暗号化する。次に、従来の装置は、暗号化したデジタルコンテンツを、ＰＣ（Personal  Computer）や携帯電話などの利用者端末に送信する。なお、デジタルコンテンツの一例としては、動画、音楽、書籍などが挙げられる。また、デジタルコンテンツを暗号化する理由としては、著作権を保護するためなどの理由が挙げられる。
【０００３】
また、かかるデジタルコンテンツを受信した利用者端末は、デジタルコンテンツを復号化する。そして、利用者端末は、復号化したデジタルコンテンツを伸張し、デジタルコンテンツを利用する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−３０６０９２号公報
【特許文献２】特表２００９−５００７２３号公報
【特許文献３】特開２００３−２９６１７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記の従来の技術では、暗号化に用いられる暗号鍵の情報である鍵情報が類推される場合があるという問題がある。これを説明すると、例えば、従来の技術では、１つの暗号鍵によりデジタルコンテンツが暗号化されているため、複数の暗号鍵を用いてデジタルコンテンツを暗号化した場合と比較して、暗号化されたデジタルコンテンツ全体から暗号鍵が解読されやすい。なお、デジタルコンテンツを数ｋ〜数１０ｋ［ｂｙｔｅ］のデータに分割し、分割したそれぞれのデータを異なる暗号鍵で暗号化する方式も存在する。しかしながら、このような方式の場合には、暗号化に用いられる全ての暗号鍵を管理する必要があり、暗号鍵の管理が煩雑となる。
【０００６】
１つの側面では、本発明は、鍵情報が類推されてしまうことを抑制することができる暗号化プログラム、復号化プログラム、暗号化方法、復号化方法、システムおよびコンテンツの生成方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願の開示する暗号化プログラムは、一つの態様において、コンピュータに、暗号化対象データの一部分である第１のデータ部分を第１の鍵情報に基づいて暗号化する処理を実行させる。また、本願の開示する暗号化プログラムは、コンピュータに、前記第１のデータ部分及び前記第１の鍵情報に基づいて所定のアルゴリズムで第２の鍵情報を生成する処理を実行させる。また、本願の開示する暗号化プログラムは、コンピュータに、前記暗号化対象データの前記第１のデータ部分と異なる一部分である第２のデータ部分を前記第２の鍵情報に基づいて暗号化する処理を実行させる。
【発明の効果】
【０００８】
１態様によれば、鍵情報が類推されてしまうことを抑制することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１に係るシステムの構成の一例を示す図である。
【図２】図２は、暗号・圧縮装置での処理を仮想的に示した図である。
【図３】図３は、実施例１に係るシステムのシーケンス図である。
【図４】図４は、実施例１に係る圧縮・暗号化処理の手順を示すフローチャートである。
【図５】図５は、実施例１に係る復号化・伸張処理の手順を示すフローチャートである。
【図６】図６は、実施例２に係るシステムの構成を示す図である。
【図７】図７は、実施例２に係る圧縮・暗号化処理の手順を示すフローチャートである。
【図８】図８は、実施例２に係る復号化・伸張処理の手順を示すフローチャートである。
【図９】図９は、暗号化プログラムを実行するコンピュータを示す図である。
【図１０】図１０は、復号化プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示する暗号化プログラム、復号化プログラム、暗号化方法、復号化方法、システムおよびコンテンツの生成方法の各実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１１】
［システムの構成］
実施例１に係るシステムについて説明する。図１は、実施例１に係るシステムの構成の一例を示す図である。本実施例に係るシステム１０は、サーバ１１と、利用者端末１２とを有する。サーバ１１と、利用者端末１２とは、データの送受信が可能なように接続されている。図１の例では、サーバ１１と、利用者端末１２とは、インターネット１３を介して接続されている。なお、サーバ１１と、利用者端末１２とは、無線で接続されてもよい。サーバ１１は、コンテンツのデータを圧縮し、圧縮したコンテンツのデータを暗号化し、暗号化したコンテンツのデータを利用者端末１２に送信する。利用者端末１２は、受信したコンテンツのデータを復号し、復号したコンテンツのデータを伸張し、伸張したコンテンツのデータを再生する。なお、コンテンツのデータを、以下、「コンテンツデータ」と称する。
【００１２】
サーバ１１は、ライセンスサーバ１４と、コンテンツサーバ１５と、暗号・圧縮装置１６とを有する。なお、暗号・圧縮装置は、暗号化装置とも称される。
【００１３】
ライセンスサーバ１４は、暗号化するための鍵を生成する。ライセンスサーバ１４は、ライセンスＤＢ（Data  Base）１４ａを有する。例えば、ライセンスサーバ１４は、コンテンツサーバ１５に登録されたコンテンツごとに、各コンテンツを暗号化するための鍵の情報である鍵情報を生成する。そして、ライセンスサーバ１４は、生成した鍵情報をライセンスＤＢ１４ａに登録する。
【００１４】
コンテンツサーバ１５は、利用者端末１２に配信するコンテンツを登録する。コンテンツサーバ１５は、コンテンツＤＢ１５ａを有する。例えば、コンテンツサーバ１５は、動画、音楽、書籍などの各種コンテンツを、図示しない外部の装置から取得し、取得したコンテンツをコンテンツＤＢ１５ａに登録する。また、コンテンツサーバ１５は、暗号・圧縮装置１６により圧縮され、暗号化されたコンテンツデータをコンテンツＤＢ１５ａに登録する。
【００１５】
暗号・圧縮装置１６は、暗号化部１６ａと、生成部１６ｂとを有する。
【００１６】
暗号化部１６ａは、暗号化対象のデータであるコンテンツデータの一部分である第１のデータ部分を第１の鍵情報に基づいて暗号化する。例えば、暗号化部１６ａは、インターネット１３を介して、利用者端末１２から、コンテンツを提供する指示を受信した場合には、指示が示すコンテンツに対応するコンテンツデータをコンテンツＤＢ１５ａから取得する。また、暗号化部１６ａは、取得したコンテンツデータに対応する鍵情報をライセンスＤＢ１４ａから取得する。
【００１７】
また、暗号化部１６ａは、データ圧縮アルゴリズムとして、例えば、ＬＺ７７を用いて、コンテンツデータを圧縮する。具体例を挙げて説明する。暗号化部１６ａは、ＬＺ７７のデータ圧縮アルゴリズムを用いて、参照部および符号化部を有するスライド窓を、コンテンツデータの先頭部分に適用する。そして、暗号化部１６ａは、参照部のコンテンツデータの中に、符号化部の先頭から始まるコンテンツデータの記号と一致するデータがある場合には、符号化部のデータのうち一致した最長部分のデータについて、圧縮を行うためにポインタを生成する。ここで、ポインタは、スライド窓の参照部におけるデータの出現位置、およびデータの長さの情報を含む。そして、暗号化部１６ａは、生成したポインタをバッファに出力する。なお、かかるバッファは、暗号・圧縮装置１６に備えられているものとする。続いて、暗号化部１６ａは、一致した最長部分のデータの長さだけ、スライド窓をスライドさせる。
【００１８】
また、暗号化部１６ａは、参照部のコンテンツデータの中に、符号化部の先頭から始まるコンテンツデータの記号と一致するデータがない場合に、データを圧縮せず、符号化部のデータを所定数分、バッファに出力する。なお、符号化部の先頭から始まるコンテンツデータの記号と一致するデータがない場合に、バッファに出力されるデータは、「リテラルバイト」とも称される。続いて、暗号化部１６ａは、バッファに出力したデータの長さだけ、スライド窓をスライドさせる。
【００１９】
また、暗号化部１６ａが圧縮処理により、所定のブロック長の圧縮データ（ブロック１、第１のデータ部分）を生成すると、生成部１６ｂは下記の処理を行う。まず、生成部１６ｂは、スライド窓の参照部のデータのハッシュ値Ｘ１を算出する。生成部１６ｂがハッシュ値を生成する場合に用いられるハッシュ関数の一例としては、ＳＨＡ（Secure  Hash  Algorithm）−２が挙げられる。また、生成部１６ｂが生成するハッシュ値の長さの一例としては、１２８、１９２、２５６ビットが挙げられる。なお、生成部１６ｂがハッシュ値を生成する場合に用いられるハッシュ関数は、後述する復号・伸張装置１９がハッシュ値を生成する場合に用いられるハッシュ関数と同一である。そして、生成部１６ｂは、ハッシュ値Ｘ１と、コンテンツの鍵情報Ｋｃとを連結し、値Ｘ２（＝Ｘ１＋Ｋｃ）を算出する。次に、生成部１６ｂは、値Ｘ２のハッシュ値Ｘを算出する。
【００２０】
そして、バッファのサイズが、所定のブロック長となった場合に、暗号化部１６ａは、所定のブロック長のデータ（ブロック１、第１のデータ部分）をバッファから取り出し、コンテンツの鍵情報Ｋｃを暗号鍵として用いて、取り出したデータを暗号化する。暗号化部１６ａによる暗号化のアルゴリズムの一例としては、ＤＥＳ（Data  Encryption  Standard）、ＡＥＳ（Advanced  Encryption  Standard）などが挙げられる。また、「所定のブロック長」は、暗号化する際の単位である。「所定のブロック長」の長さとしては、例えば、１２８ビットが用いられる。ここで、暗号化部１６ａによる暗号化のアルゴリズムは、後述の暗号化処理に用いられる暗号化のアルゴリズム、および後述の復号・伸張装置１９による復号化のアルゴリズムと対応するアルゴリズムであり、共通の鍵情報に基づいて暗号化及び復号化が行なわれる。続いて、暗号化部１６ａは、暗号化したデータを、コンテンツサーバ１５へ送信する。これにより、コンテンツＤＢ１５ａに暗号化されたデータが登録される。暗号化部１６ａは、このようにして暗号化されたデータをコンテンツサーバ１５に送信する処理を、例えば１回だけ行う。なお、暗号化部１６ａは、暗号化したデータを、インターネット１３を介して、利用者端末１２へ送信することもできる。この場合、暗号化部１６ａは、このようにして暗号化されたデータを利用者端末１２へ送信する処理を、例えば１回だけ行う。
【００２１】
生成部１６ｂは、コンテンツデータの一部分であるスライド窓の参照部のデータ、及びコンテンツの鍵情報に基づいて、所定のアルゴリズムで第２の鍵情報を生成する。
【００２２】
具体例を挙げて説明する。生成部１６ｂは、所定ブロック長のデータの圧縮処理を行なうごとに、以下の処理を行う。生成部１６ｂは、スライド窓の参照部のハッシュ値Ｘ１を算出する。そして、生成部１６ｂは、ハッシュ値Ｘ１と、コンテンツの鍵情報Ｋｃとを連結し、値Ｘ２（＝Ｘ１＋Ｋｃ）を算出する。次に、生成部１６ｂは、値Ｘ２のハッシュ値Ｘを算出する。生成部１６ｂにより生成されたハッシュ値Ｘは、暗号化部１６ａで暗号化される際の暗号鍵となる。所定ブロック長のデータが圧縮されるごとに、生成部１６ｂがハッシュ値Ｘを算出するので、暗号化部１６ａで暗号鍵として用いられるハッシュ値Ｘの値は、動的に変化する。
【００２３】
暗号化部１６ａは、暗号化部１６ａにより先に暗号化された部分（第１のデータ部分）と異なるコンテンツデータの一部分である第２のデータ部分を第２の鍵情報に基づいて暗号化する。例えば、暗号化部１６ａは、データ圧縮アルゴリズムとして、生成部１６ｂにより生成されたハッシュ値Ｘを暗号鍵として用いて、コンテンツデータを暗号化する。
【００２４】
具体例を挙げて説明する。暗号化部１６ａは、ＬＺ７７のデータ圧縮アルゴリズムを用いて、スライド窓を、コンテンツデータ内をスライドさせるごとに、次のような処理を行う。暗号化部１６ａは、参照部のコンテンツデータの中に、符号化部の先頭から始まるコンテンツデータの記号と一致するデータがある場合には、符号化部のデータのうち一致した最長部分のデータについて、圧縮を行うためにポインタを生成する。そして、暗号化部１６ａは、生成したポインタをバッファに出力する。続いて、暗号化部１６ａは、一致した最長部分のデータの長さだけ、スライド窓をスライドさせる。
【００２５】
また、暗号化部１６ａは、参照部のコンテンツデータの中に、符号化部の先頭から始まるコンテンツデータの記号と一致するデータがない場合に、データを圧縮せず、符号化部のデータを所定数分、バッファに出力する。
【００２６】
そして、バッファのサイズが、所定のブロック長となった場合に、暗号化部１６ａは、バッファに出力された所定ブロック長のデータをバッファから取り出し、生成部１６ｂにより、暗号化部１６ａが暗号化済みのブロックに基づいて生成されたハッシュ値Ｘを暗号鍵として用いて、取り出したデータを暗号化する。続いて、暗号化部１６ａは、暗号化したデータを、コンテンツサーバ１５に送信する。これにより、コンテンツＤＢ１５ａに暗号化されたデータが登録される。暗号化部１６ａは、このようにして暗号化されたデータをコンテンツサーバ１５に送信する処理を繰り返し行う。なお、暗号化部１６ａは、暗号化したデータを、インターネット１３を介して、利用者端末１２へ送信することもできる。暗号化部１６ａは、このようにして暗号化されたデータを利用者端末１２へ送信する処理を繰り返し行う。暗号化部１６ａでの暗号化に用いられる暗号鍵は、暗号化の対象となるコンテンツデータの部分に応じて、動的に変化するものである。そのため、単一の暗号鍵を用いてコンテンツデータを暗号化した場合と比較して、鍵情報を類推されてしまうことを抑制することができる。
【００２７】
図２は、暗号・圧縮装置での処理を仮想的に示した図である。図２の例では、暗号・圧縮装置１６は、スライド窓の参照部のデータ２０と、コンテンツの鍵情報２１とに基づいて、ブロック１〜３の各々のリテラルバイトおよびポインタを暗号化するための動的な暗号鍵である動的鍵２２＿１、２２＿２、２２＿３を生成する。ここで、スライド窓の参照部のデータ２０は、動的に変化するため、各ブロックで生成される動的鍵も動的に変化する。ブロック２の暗号化に用いられる暗号化鍵２２＿２は、ブロック１の圧縮処理後にスライド窓に残っているデータ２０とコンテンツの鍵情報２１とに基づいて生成される。もしくは、暗号化鍵２２＿２は、ブロック１の圧縮処理後にスライド窓に残っているデータ２０のみに基づいて生成される。ブロック１の暗号化に用いられる暗号化鍵２２＿１は、例えば、コンテンツの鍵情報２１そのものなどである。
【００２８】
利用者端末１２は、再生装置１７と、ライセンスＤＢ１８とを有する。ライセンスＤＢ１８には、各コンテンツを暗号化するための鍵の情報である鍵情報が登録される。なお、ライセンスＤＢ１８に登録される鍵情報は、上述したライセンスＤＢ１４ａに登録された内容と同一である。利用者端末１２の一例としては、ＰＣ（Personal  Computer）や携帯電話などが挙げられる。
【００２９】
再生装置１７は、復号・伸張装置１９と、ＤＲＭ（Digital  Rights  Management）装置２０とを有する。このうち、ＤＲＭ装置２０は、利用者端末１２の利用者から、図示しないキーボードやマウスなどの受付部を介して、コンテンツを利用するための指示を受信した場合には、インターネット１３を介して、サーバ１１に、コンテンツを提供する指示を送信する。また、ＤＲＭ装置２０は、サーバ１１から送信されたコンテンツを受信した場合には、受信したコンテンツに対応する鍵情報をライセンスＤＢ１８から取得し、取得した鍵情報を復号・伸張装置１９へ送信する。また、ＤＲＭ装置２０は、復号・伸張装置１９により伸張され、復号化されたコンテンツデータを再生する。
【００３０】
復号・伸張装置１９は、復号化部１９ａと、生成部１９ｂと、を有する。なお、復号・伸張装置１９は、復号化装置とも称される。
【００３１】
復号化部１９ａは、サーバ１１から送信された復号化対象のデータであるコンテンツデータの一部分である第１のデータ部分を第１の鍵情報（コンテンツの鍵情報）に基づいて復号化する。
【００３２】
具体例を挙げて説明する。復号化部１９ａは、復号化された第１のデータ部分を、スライド窓を用いた伸張アルゴリズムを用いて伸張する。生成部１９ｂは、スライド窓の参照部のデータのハッシュ値Ｘ１を算出する。生成部１９ｂがハッシュ値を生成する場合に用いられるハッシュ関数の一例としては、上述した生成部１６ｂがハッシュ値を生成する場合に用いられるＳＨＡ−２が挙げられる。そして、生成部１９ｂは、ハッシュ値Ｘ１と、コンテンツの鍵情報Ｋｃとを連結し、値Ｘ２（＝Ｘ１＋Ｋｃ）を算出する。次に、生成部１９ｂは、値Ｘ２のハッシュ値Ｘを算出する。なお、ハッシュ値Ｘの値はスライド窓のスライドに伴い変化する。そして、復号化部１９ａは、ハッシュ値Ｘを復号化鍵として用いて、受信したコンテンツデータの次のブロック（ブロック２、第２のデータ部分）を復号化する。続いて、復号化部１９ａは、復号化したデータのうちポインタでない部分については、ＤＲＭ装置２０に送信する。また、復号化したデータのうちポインタの部分については、スライド窓の参照部のデータから、ポインタに含まれるデータの出現位置、およびデータの長さに基づいて、データを変換し、変換したデータをＤＲＭ装置２０に送信する。なお、ＤＲＭ装置２０では、受信したデータが再生される。そして、復号化部１９ａは、ＤＲＭ２０に送信したデータの分だけスライド窓をスライドさせる。
【００３３】
上記の通り、生成部１９ｂは、第１のデータ部分および第１の鍵情報に基づいて所定のアルゴリズムで第２の鍵情報を生成する。例えば、生成部１９ｂは、ＬＺ７７を用いて所定のブロック長のデータについての伸張処理が行なわれるたびに、次のような処理を行う。生成部１９ｂは、スライド窓の参照部のデータのハッシュ値Ｘ１を算出する。そして、生成部１９ｂは、ハッシュ値Ｘ１と、コンテンツの鍵情報Ｋｃとを連結し、値Ｘ２（＝Ｘ１＋Ｋｃ）を算出する。次に、生成部１９ｂは、値Ｘ２のハッシュ値Ｘを算出する。なお、ハッシュ値Ｘの値はスライド窓のスライドに伴い変化する。
【００３４】
復号化部１９ａは、第２のデータ部分を第２の鍵情報に基づいて復号化する。例えば、復号化部１９ａは、生成部１９ｂにより算出されたハッシュ値Ｘを暗号鍵として用いて、受信したコンテンツデータの対応するブロックを復号化する。続いて、復号化部１９ａは、復号化したデータのうちポインタでない部分については、ＤＲＭ装置２０に送信する。また、復号化したデータのうちポインタの部分については、スライド窓の参照部のデータから、ポインタに含まれるデータの出現位置、およびデータの長さに基づいて、データを変換し、変換したデータをＤＲＭ装置２０に送信する。そして、復号化部１９ｃは、ＤＲＭ２０に送信したデータの分だけスライド窓をスライドさせる。
【００３５】
上述したライセンスＤＢ１４ａ、コンテンツＤＢ１５ａ、ライセンスＤＢ１８は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置に登録される。なお、ライセンスＤＢ１４ａ、コンテンツＤＢ１５ａ、ライセンスＤＢ１８が登録される記憶装置は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory)、ＲＯＭ（Read  Only  Memory)であってもよい。
【００３６】
暗号・圧縮装置１６、復号・伸張装置１９は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路を含む。なお、暗号・圧縮装置１６、復号・伸張装置１９は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などの電子回路を含んでもよい。
【００３７】
［処理の流れ］
次に、本実施例に係るシステム１０の処理の流れを説明する。図３は、実施例１に係るシステムのシーケンス図である。
【００３８】
図３に示すように、ライセンスサーバ１４は、コンテンツを提供する指示が示すコンテンツに対応する鍵情報を生成する（ステップＳ１０１）。ライセンスサーバ１４は、生成した鍵情報をライセンスＤＢ１４ａに登録する（ステップＳ１０２）。暗号・圧縮装置１６は、圧縮・暗号化処理を実行する（ステップＳ１０３）。なお、圧縮・暗号化処理については後述する。コンテンツサーバ１５は、圧縮され、暗号化されたコンテンツデータをコンテンツＤＢ１５ａに登録する（ステップＳ１０４）。
【００３９】
ＤＲＭ装置２０は、サーバ１１からコンテンツを取得する（ステップＳ１０５）。ＤＲＭ装置２０は、コンテンツに対応する鍵情報をライセンスＤＢ１８から取得し、取得した鍵情報を復号・伸張装置１９へ送信する（ステップＳ１０６）。復号・伸張装置１９は、復号化・伸張処理を実行する（ステップＳ１０７）。ＤＲＭ装置２０は、復号・伸張装置１９により伸張され、復号化されたコンテンツデータを再生する（ステップＳ１０８）。
【００４０】
次に、本実施例に係る暗号・圧縮装置１６の処理の流れを説明する。図４は、実施例１に係る圧縮・暗号化処理の手順を示すフローチャートである。この圧縮・暗号化処理の実行タイミングとしては様々なタイミングが考えられる。例えば、圧縮・暗号化処理は、サーバ１１が、コンテンツを提供する指示を受信した場合に実行されるようにしてもよい。
【００４１】
図４に示すように、暗号化部１６ａは、スライド窓を初期化する（ステップＳ２０１）。暗号化部１６ａは、取得したコンテンツデータのうち、暗号化が未処理のデータがあるか否かを判定する（ステップＳ２０２）。暗号化が未処理のデータがない場合（ステップＳ２０２否定）には、処理を終了する。
【００４２】
一方、暗号化が未処理のデータがある場合（ステップＳ２０２肯定）には、暗号化部１６ａは、参照部のコンテンツデータの中から、符号化部の先頭から始まるコンテンツデータの記号と一致するデータを検索し（ステップＳ２０３）、一致するデータがあるか否かを判定する（ステップＳ２０４）。一致するデータがある場合（ステップＳ２０４肯定）には、暗号化部１６ａは、符号化部のデータのうち一致した最長部分のデータについて、圧縮を行うためにポインタを生成する（ステップＳ２０５）。暗号化部１６ａは、生成したポインタをバッファに出力する。
【００４３】
一方、一致するデータがない場合（ステップＳ２０４否定）には、暗号化部１６ａは、データを圧縮せず、符号化部のデータを所定数分、バッファに出力する（ステップＳ２０６）。
【００４４】
暗号化部１６ａは、バッファのサイズが、所定のブロック長以上であるか否かを判定する（ステップＳ２０７）。バッファのサイズが、所定のブロック長以上でない場合（ステップＳ２０７否定）には、Ｓ２０４で一致したデータの長さだけスライド窓をスライドさせて（ステップＳ２１２）、ステップＳ２０２へ戻る。一方、バッファのサイズが、所定のブロック長以上である場合（ステップＳ２０７肯定）には、生成部１６ｂは、スライド窓の参照部のデータのハッシュ値Ｘ１を算出する（ステップＳ２０８）。生成部１６ｂは、ハッシュ値Ｘ１と、コンテンツの鍵情報Ｋｃとを連結し、値Ｘ２（＝Ｘ１＋Ｋｃ）を算出する（ステップＳ２０９）。生成部１６ｂは、値Ｘ２のハッシュ値Ｘを算出する（ステップＳ２１０）。暗号化部１６ａは、バッファに出力されたデータをバッファから取り出し、ハッシュ値Ｘを暗号鍵として用いて、取り出したデータを暗号化する。そして、暗号化部１６ａは、暗号化したデータを、コンテンツサーバ１５へ送信する（ステップＳ２１１）。そして、Ｓ２０４で一致したデータの長さだけスライド窓をスライドさせて（ステップＳ２１２）、ステップＳ２０２へ戻る。このようにして、利用者端末１２へ送信されるコンテンツデータが生成される。
【００４５】
次に、本実施例に係る復号・伸張装置１９の処理の流れを説明する。図５は、実施例１に係る復号化・伸張処理の手順を示すフローチャートである。この復号化・伸張処理の実行タイミングとしては様々なタイミングが考えられる。例えば、復号化・伸張処理は、利用者端末１２が、コンテンツデータを受信した場合に実行されるようにしてもよい。
【００４６】
図５に示すように、復号化部１９ａは、スライド窓を初期化する（ステップＳ３０１）。復号化部１９ａは、受信したコンテンツデータのうち、未処理のデータがあるか否かを判定する（ステップＳ３０２）。未処理のデータがない場合（ステップＳ３０２否定）には、処理を終了する。
【００４７】
一方、未処理のデータがある場合（ステップＳ３０２肯定）には、復号化部１９ａは、ハッシュ値Ｘを復号化鍵として用いて、受信したコンテンツデータの復号化が行われていないブロックであって、先頭に最も近いブロックを復号化する（ステップＳ３０３）。そして、復号化部１９ａは、復号化したデータのうちポインタでない部分については、ＤＲＭ装置２０に送信する。また、復号化したデータのうちポインタの部分については、スライド窓の参照部のデータから、ポインタに含まれるデータの出現位置、およびデータの長さに基づいて、データを変換し、変換したデータをＤＲＭ装置２０に送信する（ステップＳ３０４）。生成部１９ｂは、スライド窓の参照部のデータのハッシュ値Ｘ１を算出する（ステップＳ３０５）。生成部１９ｂは、ハッシュ値Ｘ１と、コンテンツの鍵情報Ｋｃとを連結し、値Ｘ２（＝Ｘ１＋Ｋｃ）を算出する（ステップＳ３０６）。生成部１９ｂは、値Ｘ２のハッシュ値Ｘを算出する（ステップＳ３０７）。そして、ステップＳ３０２へ戻る。
【００４８】
［実施例１の効果］
上述してきたように、本実施例に係る暗号・圧縮装置１６は、暗号化対象データの一部分である第１のデータ部分を第１の鍵情報に基づいて暗号化する。そして、本実施例に係る暗号・圧縮装置１６は、第１のデータ部分及び第１の鍵情報に基づいて所定のアルゴリズムで第２の鍵情報を生成する。続いて、本実施例に係る暗号・圧縮装置１６は、暗号化対象データの第１のデータ部分と異なる一部分である第２のデータ部分を第２の鍵情報に基づいて暗号化する。このように、第１の鍵情報と第２の鍵情報は、暗号化の対象となるコンテンツデータの部分に応じて、動的に変化するものである。そのため、本実施例に係る暗号・圧縮装置１６によれば、単一の暗号鍵を用いてコンテンツデータを暗号化した場合と比較して、鍵情報を類推されてしまうことを抑制することができる。
【００４９】
また、本実施例に係る暗号・圧縮装置１６は、スライド窓を用いて第２のデータ部分を圧縮しつつ、圧縮された第２のデータ部分を、第１のデータ部分の圧縮に用いたスライド窓のデータと、鍵情報とで暗号化する。したがって、本実施例に係る暗号・圧縮装置１６によれば、圧縮と暗号化とを１パスで行うことができ、時間および資源量の観点から、効率的に、圧縮と暗号化とを行うことができる。同様の理由で、本実施例に係る復号・伸張装置１９によれば、伸張と復号化とを１パスで行うことができ、時間および資源量の観点から、効率的に、伸張と復号化とを行うことができる。また、本実施例に係る復号・伸張装置１９によれば、伸張と復号化とを１パスで行うことができることから、生データの展開を局所化することができ、情報漏洩の危険性を低下させることができる。また、１パスで処理を行なうため、暗号化処理時に、圧縮データを保持しておくメモリ領域を抑制できる。
【００５０】
また、本実施例に係る暗号・圧縮装置１６は、暗号化対象データの第２のデータ部分、及び第２の鍵情報に基づいて所定のアルゴリズムで新たな第３の鍵情報を生成する。そして、本実施例に係る暗号・圧縮装置１６は、暗号化対象データの第３のデータ部分を、第３の鍵情報に基づいて暗号化する。したがって、本実施例に係る暗号・圧縮装置１６によれば、暗号化対象データの位置（部分）に応じた鍵情報を変更しながら、暗号化対象データを暗号化することができる。
【００５１】
また、本実施例に係る復号・伸張装置１９は、第１のデータ部分を第１の鍵情報に基づいて復号化する。そして、本実施例に係る復号・伸張装置１９は、第１のデータ部分および第１の鍵情報に基づいて所定のアルゴリズムで第２の鍵情報を生成する。そして、本実施例に係る復号・伸張装置１９は、第１のデータ部分を第２の鍵情報に基づいて復号化する。したがって、本実施例に係る復号・伸張装置１９によれば、鍵情報を類推されてしまうことが抑制された暗号化対象データを復号化することができる。また、第１のデータ部分に対して適用する暗号化・復号化のアルゴリズムは、他のデータ部分に適用する暗号化・復号化のアルゴリズムと異なるアルゴリズムでもよい。復号化側では、第１のデータ部分についての復号化を行なえないと、それ以降のデータ部分についての復号化を行なうことができない。そのため、第１のデータ部分に比較的解読されにくく、演算コストがかかるアルゴリズムを用いれば、その他のデータ部分に対して比較的演算コストがかかりにくいアルゴリズムを用いたとしても、難読性が低下することを抑制できる。
【実施例２】
【００５２】
さて、上記の実施例１では、ＬＺ７７を用いる場合を例示したが、開示の装置はこれに限定されない。そこで、実施例２では、ＬＺ７８を用いる場合について説明する。
【００５３】
［システム５０の構成］
図６は、実施例２に係るシステムの構成を示す図である。図６に示すように、システム５０におけるサーバ５１は、実施例１に係る暗号・圧縮装置１６に代えて暗号・圧縮装置５６を有する。暗号・圧縮装置５６は、実施例１に係る暗号・圧縮装置１６の暗号化部１６ａ、生成部１６ｂに代えて暗号化部５６ａ、生成部５６ｂを有する点が、暗号・圧縮装置１６と異なる。また、システム５０における利用者端末５２は、実施例１に係る復号・伸張装置１９に代えて復号・伸張装置５９を有する。復号・伸張装置５９は、実施例１に係る復号・伸張装置１９の復号化部１９ａ、生成部１９ｂに代えて復号化部５９ａ、生成部５９ｂを有する点が、復号・伸張装置１９と異なる。なお、以下では、上記の実施例１と同様の機能を果たす各部や各機器については図１と同様の符号を付し、その説明は省略することとする。
【００５４】
暗号化部５６ａは、暗号化対象のデータであるコンテンツデータの一部分である第１のデータ部分を第１の鍵情報に基づいて暗号化する。例えば、暗号化部５６ａは、インターネット１３を介して、利用者端末１２から、コンテンツを提供する指示を受信した場合には、指示が示すコンテンツに対応するコンテンツデータをコンテンツＤＢ１５ａから取得する。また、暗号化部５６ａは、取得したコンテンツデータに対応する鍵情報をライセンスＤＢ１４ａから取得する。
【００５５】
そして、暗号化部５６ａは、データ圧縮アルゴリズムとして、ＬＺ７８のデータ圧縮アルゴリズムを用いて、動的辞書を生成しつつ、コンテンツデータを圧縮する。例えば、暗号化部５６ａは、動的辞書に未登録のコンテンツデータの記号を登録しつつ、動的辞書を用いてコンテンツデータを圧縮し、圧縮したバッファデータを、暗号・圧縮装置５６が有するバッファに登録する。
【００５６】
また、生成部５６ｂは、下記の処理を行う。すなわち、生成部５６ｂは、動的辞書のデータのハッシュ値Ｘ１を算出する。生成部５６ｂがハッシュ値を生成する場合に用いられるハッシュ関数の一例としては、ＳＨＡ−２が挙げられる。また、生成部５６ｂが生成するハッシュ値の長さの一例としては、１２８、１９２、２５６ビットが挙げられる。なお、生成部５６ｂがハッシュ値を生成する場合に用いられるハッシュ関数は、後述する復号・伸張装置５９がハッシュ値を生成する場合に用いられるハッシュ関数と同一である。そして、生成部５６ｂは、ハッシュ値Ｘ１と、コンテンツの鍵情報Ｋｃとを連結し、値Ｘ２（＝Ｘ１＋Ｋｃ）を算出する。次に、生成部５６ｂは、値Ｘ２のハッシュ値Ｘを算出する。
【００５７】
そして、バッファのサイズが、所定のブロック長となった場合に、暗号化部５６ａは、バッファに出力されたデータ（ブロック１、第１のデータ部分）をバッファから取り出し、ハッシュ値Ｘを暗号鍵として用いて、取り出したデータを暗号化する。暗号化部５６ａによる暗号化のアルゴリズムの一例としては、ＤＥＳ、ＡＥＳなどが挙げられる。また、「所定のブロック長」は、暗号化する際の単位である。「所定のブロック長」の長さとしては、例えば、１２８ビットが用いられる。ここで、暗号化部５６ａによる暗号化のアルゴリズムは、後述の復号・伸張装置５９による復号化のアルゴリズムと対応するアルゴリズムである。続いて、暗号化部５６ａは、暗号化したデータを、コンテンツサーバ１５へ送信する。なお、暗号化部５６ａは、暗号化したデータを、インターネット１３を介して、利用者端末５２へ送信することもできる。
【００５８】
生成部５６ｂは、動的辞書、及びコンテンツの鍵情報に基づいて、所定のアルゴリズムで第２の鍵情報を生成する。なお、コンテンツデータの記号のうち、未登録の記号が動的辞書に登録されることで、動的辞書のデータは更新される。
【００５９】
具体例を挙げて説明する。生成部５６ｂは、動的辞書が更新されるごとに、以下の処理を行う。すなわち、生成部５６ｂは、動的辞書のハッシュ値Ｘ１を算出する。そして、生成部５６ｂは、ハッシュ値Ｘ１と、コンテンツの鍵情報Ｋｃとを連結し、値Ｘ２（＝Ｘ１＋Ｋｃ）を算出する。次に、生成部５６ｂは、値Ｘ２のハッシュ値Ｘを算出する。生成部５６ｂにより生成されたハッシュ値Ｘは、暗号化部５６ａで暗号化される際の暗号鍵となる。また、所定ブロック長の圧縮データが生成されるごとに、生成部５６ｂがハッシュ値Ｘを算出するので、暗号化部５６ａで暗号鍵として用いられるハッシュ値Ｘの値は、動的に変化する。
【００６０】
暗号化部５６ａは、暗号化された第１のデータ部分と異なるコンテンツデータの一部分である第２のデータ部分を第２の鍵情報に基づいて暗号化する。例えば、暗号化部５６ａは、データ圧縮アルゴリズムとして、ＬＺ７８を用いて、生成部５６ｂにより生成されたハッシュ値Ｘを暗号鍵として用いて、コンテンツデータを暗号化する。
【００６１】
具体例を挙げて説明する。暗号化部５６ａは、データ圧縮アルゴリズムとして、ＬＺ７８のデータ圧縮アルゴリズムを用いて、動的辞書を生成しつつ、コンテンツデータを圧縮する。例えば、暗号化部５６ａは、動的辞書に未登録のコンテンツデータの記号を登録しつつ、動的辞書を用いてコンテンツデータを圧縮し、圧縮したバッファデータを、暗号・圧縮装置５６が有するバッファに登録する。
【００６２】
そして、バッファのサイズが、所定のブロック長となった場合に、暗号化部５６ａは、バッファに出力されたデータをバッファから取り出し、生成部５６ｂにより生成されたハッシュ値Ｘを暗号鍵として用いて、取り出したデータを暗号化する。なお、暗号化部５６ａは、暗号化したデータを、インターネット１３を介して、利用者端末５２へ送信することもできる。この場合、暗号化部５６ａは、このようにして暗号化されたデータを利用者端末５２へ送信する処理を繰り返し行う。暗号化部５６ａでの暗号化に用いられる暗号鍵は、暗号化の対象となるコンテンツデータの部分に応じて、動的に変化するものである。そのため、単一の暗号鍵を用いてコンテンツデータを暗号化した場合と比較して、鍵情報を類推されてしまうことを抑制することができる。
【００６３】
復号化部５９ａは、サーバ１１から送信された復号化対象のデータであるコンテンツデータの一部分である第１のデータ部分を第１の鍵情報（コンテンツデータの鍵情報）に基づいて復号化する。
【００６４】
具体例を挙げて説明する。生成部５９ｂは、動的辞書のハッシュ値Ｘ１を算出する。生成部５９ｂがハッシュ値を生成する場合に用いられるハッシュ関数の一例としては、上述した生成部５６ｂなどがハッシュ値を生成する場合に用いられるＳＨＡ−２が挙げられる。そして、生成部５９ｂは、ハッシュ値Ｘ１と、コンテンツの鍵情報Ｋｃとを連結し、値Ｘ２（＝Ｘ１＋Ｋｃ）を算出する。次に、生成部５９ｂは、値Ｘ２のハッシュ値Ｘを算出する。なお、ハッシュ値Ｘの値は動的辞書の更新に伴い変化する。そして、復号化部５９ａは、ハッシュ値Ｘを復号化鍵として用いて、受信したコンテンツデータの先頭のブロックを復号化する。続いて、復号化部５９ａは、動的辞書を用いて、復号化したデータを伸張し、伸張したデータをＤＲＭ装置２０に送信する。
【００６５】
生成部５９ｂは、第１のデータ部分および第１の鍵情報に基づいて所定のアルゴリズムで第２の鍵情報を生成する。例えば、生成部５９ｂは、ＬＺ７８を用いた伸張処理により動的辞書が更新されるたびに、次のような処理を行う。生成部５９ｂは、動的辞書のハッシュ値Ｘ１を算出する。生成部５９ｂがハッシュ値を生成する場合に用いられるハッシュ関数の一例としては、上述した暗号化部５６ａなどがハッシュ値を生成する場合に用いられるＳＨＡ−２が挙げられる。そして、生成部５９ｂは、ハッシュ値Ｘ１と、コンテンツの鍵情報Ｋｃとを連結し、値Ｘ２（＝Ｘ１＋Ｋｃ）を算出する。次に、生成部５９ｂは、値Ｘ２のハッシュ値Ｘを算出する。なお、ハッシュ値Ｘの値は動的辞書の更新に伴い変化する。
【００６６】
復号化部５９ａは、第２のデータ部分を第２の鍵情報に基づいて復号化する。例えば、復号化部５９ａは、生成部５９ｂにより算出されたハッシュ値Ｘを暗号鍵として用いて、受信したコンテンツデータの対応するブロック２を復号化する。続いて、復号化部５９ａは、動的辞書を用いて、復号化したデータを伸張し、伸張したデータをＤＲＭ装置２０に送信する。
【００６７】
暗号・圧縮装置５６、復号・伸張装置５９は、ＡＳＩＣ（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）３４０とを有する。これら３１０〜３４０の各部は、バスを介して接続される。ＣＰＵ３１０は、暗号化プログラム３２０ａを実行可能なプロセッサの一例である。
【００８６】
ＲＯＭ３２０には、上記の実施例で示す第１の暗号化部、第１の生成部、第２の暗号化部と同様の機能を発揮する暗号化プログラム３２０ａが予め記憶される。なお、暗号化プログラム３２０ａについては、適宜分離しても良い。
【００８７】
そして、ＣＰＵ３１０が、暗号化プログラム３２０ａをＲＯＭ３２０から読み出して実行する。
【００８８】
そして、ＨＤＤ３３０には、ライセンスＤＢ、コンテンツＤＢが設けられる。これらライセンスＤＢ、コンテンツＤＢのそれぞれは、ライセンスＤＢ１４ａ、コンテンツＤＢ１５ａのそれぞれに対応する。
【００８９】
そして、ＣＰＵ３１０は、ライセンスＤＢ、コンテンツＤＢを読み出してＲＡＭ３４０に格納する。さらに、ＣＰＵ３１０は、ＲＡＭ３４０に格納されたライセンスＤＢ、コンテンツＤＢを用いて、暗号化プログラムを実行する。なお、ＲＡＭ３４０に格納される各データは、常に全てのデータがＲＡＭ３４０に格納される必要はなく、処理に必要なデータのみがＲＡＭ３４０に格納されれば良い。
【００９０】
図１０に示すように、コンピュータ４００は、ＣＰＵ４１０、ＲＯＭ４２０、ＨＤＤ４３０、ＲＡＭ４４０とを有する。これら４１０〜４４０の各部は、バスを介して接続される。ＣＰＵ４１０は、復号化プログラム４２０ａを実行可能なプロセッサの一例である。
【００９１】
ＲＯＭ４２０には、上記の実施例で示す第１の復号化部、第２の生成部、第２の復号化部と同様の機能を発揮する復号化プログラム４２０ａが予め記憶される。なお、復号化プログラム４２０ａについては、適宜分離しても良い。
【００９２】
そして、ＣＰＵ４１０が、復号化プログラム４２０ａをＲＯＭ４２０から読み出して実行する。
【００９３】
そして、ＨＤＤ４３０には、ライセンスＤＢが設けられる。このライセンスＤＢは、ライセンスＤＢ１８に対応する。
【００９４】
そして、ＣＰＵ４１０は、ライセンスＤＢを読み出してＲＡＭ４４０に格納する。さらに、ＣＰＵ４１０は、ＲＡＭ４４０に格納されたライセンスＤＢを用いて、復号化プログラムを実行する。
【００９５】
なお、上記した暗号化プログラムおよび復号化プログラムについては、必ずしも最初からＲＯＭに記憶させておく必要はない。
【００９６】
例えば、コンピュータに挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」にプログラムを記憶させておく。そして、コンピュータがこれらからプログラムを読み出して実行するようにしてもよい。  
【００９７】
さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータに接続される「他のコンピュータ（またはサーバ）」などにプログラムを記憶させておく。そして、コンピュータがこれらからプログラムを読み出して実行するようにしてもよい。
【符号の説明】
【００９８】
１０      システム
１１      サーバ
１２      利用者端末
１６      暗号・圧縮装置
１６ａ    暗号化部
１６ｂ    生成部
１９      復号・伸張装置
１９ａ    復号化部
１９ｂ    生成部
【図１】
2012212138.tif 000003
【図２】
2012212138.tif 000004
【図３】
2012212138.tif 000005
【図４】
2012212138.tif 000006
【図５】
2012212138.tif 000007
【図６】
2012212138.tif 000008
【図７】
2012212138.tif 000009
【図８】
2012212138.tif 000010
【図９】
2012212138.tif 000011
【図１０】
2012212138.tif 000012