(57)【要約】【課題】  実用に耐え得る暗号強度を確保でき、かつ、部分一致検索が可能である暗号データを生成する暗号化装置および暗号化プログラムを得る。【解決手段】  ブロックデータ生成部６２は、（ａ１）暗号化対象文字列から連続的に１文字ずつ順番に選択し、（ａ２）選択した文字から連続する所定複数文字長の文字列をブロック文字列として暗号化対象文字列から抽出し、（ａ３）抽出したブロック文字列のデータから暗号化ブロック長のブロックデータを生成する。この暗号化ブロック長は、ブロック文字列の最大データ長以上の所定のデータ長である。暗号化処理部６３は、ブロック暗号化方式でブロックデータを暗号化する。暗号データ生成部６４は、暗号化対象文字列から得られる複数のブロック文字列に対応する暗号化されたブロックデータを結合して、暗号化対象文字列に対する暗号データを生成する。【選択図】  図２
2014126621.tif 000002
【特許請求の範囲】
【請求項１】
（ａ１）被検索文字列および検索キーのいずれかである暗号化対象文字列から連続的に１文字ずつ順番に選択し、（ａ２）選択した文字から連続する所定複数文字長の文字列をブロック文字列として前記暗号化対象文字列から抽出し、（ａ３）抽出した前記ブロック文字列のデータから、前記ブロック文字列の最大データ長以上の暗号化ブロック長を有するブロックデータを生成するブロックデータ生成部と、
前記暗号化ブロック長単位で暗号化を行うブロック暗号化方式で、前記ブロックデータ生成部により得られた前記ブロックデータを暗号化する暗号化処理部と、
前記暗号化対象文字列から得られる複数の前記ブロック文字列に対応する暗号化された前記ブロックデータを結合して、前記暗号化対象文字列に対する暗号データを生成する暗号データ生成部と、
を備えることを特徴とする暗号化装置。
【請求項２】
データベースのテーブルおよびそのテーブル内のカラムを暗号化対象として指定する暗号化対象情報を取得し、前記データベースへのレコードの登録時に、そのレコード内で、前記暗号化対象情報により指定されたカラムの文字列を、前記暗号化対象文字列として特定する暗号化対象特定部をさらに備えることを特徴とする請求項１記載の暗号化装置。
【請求項３】
前記暗号化対象特定部は、前記データベースでの検索時に、前記暗号化対象情報に基づいて、前記暗号化対象文字列となる検索キーを特定することを特徴とする請求項２記載の暗号化装置。
【請求項４】
前記データベースでの検索時にヒットしたレコード内で前記暗号化対象情報により指定されたカラムの暗号データを復号する復号部をさらに備え、
前記復号部は、
前記暗号データから、前記暗号化ブロック長の複数の暗号ブロックデータを抽出する暗号ブロックデータ抽出部と、
前記暗号化処理部の暗号化方式に対応する復号方式で前記暗号ブロックデータを復号する復号処理部と、
（ｂ１）前記複数の暗号ブロックデータから前記復号処理部による復号で得られたデータから前記ブロック文字列をそれぞれ抽出し、（ｂ２）抽出した複数の前記ブロック文字列から、前記暗号データに対する平文データを生成する平文データ生成部とを有すること、
を特徴とする請求項３記載の暗号化装置。
【請求項５】
前記暗号化ブロック長は、前記ブロック文字列の最大データ長より長い所定のデータ長であり、
前記ブロックデータ生成部は、前記ブロック文字列のデータにパディングをして前記ブロックデータを生成すること、
を特徴とする請求項１から請求項４のうちのいずれか１項記載の暗号化装置。
【請求項６】
前記ブロック文字列の文字長は、２文字であり、
前記暗号化処理部のブロック暗号化方式は、換字式暗号ではない共通鍵暗号化方式であること、
を特徴とする請求項１から請求項５のうちのいずれか１項記載の暗号化装置。
【請求項７】
コンピュータを、
（ａ１）被検索文字列および検索キーのいずれかである暗号化対象文字列から連続的に１文字ずつ順番に選択し、（ａ２）選択した文字から連続する所定複数文字長の文字列をブロック文字列として前記暗号化対象文字列から抽出し、（ａ３）抽出した前記ブロック文字列のデータから、前記ブロック文字列の最大データ長以上の暗号化ブロック長を有するブロックデータを生成するブロックデータ生成部、
前記暗号化ブロック長単位で暗号化を行うブロック暗号化方式で、前記ブロックデータ生成部により得られた前記ブロックデータを暗号化する暗号化処理部、および
前記暗号化対象文字列から得られる複数の前記ブロック文字列に対応する暗号化された前記ブロックデータを結合して、前記暗号化対象文字列に対する暗号データを生成する暗号データ生成部
として機能させることを特徴とする暗号化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、部分一致検索の可能な暗号システムに関するものである。
【背景技術】
【０００２】
近年のクラウドコンピューティングの普及などによって、ユーザのデータが、サービス提供者のシステム内のデータベースに保存されることが多くなってきている。
【０００３】
そのようなシステムでは、サービス提供者側においてデータベースにアクセスすることでユーザのデータを読み出しデータの内容を取得することができてしまう。そのため、サービス提供者側に悪意者がいると、データベースに保存されているユーザの秘密情報が漏洩してしまう可能性がある。
【０００４】
そこで、ユーザデータを暗号化した上でデータベースに保存する技術が提案されている。暗号化されたユーザデータが保存されているデータベースにおいて、暗号化されたユーザデータを復号することなく検索を行う場合、検索キーを暗号化した上でデータベース検索を行うことで、検索キーと完全に一致するデータを発見する完全一致検索は可能であるが、一般的に、検索キーに一部がヒットするデータを発見する部分一致検索は困難である。
【０００５】
その点を鑑みて、特許文献１に記載のシステムでは、単一換字式暗号（つまり、単一の換字テーブルを使用する換字式暗号）で１文字ずつデータを変換し、変換後のデータを暗号化データとして保存し、検索キーも同一の単一換字式暗号で１文字ずつ変換し、変換後の検索キーで部分一致検索を行っている。
【０００６】
また、特許文献２に記載のシステムでは、暗号化された文書の他に、単一換字式暗号（シーザー暗号）で変換した索引情報をサーバに登録しておき、検索時には、検索キーを同一の単一換字式暗号で変換した上で、索引情報の部分一致検索を行っている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−１０８９１０号公報
【特許文献２】特開２００２−２７８９７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述の技術では、いずれも、単一換字式暗号を使用しており、１文字単位での暗号化になっているため、実用に耐え得る暗号強度を確保できない。また、別の暗号方式で１文字ずつ暗号化をしたとしても、原データのデータ長が１文字長と短いため、暗号を解読されやすい。
【０００９】
本発明は、上記の問題に鑑みてなされたものであり、実用に耐え得る暗号強度を確保でき、かつ、部分一致検索が可能である暗号データを生成する暗号化装置および暗号化プログラムを得ることを目的とする。
【課題を解決するための手段】
【００１０】
上記の課題を解決するために、本発明では以下のようにした。
【００１１】
本発明に係る暗号化装置は、ブロックデータ生成部と、暗号化処理部と、暗号データ生成部とを備える。ブロックデータ生成部は、（ａ１）暗号化対象文字列から連続的に１文字ずつ順番に選択し、（ａ２）選択した文字から連続する所定複数文字長の文字列をブロック文字列として暗号化対象文字列から抽出し、（ａ３）抽出したブロック文字列のデータから暗号化ブロック長のブロックデータを生成する。この暗号化ブロック長は、ブロック文字列の最大データ長以上の所定のデータ長である。暗号化処理部は、暗号化ブロック長単位で暗号化を行うブロック暗号化方式で、ブロックデータ生成部により得られたブロックデータを暗号化する。暗号データ生成部は、暗号化対象文字列から得られる複数のブロック文字列に対応する暗号化されたブロックデータを結合して、暗号化対象文字列に対する暗号データを生成する。
【００１２】
これにより、複数文字長のブロック文字列が含まれるブロックデータが十分な暗号化ブロック長でブロック暗号化されるので、実用に耐え得る暗号強度を確保でき、かつ、部分一致検索が可能である暗号データを生成することができる。
【００１３】
また、本発明に係る暗号化装置は、上記の暗号化装置に加え、次のようにしてもよい。この場合、暗号化装置は、暗号化対象特定部をさらに備える。暗号化対象特定部は、データベースのテーブルおよびそのテーブル内のカラムを暗号化対象として指定する暗号化対象情報を取得し、データベースへのレコードの登録時に、そのレコード内で、暗号化対象情報により指定されたカラムの文字列を、暗号化対象文字列として特定する。
【００１４】
これにより、特定のカラムの文字列だけを、部分一致検索が可能で暗号データとすることができる。
【００１５】
また、本発明に係る暗号化装置は、上記の暗号化装置に加え、次のようにしてもよい。この場合、暗号化対象特定部は、データベースでの検索時に、暗号化対象情報に基づいて、暗号化対象文字列となる検索キーを特定する。
【００１６】
これにより、平文の検索キーを与えても、必要に応じて検索キーが選択的に暗号化され、データベース内の暗号データを復号することなく部分一致検索を行うことができる。
【００１７】
また、本発明に係る暗号化装置は、上記の暗号化装置に加え、次のようにしてもよい。この場合、暗号化装置は、データベースでの検索時にヒットしたレコード内で暗号化対象情報により指定されたカラムの暗号データを復号する復号部をさらに備える。そして、復号部は、暗号ブロックデータ抽出部と、復号処理部と、平文データ生成部とを有する。暗号ブロックデータ抽出部は、暗号データから、暗号化ブロック長の複数の暗号ブロックデータを抽出する。復号処理部は、暗号化処理部の暗号方式に対応する復号方式で暗号ブロックデータを復号する。平文データ生成部は、（ｂ１）複数の暗号ブロックデータから復号処理部による復号で得られたデータからブロック文字列をそれぞれ抽出し、（ｂ２）抽出した複数のブロック文字列から、暗号データに対する平文データを生成する。
【００１８】
これにより、検索でヒットしたレコード内の暗号データを復号した上で、検索結果としてユーザ等に提示することができる。
【００１９】
また、本発明に係る暗号化装置は、上記の暗号化装置に加え、次のようにしてもよい。この場合、暗号化ブロック長は、ブロック文字列の最大データ長より長い所定のデータ長であり、ブロックデータ生成部は、ブロック文字列のデータにパディングをしてブロックデータを生成する。
【００２０】
これにより、暗号化ブロック長が長く暗号強度の高い暗号化方式を採用することができる。
【００２１】
また、本発明に係る暗号化装置は、上記の暗号化装置に加え、次のようにしてもよい。この場合、上述のブロック文字列の文字長は、２文字であり、暗号化処理部のブロック暗号化方式は、換字式暗号ではない共通鍵暗号化方式である。
【００２２】
本発明に係る暗号化プログラムは、コンピュータを、上述のブロックデータ生成部、上述の暗号化処理部、および上述の暗号データ生成部として機能させるものである。
【発明の効果】
【００２３】
本発明によれば、実用に耐え得る暗号強度を確保でき、かつ、部分一致検索が可能である暗号データを生成することができる暗号化装置および暗号化プログラムを得ることができる。
【図面の簡単な説明】
【００２４】
【図１】図１は、本発明の実施の形態に係るシステムの構成を示すブロック図である。
【図２】図２は、図１におけるプロキシ装置の構成例を示すブロック図である。
【図３】図３は、図１におけるプロキシ装置の動作について説明するフローチャートである。
【図４】図４は、図３におけるステップＳ３，Ｓ６の暗号化処理の詳細を説明するフローチャートである。
【図５】図５は、図１におけるデータベースサーバにより管理されるテーブルの一例を示す図である。
【図６】図６は、図３におけるステップＳ３，Ｓ６の暗号化処理により生成される一連のデータを説明する図である。
【図７】図７は、図３におけるステップＳ９の復号処理の詳細を説明するフローチャートである。
【図８】図８は、図３のステップＳ６における検索キーについての暗号化処理により生成される一連のデータを説明する図である。
【発明を実施するための形態】
【００２５】
以下、図に基づいて本発明の実施の形態を説明する。
【００２６】
実施の形態１．
【００２７】
図１は、本発明の実施の形態に係るシステムの構成を示すブロック図である。
【００２８】
図１に示すシステムでは、サーバ装置１が、ゲートウェイ２を介してインターネットなどのネットワーク３に接続しており、アプリケーションサーバ１１を稼動している。なお、サーバ装置１は、コンピュータを内蔵しており、コンピュータでプログラムを実行することで、アプリケーションサーバ１１を稼動している。
【００２９】
アプリケーションサーバ１１は、フロントエンドのサーバであって、ネットワーク３を介して、ＳａａＳ（Software as a Service）方式で各種サービスをユーザに提供するサービス提供部１２と、サービス提供部１２により提供されるサービスにおけるユーザデータを管理するデータ管理部１３とを有する。
【００３０】
このサーバ装置１には、サーバ装置４、およびプロキシ装置５が例えばＬＡＮ（Local Area Network）を介して接続されている。プロキシ装置５は、本発明の暗号化装置の一実施の形態である。また、ユーザの操作するユーザ端末装置６が、ゲートウェイ７を介してネットワーク３に接続されており、アプリケーションサーバ１１は、ユーザ端末装置６からの要求に応じて各種処理を実行する。
【００３１】
データ管理部１３により管理されるユーザデータは、サーバ装置４におけるバックエンドのデータベースサーバ２１に登録され保持される。データベースサーバ２１は、レコードの登録、読み出し、検索などの各種コマンドを受け付け、受け付けたコマンドに対応する処理を実行し、処理結果をそのコマンドの応答として送信する。なお、サーバ装置４は、コンピュータを内蔵しており、コンピュータでプログラムを実行することで、データベースサーバ２１を稼動している。
【００３２】
実施の形態１では、データ管理部１３とデータベースサーバ２１との間で、プロキシ装置５がプロキシとして動作する。
【００３３】
データ管理部１３は、データベースサーバ２１の仕様に適合するコマンドを送信し、プロキシ装置５は、そのコマンドをデータ管理部１３から受信し、コマンド内の暗号化対象部分を暗号化した上で、そのコマンドをデータベースサーバ２１へ送信し、そのコマンドに対する応答をデータベースサーバ２１から受信し、その応答における復号対象部分を復号した上で、その応答をデータ管理部１３へ送信する。
【００３４】
データ管理部１３とデータベースサーバ２１との間で使用されるプロトコル、並びにデータ管理部１３およびデータベースサーバ２１は、プロキシ装置５に拘わらず、既存のものを使用可能である。
【００３５】
そして、プロキシ装置５は、データ管理部１３から登録コマンドを受信すると、その登録コマンドによって登録されるデータに、指定されたテーブルの、指定されたカラムに登録される文字列が含まれる場合、その文字列を、データベースサーバ２１によって部分一致検索が可能な暗号データに置換した上でそのコマンドをデータベースサーバ２１へ送信する。
【００３６】
また、プロキシ装置５は、データ管理部１３から検索コマンドを受信すると、部分一致検索時には、検索キーを暗号化した上で、検索コマンドをデータベースサーバ２１へ送信し、検索結果としてヒットしたレコードをデータベースサーバ２１から受信すると、その検索結果のレコードに含まれる、指定されたテーブルの、指定されたカラムの暗号データを復号し、復号された元の文字列を含む検索結果のレコードをデータ管理部１３へ送信する。
【００３７】
図２は、図１におけるプロキシ装置５の構成例を示すブロック図である。
【００３８】
プロキシ装置５は、コンピュータを内蔵しており、そのコンピュータは、プロセッサであるＣＰＵ（Central Processing Unit）３１、不揮発性メモリであるＲＯＭ（Read Only Memory）３２、主記憶装置であるＲＡＭ（Random Access Memory）３３、ハードディスクドライブ、ＳＳＤ（Solid State Drive）などの補助記憶装置３４、およびネットワークインターフェイスなどといった通信装置３５を有する。
【００３９】
ＲＯＭ３２または補助記憶装置３４に記憶されているプログラムをＲＡＭ３３にロードし、ＣＰＵ３１で実行することで、各種処理部が実現される。この処理部は、ＲＡＭ３３にデータを一時的に記憶しつつ処理を実行する。
【００４０】
実施の形態１では、暗号化プログラム４１に基づいて、通信処理部５１、暗号化部５２および復号部５３が実現される。
【００４１】
通信処理部５１は、通信装置３５を制御してネットワーク通信を、データ管理部１３およびデータベースサーバ２１との間で行う。
【００４２】
暗号化部５２は、暗号化対象を特定し、特定した暗号化対象を暗号化し、暗号化対象を、暗号化後の暗号化対象に置換する。暗号化部５２は、暗号化対象特定部６１、ブロックデータ生成部６２、暗号化処理部６３、および暗号データ生成部６４を有する。
【００４３】
暗号化対象特定部６１は、データベースサーバ２１によるデータベースのテーブルおよびそのテーブル内のカラムを暗号化対象として指定する暗号化対象情報をアプリケーションサーバ１１から取得し、そのデータベースへのレコードの登録時に、そのレコード内で、暗号化対象情報により指定されたカラムの文字列を、暗号化対象文字列として特定する。なお、アプリケーションサーバ１１は、ユーザ端末装置６から指定されたユーザ設定などによって暗号化対象情報を事前に特定している。
【００４４】
また、暗号化対象特定部６１は、そのデータベースでの検索時に、検索コマンドにおける検索キーを暗号化対象文字列として特定する。なお、暗号化対象特定部６１は、検索コマンドによる検索対象が、暗号化対象情報により指定されたカラムである場合、検索キーを暗号化対象文字列とし、そうではない場合には、検索キーを暗号化対象文字列とはしない。
【００４５】
ブロックデータ生成部６２は、（ａ１）暗号化対象文字列の先頭から連続的に１文字ずつ順番に選択し、（ａ２）選択した文字を先頭とする所定複数文字長の文字列をブロック文字列として暗号化対象文字列から抽出し、（ａ３）抽出したブロック文字列のデータから暗号化ブロック長のブロックデータを生成する。
【００４６】
この暗号化ブロック長は、ブロック文字列の最大データ長以上の所定のデータ長である。例えば、ブロック文字列の文字長は、２文字であり、文字が１バイト文字または２バイト文字である場合、ブロック文字列の最大データ長は４バイトとなる。なお、各文字のデータ長は、例えば、使用されている文字コードの種別から特定される。
【００４７】
暗号化処理部６３は、所定の暗号化ブロック長単位で暗号化を行うブロック暗号化方式で、ブロックデータ生成部６２により得られたブロックデータを暗号化する。
【００４８】
暗号データ生成部６４は、暗号化対象文字列から抽出される複数のブロック文字列から得られる複数の暗号ブロックデータを結合して、暗号化対象文字列に対する暗号データを生成する。
【００４９】
この実施の形態１では、暗号化ブロック長は、ブロック文字列の最大データ長より長い所定のデータ長であり、ブロックデータ生成部は、ブロック文字列のデータにパディングをしてブロックデータを生成する。
【００５０】
この実施の形態１では、上述のブロック文字列の文字長は２文字であり、暗号方式としては、鍵長が１２８ビット、１９２ビットおよび２５６ビットのいずれかであり、暗号化ブロック長が１２８ビットであるＡＥＳ（Advanced Encryption Standard）方式が使用される。ただし、ブロック文字列の文字長は、３文字以上としてもよく、暗号化処理部６３の暗号化方式は、換字式暗号ではない別の共通鍵暗号方式（暗号鍵を使用したビット演算による攪拌を行う現代暗号方式）としてもよい。また、暗号化処理部６３の暗号化方式としては、暗号化ブロック長が８ビットの倍数であるものが使用される。また、例えば、暗号化処理部６３の暗号鍵は、ユーザごとに設定され、プロキシ装置５内に保存される。
【００５１】
復号部５３は、復号対象の暗号データを特定し、特定した暗号データを復号し、復号対象の暗号データを、復号後の平文データに置換する。復号部５３は、データベースでの検索時にヒットしたレコード内で暗号化対象情報により指定されたカラムの暗号データを復号する。復号部５３は、復号対象特定部７１、暗号ブロックデータ抽出部７２、復号処理部７３、および平文データ生成部７４を有する。
【００５２】
復号対象特定部７１は、上述の暗号化対象情報に基づいて、そのレコード内で、暗号化対象情報により指定されたカラムの暗号データを、復号対象の暗号データとして特定する。
【００５３】
暗号ブロックデータ抽出部７２は、復号対象特定部７１により特定された暗号データから、暗号化ブロック長の複数の暗号ブロックデータを抽出する。
【００５４】
復号処理部７３は、抽出された暗号ブロックデータを、暗号化処理部６３の暗号化方式に対応する復号方式で復号する。
【００５５】
平文データ生成部７４は、（ｂ１）複数の暗号ブロックデータから復号処理部７３による復号で得られたデータからブロック文字列をそれぞれ抽出し、（ｂ２）抽出した複数のブロック文字列から、暗号データに対する平文データを生成する。
【００５６】
次に、上記プロキシ装置５の動作について説明する。
【００５７】
図３は、図１におけるプロキシ装置５の動作について説明するフローチャートである。
【００５８】
通信処理部５１は、データベースサーバ２１宛てのコマンドをデータ管理部１３から受信すると（ステップＳ１）、そのコマンドが登録コマンドであるか否かを判定する（ステップＳ２）。
【００５９】
そのコマンドが登録コマンドである場合、暗号化部５２は、登録対象のレコードについて暗号化処理を実行し（ステップＳ３）、通信処理部５１は、暗号化処理後の登録コマンドを、データベースサーバ２１へ送信する（ステップＳ４）。データベースサーバ２１は、その登録コマンドに従って、暗号化処理後のレコードをデータベースに登録する。
【００６０】
そのコマンドが登録コマンドではない場合、通信処理部５１は、そのコマンドが検索コマンドであるか否かを判定する（ステップＳ５）。
【００６１】
そのコマンドが検索コマンドである場合、暗号化部５２は、検索キーに対する暗号化処理を実行し（ステップＳ６）、通信処理部５１は、暗号化処理後の検索コマンドを、データベースサーバ２１へ送信する（ステップＳ７）。データベースサーバ２１は、その検索コマンドに従って、暗号化された検索キーで検索を実行し、ヒットしたレコードをデータベースから読み出し、応答データとして送信する。
【００６２】
通信処理部５１は、その検索コマンドに対する応答データをデータベースサーバ２１から受信すると（ステップＳ８）、応答データについての復号処理を実行し（ステップＳ１０）、復号処理後の応答データを、データ管理部１３へ送信する（ステップＳ１０）。
【００６３】
なお、通信処理部５１は、受信したコマンドが暗号化処理および復号処理が必要とされないコマンドである場合には、そのコマンドをそのままデータベースサーバ２１へ送信し、そのコマンドに対する応答をデータベースサーバ２１から受信すると、そのままデータ管理部１３へ転送する（ステップＳ１１）。
【００６４】
ここで、ステップＳ３，Ｓ６での暗号化処理の詳細を説明する。
【００６５】
図４は、図３におけるステップＳ３，Ｓ６の暗号化処理の詳細を説明するフローチャートである。図５は、図１におけるデータベースサーバ２１により管理されるテーブルの一例を示す図である。図６は、図３におけるステップＳ３，Ｓ６の暗号化処理により生成される一連のデータを説明する図である。
【００６６】
ステップＳ３，Ｓ６の暗号化処理では、まず、暗号化対象特定部６１が、受信したコマンドにおいて暗号化対象（登録コマンドにおける特定のテーブルの特定のカラム、検索コマンドにおける特定のレコードの特定のカラムについての検索キーなど）が存在するか否かを判定する（ステップＳ２１）。受信したコマンドにおいて暗号化対象が存在しない場合、この暗号化処理はスキップされる。
【００６７】
例えば、図５に示すアドレス帳テーブルの住所カラムが暗号化の対象に指定されている場合において、アドレス帳テーブルに対してレコードを登録する登録コマンド、およびアドレス帳テーブルの住所カラムについての検索コマンドが受信されると、受信したコマンドにおいて暗号化対象（レコード内の住所カラムの文字列、および検索キー）が存在すると判定される。
【００６８】
受信したコマンドにおいて暗号化対象が存在する場合、ブロックデータ生成部６２は、まず、暗号化対象の文字列の先頭文字を、ブロック端文字に設定する（ステップＳ２２）。
【００６９】
例えば、図６に示す「東京都新宿区」という文字列１０１が暗号化対象である場合、先頭の「東」という文字が、１番目のブロック端文字１０２−１に設定される。
【００７０】
次に、ブロックデータ生成部６２は、ブロック端文字から始まる２文字をブロック文字列として抽出する（ステップＳ２３）。
【００７１】
例えば、図６に示すように、ブロック端文字１０２−１については、文字列１０１から、「東京」というブロック文字列１０３−１が抽出される。
【００７２】
そして、ブロックデータ生成部６２は、抽出したブロック文字列の文字列データから、暗号化ブロック長のブロックデータを生成する（ステップＳ２４）。
【００７３】
例えば、抽出した２文字がそれぞれ２バイト文字である場合、抽出した２文字の文字列データのデータ長は４バイトである。暗号化ブロック長が１２８ビット（＝１６バイト）である場合には、ブロックデータ生成部６２は、図６に示すように、４バイトの文字列データに１２バイトのパディングデータを結合して、１６バイトのブロックデータ１０４−１を生成する。なお、パディングデータは、抽出した２文字に応じた所定のデータである。
【００７４】
ブロックデータが生成されると、暗号化処理部６３は、その暗号化ブロック長のブロックデータを暗号化し、暗号化ブロック長の暗号ブロックデータを生成する（ステップＳ２５）。
【００７５】
これにより、例えば図６に示すように、文字列１０１内の１つの文字１０２−１に対して、その文字１０２−１のブロック文字列１０３−１に対応する１つの暗号ブロックデータ１０５−１が生成される。
【００７６】
暗号ブロックデータが生成されると、ブロックデータ生成部６２は、現在設定されているブロック端文字が、暗号化対象の文字列の最後から２番目の文字であるか否かを判定する（ステップＳ２６）。つまり、現時点のブロック端文字が、（暗号化対象の文字列の文字長−ブロック文字列の文字長＋１）番目の文字であるか否かが判定される。
【００７７】
現在設定されているブロック端文字が、暗号化対象の文字列の最後から２番目の文字ではない場合、ブロックデータ生成部６２は、現在設定されているブロック端文字の次の文字を、ブロック端文字に設定する（ステップＳ２７）。新たにブロック端文字が設定されると、そのブロック端文字についてステップＳ２３以降の処理が実行される。
【００７８】
例えば図６に示す「東京都新宿区」という文字列１０１において、先頭の「東」という文字が現時点のブロック端文字である場合、「京」という文字が新たにブロック端文字１０２−２に設定され、そのブロック端文字１０２−２に対応して、ブロック文字列１０３−２が抽出され、ブロックデータ１０４−２が生成され、暗号化ブロックデータ１０５−２が生成される。
【００７９】
同様に、「都」、「新」、および「宿」というブロック端文字１０２−３〜１０２−５が順番に設定され、それらのブロック端文字１０２−３〜１０２−５に対応して、それぞれ、ブロック文字列１０３−３〜１０３−５が抽出され、ブロックデータ１０４−３〜１０４−５が生成され、暗号化ブロックデータ１０５−３〜１０５−５が生成される。
【００８０】
そして、ステップＳ２６において、現在設定されているブロック端文字が、暗号化対象の文字列の最後から２番目の文字である場合、暗号データ生成部６４は、暗号化対象の文字列について生成したすべての暗号ブロックデータを結合して、暗号化対象に対する暗号データを生成し（ステップＳ２８）、コマンド内の暗号化対象をその暗号データに置き換える（ステップＳ２９）。
【００８１】
例えば、図６に示す「東京都新宿区」という文字列１０１が暗号化対象である場合、５つのブロック文字列１０３−１〜１０３−５に対応する暗号ブロックデータ１０５−１〜１０５−５が、文字１０２−１〜１０２−５の順番に対応する順番で結合され、暗号データ１０６が生成される。
【００８２】
このようにして、暗号化処理が行われる。
【００８３】
次に、ステップＳ９での復号処理の詳細を説明する。
【００８４】
図７は、図３におけるステップＳ９の復号処理の詳細を説明するフローチャートである。
【００８５】
ステップＳ９の復号処理では、まず、復号対象特定部７１が、受信された応答データにおいて復号対象（登録コマンドにおける特定のテーブルの特定のカラム）が存在するか否かを判定する（ステップＳ４１）。受信したコマンドにおいて復号対象が存在しない場合、この復号処理はスキップされる。
【００８６】
受信した応答データにおいて復号対象が存在する場合、暗号ブロックデータ抽出部７２は、まず、復号対象の暗号データ内の先頭の暗号ブロックデータを抽出する（ステップＳ４２）。例えば、図６に示す暗号データ１０６の場合、１番目の暗号ブロックデータ１０５−１が抽出される。
【００８７】
暗号ブロックデータが抽出されると、復号処理部７３は、暗号ブロックデータを復号し、暗号化ブロック長のブロックデータを生成する（ステップＳ４３）。
【００８８】
平文データ生成部７４は、そのブロックデータに含まれる上述の２文字のブロック文字列を抽出する（ステップＳ４４）。
【００８９】
例えば、図６に示す例では、復号によって暗号ブロックデータ１０５−１からブロックデータ１０４−１が生成され、ブロックデータ１０４−１の先頭の４バイトから２文字のブロック文字列１０３−１（「東京」）が抽出される。
【００９０】
このように、１つの暗号ブロックデータに対応する平文のブロック文字列が特定されると、暗号ブロックデータ抽出部７２は、現時点の暗号ブロックデータが、復号対象の暗号データ内の最後の暗号ブロックデータであるか否かを判定する（ステップＳ４５）。
【００９１】
現時点の暗号ブロックデータが、復号対象の暗号データ内の最後の暗号ブロックデータではない場合、暗号ブロックデータ抽出部７２は、現時点の暗号ブロックデータの次の暗号ブロックデータを復号対象から抽出する（ステップＳ４６）。新たに暗号ブロックデータが抽出されると、その暗号ブロックデータについてステップＳ４３以降の処理が実行される。
【００９２】
そして、復号対象の暗号データ内のすべての暗号ブロックデータに対応するブロック文字列が特定されると、平文データ生成部７４は、先頭の暗号ブロックデータから、最後から２番目の暗号ブロックデータまでについてのブロック文字列の先頭文字を結合し、さらに、最後の暗号ブロックデータについてのブロック文字列を結合して、復号対象の元の文字列を生成し（ステップＳ４７）、応答データ内の復号対象をその文字列に置き換える（ステップＳ４８）。
【００９３】
例えば、図６に示す暗号データ１０６からは、５つの暗号ブロックデータ１０５−１〜１０５−５が抽出され、５つのブロック文字列１０３−１〜１０３−５（「東京」、「京都」、「都新」、「新宿」、および「宿区」）から、元の文字列１０１（「東京都新宿区」）が生成される。
【００９４】
このようにして、復号処理が行われる。
【００９５】
ここで、部分一致検索の具体的な例について説明する。
【００９６】
ここでは、図６に示す「東京都新宿区」という文字列１０１に対応する暗号データ１０６がデータベースに登録されており、「新宿区」という検索キーで検索を行う場合について説明する。
【００９７】
図８は、図３のステップＳ６における検索キーについての暗号化処理により生成される一連のデータを説明する図である。
【００９８】
検索コマンドにおいて「新宿区」という検索キー２０１が設定されている場合、図８に示すように、「新」というブロック端文字２０２−１について、「新宿」というブロック文字列２０３−１が検索キー２０１から抽出され、そのブロック文字列２０３−１に対応するブロックデータ２０４−１が生成され、ブロックデータ２０４−１が暗号化されて暗号ブロックデータ２０５−１が生成される。
【００９９】
同様に、「宿」というブロック端文字２０２−２について、「宿区」というブロック文字列２０３−２が検索キー２０１から抽出され、そのブロック文字列２０３−２に対応するブロックデータ２０４−２が生成され、ブロックデータ２０４−２が暗号化されて暗号ブロックデータ２０５−２が生成される。
【０１００】
そして、暗号ブロックデータ２０５−１，２０５−２が結合され、検索キー２０１に対応する暗号データ２０６が生成され、検索キー２０１が、暗号データ２０６に置き換えられる。
【０１０１】
したがって、データベースサーバ２１は、暗号データ２０６を検索キーとして検索を行う。
【０１０２】
図６に示すように、暗号データ１０６には、「新宿」というブロック文字列１０３−４の暗号ブロックデータ１０５−４と「宿区」というブロック文字列１０３−５の暗号ブロックデータ１０５−５とが連続した状態で含まれているため、データベースサーバ２１において暗号データ２０６を検索キーとして検索を行うと、暗号データ１０６を含むレコードがヒットする。
【０１０３】
このように、検索コマンド中の検索キーを上述のように同一の方法で暗号化することで、部分一致検索が行える。
【０１０４】
以上のように、上記実施の形態１によれば、ブロックデータ生成部６２は、（ａ１）暗号化対象文字列から連続的に１文字ずつ順番にブロック端文字を選択し、（ａ２）選択したブロック端文字から連続する所定複数文字長のブロック文字列を暗号化対象文字列から抽出し、（ａ３）抽出したブロック文字列のデータから暗号化ブロック長のブロックデータを生成する。この暗号化ブロック長は、ブロック文字列の最大データ長以上の所定のデータ長である。暗号化処理部６３は、暗号化ブロック長単位で暗号化を行うブロック暗号化方式で、ブロックデータ生成部６２により得られたブロックデータを暗号化する。暗号データ生成部６４は、暗号化対象文字列から得られる複数のブロック文字列に対応する暗号化されたブロックデータを結合して、暗号化対象文字列に対する暗号データを生成する。
【０１０５】
これにより、複数文字長のブロック文字列が含まれるブロックデータが十分な暗号化ブロック長でブロック暗号化されるので、実用に耐え得る暗号強度を確保でき、かつ、部分一致検索が可能である暗号データを生成し、データベースサーバ２１によるデータベースにおいて使用することができる。
【０１０６】
実施の形態２．
【０１０７】
本発明の実施の形態２に係るシステムは、ゲートウェイ２に、プロキシ装置５の機能を持たせ、バックエンド側のプロキシ装置５を省略したものである。つまり、このシステムでは、ゲートウェイ２が、本発明の暗号化装置の一実施の形態である。
【０１０８】
したがって、実施の形態２では、ゲートウェイ２を通過する登録コマンド、検索コマンド、およびその応答データが、実施の形態１と同様に処理される。なお、実施の形態２では、データ管理部１３は、データベースサーバ２１に直接アクセスする。
【０１０９】
実施の形態３．
【０１１０】
本発明の実施の形態３に係るシステムは、ユーザ側のゲートウェイ７またはユーザ端末装置６に、プロキシ装置５の機能を持たせ、バックエンド側のプロキシ装置５を省略したものである。つまり、このシステムでは、ゲートウェイ７またはユーザ端末装置６が、本発明の暗号化装置の一実施の形態である。
【０１１１】
したがって、実施の形態３では、ゲートウェイ７を通過する登録コマンド、検索コマンド、およびその応答データが、実施の形態１と同様に処理されるか、ユーザ端末装置６から登録コマンド、検索コマンド、およびその応答データが送信される際に、その登録コマンド、検索コマンド、およびその応答データが、実施の形態１と同様に処理される。なお、実施の形態３では、データ管理部１３は、データベースサーバ２１に直接アクセスする。
【０１１２】
なお、上述の各実施の形態は、本発明の好適な例であるが、本発明は、これらに限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々の変形、変更が可能である。
【０１１３】
例えば、上記実施の形態１〜３において、ブロックデータ生成部６２は、パディングする代わりに、可逆的な変換式によって、文字列データからブロックデータを生成するようにしてもよい。その場合、平文データ生成部７４は、その変換式の逆演算を行って、ブロックデータから文字列を抽出する。
【０１１４】
また、上記実施の形態１〜３において、ブロックデータ生成部６２は、パディングを、文字列の前または文字と文字の間に入れるようにしてもよい。
【０１１５】
また、上記実施の形態１〜３において、暗号化対象の文字列のうち、２文字（＝ブロック文字列の文字長）以上の長さの文字列のみを、上述のようにして暗号化するようにしてもよい。ただし、その場合、暗号化対象が２文字（＝ブロック文字列の文字長）の文字列である場合、完全一致検索となるので、実質的には、暗号化対象が３文字以上の文字列である場合について部分一致検索が可能となる。
【０１１６】
また、上記実施の形態１〜３において、暗号化対象内の文字は、１バイト文字または２バイト文字であるが、３バイト文字や４バイト文字を使用可能としてもよい。その場合、使用可能な文字コードが予め決められるので、その文字コードに応じて、１文字のデータ長、ひいては、ブロック文字列の最大データ長を特定すればよい。
【０１１７】
また、上記実施の形態１〜３において、ブロック端文字が、暗号化対象文字列の先頭から（暗号化対象文字列の文字長−ブロック文字列の文字長＋１）番目の文字まで、順番に選択されているが、その代わりに、ブロック端文字を、暗号化対象文字列の「ブロック文字列の文字長」番目の文字から最後の文字まで順番に選択し、ブロック端文字から、暗号化対象文字列の先頭方向へ連続する「ブロック文字列の文字長」の文字列を、ブロック文字列としてもよい。
【０１１８】
この場合、例えば、図６に示す「東京都新宿区」という文字列１０１については、ブロック文字列の文字長が２文字とすると、ブロック端文字として、「京」、「都」、「新」、「宿」、および「区」が順番に選択され、それらに対応する「東京」、「京都」、「都新」、「新宿」、および「宿区」がブロック文字列として抽出される。つまり、上記実施の形態１〜３では、ブロック端文字は、ブロック文字列の先端の文字であるが、このように、ブロック端文字は、ブロック文字列の終端の文字でもよい。
【０１１９】
また、上記実施の形態１〜３において、ブロック端文字が、暗号化対象文字列の先頭から（暗号化対象文字列の文字長−ブロック文字列の文字長＋１）番目の文字まで、順番に選択されているが、その代わりに、ブロック端文字を、暗号化対象文字列の最後の文字から「ブロック文字列の文字長」番目の文字まで、逆順に選択し、ブロック端文字から、暗号化対象文字列の先頭方向へ連続する「ブロック文字列の文字長」の文字列を、ブロック文字列としてもよい。
【０１２０】
この場合、例えば、図６に示す「東京都新宿区」という文字列１０１については、ブロック文字列の文字長が２文字とすると、ブロック端文字として、「区」、「宿」、「新」、「都」、および「京」が選択され、それらに対応する「宿区」、「新宿」、「都新」、「京都」、および「東京」がブロック文字列として抽出される。この場合、ブロック端文字は、ブロック文字列の終端の文字となっている。また、ブロック文字列内の文字の順序を、「区宿」、「宿新」、「新都」、「都京」、および「京東」と逆にしてもよい（この場合、ブロック端文字は、ブロック文字列の先端の文字となる）。
【０１２１】
また、上記実施の形態１〜３において、ブロック端文字が、暗号化対象文字列の先頭から（暗号化対象文字列の文字長−ブロック文字列の文字長＋１）番目の文字まで、順番に選択されているが、その代わりに、ブロック端文字を、暗号化対象文字列の（暗号化対象文字列の文字長−ブロック文字列の文字長＋１）番目の文字から先頭文字まで、逆順に選択し、ブロック端文字から、暗号化対象文字列の終端方向へ連続する「ブロック文字列の文字長」の文字列を、ブロック文字列としてもよい。
【０１２２】
この場合、例えば、図６に示す「東京都新宿区」という文字列１０１については、ブロック文字列の文字長が２文字とすると、ブロック端文字として、「宿」、「新」、「都」、「京」、および「東」が選択され、それらに対応する「宿区」、「新宿」、「都新」、「京都」、および「東京」がブロック文字列として抽出される。この場合、ブロック端文字は、ブロック文字列の先端の文字となっている。また、ブロック文字列内の文字の順序を、「区宿」、「宿新」、「新都」、「都京」、および「京東」と逆にしてもよい（この場合、ブロック端文字は、ブロック文字列の終端の文字となる）。
【０１２３】
また、上記実施の形態１〜３において、暗号化プログラム４１を可搬性のある記録媒体に記録し、その記録媒体から暗号化プログラム４１がプロキシ装置５、ゲートウェイ２、ゲートウェイ７、ユーザ端末装置６などへインストールされるようにしてもよいし、暗号化プログラム４１がネットワーク３上のサーバからダウンロードされてプロキシ装置５、ゲートウェイ２、ゲートウェイ７、ユーザ端末装置６などへインストールされるようにしてもよい。
【産業上の利用可能性】
【０１２４】
本発明は、例えば、クラウドコンピューティングにおけるユーザデータの暗号化に適用可能である。
【符号の説明】
【０１２５】
２，７  ゲートウェイ（暗号化装置の一例）
５  プロキシ装置（暗号化装置の一例）
６  ユーザ端末装置（暗号化装置の一例）
４１  暗号化プログラム
５３  復号部
６１  暗号化対象特定部
６２  ブロックデータ生成部
６３  暗号化処理部
６４  暗号データ生成部
７２  暗号ブロックデータ抽出部
７３  復号処理部
７４  平文データ生成部
１０３−１〜１０３−５  ブロック文字列
１０４−１〜１０４−５  ブロックデータ
１０６  暗号データ
２０１  検索キー
【図１】
2014126621.tif 000003
【図２】
2014126621.tif 000004
【図３】
2014126621.tif 000005
【図４】
2014126621.tif 000006
【図５】
2014126621.tif 000007
【図６】
2014126621.tif 000008
【図７】
2014126621.tif 000009
【図８】
2014126621.tif 000010
【手続補正書】
【提出日】平成25年3月12日(2013.3.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
（ａ１）同一の方法で暗号化データが生成される被検索文字列および検索キーのいずれかである暗号化対象文字列から連続的に１文字ずつ順番に選択し、（ａ２）選択した文字から連続する所定複数文字長の文字列をブロック文字列として前記暗号化対象文字列から抽出し、（ａ３）抽出した前記ブロック文字列のデータから、前記ブロック文字列の最大データ長以上の暗号化ブロック長を有するブロックデータを生成するブロックデータ生成部と、
前記暗号化ブロック長単位で暗号化を行うブロック暗号化方式で、前記ブロックデータ生成部により得られた前記ブロックデータを暗号化する暗号化処理部と、
前記暗号化対象文字列から得られる複数の前記ブロック文字列に対応する暗号化された前記ブロックデータを結合して、前記暗号化対象文字列に対する暗号データを生成する暗号データ生成部と、
を備えることを特徴とする暗号化装置。
【請求項２】
データベースのテーブルおよびそのテーブル内のカラムを暗号化対象として指定する暗号化対象情報を取得し、前記データベースへのレコードの登録時に、そのレコード内で、前記暗号化対象情報により指定されたカラムの文字列を、前記暗号化対象文字列として特定する暗号化対象特定部をさらに備えることを特徴とする請求項１記載の暗号化装置。
【請求項３】
前記暗号化対象特定部は、前記データベースでの検索時に、前記暗号化対象情報に基づいて、前記暗号化対象文字列となる検索キーを特定することを特徴とする請求項２記載の暗号化装置。
【請求項４】
前記データベースでの検索時にヒットしたレコード内で前記暗号化対象情報により指定されたカラムの暗号データを復号する復号部をさらに備え、
前記復号部は、
前記暗号データから、前記暗号化ブロック長の複数の暗号ブロックデータを抽出する暗号ブロックデータ抽出部と、
前記暗号化処理部の暗号化方式に対応する復号方式で前記暗号ブロックデータを復号する復号処理部と、
（ｂ１）前記複数の暗号ブロックデータから前記復号処理部による復号で得られたデータから前記ブロック文字列をそれぞれ抽出し、（ｂ２）抽出した複数の前記ブロック文字列から、前記暗号データに対する平文データを生成する平文データ生成部とを有すること、
を特徴とする請求項３記載の暗号化装置。
【請求項５】
前記暗号化ブロック長は、前記ブロック文字列の最大データ長より長い所定のデータ長であり、
前記ブロックデータ生成部は、前記ブロック文字列のデータにパディングをして前記ブロックデータを生成すること、
を特徴とする請求項１から請求項４のうちのいずれか１項記載の暗号化装置。
【請求項６】
前記ブロック文字列の文字長は、２文字であり、
前記暗号化処理部のブロック暗号化方式は、換字式暗号ではない共通鍵暗号化方式であること、
を特徴とする請求項１から請求項５のうちのいずれか１項記載の暗号化装置。
【請求項７】
コンピュータを、
（ａ１）同一の方法で暗号化データが生成される被検索文字列および検索キーのいずれかである暗号化対象文字列から連続的に１文字ずつ順番に選択し、（ａ２）選択した文字から連続する所定複数文字長の文字列をブロック文字列として前記暗号化対象文字列から抽出し、（ａ３）抽出した前記ブロック文字列のデータから、前記ブロック文字列の最大データ長以上の暗号化ブロック長を有するブロックデータを生成するブロックデータ生成部、
前記暗号化ブロック長単位で暗号化を行うブロック暗号化方式で、前記ブロックデータ生成部により得られた前記ブロックデータを暗号化する暗号化処理部、および
前記暗号化対象文字列から得られる複数の前記ブロック文字列に対応する暗号化された前記ブロックデータを結合して、前記暗号化対象文字列に対する暗号データを生成する暗号データ生成部
として機能させることを特徴とする暗号化プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
本発明に係る暗号化装置は、ブロックデータ生成部と、暗号化処理部と、暗号データ生成部とを備える。ブロックデータ生成部は、（ａ１）同一の方法で暗号化データが生成される被検索文字列および検索キーのいずれかである暗号化対象文字列から連続的に１文字ずつ順番に選択し、（ａ２）選択した文字から連続する所定複数文字長の文字列をブロック文字列として暗号化対象文字列から抽出し、（ａ３）抽出したブロック文字列のデータから暗号化ブロック長のブロックデータを生成する。この暗号化ブロック長は、ブロック文字列の最大データ長以上の所定のデータ長である。暗号化処理部は、暗号化ブロック長単位で暗号化を行うブロック暗号化方式で、ブロックデータ生成部により得られたブロックデータを暗号化する。暗号データ生成部は、暗号化対象文字列から得られる複数のブロック文字列に対応する暗号化されたブロックデータを結合して、暗号化対象文字列に対する暗号データを生成する。