以下に、本願の開示する伸張プログラム、圧縮プログラム、圧縮装置、伸張装置、圧縮方法および伸張方法の各実施例を図面に基づいて詳細に説明する。各実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。なお、伸張プログラム、圧縮プログラムは、変換プログラムの一例である。また、圧縮装置、伸張装置は、変換装置の一例である。また、圧縮方法、伸張方法は、変換方法の一例である。
[システム1の構成例]
実施例1に係るシステムについて説明する。図1は、実施例1に係るシステムの構成の一例を示す図である。本実施例に係るシステム1は、サーバ2と、利用者端末3とを有する。サーバ2と、利用者端末3とは、データの送受信が可能なように接続される。図1の例では、サーバ2と、利用者端末3とは、インターネット4を介して接続されている。なお、サーバ2と、利用者端末3とは、無線で接続されてもよい。サーバ2は、辞書や電子書籍などのデジタルコンテンツのファイルのデータを圧縮する。サーバ2は、圧縮されたデジタルコンテンツのファイルのデータを、インターネット4を介して利用者端末3に送信する。利用者端末3は、受信したデジタルコンテンツのファイルのデータを伸張する。利用者端末3は、伸張したデジタルコンテンツのファイルを再生する。
サーバ2は、入力部5と、出力部6と、送受信部7と、記憶部8と、制御部9とを有する。
入力部5は、各種の情報を制御部9に入力する。例えば、入力部5は、ユーザから、デジタルコンテンツを受け付けて、受け付けたデジタルコンテンツを制御部9に入力する。また、入力部5は、ユーザから、後述の圧縮処理を実行する指示を受け付けて、受け付けた指示を制御部9に入力する。また、入力部5は、ユーザから、パスワードを受け付けて、受け付けたパスワードを制御部9に入力する。パスワードの一例としては、数字およびアルファベットが挙げられる。例えば、パスワードとしては、4桁の数字「3212」が挙げられる。また、入力部5のデバイスの一例としては、マウスやキーボードなどの操作受付デバイスが挙げられる。
出力部6は、各種の情報を出力する。例えば、出力部6は、サーバ2の稼働状況を表示する。出力部6のデバイスの一例としては、LCD(Liquid Crystal Display)やCRT(Cathode Ray Tube)などの表示デバイスなどが挙げられる。
送受信部7は、サーバ2と利用者端末3との通信を行うための通信インタフェースである。例えば、送受信部7は、利用者端末3からインターネット4を介して、コンテンツデータベース(Data Base)に登録されたデジタルコンテンツのファイルの送信要求を受信すると、受信した送信要求を制御部9へ送信する。なお、以下では、データベースを「DB」と略記する。また、送受信部7は、制御部9から後述のコンテンツDB8aに登録されたデジタルコンテンツのファイルを受信すると、受信したデジタルコンテンツのファイルを、インターネット4を介して利用者端末3へ送信する。
記憶部8は、各種情報を記憶する。例えば、記憶部8は、コンテンツDB8a、辞書8bを記憶する。
コンテンツDB8aには、圧縮されたデジタルコンテンツのファイルが登録される。例えば、コンテンツDB8aには、後述の圧縮部9aにより圧縮されたデジタルコンテンツのファイルが登録される。図2は、コンテンツDBの一例を示す図である。図2の例では、コンテンツDB8aに、圧縮されたデジタルコンテンツA〜Kの各ファイルが登録されている場合が示されている。コンテンツDB8aに登録されたデジタルコンテンツのファイルは、利用者端末3からの指示に応じて、利用者端末3へ送信される。
辞書8bは、LZ78の圧縮方式で用いられる動的辞書である。LZ78の圧縮方式では、トライの木で表される動的辞書が用いられて、ファイルの圧縮および伸張が行われる。トライの木の葉および節点には、文字の文字コードと参照番号とが格納されている。図3は、トライの木の一例を示す図である。図3の例では、初期化された辞書8bが示すトライの木の一例が示されている。図3の例では、初期化された辞書8bのトライの木の葉には、16進数で「00」〜「FF」までの256種類の文字のコードと、参照番号とが登録された場合が示されている。ここで、参照番号は、圧縮符号として用いられる。図3の例では、文字「a」の文字コードは、10進数で「97」である。また、図3の例では、文字「a」の圧縮符号は、16進数で「61」である。なお、トライの木のルートに接続された一列目の葉および節点は、第一世代とも称される。同様に、トライの木のN列目の葉および節点は、第N世代と称される。第一世代の葉および節点では、文字のコードと圧縮符号とは同一である。
図4は、トライの木の第一世代の圧縮符号が変更された場合の一例を示す図である。図4の例では、図3の例において16進数で「61」であった「a」の圧縮符号が、16進数で「54」に変更された場合が示されている。また、図4の例では、図3の例において16進数で「62」であった「b」の圧縮符号が、16進数で「00」に変更された場合が示されている。図4の例のトライの木の第一世代の圧縮符号は、後述の変更部9bによりスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、初期化時に辞書8bに登録される256種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、256種類の文字の解読が困難となる。
図5は、トライの木の第二世代以降の葉および節点が追加された場合の一例を示す図である。図5の例では、文字列「bit」の参照番号は、16進数で「102」である。図5の例では、文字列「bit」の圧縮符号として参照番号「102」を用いることで、文字列「bit」の圧縮を行うことができる。また、図5の例では、圧縮されたファイルのデータ「102」を、文字列「bit」に置き換えることで、伸張を行うことができる。
ここで、図5の例では、第一世代の圧縮符号が変更されているため、第二世代以降の葉に登録された圧縮符号が用いられて圧縮されたデータは、攻撃者などによる解読が困難なデータである。具体例を挙げて説明する。例えば、攻撃者などが、圧縮された「bit」の文字列を解読する場合を想定する。この場合、攻撃者などは、初期化時に辞書8bに登録される256種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、「bit」の先頭文字「b」の圧縮符号を特定するのが困難となる。すなわち、攻撃者などは、先頭文字「b」のトライの木での格納位置を特定するのが困難となるため、結果的に「bit」の圧縮符号を特定するのが困難となる。
記憶部8は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部8は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部9は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図1に示すように、制御部9は、圧縮部9aと、変更部9bとを有する。
圧縮部9aは、後述の変更部9bにより、文字のコードと、圧縮符号との組合せが変更された辞書8bを用いて、入力部5から入力されたデジタルコンテンツのファイルのデータを圧縮しつつ、辞書8bを更新する。具体例を挙げて説明する。圧縮部9aは、LZ78の圧縮方式により、まず、辞書8bを初期化して、予め定められた複数の文字のコードと、圧縮符号との組合せを登録する。先の図3の例では、圧縮部9aは、16進数で「00」〜「FF」までの256種類の文字のコードと、参照番号とを辞書8bに登録する。そして、圧縮部9aは、変更部9bにより、文字と圧縮符号との組合せが変更された辞書8bを用いて、LZ78の圧縮方式によって、デジタルコンテンツのファイルのデータを圧縮しつつ、辞書8bを更新する。そして、圧縮部9aは、圧縮したファイルをデジタルコンテンツごとに、コンテンツDB8aに登録する。また、圧縮部9aは、利用者端末3からのデジタルコンテンツのファイルの送信要求を受信すると、デジタルコンテンツのファイルをコンテンツDB8aから取得し、取得したファイルを、送受信部7に送信する。
変更部9bは、入力部5から入力されたパスワードに基づいて、文字列と圧縮符号との複数の組合せが登録された辞書8bの文字列と圧縮符号との組合せを変更する。具体例を挙げて説明する。まず、変更部9bは、パスワードを取得する。そして、変更部9bは、パスワードに含まれる数字「0」〜「9」のそれぞれを16進数の「00」〜「09」とし、アルファベット「a」〜「z」のそれぞれを16進数の「0A」〜「23」として、各桁の和を算出する。例えば、変更部9bは、パスワードとして「3212」を取得した場合には、16進数で「08」(3+2+1+2)を算出する。続いて、変更部9bは、各桁の和を所定値で除算した場合の剰余Sを算出する。例えば、各桁の和が「08」であり、かかる所定値が10進数で「16」である場合には、変更部9bは、剰余Sとして「8」(8÷16=0余り8)を算出する。
その後、変更部9bは、初期時に辞書8bに登録された所定数の文字と圧縮符号との組合せを2Sごとにブロック化する。図6は、変更部の処理の一例を説明するための図である。図6の例では、S=「8」の場合であり、変更部9bは、16個の文字と圧縮符号との組合せを16個ごとにブロック化した場合が示されている。図6の例では、1番目のブロック90は、文字「NUL」、「SOH」、・・・「BEL」、「BS」、「TAB」、・・・「SI」の16個の文字のそれぞれのコードと、圧縮符号との組合せを含む。すなわち、図6の例では、1番目のブロック90は、文字「NUL」のコード「0」と圧縮符号「00」との組合せを含む。また、図6の例では、1番目のブロック90は、文字「SOH」のコード「1」と圧縮符号「01」との組合せを含む。また、図6の例では、1番目のブロック90は、文字「BEL」のコード「7」と圧縮符号「07」との組合せを含む。また、図6の例では、1番目のブロック90は、文字「BS」のコード「8」と圧縮符号「08」との組合せを含む。また、図6の例では、1番目のブロック90は、文字「TAB」のコード「9」と圧縮符号「09」との組合せを含む。また、図6の例では、1番目のブロック90は、文字「SI」のコード「15」と圧縮符号「0F」との組合せを含む。さらに、図6の例では、2番目のブロック91は、文字「DLE」・・・・の16個の文字のそれぞれのコードと、圧縮符号との組合せを含む。このようにして、変更部9bは、1番目のブロックからN番目のブロックまでを生成する。なお、Nは、処理対象の世代の葉および節点の個数を2Sで除した値の小数点以下を切り上げた整数値である。ここで、本実施例では、処理対象の世代は、第一世代である。
続いて、変更部9bは、ブロック1〜Nごとに、次のような処理を行う。すなわち、変更部9bは、ブロック内の文字のコードと圧縮符号との複数の組合せのそれぞれについて、圧縮符号に上記の剰余Sを加えた値を、上記の所定値で除算した場合の剰余S´を算出する。そして、変更部9bは、ブロック内の文字のコードと圧縮符号との複数の組合せのそれぞれについて、圧縮符号を、剰余S´に変更する。図6の例では、剰余Sが「8」であるため、変更部9bは、文字「NUL」の圧縮符号を「08」((「00」+「08」)÷所定値16=0余り08)に変更する。また、図6の例では、変更部9bは、文字「SOH」の圧縮符号を「09」((「01」+「08」)÷所定値16=0余り09)に変更する。また、図6の例では、変更部9bは、文字「BEL」の圧縮符号を「0F」((「07」+「08」)÷所定値16=0余り0F)に変更する。また、図6の例では、変更部9bは、文字「BS」の圧縮符号を「10」((「08」+「08」)÷所定値16=1余り00)に変更する。また、図6の例では、1番目のブロック90は、文字「TAB」の圧縮符号を「01」((「09」+「08」)÷所定値16=1余り01)に変更する。また、図6の例では、変更部9bは、文字「SI」の圧縮符号を「07」((「0F」+「08」)÷所定値16=1余り07)に変更する。さらに、図6の例では、変更部9bは、文字「DLE」の圧縮符号を「18」に変更する。このようにして、変更部9bは、各ブロック単位で、入力部5から入力されたパスワードに基づいて、文字列と圧縮符号との複数の組合せが登録された辞書8bの文字列と圧縮符号との組合せを変更する。なお、ブロック1の場合について例示したが、ブロック2以上については、次のようにして、剰余S´を算出することができる。すなわち、ブロック1と同様に、ブロック内で、文字のコードと圧縮符号との組み合わせが入れ替わるように、m(>2)ブロックごとに、上述した除算したことにより算出した剰余S´に、(m−1)×2Sの値が加算された値が剰余S´となる。
このように、本実施例に係るサーバ2では、辞書8bの第一世代の葉および節点の圧縮符号がスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、初期化時に辞書8bに登録される複数の種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、これらの複数の種類の文字の解読が困難となる。この結果、これらの複数の種類の文字を先頭文字に含む文字列の解読についても困難となる。
また、本実施例に係るサーバ2では、辞書8bの圧縮符号をスクランブルするだけで、複雑な暗号化の処理を行わずに、解読が困難な圧縮データが生成される。したがって、本実施例に係るサーバ2によれば、簡易な圧縮処理により難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係るサーバ2によれば、辞書8bの圧縮符号をスクランブルするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていないので、簡易に圧縮データの難読化を図ることができる。
利用者端末3は、入力部10と、出力部11と、送受信部12と、記憶部13と、制御部14とを有する。
入力部10は、各種情報を制御部14に入力する。例えば、入力部10は、ユーザから後述の伸張処理を実行する指示を受け付けて、受け付けた指示を制御部14に入力する。また、入力部10は、ユーザからパスワードを受け付けて、受け付けたパスワードを制御部14に入力する。入力部10のデバイスの一例としては、マウスやキーボードなどの操作受付デバイスが挙げられる。
出力部11は、各種の情報を出力する。例えば、出力部11は、後述の再生部14cによって、再生されたデジタルコンテンツを表示する。出力部11のデバイスの一例としては、LCD(Liquid Crystal Display)やCRT(Cathode Ray Tube)などの表示デバイスが挙げられる。
送受信部12は、利用者端末3とサーバ2との通信を行うための通信インタフェースである。例えば、送受信部12は、制御部14から、コンテンツDBに登録されたデジタルコンテンツのファイルの送信要求を受信すると、受信した送信要求を、インターネット4を介してサーバ2へ送信する。また、送受信部12は、サーバ2からコンテンツDB8aに登録されたデジタルコンテンツのファイルを受信すると、受信したファイルを制御部14へ送信する。
記憶部13は、各種情報を記憶する。例えば、記憶部13は、コンテンツDB13a、辞書13bを記憶する。
コンテンツDB13aには、後述の伸張部14aにより伸張されたデジタルコンテンツの各ファイルが登録される。
辞書13bは、LZ78の圧縮方式で用いられる動的辞書である。上述した辞書8bと同様に、辞書13bは、後述の伸張部14aにより、初期化されると、予め定められた文字のコードと、圧縮符号との複数の組合せが登録される。また、辞書13bが示すトライの木の第一世代の圧縮符号は、辞書8bと同様に、後述の変更部14bによりスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、初期化時に辞書13bに登録される256種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、256種類の文字の解読が困難となる。
また、辞書13bは、辞書8bと同様に、トライの木の第一世代の圧縮符号が変更された後に、伸張部14aにより、トライの木の第二世代以降の葉および節点が追加されて、更新される。
記憶部13は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部13は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部14は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図1に示すように、制御部14は、伸張部14aと、変更部14bと、再生部14cとを有する。
伸張部14aは、後述の変更部14bにより、文字のコードと、圧縮符号との組合せが変更された辞書13bを用いて、サーバ2から入力されたデジタルコンテンツのファイルのデータを伸張しつつ、辞書13bを更新する。具体例を挙げて説明する。伸張部14aは、LZ78の圧縮方式により、まず、辞書13bを初期化して、予め定められた複数の文字のコードと、圧縮符号との組合せを登録する。ここで、伸張部14aは、圧縮部9aによる辞書8aの初期化の際に、辞書8aに登録された文字と圧縮符号との組合せと同一の組合せを辞書13bの初期化時に登録する。そして、伸張部14aは、変更部14bにより、文字と圧縮符号との組合せが変更された辞書13bを用いて、LZ78の圧縮方式によって、デジタルコンテンツのファイルのデータを伸張しつつ、辞書13bを更新する。そして、伸張部14aは、伸張したファイルをデジタルコンテンツごとに、コンテンツDB13aに登録する。
変更部14bは、入力部10から入力されたパスワードに基づいて、文字列と圧縮符号との複数の組合せが登録された辞書13bの文字列と圧縮符号との組合せを変更する。具体例を挙げて説明する。まず、変更部14bは、パスワードを取得する。そして、変更部14bは、変更部9aと同様に、パスワードに含まれる数字「0」〜「9」のそれぞれを16進数の「00」〜「09」とし、アルファベット「a」〜「z」のそれぞれを16進数の「0A」〜「23」として、各桁の和を算出する。
その後、変更部14bは、変更部9aと同様に、初期時に辞書13bに登録された所定数の文字と圧縮符号との組合せを2Sごとにブロック化する。図6の例では、S=「8」の場合であり、変更部14bは、16個の文字と圧縮符号との組合せを16個ごとにブロック化した場合が示されている。変更部14bは、1番目のブロックからN番目のブロックまでを生成する。なお、Nは、処理対象の世代の葉および節点の個数を2Sで除した値の小数点以下を切り上げた整数値である。ここで、本実施例では、処理対象の世代は、第一世代である。
続いて、変更部14bは、ブロック1〜Nごとに、次のような処理を行う。すなわち、変更部14bは、変更部9aと同様に、ブロック内の文字のコードと圧縮符号との複数の組合せのそれぞれについて、圧縮符号に剰余Sを加えた値を、上記の所定値で除算した場合の剰余S´を算出する。そして、ブロック内の文字のコードと圧縮符号との複数の組合せのそれぞれについて、圧縮符号を、剰余S´に変更する。図6の例では、剰余Sが「8」であるため、変更部14bは、文字「NUL」の圧縮符号を「08」((「00」+「08」)÷所定値16=0余り08)に変更する。また、図6の例では、変更部14bは、文字「SOH」の圧縮符号を「09」((「01」+「08」)÷所定値16=0余り09)に変更する。また、図6の例では、変更部14bは、文字「BEL」の圧縮符号を「0F」((「07」+「08」)÷所定値16=0余り0F)に変更する。また、図6の例では、変更部14bは、文字「BS」の圧縮符号を「10」((「08」+「08」)÷所定値16=1余り00)に変更する。また、図6の例では、1番目のブロック90は、文字「TAB」の圧縮符号を「01」((「09」+「08」)÷所定値16=1余り01)に変更する。また、図6の例では、変更部14bは、文字「SI」の圧縮符号を「07」((「0F」+「08」)÷所定値16=1余り07)に変更する。さらに、図6の例では、変更部14bは、文字「DLE」の圧縮符号を「18」に変更する。このようにして、変更部14bは、各ブロック単位で、入力部10から入力されたパスワードに基づいて、文字列と圧縮符号との複数の組合せが登録された辞書13bの文字列と圧縮符号との組合せを変更する。なお、ブロック1の場合について例示したが、ブロック2以上については、次のようにして、剰余S´を算出することができる。すなわち、ブロック1と同様に、ブロック内で、文字のコードと圧縮符号との組み合わせが入れ替わるように、m(>2)ブロックごとに、上述した除算したことにより算出した剰余S´に、(m−1)×2Sの値が加算された値が剰余S´となる。
ここで、本実施例に係る利用者端末3では、入力されたパスワードが、サーバ2で入力された正規のパスワードと一致しない場合には、上記の所定値が大きくなるほど、算出される剰余Sが、サーバ2で算出される剰余Sと一致する可能性が低くなる。そのため、本実施例に係る利用者端末3では、入力されたパスワードが正規のパスワードでない場合には、上記の所定値が大きくなるほど、辞書13bの登録内容が辞書8bの登録内容と一致する可能性が低くなる。このため、本実施例に係る利用者端末3では、結果として伸張されるデータが正規のものとなる可能性も低くなる。したがって、本実施例に係る利用者端末3によれば、簡易に難読化を図ることができる。
再生部14cは、コンテンツDB13aに登録されたデジタルコンテンツを取得し、取得したデジタルコンテンツを出力部11の表示デバイスに再生する。
制御部14は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部14は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
[処理の流れ]
次に、本実施例に係るシステム1の処理の流れを説明する。図7は、実施例1に係るシステムのシーケンス図である。
図7に示すように、サーバ2は、後述の圧縮処理を実行する(ステップS101)。サーバ2は、圧縮されたデジタルコンテンツのファイルをコンテンツDB8aに登録する(ステップS102)。
一方、利用者端末3は、ユーザから後述の伸張処理を実行する指示を受け付けると(ステップS103)、デジタルコンテンツのファイルの送信要求をサーバ2に送信する(ステップS104)。サーバ2は、デジタルコンテンツのファイルの送信要求を受信すると、コンテンツDB8aに登録されたデジタルコンテンツのファイルを利用者端末3に送信する(ステップS105)。
利用者端末3は、デジタルコンテンツのファイルを受信する(ステップS106)と、後述の伸張処理を実行する(ステップS107)。利用者端末3は、伸張されたデジタルコンテンツのファイルをコンテンツDB13aに登録する(ステップS108)。利用者端末3は、コンテンツDB13aに登録されたデジタルコンテンツを再生する(ステップS109)。
次に、本実施例に係るサーバ2の処理の流れを説明する。図8は、実施例1に係る圧縮処理の手順を示すフローチャートである。この圧縮処理の実行タイミングとしては様々なタイミングが考えられる。例えば、圧縮処理は、入力部5からデジタルコンテンツが入力された場合に実行されるようにしてもよい。
図8に示すように、圧縮部9aは、デジタルコンテンツのファイルを取得する(ステップS201)。圧縮部9aは、辞書8bを初期化する(ステップS202)。変更部9bは、入力部5からパスワードが入力されたか否かを判定する(ステップS203)。パスワードが入力されていない場合(ステップS203否定)には、変更部9bは、再びステップS203で、入力部5からパスワードが入力されたか否かを判定する。
一方、パスワードが入力された場合(ステップS203肯定)には、変更部9bは、パスワードの各桁の和を算出し、算出した和を所定値で除算した場合の剰余Sを算出する(ステップS204)。変更部9bは、処理対象の世代の葉および節点の個数を2Sで除した値の小数点以下を切り上げた整数値Nを算出する(ステップS205)。変更部9bは、変数Kの値に1を設定する(ステップS206)。変更部9bは、処理対象の世代のK番目のブロックの圧縮符号をスクランブルして、文字のコードと圧縮符号との組合せを変更する(ステップS207)。変更部9bは、変数Kの値が整数値N以上となったか否かを判定する(ステップS208)。変数Kの値が整数値N未満である場合(ステップS208否定)には、変更部9bは、変数Kの値を1つインクリメントし(ステップS209)、ステップS207へ戻る。
一方、変数Kの値が整数値N以上である場合(ステップS208肯定)には、圧縮部9aは、辞書8bを用いて、LZ78の圧縮方式によって、デジタルコンテンツのファイルのデータを圧縮しつつ、辞書8bを更新する(ステップS210)。そして、圧縮部9aは、処理結果を制御部9の内部メモリに格納し、リターンする。
次に、本実施例に係る利用者端末3の処理の流れを説明する。図9は、実施例1に係る伸張処理の手順を示すフローチャートである。伸張処理においても、図8において説明した圧縮処理と共通の辞書更新アルゴリズムを用いる。
図9に示すように、伸張部14aは、デジタルコンテンツの圧縮ファイルをサーバ2から取得する(ステップS301)。伸張部14aは、辞書13bを初期化する(ステップS302)。変更部14bは、入力部10からパスワードが入力されたか否かを判定する(ステップS303)。パスワードが入力されていない場合(ステップS303否定)には、変更部14bは、再びステップS303で、入力部10からパスワードが入力されたか否かを判定する。
一方、パスワードが入力された場合(ステップS303肯定)には、変更部14bは、パスワードの各桁の和を算出し、算出した和を所定値で除算した場合の剰余Sを算出する(ステップS304)。変更部14bは、処理対象の世代の葉および節点の個数を2Sで除した値の小数点以下を切り上げた整数値Nを算出する(ステップS305)。変更部14bは、変数Kの値に1を設定する(ステップS306)。変更部14bは、処理対象の世代のK番目のブロックの圧縮符号をスクランブルして、文字のコードと圧縮符号との組合せを変更する(ステップS307)。変更部14bは、変数Kの値が整数値N以上となったか否かを判定する(ステップS308)。変数Kの値が整数値N未満である場合(ステップS308否定)には、変更部14bは、変数Kの値を1つインクリメントし(ステップS309)、ステップS307へ戻る。
一方、変数Kの値が整数値N以上である場合(ステップS308肯定)には、伸張部14aは、辞書13bを用いて、LZ78の圧縮方式によって、デジタルコンテンツのファイルのデータを伸張しつつ、辞書13bを更新する(ステップS310)。そして、伸張部14aは、処理結果を制御部14の内部メモリに格納し、リターンする。
上述してきたように、本実施例に係るサーバ2では、辞書8bの第一世代の葉および節点の圧縮符号がスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、初期化時に辞書8bに登録される複数の種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、これらの複数の種類の文字の解読が困難となる。この結果、これらの複数の種類の文字を先頭文字に含む文字列の解読についても困難となる。
また、本実施例に係るサーバ2では、辞書8bの圧縮符号をスクランブルするだけで、複雑な暗号化の処理を行わずに、解読が困難な圧縮データが生成される。したがって、本実施例に係るサーバ2によれば、簡易な圧縮処理により難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係るサーバ2によれば、辞書8bの圧縮符号をスクランブルするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていないので、簡易に圧縮データの難読化を図ることができる。
また、本実施例に係る利用者端末3では、入力されたパスワードが、サーバ2で入力された正規のパスワードと一致しない場合には、上記の所定値が大きくなるほど、算出される剰余Sが、サーバ2で算出される剰余Sと一致する可能性が低くなる。そのため、本実施例に係る利用者端末3では、入力されたパスワードが正規のパスワードでない場合には、上記の所定値が大きくなるほど、辞書13bの登録内容が辞書8bの登録内容と一致する可能性が低くなる。このため、本実施例に係る利用者端末3では、結果として伸張されるデータが正規のものとなる可能性も低くなる。したがって、本実施例に係る利用者端末3によれば、簡易に難読化を図ることができる。
さて、上記の実施例1では、第一世代の圧縮符号をスクランブルする場合を例示したが、開示の装置はこれに限定されない。そこで、実施例2では、第二世代以降も圧縮符号をスクランブルする場合について説明する。
[システム20の構成例]
実施例2に係るシステムについて説明する。図10は、実施例2に係るシステムの構成の一例を示す図である。本実施例に係るシステム20は、サーバ21と、利用者端末22とを有する。サーバ21は、実施例1に係る制御部9に代えて制御部23を有する点が、実施例1と異なる。利用者端末22は、実施例1に係る制御部14に代えて制御部24を有する点が、実施例1と異なる。なお、以下では、上記の実施例1と同様の機能を果たす各部や各機器については図1と同様の符号を付し、その説明は省略する場合がある。サーバ21は、辞書や電子書籍などのデジタルコンテンツのファイルのデータを圧縮する。サーバ21は、圧縮されたデジタルコンテンツのファイルのデータを、インターネット4を介して利用者端末22に送信する。利用者端末22は、受信したデジタルコンテンツのファイルのデータを伸張する。利用者端末22は、伸張したデジタルコンテンツのファイルを再生する。
サーバ21は、入力部5と、出力部6と、送受信部7と、記憶部8と、制御部23とを有する。
制御部23は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図10に示すように、制御部23は、圧縮部23aと、変更部23bとを有する。
圧縮部23aは、実施例1に係る圧縮部9aと同様の処理を行う。すなわち、圧縮部23aは、後述の変更部23bにより、文字のコードと圧縮符号との組合せが変更された辞書8bを用いて、デジタルコンテンツのファイルのデータを圧縮する。また、圧縮部23aは、圧縮された文字列の圧縮前の文字列を含む文字列であって辞書8bに未登録の文字列と、圧縮符号との組合せを新たに辞書8bに登録する。
変更部23bは、実施例1に係る変更部9bと同様の処理を行う。さらに、変更部23bは、パスワードに基づいて、辞書8bに新たに登録された文字列と圧縮符号との組合せを新たに変更する。具体例を挙げて説明する。
変更部23bは、辞書8bに文字列と圧縮符号との組合せが新たに登録されるたびに、新たに登録された文字列の文字のうち、新規に追加された文字の世代を処理対象の世代として特定する。図11は、実施例2に係るシステムが実行する処理の一例を説明するための図である。図11の例では、辞書8bに、文字列「bit」のコード「98105116」と、圧縮符号「102」との組合せが登録されている場合が示されている。図11の例において、辞書8bに、未登録の文字列「but」のコードと圧縮符号との組合せが圧縮部23aにより新たに登録されると、変更部23bは、「but」の「u」の第二世代と、「t」の第三世代とを処理対象の世代として特定する。
そして、変更部23bは、実施例1に係る変更部9bが辞書8bに登録された第一世代の文字列と圧縮符号との組合せを変更する方法と同様の方法で、特定した処理対象の世代の文字列と圧縮符号との組合せを変更する。図12は、実施例2に係るシステムが実行する処理の一例を説明するための図である。図12の例は、図11の例において辞書8bに未登録の文字列「but」のコードと圧縮符号との組合せが、圧縮部23aにより辞書8bに新たに登録された場合の変更部23bの処理の一例を示す。図12の例では、変更部23bは、文字列「but」の第二世代の文字「u」、第三世代の文字「t」のそれぞれの圧縮符号と、文字列「bit」の第二世代の文字「i」、第三世代の文字「t」のそれぞれの圧縮符号とを変更する。すなわち、図12の例では、変更部23bは、文字列「but」の第二世代の文字「u」に対応する圧縮符号を「101」に変更し、第三世代の文字「t」に対応する圧縮符号を「102」に変更する。また、図12の例では、変更部23bは、文字列「bit」の第二世代の文字「i」に対応する圧縮符号を「103」に変更し、第三世代の文字「t」に対応する圧縮符号を「104」に変更する。なお、ブロック内で、文字のコードと圧縮符号との組み合わせが入れ替わるように、適宜、そのブロック内の圧縮符号に応じた値が剰余S´に加算され、加算された結果得られた剰余S´が文字列と組み合わせられる。
このように、本実施例に係るサーバ21では、辞書8bの第一世代、および、辞書8bに新規に追加された文字の世代の葉および節点の圧縮符号がスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、初期化時に辞書8bに登録される複数の種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、これらの複数の種類の文字の解読が困難となる。
また、本実施例に係るサーバ21では、辞書8bの圧縮符号をスクランブルするだけで、複雑な暗号化の処理を行わずに、解読が困難な圧縮データが生成される。したがって、本実施例に係るサーバ21によれば、簡易な圧縮処理により難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係るサーバ21によれば、辞書8bの圧縮符号をスクランブルするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていないので、簡易に圧縮データの難読化を図ることができる。
利用者端末22は、入力部10と、出力部11と、送受信部12と、記憶部13と、制御部24とを有する。
制御部24は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図10に示すように、制御部24は、伸張部24aと、変更部24bと、再生部14cとを有する。
伸張部24aは、実施例1に係る伸張部14aと同様の処理を行う。すなわち、伸張部24aは、後述の変更部24bにより、文字のコードと圧縮符号との組合せが変更された辞書13bを用いて、デジタルコンテンツのファイルのデータを伸張する。また、伸張部24aは、伸張された文字を含む文字列であって辞書13bに未登録の文字列と、圧縮符号との組合せを新たに辞書13bに登録する。
変更部24bは、実施例1に係る変更部14bと同様の処理を行う。さらに、変更部24bは、パスワードに基づいて、辞書13bに新たに登録された文字列と圧縮符号との組合せを新たに変更する。具体例を挙げて説明する。
変更部24bは、辞書13bに文字列と圧縮符号との組合せが新たに登録されるたびに、新たに登録された文字列の文字のうち、新規に追加された文字の世代を処理対象の世代として特定する。例えば、文字列「bit」のコードと圧縮符号との組合せが辞書13bに登録されている場合に、未登録の文字列「but」のコードと圧縮符号との組合せが伸張部24aにより新たに登録されると、変更部24bは、次のような処理を行う。すなわち、変更部24bは、「but」の「u」の第二世代と、「t」の第三世代とを処理対象の世代として特定する。
そして、変更部24bは、実施例1に係る変更部14bが辞書13bに登録された第一世代の文字列と圧縮符号との組合せを変更するのと同様に、特定した処理対象の世代の文字列と圧縮符号との組合せを変更する。例えば、文字列「bit」のコードと圧縮符号との組合せが辞書13bに登録されている場合に、未登録の文字列「but」のコードと圧縮符号との組合せが伸張部24aにより新たに登録されると、変更部24bは、次のような処理を行う。すなわち、変更部24bは、文字列「but」の第二世代の文字「u」、第三世代の文字「t」のそれぞれの圧縮符号と、文字列「bit」の第二世代の文字「i」、第三世代の文字「t」のそれぞれの圧縮符号とを変更する。なお、ブロック内で、文字のコードと圧縮符号との組み合わせが入れ替わるように、適宜、そのブロック内の圧縮符号に応じた値が剰余S´に加算され、加算された結果得られた剰余S´が文字列と組み合わせられる。
このように、本実施例に係る利用者端末22では、入力されたパスワードが、サーバ21で入力された正規のパスワードと一致しない場合には、上記の所定値が大きくなるほど、算出される剰余Sが、サーバ21で算出される剰余Sと一致する可能性が低くなる。そのため、本実施例に係る利用者端末22では、入力されたパスワードが正規のパスワードでない場合には、上記の所定値が大きくなるほど、辞書13bの登録内容が辞書8bの登録内容と一致する可能性が低くなる。このため、本実施例に係る利用者端末22では、結果として伸張されるデータが正規のものとなる可能性も低くなる。したがって、本実施例に係る利用者端末22によれば、簡易に難読化を図ることができる。
制御部24は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部24は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
[処理の流れ]
次に、本実施例に係るサーバ21の処理の流れを説明する。図13は、実施例2に係る圧縮処理の手順を示すフローチャートである。この圧縮処理の実行タイミングとしては様々なタイミングが考えられる。例えば、圧縮処理は、入力部5からデジタルコンテンツが入力された場合に実行されるようにしてもよい。なお、本実施例に係るシステム20の処理の流れは、実施例1に係るシステム1のシーケンス図で示す処理の流れと同様であるので、説明を省略する。
図13に示すステップS401〜S409は、先の図8に示すステップS201〜S209と同様であるので説明を省略する。図13に示すように、圧縮部23aは、辞書8bを用いて、デジタルコンテンツのファイルの未処理のデータを圧縮する(ステップS410)。圧縮部23aは、デジタルコンテンツのファイルのデータが示す文字列のうち、今回圧縮された部分の文字列を先頭部分に含む文字列のコードが、辞書8bに未登録であるか否かを判定する(ステップS411)。未登録である場合(ステップS411肯定)には、圧縮部23aは、圧縮された文字列の圧縮前の文字列を含む文字列であって辞書8bに未登録の文字列のコードと、圧縮符号との組合せを新たに辞書8bに登録する(ステップS412)。一方、未登録でない場合(ステップS411否定)には、圧縮部23aは、デジタルコンテンツのファイルのデータのうち、圧縮処理が未処理のデータがあるか否かを判定する(ステップS416)。圧縮処理が未処理のデータがある場合(ステップS416肯定)には、ステップS410へ戻る。圧縮処理が未処理のデータがない場合(ステップS416否定)には、圧縮部23aは、処理結果を制御部23の内部メモリに格納し、リターンする。
変更部23bは、辞書8bに新たに登録された文字列の文字のうち新規に追加された文字の世代を処理対象の世代として特定し、特定した処理対象の世代のうち、下記のステップS414で未選択の処理対象の世代があるか否かを判定する(ステップS413)。未選択の処理対象の世代がある場合(ステップS413肯定)には、変更部23bは、未選択の処理対象の世代を1つ選択する(ステップS414)。変更部23bは、選択した処理対象の世代の葉および節点の個数が複数か否かを判定する(ステップS415)。複数である場合(ステップS415肯定)には、ステップS405へ戻る。
一方、未選択の処理対象の世代がない場合(ステップS413否定)、複数でない場合(ステップS415否定)には、ステップS416へ進む。
次に、本実施例に係る利用者端末22の処理の流れを説明する。図14は、実施例2に係る伸張処理の手順を示すフローチャートである。図14に示すステップS501〜S509は、先の図9に示すステップS301〜S309と同様であるので説明を省略する。図14に示すように、伸張部24aは、辞書13bを用いて、デジタルコンテンツのファイルの未処理のデータを伸張する(ステップS510)。伸張部24aは、今回伸張された文字列を先頭部分に含む文字列のコードが、辞書13bに未登録であるか否かを判定する(ステップS511)。未登録である場合(ステップS511肯定)には、伸張部24aは、伸張された文字列を含む文字列であって辞書13bに未登録の文字列のコードと、圧縮符号との組合せを新たに辞書13bに登録する(ステップS512)。一方、未登録でない場合(ステップS511否定)には、伸張部24aは、デジタルコンテンツのファイルのデータのうち、伸張処理が未処理のデータがあるか否かを判定する(ステップS516)。伸張処理が未処理のデータがある場合(ステップS516肯定)には、ステップS510へ戻る。伸張処理が未処理のデータがない場合(ステップS516否定)には、伸張部24aは、処理結果を制御部24の内部メモリに格納し、リターンする。
変更部24bは、辞書13bに新たに登録された文字列の文字のうち新規に追加された文字の世代を処理対象の世代として特定し、特定した処理対象の世代のうち、下記のステップS514で未選択の処理対象の世代があるか否かを判定する(ステップS513)。未選択の処理対象の世代がある場合(ステップS513肯定)には、変更部24bは、未選択の処理対象の世代を1つ選択する(ステップS514)。変更部24bは、選択した処理対象の世代の葉および節点の個数が複数か否かを判定する(ステップS515)。複数である場合(ステップS515肯定)には、ステップS505へ戻る。
一方、未選択の処理対象の世代がない場合(ステップS513否定)、複数でない場合(ステップS515否定)には、ステップS516へ進む。
上述してきたように、本実施例に係るサーバ21では、辞書8bの第一世代、および、辞書8bに新たに登録された文字列の文字のうち新規に追加された文字の世代の圧縮符号がスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、初期化時に辞書8bに登録される複数の種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、これらの複数の種類の文字の解読が困難となる。
また、本実施例に係るサーバ21では、辞書8bの圧縮符号をスクランブルするだけで、複雑な暗号化の処理を行わずに、解読が困難な圧縮データが生成される。したがって、本実施例に係るサーバ21によれば、簡易な圧縮処理により難読化を図ることができる。
また、本実施例に係るサーバ21によれば、辞書8bの圧縮符号をスクランブルするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていないので、簡易に圧縮データの難読化を図ることができる。
また、本実施例に係る利用者端末22では、入力されたパスワードが、サーバ21で入力された正規のパスワードと一致しない場合には、上記の所定値が大きくなるほど、算出される剰余Sが、サーバ21で算出される剰余Sと一致する可能性が低くなる。そのため、本実施例に係る利用者端末22では、入力されたパスワードが正規のパスワードでない場合には、上記の所定値が大きくなるほど、辞書13bの登録内容が辞書8bの登録内容と一致する可能性が低くなる。このため、本実施例に係る利用者端末22では、結果として伸張されるデータが正規のものとなる可能性も低くなる。したがって、本実施例に係る利用者端末22によれば、簡易に難読化を図ることができる。
さて、上記の実施例1、2では、パスワードが示す値を所定値で除算した場合の余りの値に応じて、辞書8b、13bに登録された文字のコードと圧縮符号との組合せを変更する場合を例示したが、開示の装置はこれに限定されない。そこで、実施例3では、他の方法で、辞書8b、13bに登録された文字と圧縮符号との組合せを変更する場合について説明する。実施例3では、第一のハッシュ関数を用いてパスワードから所定長の第一の値を生成し、第二のハッシュ関数を用いて第一の値から第二の値を生成する。そして、実施例3では、第二の値に応じて、辞書8b、13bに登録された文字と圧縮符号との組合せを変更する。
[システム30の構成例]
実施例3に係るシステムについて説明する。図15は、実施例3に係るシステムの構成の一例を示す図である。本実施例に係るシステム30は、サーバ31と、利用者端末32とを有する。サーバ31は、実施例1に係る制御部9に代えて制御部33を有する点が、実施例1と異なる。利用者端末32は、実施例1に係る制御部14に代えて制御部34を有する点が、実施例1と異なる。なお、以下では、上記の実施例1、2と同様の機能を果たす各部や各機器については図1、図10と同様の符号を付し、その説明は省略する場合がある。サーバ31は、辞書や電子書籍などのデジタルコンテンツのファイルのデータを圧縮する。サーバ31は、圧縮されたデジタルコンテンツのファイルのデータを、インターネット4を介して利用者端末32に送信する。利用者端末32は、受信したデジタルコンテンツのファイルのデータを伸張する。利用者端末32は、伸張したデジタルコンテンツのファイルを再生する。
サーバ31は、入力部5と、出力部6と、送受信部7と、記憶部8と、制御部33とを有する。
制御部33は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図15に示すように、制御部33は、圧縮部33aと、変更部33bとを有する。
圧縮部33aは、実施例1に係る圧縮部9aと同様の処理を行う。すなわち、圧縮部33aは、後述の変更部33bにより、文字のコードと圧縮符号との組合せが変更された辞書8bを用いて、デジタルコンテンツのファイルのデータを圧縮する。また、圧縮部33aは、圧縮された文字列の圧縮前の文字列を含む文字列であって辞書8bに未登録の文字列と、圧縮符号との組合せを新たに辞書8bに登録する。
変更部33bは、入力部5から入力されたパスワードに基づいて、文字列と圧縮符号との複数の組合せが登録された辞書8bの文字列と圧縮符号との組合せを変更する。具体例を挙げて説明する。まず、変更部33bは、パスワードを取得する。そして、変更部33bは、パスワードをシードとして、SHA(Secure Hash Algorithm)−256などの第一のハッシュ関数を用いて、次の第二のハッシュ関数で用いられる所定長のハッシュ値をシードとして取得する。続いて、変更部33bは、さらに第二のハッシュ関数を用いて、シードからハッシュ値を取得する。このように、第一のハッシュ関数を用いてパスワードからシードを生成するのは、第二のハッシュ関数で用いられるのに十分な所定長のシードを取得するためである。ここで、第二のハッシュ関数の一例としては、疑似乱数を発生させるための関数が挙げられる。以下では、第二のハッシュ関数として、疑似乱数を発生させるための関数を例に挙げて説明する。
その後、変更部33bは、変更前の圧縮符号として16進数で「00」の値と、変更後の圧縮符号としてハッシュ値(疑似乱数)とを対応付けて記憶部8に格納する。図16は、記憶部に記憶された情報の一例を示す図である。図16の例では、変更部33bは、変更前の圧縮符号として16進数で「00」の値と、変更後の圧縮符号としてハッシュ値「03」(16進数)とを対応付けて記憶部8に格納した場合が示されている。
次に、変更部33bは、再び、第二のハッシュ関数を用いて、シードからハッシュ値を取得。そして、変更部33bは、得られたハッシュ値が変更後の圧縮符号として記憶部8に登録されているか否かを判定する。得られたハッシュ値が変更後の圧縮符号として記憶部8に登録されている場合には、変更部33bは、次のような処理を行う。すなわち、変更部33bは、否定判定されるまで、得られたハッシュ値を1つインクリメントし、ハッシュ値が変更後の圧縮符号として記憶部8に登録されているか否かを判定することを繰り返し行う。ハッシュ値が変更後の圧縮符号として記憶部8に登録されていない場合には、変更部33bは、変更前の圧縮符号として16進数で「01」の値と、変更後の圧縮符号としてハッシュ値とを対応付けて記憶部8に格納する。図16の例では、変更部33bは、変更前の圧縮符号として16進数で「01」の値と、変更後の圧縮符号としてハッシュ値「07」(16進数)とを対応付けて記憶部8に格納した場合が示されている。
変更部33bは、このような処理を、初期化の際に、辞書8bに登録された複数の文字の圧縮符号の分だけ繰り返し行う。例えば、初期化の際に辞書8bに16進数で「00」から「FF」までの256種類の文字の圧縮符号が登録された場合には、変更部33bは、「00」から「FF」までの256個の圧縮符号を変更前の圧縮符号として扱う。そして、変更部33bは、それぞれの変更前の圧縮符号に対して、変更後の圧縮符号を生成し、変更前の圧縮符号と、変更後の圧縮符号とを対応付けて記憶部8に格納する。
そして、変更部33bは、初期化した辞書8bに登録された圧縮符号のそれぞれを、対応する変更後の圧縮符号のそれぞれに変更する。例えば、図16の例では、変更部33bは、圧縮符号が「00」の文字の圧縮符号を「03」に変更する。また、図16の例では、変更部33bは、圧縮符号が「01」の文字の圧縮符号を「07」に変更する。このようにして、変更部33bは、入力部5から入力されたパスワードに基づいて、文字列と圧縮符号との複数の組合せが登録された辞書8bの文字列と圧縮符号との組合せを変更する。上述した実施例1、2では、生成した剰余Sの値が1である場合には、文字のコードと圧縮符号との組合せの変更が、隣の組合せ間でしか発生しないことも想定される。しかししながら、本実施例では、パスワードから第二のハッシュ関数に用いられるシードの長さとして十分な所定長のシードを得て、第二のハッシュ関数を用いてシードからハッシュ値を生成している。このため、第二のハッシュ関数により生成されるハッシュ値は、ばらつきが出る。よって、本実施例では、文字のコードと圧縮符号との組合せの変更が、隣の組合せ間でのみ発生する確率が、実施例1、2よりも低くなる。
図17は、実施例3における圧縮符号の変更の一例を説明するための図である。図17の例では、変更部33bは、文字「NUL」の圧縮符号を「00」から「9E」に変更する。また、図17の例では、変更部33bは、文字「SOH」の圧縮符号を「01」から「C5」に変更する。また、図17の例では、変更部33bは、文字「a」の圧縮符号を「61」から「9F」に変更する。また、図17の例では、変更部33bは、文字「b」の圧縮符号を「62」から「39」に変更する。また、図17の例では、変更部33bは、文字「DEL」の圧縮符号を「FF」から「00」に変更する。
このように、本実施例に係るサーバ31では、辞書8bの第一世代の葉および節点の圧縮符号がスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、初期化時に辞書8bに登録される複数の種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、これらの複数の種類の文字の解読が困難となる。この結果、これらの複数の種類の文字を先頭文字に含む文字列の解読についても困難となる。
また、本実施例に係るサーバ31では、辞書8bの圧縮符号をスクランブルするだけで、複雑な暗号化の処理を行わずに、解読が困難な圧縮データが生成される。したがって、本実施例に係るサーバ2によれば、簡易な圧縮処理により難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係るサーバ31によれば、辞書8bの圧縮符号をスクランブルするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていないので、簡易に圧縮データの難読化を図ることができる。
利用者端末32は、入力部10と、出力部11と、送受信部12と、記憶部13と、制御部34とを有する。
制御部34は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図15に示すように、制御部24は、伸張部34aと、変更部34bと、再生部14cとを有する。
伸張部34aは、実施例1に係る伸張部14aと同様の処理を行う。すなわち、伸張部34aは、後述の変更部34bにより、文字のコードと圧縮符号との組合せが変更された辞書13bを用いて、デジタルコンテンツのファイルのデータを伸張する。また、伸張部34aは、伸張された文字を含む文字列であって辞書13bに未登録の文字列と、圧縮符号との組合せを新たに辞書13bに登録する。
変更部34bは、入力部10から入力されたパスワードに基づいて、文字列と圧縮符号との複数の組合せが登録された辞書13bの文字列と圧縮符号との組合せを変更する。具体例を挙げて説明する。まず、変更部34bは、パスワードを取得する。そして、変更部34bは、パスワードをシードとして、SHA−256などの第一のハッシュ関数を用いて、次の第二のハッシュ関数で用いられる所定長のハッシュ値をシードとして取得する。続いて、変更部34bは、さらに第二のハッシュ関数を用いて、シードからハッシュ値を取得する。このように、第一のハッシュ関数を用いてパスワードからシードを生成するのは、第二のハッシュ関数で用いられるのに十分な所定長のシードを取得するためである。
その後、変更部34bは、変更前の圧縮符号として16進数で「00」の値と、変更後の圧縮符号としてハッシュ値とを対応付けて記憶部13に格納する。次に、変更部34bは、再び、第二のハッシュ関数を用いて、シードからハッシュ値を取得する。そして、変更部34bは、得られたハッシュ値が変更後の圧縮符号として記憶部13に記憶されているか否かを判定する。得られたハッシュ値が変更後の圧縮符号として記憶部13に記憶されている場合には、変更部34bは、次のような処理を行う。すなわち、変更部34bは、否定判定されるまで、得られたハッシュ値を1つインクリメントし、ハッシュ値が変更後の圧縮符号として記憶部13に記憶されているか否かを判定することを繰り返し行う。ハッシュ値が変更後の圧縮符号として記憶部13に記憶されていない場合には、変更部34bは、変更前の圧縮符号として16進数で「01」の値と、変更後の圧縮符号としてハッシュ値とを対応付けて記憶部13に格納する。
変更部34bは、このような処理を、初期化の際に、辞書13bに登録された複数の文字の圧縮符号の分だけ繰り返し行う。例えば、初期化の際に辞書13bに16進数で「00」から「FF」までの256種類の文字の圧縮符号が登録された場合には、変更部34bは、「00」から「FF」までの256個の圧縮符号を変更前の圧縮符号として扱う。そして、変更部34bは、それぞれの変更前の圧縮符号に対して、変更後の圧縮符号を生成し、変更前の圧縮符号と、変更後の圧縮符号とを対応付けて記憶部13に格納する。
そして、変更部34bは、初期化した辞書13bに登録された圧縮符号のそれぞれを、対応する変更後の圧縮符号のそれぞれに変更する。
このように、本実施例に係る利用者端末32では、入力されたパスワードが、サーバ31で入力された正規のパスワードと一致しない場合には、双方のパスワードから得られるハッシュ値が一致しない限り、伸張されるデータが正規のものとならない。したがって、本実施例に係る利用者端末32によれば、簡易に難読化を図ることができる。
制御部34は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部34は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
[処理の流れ]
次に、本実施例に係るサーバ31の処理の流れを説明する。図18は、実施例3に係る圧縮処理の手順を示すフローチャートである。この圧縮処理の実行タイミングとしては様々なタイミングが考えられる。例えば、圧縮処理は、入力部5からデジタルコンテンツが入力された場合に実行されるようにしてもよい。なお、本実施例に係るシステム30の処理の流れは、実施例1に係るシステム1のシーケンス図で示す処理の流れと同様であるので、説明を省略する。
図18に示すステップS601〜S603は、先の図8に示すステップS201〜S203と同様であるので説明を省略する。図18に示すように、変更部33bは、変数iの値に「0」を設定する(ステップS604)。変更部33bは、パスワードをシードとして、第一のハッシュ関数を用いて、次の第二のハッシュ関数で用いられる所定長のハッシュ値をシードとして取得する(ステップS605)。変更部33bは、疑似乱数を発生させるための関数を用いて、シードから疑似乱数を発生させる(ステップS606)。変更部33bは、疑似乱数が、「変更後の圧縮符号」として記憶部8に登録されているか否かを判定する(ステップS607)。登録されている場合(ステップS607肯定)には、変更部33bは、擬似乱数の値を1つインクリメントし(ステップS608)、ステップS607へ戻る。
一方、登録されていない場合(ステップS607否定)には、変更部33bは、処理対象の世代の「変更前の圧縮符号」としての変数iと、「変更後の圧縮符号」としての擬似乱数とを対応付けて記憶部8に登録する(ステップS609)。なお、本実施例では、処理対象の世代は、第一世代である。変更部33bは、変数iの値を1つインクリメントする(ステップS610)。変更部33bは、変数iの値が、処理対象の世代の葉および節点の個数Lより大きいか否かを判定する(ステップS611)。変数iの値が、L以下である場合(ステップS611否定)には、ステップS606へ戻る。一方、変数iの値がLより大きい場合(ステップS611肯定)には、変更部33bは、初期化した辞書8bに登録された圧縮符号のそれぞれを、対応する変更後の圧縮符号のそれぞれに変更する(ステップS612)。圧縮部33aは、辞書8bを用いて、デジタルコンテンツのファイルのデータを圧縮しつつ、辞書8bを更新し(ステップS613)、処理結果を制御部33の内部メモリに格納し、リターンする。
次に、本実施例に係る利用者端末32の処理の流れを説明する。図19は、実施例3に係る伸張処理の手順を示すフローチャートである。伸張処理においても、図18において説明した圧縮処理と共通の辞書更新アルゴリズムを用いる。図19に示すステップS701〜S703は、先の図9に示すステップS301〜S303と同様であるので説明を省略する。図19に示すように、変更部34bは、変数iの値に「0」を設定する(ステップS704)。変更部34bは、パスワードをシードとして、第一のハッシュ関数を用いて、次の第二のハッシュ関数で用いられる所定長のハッシュ値をシードとして取得する(ステップS705)。変更部34bは、疑似乱数を発生させるための関数を用いて、シードから疑似乱数を発生させる(ステップS706)。変更部34bは、疑似乱数が、「変更後の圧縮符号」として記憶部8に登録されているか否かを判定する(ステップS707)。登録されている場合(ステップS707肯定)には、変更部34bは、擬似乱数の値を1つインクリメントし(ステップS708)、ステップS707へ戻る。
一方、登録されていない場合(ステップS707否定)には、変更部34bは、処理対象の世代の「変更前の圧縮符号」としての変数iと、「変更後の圧縮符号」としての擬似乱数とを対応付けて記憶部8に登録する(ステップS709)。なお、本実施例では、処理対象の世代は、第一世代である。変更部34bは、変数iの値を1つインクリメントする(ステップS710)。変更部34bは、変数iの値が、処理対象の世代の葉および節点の個数Lより大きいか否かを判定する(ステップS711)。変数iの値が、L以下である場合(ステップS711否定)には、ステップS706へ戻る。一方、変数iの値がLより大きい場合(ステップS711肯定)には、変更部34bは、初期化した辞書8bに登録された圧縮符号のそれぞれを、対応する変更後の圧縮符号のそれぞれに変更する(ステップS712)。伸張部34aは、辞書8bを用いて、デジタルコンテンツのファイルのデータを伸張しつつ、辞書8bを更新し(ステップS713)、処理結果を制御部34の内部メモリに格納し、リターンする。
上述してきたように、本実施例に係るサーバ31では、辞書8bの第一世代の葉および節点の圧縮符号がスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、初期化時に辞書8bに登録される複数の種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、これらの複数の種類の文字の解読が困難となる。この結果、これらの複数の種類の文字を先頭文字に含む文字列の解読についても困難となる。
また、本実施例に係るサーバ31では、辞書8bの圧縮符号をスクランブルするだけで、複雑な暗号化の処理を行わずに、解読が困難な圧縮データが生成される。したがって、本実施例に係るサーバ31によれば、簡易な圧縮処理により難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係るサーバ31によれば、辞書8bの圧縮符号をスクランブルするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていないので、簡易に圧縮データの難読化を図ることができる。
また、本実施例に係る利用者端末32では、入力されたパスワードが、サーバ31で入力された正規のパスワードと一致しない場合には、双方のパスワードから得られるハッシュ値が一致しない限り、伸張されるデータが正規のものとならない。したがって、本実施例に係る利用者端末32によれば、簡易に難読化を図ることができる。
さて、上記の実施例3では、実施例1、2とは異なる他の方法で、第一世代の文字と圧縮符号との組合せを変更する場合を例示したが、開示の装置はこれに限定されない。そこで、実施例4では、実施例3の方法と同様の方法で、第二世代以降の文字と圧縮符号との組合せも変更する場合について説明する。
[システム40の構成例]
実施例4に係るシステムについて説明する。図20は、実施例4に係るシステムの構成の一例を示す図である。本実施例に係るシステム40は、サーバ41と、利用者端末42とを有する。サーバ41は、実施例1に係る制御部9に代えて制御部43を有する点が、実施例1と異なる。利用者端末42は、実施例1に係る制御部14に代えて制御部44を有する点が、実施例1と異なる。なお、以下では、上記の実施例1〜3と同様の機能を果たす各部や各機器については図1、図10、図15と同様の符号を付し、その説明は省略する場合がある。サーバ41は、辞書や電子書籍などのデジタルコンテンツのファイルのデータを圧縮する。サーバ41は、圧縮されたデジタルコンテンツのファイルのデータを、インターネット4を介して利用者端末42に送信する。利用者端末42は、受信したデジタルコンテンツのファイルのデータを伸張する。利用者端末42は、伸張したデジタルコンテンツのファイルを再生する。
サーバ41は、入力部5と、出力部6と、送受信部7と、記憶部8と、制御部43とを有する。
制御部43は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図20に示すように、制御部43は、圧縮部43aと、変更部43bとを有する。
圧縮部43aは、実施例1に係る圧縮部9aと同様の処理を行う。すなわち、圧縮部43aは、後述の変更部43bにより、文字のコードと圧縮符号との組合せが変更された辞書8bを用いて、デジタルコンテンツのファイルのデータを圧縮する。また、圧縮部43aは、圧縮された文字列の圧縮前の文字列を含む文字列であって辞書8bに未登録の文字列と、圧縮符号との組合せを新たに辞書8bに登録する。
変更部43bは、実施例3に係る変更部33bと同様の処理を行う。さらに、変更部43bは、入力部5から入力されたパスワードに基づいて、辞書8bに新たに登録された文字列と圧縮符号との組合せを新たに変更する。具体例を挙げて説明する。
変更部43bは、辞書8bに文字列と圧縮符号との組合せが新たに登録されるたびに、新たに登録された文字列の文字のうち、新規に追加された文字の世代を処理対象の世代として特定する。
そして、変更部43bは、実施例3に係る変更部33bが辞書8bに登録された第一世代の文字列と圧縮符号との組合せを変更する方法と同様の方法で、特定した処理対象の世代の文字列と圧縮符号との組合せを変更する。すなわち、変更部43bは、特定した処理対象の世代の圧縮符号のそれぞれを「変更前の圧縮符号」とし、「変更前の圧縮符号」ごとに第二のハッシュ関数を用いてシードからハッシュ値を生成する。ここで、変更部43bは、生成されるハッシュ値が、特定した世代に応じた値、例えば、特定した世代が第二世代の場合には、16進数で「100」以上となるように、ハッシュ値の範囲を調整する。そして、変更部43bは、「変更前の圧縮符号」のそれぞれと、ハッシュ値のそれぞれとを対応付けて記憶部8に登録する。図21は、実施例4に係るシステムが実行する処理の一例を説明するための図である。図21の例は、辞書8bに未登録の文字列「about」のコードと圧縮符号との組合せが、圧縮部43aにより辞書8bに新たに登録された場合の変更部43bの処理の一例を示す。図21の例では、変更部43bは、文字列「about」の第二世代の文字「b」の圧縮符号を「100」から「161」に変更する。また、図21の例では、変更部43bは、第三世代の文字「o」の圧縮符号を「101」から「1FF」に変更する。また、図21の例では、変更部43bは、第四世代の文字「u」の圧縮符号を「102」から「100」に変更する。また、図21の例では、第五世代の文字「t」の圧縮符号を「103」から「1B2」に変更する。
このように、本実施例に係るサーバ41では、辞書8bの第一世代、および、辞書8bに新規に追加された文字の世代の葉および節点の圧縮符号がスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、初期化時に辞書8bに登録される複数の種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、これらの複数の種類の文字の解読が困難となる。
また、本実施例に係るサーバ41では、辞書8bの圧縮符号をスクランブルするだけで、複雑な暗号化の処理を行わずに、解読が困難な圧縮データが生成される。したがって、本実施例に係るサーバ41によれば、簡易な圧縮処理により難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係るサーバ41によれば、辞書8bの圧縮符号をスクランブルするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていないので、簡易に圧縮データの難読化を図ることができる。
利用者端末42は、入力部10と、出力部11と、送受信部12と、記憶部13と、制御部44とを有する。
制御部44は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図20に示すように、制御部44は、伸張部44aと、変更部44bと、再生部14cとを有する。
伸張部44aは、実施例1に係る伸張部14aと同様の処理を行う。すなわち、伸張部44aは、後述の変更部44bにより、文字のコードと圧縮符号との組合せが変更された辞書13bを用いて、デジタルコンテンツのファイルのデータを伸張する。また、伸張部44aは、伸張された文字を含む文字列であって辞書13bに未登録の文字列と、圧縮符号との組合せを新たに辞書13bに登録する。
変更部44bは、実施例3に係る変更部34bと同様の処理を行う。さらに、変更部44bは、入力部10から入力されたパスワードに基づいて、辞書13bに新たに登録された文字列と圧縮符号との組合せを新たに変更する。具体例を挙げて説明する。
変更部44bは、辞書13bに文字列と圧縮符号との組合せが新たに登録されるたびに、新たに登録された文字列の文字のうち、新規に追加された文字の世代を処理対象の世代として特定する。
そして、変更部44bは、実施例3に係る変更部34bが辞書13bに登録された第一世代の文字列と圧縮符号との組合せを変更する方法と同様の方法で、特定した処理対象の世代の文字列と圧縮符号との組合せを変更する。すなわち、変更部44bは、特定した処理対象の世代の圧縮符号のそれぞれを「変更前の圧縮符号」とし、「変更前の圧縮符号」ごとに第二のハッシュ関数を用いてシードからハッシュ値を生成する。ここで、変更部44bは、生成されるハッシュ値が、特定した世代に応じた値、例えば、特定した世代が第二世代の場合には、16進数で「100」以上となるように、ハッシュ値の範囲を調整する。そして、変更部44bは、「変更前の圧縮符号」のそれぞれと、ハッシュ値のそれぞれとを対応付けて記憶部8に登録する。
このように、本実施例に係る利用者端末42では、入力されたパスワードが、サーバ41で入力された正規のパスワードと一致しない場合には、双方のパスワードから得られるハッシュ値が一致しない限り、伸張されるデータが正規のものとならない。したがって、本実施例に係る利用者端末42によれば、簡易に難読化を図ることができる。
制御部44は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部44は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
[処理の流れ]
次に、本実施例に係るサーバ41の処理の流れを説明する。図22は、実施例4に係る圧縮処理の手順を示すフローチャートである。この圧縮処理の実行タイミングとしては様々なタイミングが考えられる。例えば、圧縮処理は、入力部5からデジタルコンテンツが入力された場合に実行されるようにしてもよい。なお、本実施例に係るシステム40の処理の流れは、実施例1に係るシステム1のシーケンス図で示す処理の流れと同様であるので、説明を省略する。
図22に示すステップS801〜S812は、先の図18に示すステップS601〜S612と同様であるので説明を省略する。図22に示すように、圧縮部43aは、辞書8bを用いて、デジタルコンテンツのファイルのデータを圧縮する(ステップS813)。圧縮部43aは、デジタルコンテンツのファイルのデータが示す文字列のうち、今回圧縮された部分の文字列を先頭部分に含む文字列のコードが、辞書8bに未登録であるか否かを判定する(ステップS814)。未登録である場合(ステップS814肯定)には、圧縮部43aは、圧縮された文字列の圧縮前の文字列を含む文字列であって辞書8bに未登録の文字列のコードと、圧縮符号との組合せを新たに辞書8bに登録する(ステップS815)。
一方、未登録でない場合(ステップS814否定)には、圧縮部43aは、デジタルコンテンツのファイルのデータのうち、圧縮処理が未処理のデータがあるか否かを判定する(ステップS820)。圧縮処理が未処理のデータがある場合(ステップS820肯定)には、ステップS813へ戻る。圧縮処理が未処理のデータがない場合(ステップS820否定)には、圧縮部43aは、処理結果を制御部43の内部メモリに格納し、リターンする。
変更部43bは、辞書8bに新たに登録された文字列の文字のうち新規に追加された文字の世代を処理対象の世代として特定し、特定した処理対象の世代のうち、下記のステップS817で未選択の処理対象の世代があるか否かを判定する(ステップS816)。未選択の処理対象の世代がある場合(ステップS816肯定)には、変更部43bは、未選択の処理対象の世代を1つ選択する(ステップS817)。変更部43bは、選択した処理対象の世代の葉および節点の個数が複数か否かを判定する(ステップS818)。複数である場合(ステップS818肯定)には、変更部43bは、変数iの値を0に設定する(ステップS819)。そして、変更部43bは、再び擬似乱数を発生させ(ステップS806)、疑似乱数が、「変更後の圧縮符号」として記憶部8に登録されているか否かを判定する(ステップS807)。登録されていない場合(ステップS807否定)には、変更部43bは、処理対象の世代の「変更前の圧縮符号」と、「変更後の圧縮符号」としての擬似乱数とを対応付けて記憶部8に登録する(ステップS809)。
一方、未選択の処理対象の世代がない場合(ステップS816否定)、複数でない場合(ステップS818否定)には、ステップS820へ進む。
次に、本実施例に係る利用者端末42の処理の流れを説明する。図23は、実施例4に係る伸張処理の手順を示すフローチャートである。図23に示すステップS901〜S912は、先の図19に示すステップS701〜S712と同様であるので説明を省略する。図23に示すように、伸張部44aは、辞書13bを用いて、デジタルコンテンツのファイルのデータを伸張する(ステップS913)。伸張部44aは、デジタルコンテンツのファイルのデータが示す文字列のうち、今回圧縮された部分の文字列を先頭部分に含む文字列のコードが、辞書13bに未登録であるか否かを判定する(ステップS914)。未登録である場合(ステップS914肯定)には、伸張部44aは、圧縮された文字列の圧縮前の文字列を含む文字列であって辞書13bに未登録の文字列のコードと、圧縮符号との組合せを新たに辞書13bに登録する(ステップS915)。
一方、未登録でない場合(ステップS914否定)には、伸張部44aは、デジタルコンテンツのファイルのデータのうち、圧縮処理が未処理のデータがあるか否かを判定する(ステップS920)。圧縮処理が未処理のデータがある場合(ステップS920肯定)には、ステップS913へ戻る。圧縮処理が未処理のデータがない場合(ステップS920否定)には、伸張部44aは、処理結果を制御部44の内部メモリに格納し、リターンする。
変更部44bは、辞書13bに新たに登録された文字列の文字のうち新規に追加された文字の世代を処理対象の世代として特定し、特定した処理対象の世代のうち、下記のステップS917で未選択の処理対象の世代があるか否かを判定する(ステップS916)。未選択の処理対象の世代がある場合(ステップS916肯定)には、変更部44bは、未選択の処理対象の世代を1つ選択する(ステップS917)。変更部44bは、選択した処理対象の世代の葉および節点の個数が複数か否かを判定する(ステップS918)。複数である場合(ステップS918肯定)には、変更部44bは、変数iの値を0に設定する(ステップS919)。そして、変更部44bは、再び擬似乱数を発生させ(ステップS906)、疑似乱数が、「変更後の圧縮符号」として記憶部13に登録されているか否かを判定する(ステップS907)。登録されていない場合(ステップS907否定)には、変更部44bは、処理対象の世代の「変更前の圧縮符号」と、「変更後の圧縮符号」としての擬似乱数とを対応付けて記憶部13に登録する(ステップS909)。
一方、未選択の処理対象の世代がない場合(ステップS916否定)、複数でない場合(ステップS918否定)には、ステップS920へ進む。
上述してきたように、本実施例に係るサーバ41では、辞書8bの第一世代、および、辞書8bに新たに登録された文字列の文字のうち新規に追加された文字の世代の圧縮符号がスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、初期化時に辞書8bに登録される複数の種類の文字のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、これらの複数の種類の文字の解読が困難となる。
また、本実施例に係るサーバ41では、辞書8bの圧縮符号をスクランブルするだけで、複雑な暗号化の処理を行わずに、解読が困難な圧縮データが生成される。したがって、本実施例に係るサーバ41によれば、簡易な圧縮処理により難読化を図ることができる。
また、本実施例に係るサーバ41によれば、辞書8bの圧縮符号をスクランブルするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていないので、簡易に圧縮データの難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係る利用者端末42では、入力されたパスワードが、サーバ41で入力された正規のパスワードと一致しない場合には、双方のパスワードから得られるハッシュ値が一致しない限り、伸張されるデータが正規のものとならない。したがって、本実施例に係る利用者端末42によれば、簡易に難読化を図ることができる。
さて、上記の実施例1〜4では、データを圧縮する圧縮方式として、LZ78の圧縮方式を採用する場合を例示したが、開示の装置はこれに限定されない。そこで、実施例5では、データを圧縮する圧縮方式として、LZ77の圧縮方式を採用する場合について説明する。
[システム50の構成例]
実施例5に係るシステムについて説明する。図24は、実施例5に係るシステムの構成の一例を示す図である。本実施例に係るシステム50は、サーバ51と、利用者端末52とを有する。サーバ51は、実施例1に係る記憶部8、制御部9に代えて記憶部53、制御部54を有する点が、実施例1と異なる。利用者端末52は、実施例1に係る記憶部13、制御部14に代えて記憶部55、制御部56を有する点が、実施例1と異なる。なお、以下では、上記の実施例1〜4と同様の機能を果たす各部や各機器については図1、図10、図15、図20と同様の符号を付し、その説明は省略する場合がある。サーバ51は、辞書や電子書籍などのデジタルコンテンツのファイルのデータを圧縮する。サーバ51は、圧縮されたデジタルコンテンツのファイルのデータを、インターネット4を介して利用者端末52に送信する。利用者端末52は、受信したデジタルコンテンツのファイルのデータを伸張する。利用者端末52は、伸張したデジタルコンテンツのファイルを再生する。
サーバ51は、入力部5と、出力部6と、送受信部7と、記憶部53と、制御部54とを有する。
記憶部53は、各種情報を記憶する。例えば、記憶部53は、コンテンツDB8a、予約語テーブル53aを記憶する。
予約語テーブル53aには、デジタルコンテンツのデータに含まれ、一般的な文字より出現頻度が高いHTML(Hyper Text Markup Language)のタグ、および出現頻度の高い文字などが登録される。予約語テーブル53aは、後述の圧縮部54bによりデジタルコンテンツのファイルを圧縮する際に用いられる。図25は、予約語テーブルの一例を示す図である。図25の例は、予約語テーブル53aに、N個のタグが登録された場合を示す。図25の例は、予約語テーブル53aの1番目のレコードにHTMLの「</div>」タグが登録された場合を示す。また、図25の例は、予約語テーブル53aの2番目のレコードにHTMLの「</color>」タグが登録された場合を示す。図25の例は、予約語テーブル53aのN番目のレコードにHTMLの「</title>」タグが登録された場合を示す。
記憶部53は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部53は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部54は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図24に示すように、制御部54は、生成部54aと、圧縮部54bとを有する。
生成部54aは、入力部5から入力されたパスワードに応じた文字列を生成する。例えば、生成部54aは、まず、パスワードの各桁の和を算出する。そして、生成部54aは、算出した和を予約語テーブル53aに登録されたタグの数Nで除算した場合の剰余Dを算出する。続いて、生成部54aは、剰余Dの値が示す番号のレコードを起点として、予約語テーブル53aの各レコードに登録されたタグを取得し、取得したタグを連結した文字列を生成する。このようにして、生成部54aは、予約語テーブル53aの登録の順番が変更された予約語を並べた文字列を生成する。
図26Aおよび図26Bは、生成部により生成された文字列の一例を示す図である。図26Aの例は、図25の例において、生成部54aにより値が「1」である剰余Dが算出された場合に、生成部54aが、1番目のレコードを起点として、文字列を生成した場合の一例を示す。すなわち、図26Aの例は、生成部54aが、予約語テーブル53aの1番目、2番目、3番目、・・・、N番目のレコードの各レコードに登録されたタグを取得し、取得したタグを連結した文字列「</div></color>・・・</title>」を生成した場合を示す。また、図26Bの例は、図25の例において、生成部54aにより値が「1」である剰余Dが算出された場合に、生成部54aが、1番目のレコードを起点として、文字列を生成した場合の一例を示す。すなわち、図26Bの例は、生成部54aが、予約語テーブル53aの1番目、N番目、(N−1)番目、・・・、2番目のレコードの各レコードに登録されたタグを取得し、取得したタグを連結した文字列「</div></title>・・・</color>」を生成した場合を示す。
圧縮部54bは、生成部54aにより生成された文字列、および圧縮された文字列の圧縮前の文字列を用いて、文字列を圧縮する。具体例を挙げて説明する。図27は、実施例5に係るシステムの処理を説明するための図である。図27の例では、参照部71および符号化部72を有するスライド窓70の先頭に、さらに、文字列を初期化の際に設定するための設定部73が設けられている。圧縮部54bは、生成部54aにより生成された文字列を、設定部73に設定する。ここで、スライド窓70がデータ上をスライドしても、設定部73に設定された文字列は設定されたままとなる。図27の例では、設定部73に文字列「</div>・・・</color>」が設定された場合が示されている。
圧縮部54bは、符号化部72内の先頭のデータを圧縮する場合に、設定部73および参照部71内の最長一致系列の位置、および最長一致系列の長さを示すポインタを生成する。ここで、圧縮部54bは、符号化部72内の先頭のデータと一致する最長のデータを設定部73および参照部71内から検索する。また、圧縮部54bは、ポインタに含まれる最長一致系列の位置として、参照部71の先頭からのアドレスではなく、設定部73に設定された文字列の先頭からのアドレスを用いる。
このように、本実施例に係るサーバ51によれば、出現頻度の高い文字やタグなどが初期化時に設定部73に設定されるので、圧縮効率が良くなる。また、本実施例に係るサーバ51では、ポインタが示す最長一致系列の位置は、設定部73に設定された文字列の先頭からのアドレスである。そのため、本実施例に係るサーバ51によれば、圧縮されたデータの解読を試みる攻撃者などが、ポインタが示す最長一致系列の位置を参照部71の先頭からのアドレスと把握している場合には、攻撃者による圧縮データの解読の困難性を高めることができる。
また、本実施例に係るサーバ51では、設定部73に文字列を設定し、ポインタが示す最長一致系列の位置を設定部73に設定された文字列の先頭からのアドレスとするという、RSAなどの暗号化処理と比較すると、簡易な処理で圧縮符号がスクランブルされる。このように、本実施例に係るサーバ51は、複雑な暗号化の処理を行わずに、解読が困難な圧縮データを生成する。したがって、本実施例に係るサーバ51によれば、簡易に圧縮データの難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係るサーバ51では、ポインタが示す最長一致系列の位置を設定部73に設定された文字列の先頭からのアドレスとするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていない。そのため、本実施例に係るサーバ51によれば、簡易に圧縮データの難読化を図ることができる。
利用者端末52は、入力部10と、出力部11と、送受信部12と、記憶部55と、制御部56とを有する。
記憶部55は、各種情報を記憶する。例えば、記憶部55は、コンテンツDB8a、予約語テーブル55aを記憶する。
予約語テーブル55aは、上述した予約語テーブル53aと同様のテーブルであるので、説明を省略する。
記憶部55は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部55は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部56は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図24に示すように、制御部56は、生成部56aと、伸張部56bと、再生部14cとを有する。
生成部56aは、上述した生成部54aと同様の処理を行う。すなわち、生成部56aは、入力部10から入力されたパスワードに応じた文字列を生成する。例えば、生成部56aは、まず、パスワードの各桁の和を算出する。そして、生成部56aは、算出した和を予約語テーブル55aに登録されたタグの数Nで除算した場合の剰余Dを算出する。続いて、生成部56aは、剰余Dの値が示す番号のレコードを起点として、予約語テーブル55aの各レコードに登録されたタグを取得し、取得したタグを連結した文字列を生成する。
伸張部56bは、生成部56aにより生成された文字列、および伸張された文字列を用いて、圧縮された文字列を伸張する。具体例を挙げて説明する。伸張部56bは、生成部56aにより生成された文字列を、設定部73に設定する。ここで、スライド窓70がデータ上をスライドしても、設定部73に設定された文字列は設定されたままとなる。
伸張部56bは、符号化部72内のポインタを伸張する場合に、ポインタが示す設定部73に設定された文字列の先頭からのアドレスが示す文字を特定する。そして、伸張部56bは、特定した文字から、ポインタが示す長さ分の文字列を設定部73および参照部71内の文字列から取得し、伸張バッファに格納することで伸張を行う。なお、伸張部56bは、符号化部72内の伸張対象のデータの先頭ビットが「0」である場合には、生データであり、先頭ビットが「1」である場合には、ポインタであると判定できる。そして、伸張部56bは、符号化部72内の伸張対象のデータが生データである場合には、生データを伸張バッファに格納する。また、伸張部56bは、符号化部72内の伸張対象のデータがポインタである場合には、ポインタが示す文字列を設定部73および参照部71内の文字列から取得し、伸張バッファに格納する。
このように、本実施例に係る利用者端末52では、入力されたパスワードが、サーバ51で入力された正規のパスワードと一致しない場合には、双方のパスワードから得られる剰余Dが一致しない限り、伸張されるデータが正規のものとならない。したがって、本実施例に係る利用者端末52によれば、簡易に難読化を図ることができる。
制御部56は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部56は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
[処理の流れ]
次に、本実施例に係るサーバ51の処理の流れを説明する。図28は、実施例5に係る圧縮処理の手順を示すフローチャートである。この圧縮処理の実行タイミングとしては様々なタイミングが考えられる。例えば、圧縮処理は、入力部5からデジタルコンテンツが入力された場合に実行されるようにしてもよい。なお、本実施例に係るシステム50の処理の流れは、実施例1に係るシステム1のシーケンス図で示す処理の流れと同様であるので、説明を省略する。
図28に示すように、圧縮部54bは、デジタルコンテンツのファイルを取得する(ステップS1001)。生成部54aは、入力部5からパスワードが入力されたか否かを判定する(ステップS1002)。パスワードが入力されていない場合(ステップS1002否定)には、生成部54aは、再びステップS1002で、入力部5からパスワードが入力されたか否かを判定する。
一方、パスワードが入力された場合(ステップS1002肯定)には、生成部54aは、算出した和を、登録されたタグの数Nで除算した場合の剰余Dを算出し、次のような処理を行う。すなわち、生成部54aは、剰余Dの値が示す番号のレコードを起点として、予約語テーブル53aの各レコードに登録されたタグを取得し、取得したタグを連結した文字列を生成する(ステップS1003)。これにより、予約語テーブル53aの登録の順番が変更された予約語を並べた文字列が生成される。圧縮部54bは、生成部54aにより生成された文字列を、設定部73に設定する(ステップS1004)。圧縮部54bは、デジタルコンテンツのファイルのデータを圧縮しつつ、スライド窓70をスライドさせて参照部71内のデータを更新することで辞書を更新し(ステップS1005)、処理結果を制御部54の内部メモリに格納し、リターンする。
次に、本実施例に係る利用者端末52の処理の流れを説明する。図29は、実施例5に係る伸張処理の手順を示すフローチャートである。伸張処理においても、図28において説明した圧縮処理と共通の辞書更新アルゴリズムを用いる。図29に示すように、伸張部56bは、デジタルコンテンツの圧縮ファイルを取得する(ステップS1101)。生成部56aは、入力部10からパスワードが入力されたか否かを判定する(ステップS1102)。パスワードが入力されていない場合(ステップS1102否定)には、生成部56aは、再びステップS1102で、入力部10からパスワードが入力されたか否かを判定する。
一方、パスワードが入力された場合(ステップS1102肯定)には、生成部56aは、算出した和を、登録されたタグの数Nで除算した場合の剰余Dを算出し、次のような処理を行う。すなわち、生成部56aは、剰余Dの値が示す番号のレコードを起点として、予約語テーブル55aの各レコードに登録されたタグを取得し、取得したタグを連結した文字列を生成する(ステップS1103)。これにより、予約語テーブル55aの登録の順番が変更された予約語を並べた文字列が生成される。伸張部56bは、生成部56aにより生成された文字列を、設定部73に設定する(ステップS1104)。伸張部56bは、デジタルコンテンツの圧縮ファイルのデータを伸張しつつ、スライド窓70をスライドさせて参照部71内のデータを更新することで辞書を更新し(ステップS1105)、処理結果を制御部56の内部メモリに格納し、リターンする。
上述してきたように、本実施例に係るサーバ51によれば、出現頻度の高い文字やタグなどが初期化時に設定部73に設定されるので、圧縮効率が良くなる。また、本実施例に係るサーバ51では、ポインタが示す最長一致系列の位置は、設定部73に設定された文字列の先頭からのアドレスである。そのため、本実施例に係るサーバ51によれば、圧縮されたデータの解読を試みる攻撃者などが、ポインタが示す最長一致系列の位置を参照部71の先頭からのアドレスと把握している場合には、攻撃者による圧縮データの解読の困難性を高めることができる。
また、本実施例に係るサーバ51では、設定部73に文字列を設定し、ポインタが示す最長一致系列の位置を設定部73に設定された文字列の先頭からのアドレスとするという、RSAなどの暗号化処理と比較すると、簡易な処理で圧縮符号がスクランブルされる。このように、本実施例に係るサーバ51は、複雑な暗号化の処理を行わずに、解読が困難な圧縮データを生成する。したがって、本実施例に係るサーバ51によれば、簡易に圧縮データの難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係るサーバ51では、ポインタが示す最長一致系列の位置を設定部73に設定された文字列の先頭からのアドレスとするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていない。そのため、本実施例に係るサーバ51によれば、簡易に圧縮データの難読化を図ることができる。
また、本実施例に係る利用者端末52では、入力されたパスワードが、サーバ51で入力された正規のパスワードと一致しない場合には、双方のパスワードから得られる剰余Dが一致しない限り、伸張されるデータが正規のものとならない。したがって、本実施例に係る利用者端末52によれば、簡易に難読化を図ることができる。
さて、上記の実施例5では、LZ77の圧縮方式を採用する場合を例示したが、開示の装置はこれに限定されない。そこで、実施例6では、データを圧縮する圧縮方式として、ハフマン符号を採用する場合について説明する。
[システム60の構成例]
実施例6に係るシステムについて説明する。図30は、実施例6に係るシステムの構成の一例を示す図である。本実施例に係るシステム60は、サーバ61と、利用者端末62とを有する。サーバ61は、実施例1に係る記憶部8、制御部9に代えて記憶部63、制御部64を有する点が、実施例1と異なる。利用者端末62は、実施例1に係る記憶部13、制御部14に代えて記憶部65、制御部66を有する点が、実施例1と異なる。なお、以下では、上記の実施例1〜5と同様の機能を果たす各部や各機器については図1、図10、図15、図20、図24と同様の符号を付し、その説明は省略する場合がある。サーバ61は、辞書や電子書籍などのデジタルコンテンツのファイルのデータを圧縮する。サーバ61は、圧縮されたデジタルコンテンツのファイルのデータに、暗号化された後述の頻度データ63aを付加して、インターネット4を介して利用者端末62に送信する。利用者端末62は、受信した頻度データ63aを復号化し、受信したデジタルコンテンツのファイルのデータを伸張する。利用者端末62は、伸張したデジタルコンテンツのファイルを再生する。
サーバ61は、入力部5と、出力部6と、送受信部7と、記憶部63と、制御部64とを有する。
記憶部63は、各種情報を記憶する。例えば、記憶部63は、コンテンツDB8a、頻度データ63a、辞書63bを記憶する。
頻度データ63aは、全文字に対する各文字の出現頻度が登録されたデータである。頻度データ63aは、後述の生成部64aにより生成され、記憶部63に格納される。
辞書63bは、ハフマン木で表される辞書である。辞書63bには、文字のコードと圧縮符号との組合せが後述の圧縮部64bにより登録される。図31Aは、ハフマン木で表される辞書の一例を示す図である。図31Aの例は、文字「e」のコードと、圧縮符号「00」との組合せが辞書に登録された場合を示す。また、図31Aの例は、文字「d」のコードと、圧縮符号「01」との組合せが辞書に登録された場合を示す。また、図31Aの例は、文字「c」のコードと、圧縮符号「100」との組合せが辞書に登録された場合を示す。また、図31Aの例は、文字「b」のコードと、圧縮符号「110」との組合せが辞書に登録された場合を示す。また、図31Aの例は、文字「a」のコードと、圧縮符号「111」との組合せが辞書に登録された場合を示す。
記憶部63は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部63は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部64は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図30に示すように、制御部64は、生成部64aと、圧縮部64bと、変更部64cとを有する。
生成部64aは、入力部5から入力されたデジタルコンテンツのファイル中に含まれる各文字の個数を計数する。そして、生成部64aは、全文字の個数に対する各文字の個数を算出する。続いて、生成部64aは、算出した全文字の個数に対する各文字の個数を示す頻度データ63aをRSAなどの暗号化アルゴリズムを用いて暗号化し、暗号化した頻度データ63を記憶部63に格納する。
圧縮部64bは、頻度データ63aを用いて、ハフマン木で表される辞書63bを生成し、生成した辞書63bを記憶部63に格納する。そして、圧縮部64bは、後述の変更部64cにより文字列と圧縮符号との組合せが変更された辞書63bを用いて、ハフマン符号により、デジタルコンテンツのファイルを圧縮する。そして、圧縮部64bは、圧縮したデジタルコンテンツのファイルをデジタルコンテンツごとにコンテンツDB8aに登録する。また、圧縮部64bは、デジタルコンテンツのファイルの送信要求を受信すると、デジタルコンテンツのファイルをコンテンツDB8aから取得し、記憶部63から頻度データ63aを取得し、取得したファイルに頻度データ63aを付加して送受信部7に送信する。
変更部64cは、辞書63bに登録された複数の圧縮符号について、同一の圧縮符号長の圧縮符号どうしをグループ化する。図31Aの例では、変更部64cは、圧縮符号長が同一の文字「e」と「d」を同じグループとする。また、図31Aの例では、変更部64cは、圧縮符号長が同一の文字「c」と「b」と「a」とを同じグループとする。そして、変更部64cは、入力部5から入力されたパスワードを用いて、実施例1に係る変更部9bが実行する所定の範囲内での圧縮符号の変更方法と同様の方法で、剰余Sを算出するなどして、同一のグループ内で圧縮符号を変更する。そして、変更部64cは、全グループで、圧縮符号を変更する。図31Bは、図31Aの例が示す辞書が変更された場合の一例を示す図である。図31Bの例では、文字「e」の圧縮符号が「00」から「01」に変更された場合が示されている。また、図31Bの例では、文字「d」の圧縮符号が「01」から「00」に変更された場合が示されている。また、図31Bの例では、文字「c」の圧縮符号が「100」から「111」に変更された場合が示されている。また、図31Bの例では、文字「b」の圧縮符号が「110」から「100」に変更された場合が示されている。また、図31Bの例では、文字「a」の圧縮符号が「111」から「110」に変更された場合が示されている。このようにして、変更部64cは、辞書63bに登録された文字のコードと、圧縮符号との組合せを変更する。
上述してきたように、本実施例に係るサーバ61では、辞書63bの圧縮符号がスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、不正行為などによって変更される前のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、複数の種類の文字の解読が困難となる。
また、本実施例に係るサーバ61では、辞書63bの圧縮符号をスクランブルするだけで、複雑な暗号化の処理を行わずに、解読が困難な圧縮データが生成される。したがって、本実施例に係るサーバ61によれば、簡易な圧縮処理により難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係るサーバ61によれば、辞書63bの圧縮符号をスクランブルするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていないので、簡易に圧縮データの難読化を図ることができる。
利用者端末62は、入力部10と、出力部11と、送受信部12と、記憶部65と、制御部66とを有する。
記憶部65は、各種情報を記憶する。例えば、記憶部65は、コンテンツDB8a、頻度データ65a、辞書65bを記憶する。
頻度データ65aは、後述の生成部66aにより、サーバ61から送信された頻度データ63aが復号化されたデータである。頻度データ65aは、生成部66aにより、記憶部65に格納される。
辞書65bは、上述した辞書63bと同様に、ハフマン木で表される辞書である。辞書65bには、文字のコードと圧縮符号との組合せが後述の圧縮部66bにより登録される。
記憶部65は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部65は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部66は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図30に示すように、制御部66は、生成部66aと、伸張部66bと、変更部66cと、再生部14cとを有する。
生成部66aは、サーバ61から送信されたデジタルコンテンツのファイルに付加された頻度データ63aを取得する。生成部66aは、サーバ2での暗号化に用いられた暗号化アルゴリズムを用いて、取得した頻度データ63aを復号化する。そして、生成部66aは、復号化した頻度データ65aを記憶部65に格納する。
伸張部66bは、頻度データ65aを用いて、ハフマン木で表される辞書65bを生成し、生成した辞書65bを記憶部65に格納する。そして、伸張部66bは、後述の変更部66cにより文字列と伸張符号との組合せが変更された辞書65bを用いて、ハフマン符号により、デジタルコンテンツのファイルを伸張する。そして、伸張部66bは、伸張したデジタルコンテンツのファイルをデジタルコンテンツごとにコンテンツDB8aに登録する。
変更部66cは、辞書65bに登録された複数の圧縮符号について、同一の圧縮符号長の圧縮符号どうしをグループ化する。そして、変更部66cは、入力部10から入力されたパスワードを用いて、実施例1に係る変更部9bが実行する所定の範囲内での圧縮符号の変更方法と同様の方法で、剰余Sを算出するなどして、同一のグループ内で圧縮符号を変更する。そして、変更部66cは、全グループで、圧縮符号を変更することで、辞書65bに登録された文字のコードと、圧縮符号との組合せを変更する。
このように、本実施例に係る利用者端末62では、入力されたパスワードが、サーバ61で入力された正規のパスワードと一致しない場合には、双方のパスワードから得られる剰余Sなどが一致しない限り、伸張されるデータが正規のものとならない。したがって、本実施例に係る利用者端末62によれば、簡易に難読化を図ることができる。
制御部66は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を有する。なお、制御部66は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路を有してもよい。
[処理の流れ]
次に、本実施例に係るサーバ61の処理の流れを説明する。図32は、実施例6に係る圧縮処理の手順を示すフローチャートである。この圧縮処理の実行タイミングとしては様々なタイミングが考えられる。例えば、圧縮処理は、入力部5からデジタルコンテンツが入力された場合に実行されるようにしてもよい。なお、本実施例に係るシステム60の処理の流れは、実施例1に係るシステム1のシーケンス図で示す処理の流れと同様であるので、説明を省略する。
図32に示すように、圧縮部64bは、頻度データ63aを用いて、ハフマン木で表される辞書63bを生成し、生成した辞書63bを記憶部63に格納する(ステップS1201)。圧縮部64bは、デジタルコンテンツのファイルを取得する(ステップS1202)。変更部64cは、入力部5からパスワードが入力されたか否かを判定する(ステップS1203)。パスワードが入力されていない場合(ステップS1203否定)には、変更部64cは、再びステップS1203で、入力部5からパスワードが入力されたか否かを判定する。
一方、パスワードが入力された場合(ステップS1203肯定)には、変更部64cは、辞書63bに登録された複数の圧縮符号について、同一の圧縮符号長の圧縮符号どうしをグループ化し、全グループのそれぞれで、圧縮符号を変更する(ステップS1204)。圧縮部64bは、辞書63bを用いて、デジタルコンテンツのファイルのデータを圧縮し(ステップS1205)、処理結果を制御部64の内部メモリに格納し、リターンする。
次に、本実施例に係る利用者端末62の処理の流れを説明する。図33は、実施例6に係る伸張処理の手順を示すフローチャートである。図33に示すように、伸張部66bは、頻度データ65aを用いて、ハフマン木で表される辞書65bを生成し、生成した辞書65bを記憶部65に格納する(ステップS1301)。伸張部66bは、デジタルコンテンツのファイルを取得する(ステップS1302)。変更部66cは、入力部10からパスワードが入力されたか否かを判定する(ステップS1303)。パスワードが入力されていない場合(ステップS1303否定)には、変更部66cは、再びステップS1303で、入力部10からパスワードが入力されたか否かを判定する。
一方、パスワードが入力された場合(ステップS1303肯定)には、変更部66cは、辞書65bに登録された複数の圧縮符号について、同一の圧縮符号長の圧縮符号どうしをグループ化し、全グループのそれぞれで、圧縮符号を変更する(ステップS1304)。伸張部66bは、辞書65bを用いて、デジタルコンテンツのファイルのデータを伸張し(ステップS1305)、処理結果を制御部66の内部メモリに格納し、リターンする。
上述してきたように、本実施例に係るサーバ61では、辞書63bの圧縮符号がスクランブルされて、コードと圧縮符号との組合せが変更される。これにより、圧縮されたデータの解読を試みる攻撃者などは、不正行為などによって変更される前のコードと圧縮符号との組合せを把握していたとしても、かかる組合せが変更されるため、複数の種類の文字の解読が困難となる。
また、本実施例に係るサーバ61では、辞書63bの圧縮符号をスクランブルするだけで、複雑な暗号化の処理を行わずに、解読が困難な圧縮データが生成される。したがって、本実施例に係るサーバ61によれば、簡易な圧縮処理により難読化を図ることができる。また、処理対象データのサイズ増大に応じた処理コストの増大を抑制することができる。
また、本実施例に係るサーバ61によれば、辞書63bの圧縮符号をスクランブルするだけで、データを圧縮するたびに圧縮されたデータおよび生データにスクランブル処理を行っていないので、簡易に圧縮データの難読化を図ることができる。
また、本実施例に係る利用者端末62では、入力されたパスワードが、サーバ61で入力された正規のパスワードと一致しない場合には、双方のパスワードから得られる剰余Sなどが一致しない限り、伸張されるデータが正規のものとならない。したがって、本実施例に係る利用者端末62によれば、簡易に難読化を図ることができる。
さて、これまで開示の装置に関する実施例について説明した。上述したように、各実施例におけるサーバと利用者端末とでは、共通の辞書更新アルゴリズムが用いられる。また、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
たとえば、実施例1〜6において説明した処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、実施例1〜6において説明した処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。例えば、ステップS1201での処理を行う前に、ステップS1202での処理を行うこともできる。また、ステップS1301での処理を行う前に、ステップS1302での処理を行うこともできる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
[圧縮プログラム、伸張プログラム]
また、上記の実施例1〜6で説明した利用者端末の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図34を用いて、上記の実施例で説明したサーバと同様の機能を有する圧縮プログラムを実行するコンピュータの一例を説明する。また、図35を用いて、上記の実施例で説明した利用者端末と同様の機能を有する伸張プログラムを実行するコンピュータの一例を説明する。
図34は、圧縮プログラムを実行するコンピュータを示す図である。図34に示すように、コンピュータ300は、CPU(Central Processing Unit)310、ROM(Read Only Memory)320、HDD(Hard Disk Drive)330、RAM(Random Access Memory)340を有する。また、コンピュータ300は、入力装置350、出力装置360、インターネット4に接続された通信インタフェース370を有する。これら310〜370の各部は、バス380を介して接続される。
入力装置350は、各種の入力デバイスを含み、例えば、キーボードやマウスを含む。入力装置350は、各実施例のサーバが有する入力部5に対応する。
出力装置360は、各種の出力デバイスを含み、例えば、液晶ディスプレイを含む。出力装置360は、各実施例のサーバが有する出力部6に対応する。
通信インタフェース370は、各実施例のサーバが有する送受信部7に対応する。
ROM320には、上記の実施例で示す圧縮部、変更部、生成部と同様の機能を発揮する圧縮プログラム320aが予め記憶される。なお、圧縮プログラム320aについては、適宜分離しても良い。
そして、CPU310が、圧縮プログラム320aをROM320から読み出して実行する。
そして、HDD330には、コンテンツDB、辞書、予約語テーブル、頻度データが設けられる。これらのうち、コンテンツDB、辞書、予約語テーブルのそれぞれは、コンテンツDB8a、辞書8b,63b、予約語テーブル53aのそれぞれに対応する。また、頻度データは、頻度データ63aに対応する。
そして、CPU310は、コンテンツDB、辞書、予約語テーブル、頻度データを読み出してRAM340に格納する。さらに、CPU310は、RAM340に格納されたコンテンツDB、辞書、予約語テーブル、頻度データを用いて、圧縮プログラムを実行する。なお、RAM340に格納される各データは、常に全てのデータがRAM340に格納される必要はなく、処理に必要なデータのみがRAM340に格納されれば良い。
図35は、伸張プログラムを実行するコンピュータを示す図である。図35に示すように、コンピュータ400は、CPU410、ROM420、HDD430、RAM440を有する。また、コンピュータ400は、入力装置450、出力装置460、インターネット4に接続された通信インタフェース470を有する。これら410〜470の各部は、バス380を介して接続される。
入力装置450は、各種の入力デバイスを含み、例えば、キーボードやマウスを含む。入力装置450は、各実施例の利用者端末が有する入力部10に対応する。
出力装置460は、各種の出力デバイスを含み、例えば、液晶ディスプレイを含む。出力装置460は、各実施例の利用者端末が有する出力部11に対応する。
通信インタフェース470は、各実施例のサーバが有する送受信部12に対応する。
ROM420には、上記の実施例で示す生成部、伸張部、変更部と同様の機能を発揮する伸張プログラム420aが予め記憶される。なお、伸張プログラム420aについては、適宜分離しても良い。
そして、CPU410が、伸張プログラム420aをROM420から読み出して実行する。
そして、HDD430には、コンテンツDB、辞書、予約語テーブル、頻度データが設けられる。これらのうち、コンテンツDB、辞書、予約語テーブルのそれぞれは、コンテンツDB13a、辞書13b,65b、予約語テーブル55aのそれぞれに対応する。また、頻度データは、頻度データ65aに対応する。
そして、CPU410は、コンテンツDB、辞書、予約語テーブル、頻度データを読み出してRAM440に格納する。さらに、CPU410は、RAM440に格納されたコンテンツDB、辞書、予約語テーブル、頻度データを用いて、伸張プログラムを実行する。なお、RAM440に格納される各データは、常に全てのデータがRAM440に格納される必要はなく、処理に必要なデータのみがRAM440に格納されれば良い。
なお、上記した圧縮プログラム、伸張プログラムについては、必ずしも最初からROMに記憶させておく必要はない。
例えば、コンピュータに挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」にプログラムを記憶させておく。そして、コンピュータがこれらからプログラムを読み出して実行するようにしてもよい。
さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータに接続される「他のコンピュータ(またはサーバ)」などにプログラムを記憶させておく。そして、コンピュータがこれらからプログラムを読み出して実行するようにしてもよい。