(57)【要約】【課題】文字単位で暗号処理を行う場合に、文字コード体系に含まれる文字コードの個数にかかわらず、文字コードのみから構成される暗号データを生成する。【解決手段】変換テーブル記憶手段１ａは、それぞれ２のべき乗個の情報を格納する１以上の領域に分割され、文字コードと各領域で個々の文字コードを識別する最小ビット長のインデックス値とを対応付ける変換テーブルを記憶する。平文変換手段１ｂは、平文３が入力されると、変換テーブルに基づいて、平文３を構成するそれぞれの文字コードをインデックス値に変換する。暗号化手段１ｃは、ビット長を変えずに、インデックス値を暗号値に暗号化する。暗号文出力手段１ｄは、変換テーブルに基づいて、暗号値を文字コードに変換し、文字コードの列を暗号文４として出力する。【選択図】図１
2008152059.tif 000002
【特許請求の範囲】
【請求項１】
文字単位で暗号処理を行う暗号処理プログラムにおいて、
コンピュータを、
それぞれ２のべき乗個の文字に関する情報を格納する１以上の領域に分割されており、所定の文字コード体系に含まれる文字コードと、前記領域に格納された前記文字コードを前記領域内で個々に識別するために必要な最小のビット長のインデックス値とを対応付ける変換テーブルを記憶する変換テーブル記憶手段、
前記所定の文字コード体系で符号化された平文が入力されると、前記変換テーブル記憶手段に記憶された前記変換テーブルを参照して、前記平文を構成するそれぞれの前記文字コードを対応する前記インデックス値に変換する平文変換手段、
前記平文変換手段によって得られた前記インデックス値を順次取得し、ビット長を変えずに、前記インデックス値を暗号値に暗号化する暗号化手段、
前記暗号化手段によって得られた前記暗号値を順次取得し、前記変換テーブル内の前記平文変換手段が変換時に参照した前記領域を参照して、前記暗号値を前記暗号値と同一の前記インデックス値に対応する前記文字コードに変換し、得られた前記文字コードの列を前記平文に対応する暗号文として出力する暗号文出力手段、
として機能させることを特徴とする暗号処理プログラム。
【請求項２】
前記暗号化手段は、予め初期値が格納されたレジスタの値を暗号化してビット列を生成し、生成した前記ビット列から前記インデックス値と同じビット長の部分ビット列を切り取り、前記インデックス値と所定の演算を行うことで前記暗号値を生成することを特徴とする請求項１記載の暗号処理プログラム。
【請求項３】
前記暗号化手段は、１つの前記ビット列を生成すると、前記ビット列からそれぞれの前記インデックス値のビット長に応じた複数の前記部分ビット列を切り取り、複数の前記インデックス値に対応する前記暗号値を並行して生成することを特徴とする請求項２記載の暗号処理プログラム。
【請求項４】
前記変換テーブルは、格納される前記文字コードの個数が異なる複数の前記領域に分割されている場合、出現頻度が高い文字の前記文字コードを、格納される個数が多い前記領域に優先的に格納することを特徴とする請求項１記載の暗号処理プログラム。
【請求項５】
前記コンピュータを、更に、
前記暗号文が入力されると、前記変換テーブル記憶手段に記憶された前記変換テーブルを参照して、前記暗号文を構成するそれぞれの前記文字コードを対応する前記インデックス値に変換する暗号文変換手段、
前記暗号文変換手段によって得られた前記インデックス値を順次取得し、ビット長を変えずに、前記インデックス値を復号値に復号する復号手段、
前記復号手段によって得られた前記復号値を順次取得し、前記変換テーブル内の前記暗号文変換手段が変換時に参照した前記領域を参照して、前記復号値を前記復号値と同一の前記インデックス値に対応する前記文字コードに変換し、得られた前記文字コードの列を前記暗号文に対応する前記平文として出力する平文出力手段、
として機能させることを特徴とする請求項１記載の暗号処理プログラム。
【請求項６】
文字単位で暗号処理を行う暗号処理方法において、
それぞれ２のべき乗個の文字に関する情報を格納する１以上の領域に分割され、所定の文字コード体系に含まれる文字コードと、前記領域に格納された前記文字コードを前記領域内で個々に識別するために必要な最小のビット長のインデックス値とを対応付ける変換テーブルが変換テーブル記憶手段に記憶されており、平文変換手段が、前記所定の文字コード体系で符号化された平文が入力されると、前記変換テーブル記憶手段に記憶された前記変換テーブルを参照して、前記平文を構成するそれぞれの前記文字コードを対応する前記インデックス値に変換し、
暗号化手段が、前記平文変換手段によって得られた前記インデックス値を順次取得し、ビット長を変えずに、前記インデックス値を暗号値に暗号化し、
暗号文出力手段が、前記暗号化手段によって得られた前記暗号値を順次取得し、前記変換テーブル内の前記平文変換手段が変換時に参照した前記領域を参照して、前記暗号値を前記暗号値と同一の前記インデックス値に対応する前記文字コードに変換し、得られた前記文字コードの列を前記平文に対応する暗号文として出力する、
ことを特徴とする暗号処理方法。
【請求項７】
文字単位で暗号処理を行う暗号処理装置において、
それぞれ２のべき乗個の文字に関する情報を格納する１以上の領域に分割されており、所定の文字コード体系に含まれる文字コードと、前記領域に格納された前記文字コードを前記領域内で個々に識別するために必要な最小のビット長のインデックス値とを対応付ける変換テーブルを記憶する変換テーブル記憶手段と、
前記所定の文字コード体系で符号化された平文が入力されると、前記変換テーブル記憶手段に記憶された前記変換テーブルを参照して、前記平文を構成するそれぞれの前記文字コードを対応する前記インデックス値に変換する平文変換手段と、
前記平文変換手段によって得られた前記インデックス値を順次取得し、ビット長を変えずに、前記インデックス値を暗号値に暗号化する暗号化手段と、
前記暗号化手段によって得られた前記暗号値を順次取得し、前記変換テーブル内の前記平文変換手段が変換時に参照した前記領域を参照して、前記暗号値を前記暗号値と同一の前記インデックス値に対応する前記文字コードに変換し、得られた前記文字コードの列を前記平文に対応する暗号文として出力する暗号文出力手段と、
を有することを特徴とする暗号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は暗号処理プログラム、暗号処理方法および暗号処理装置に関し、特に文字単位で暗号処理を行う暗号処理プログラム、暗号処理方法および暗号処理装置に関する。
【背景技術】
【０００２】
現在、通信内容や蓄積データの秘密保持のため、暗号技術が広く利用されている。ここで、暗号方式には、公開鍵暗号方式と共通鍵暗号方式との２種類がある。公開鍵暗号方式は、ペアとなる鍵の一方を暗号化のための公開鍵、他方を復号のための秘密鍵とする方式であり、暗号強度の維持が容易であるという利点がある。共通鍵暗号方式は、暗号化側と復号側とで共有する共通鍵を用いて暗号化および復号を行う方式であり、公開鍵暗号方式と比べて計算量が少ないという利点がある。一般的に、大量のデータを暗号化する必要がある場合、計算量が少ない共通鍵暗号方式が用いられる。共通鍵暗号方式の暗号化アルゴリズムとしては、ＤＥＳ（Data Encryption Standard）やＡＥＳ（Advanced Encryption Standard）などが知られている（例えば、特許文献１参照）。
【０００３】
ところで、コンピュータを用いた暗号処理では、文字を特定の文字コード体系に従って符号化した文字データを処理対象とすることが多い。しかし、既存の暗号化アルゴリズムによって生成される暗号データは、文字データのみを扱うように設計されたソフトウェアで正常に扱えない場合があるという問題がある。その理由は以下の通りである。
【０００４】
大多数の文字コード体系では、文字が割り当てられてない文字コード領域が存在する。例えば、シフトＪＩＳなどの日本語の文字コード体系では、１文字は１６ビットで表現されるが、２の１６乗（＝６５５３６）通りの文字コードの全てに実際に文字が割り当てられているわけではない。そこで、ソフトウェアは、文字コードとして使用されないビット列の有無によって、データが文字データか否かを判別することができる。一方、既存の暗号化アルゴリズムで生成される暗号データは、入力データと同じビット長で表現可能な全範囲が生成対象である。このため、文字データのみを扱うように設計されたソフトウェアは、暗号データを正しく認識できない。
【０００５】
これに対し、より多くのソフトウェアで暗号データを扱えるようにしたいという要求から、文字コードのみから構成される暗号データを生成する技術が検討されている。例えば、ＢＡＳＥ６４変換を用いて、暗号化アルゴリズムによって生成された暗号データを文字コードに変換する方法が知られている。ＢＡＳＥ６４変換は、変換元のデータを２４ビット毎に区切り、２４ビットのビット列から４つの半角英数字を表す文字コード（ＡＳＣＩＩコード）に変換する技術である。これにより、ＡＳＣＩＩコードのみから構成される暗号データを生成することができ、より多くのソフトウェアで暗号データを扱うことができるようになる。
【特許文献１】特開平８−２２７２６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、ＢＡＳＥ６４変換を用いて暗号データを生成する方法では、暗号データのビット長が元の文字データのビット長よりも大きくなるという問題がある。ＢＡＳＥ６４変換では、２４ビット（３バイト）のビット列を４つのＡＳＣＩＩコード（４バイト）に変換するため、ビット長が約１．３倍に増大する。ここで、ビット長の増大は、データベースに暗号データを格納する場合に特に大きな問題となる。データベースでは、格納するデータの大きさが一定の範囲に制限されることが多いからである。
【０００７】
一方、暗号データが取り得る値の範囲を制限する他の方法として、暗号化の前後でデータのビット長を変換する方法が考えられる。すなわち、暗号化を行う前に、文字データの文字コードをビット長がより短いビット列に変換する。そして、変換したビット列を暗号化し、暗号化処理で生成されたビット列を文字コードに逆変換する。例えば、全てのＪＩＳ第一第二水準漢字は１３ビットで表現できるため、１６ビットの文字コードを１３ビットのビット列に変換して暗号化を行う。これにより、最終的な暗号データは１６ビットであるものの、取り得る値の範囲をその一部に制限できる。また、暗号データのビット長を元の文字データのビット長と同一にすることができる。
【０００８】
しかし、上記方法のみでは、文字コード体系に含まれる文字コードの個数が２のべき乗でない場合、文字コードのみから構成される暗号データを生成することはできないという問題がある。これは、逆変換できないビット列が暗号化処理によって生成される可能性があるためである。例えば、ＪＩＳ第一第二水準に属する文字は６８７９個であるが、１３ビットのビット列は８１９２個の文字を表現可能である。そのため、ビット長を１３ビットに減縮しても文字が割り当てられていないビット列が生成されてしまう可能性を排除できない。当然ながら、ビット長を１２ビットにすると、ＪＩＳ第一第二水準に属する全ての文字を表現できなくなる。
【０００９】
本発明はこのような点に鑑みてなされたものであり、文字単位で暗号処理を行う場合に、文字コード体系に含まれる文字コードの個数にかかわらず、文字コードのみから構成される暗号データを容易に生成できる暗号処理プログラム、暗号処理方法および暗号処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明では上記課題を解決するために、図１に示すような暗号処理プログラムが提供される。本発明に係る暗号処理プログラムは、文字コード単位で暗号処理を行うために、図１に示す暗号化装置１が有する機能をコンピュータに実行させることができる。
【００１１】
変換テーブル記憶手段１ａは、それぞれ２のべき乗個の文字に関する情報を格納する１以上の領域に分割されており、所定の文字コード体系に含まれる文字コードと、領域に格納された文字コードを領域内で個々に識別するために必要な最小のビット長のインデックス値とを対応付ける変換テーブルを記憶する。平文変換手段１ｂは、所定の文字コード体系で符号化された平文３が入力されると、変換テーブル記憶手段１ａに記憶された変換テーブルを参照して、平文３を構成するそれぞれの文字コードを対応するインデックス値に変換する。暗号化手段１ｃは、平文変換手段１ｂによって得られたインデックス値を順次取得し、ビット長を変えずに、インデックス値を暗号値に暗号化する。暗号文出力手段１ｄは、暗号化手段１ｃによって得られた暗号値を順次取得し、変換テーブル内の平文変換手段１ｂが変換時に参照した領域を参照して、暗号値を暗号値と同一のインデックス値に対応する文字コードに変換し、得られた文字コードの列を平文３に対応する暗号文４として出力する。
【００１２】
このような暗号処理プログラムを実行するコンピュータによれば、平文３が入力されると、平文変換手段１ｂにより、それぞれ２のべき乗個の情報を格納する１以上の領域に分割された変換テーブルに基づいて、平文３を構成するそれぞれの文字コードが領域に応じたビット長のインデックス値に変換される。次に、暗号化手段１ｃにより、ビット長が変更されることなく、インデックス値が暗号値に暗号化される。そして、暗号文出力手段１ｄにより、変換テーブルに基づいて、暗号値が対応する文字コードに変換され、文字コードの列が暗号文４として出力される。
【００１３】
また、上記課題を解決するために、文字単位で暗号処理を行う暗号処理方法において、それぞれ２のべき乗個の文字に関する情報を格納する１以上の領域に分割され、所定の文字コード体系に含まれる文字コードと、領域に格納された文字コードを領域内で個々に識別するために必要な最小のビット長のインデックス値とを対応付ける変換テーブルが変換テーブル記憶手段に記憶されており、平文変換手段が、所定の文字コード体系で符号化された平文が入力されると、変換テーブル記憶手段に記憶された変換テーブルを参照して、平文を構成するそれぞれの文字コードを対応するインデックス値に変換し、暗号化手段が、平文変換手段によって得られたインデックス値を順次取得し、ビット長を変えずに、インデックス値を暗号値に暗号化し、暗号文出力手段が、暗号化手段によって得られた暗号値を順次取得し、変換テーブル内の平文変換手段が変換時に参照した領域を参照して、暗号値を暗号値と同一のインデックス値に対応する文字コードに変換し、得られた文字コードの列を平文に対応する暗号文として出力する、ことを特徴とする暗号処理方法が提供される。
【００１４】
このような暗号処理方法によれば、平文が入力されると、それぞれ２のべき乗個の情報を格納する１以上の領域に分割された変換テーブルに基づいて、平文を構成するそれぞれの文字コードが領域に応じたビット長のインデックス値に変換される。次に、ビット長が変更されることなく、インデックス値が暗号値に暗号化される。そして、変換テーブルに基づいて、暗号値が対応する文字コードに変換され、文字コードの列が暗号文として出力される。
【００１５】
また、上記課題を解決するために、文字単位で暗号処理を行う暗号処理装置において、それぞれ２のべき乗個の文字に関する情報を格納する１以上の領域に分割されており、所定の文字コード体系に含まれる文字コードと、領域に格納された文字コードを領域内で個々に識別するために必要な最小のビット長のインデックス値とを対応付ける変換テーブルを記憶する変換テーブル記憶手段と、所定の文字コード体系で符号化された平文が入力されると、変換テーブル記憶手段に記憶された変換テーブルを参照して、平文を構成するそれぞれの文字コードを対応するインデックス値に変換する平文変換手段と、平文変換手段によって得られたインデックス値を順次取得し、ビット長を変えずに、インデックス値を暗号値に暗号化する暗号化手段と、暗号化手段によって得られた暗号値を順次取得し、変換テーブル内の平文変換手段が変換時に参照した領域を参照して、暗号値を暗号値と同一のインデックス値に対応する文字コードに変換し、得られた文字コードの列を平文に対応する暗号文として出力する暗号文出力手段と、を有することを特徴とする暗号処理装置が提供される。
【００１６】
このような暗号処理装置によれば、平文が入力されると、平文変換手段により、それぞれ２のべき乗個の情報を格納する１以上の領域に分割された変換テーブルに基づいて、平文を構成するそれぞれの文字コードが領域に応じたビット長のインデックス値に変換される。次に、暗号化手段により、ビット長が変更されることなく、インデックス値が暗号値に暗号化される。そして、暗号文出力手段により、変換テーブルに基づいて、暗号値が対応する文字コードに変換され、文字コードの列が暗号文として出力される。
【発明の効果】
【００１７】
本発明では、それぞれ２のべき乗個の文字コードを格納するように分割した変換テーブルを用いて、暗号処理の前後で、文字コードとインデックス値との間の変換を行うこととした。これにより、暗号処理によって変換テーブルに存在しないビット列が生成されることを確実に防止できる。従って、複雑な処理を必要とせず、所定の文字コード体系で符号化された暗号文を容易に生成することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本実施の形態の概要を示す図である。図１に示すように、本実施の形態では、暗号化装置１が平文３を暗号化し暗号文４を出力する。また、復号装置２が暗号化装置１によって生成された暗号文５を復号し平文６を出力する。
【００１９】
暗号化装置１は、変換テーブル記憶手段１ａ、平文変換手段１ｂ、暗号化手段１ｃおよび暗号文出力手段１ｄを有する。
変換テーブル記憶手段１ａは、所定の文字コード体系に含まれる文字コードとインデックス値とを対応付ける変換テーブルを記憶する。ここで、変換テーブルは、それぞれ２のべき乗個の文字コードを格納するように１以上の領域に分割されている。インデックス値は、それぞれの領域内で文字コードを一意に識別するビット列である。インデックス値のビット長は、文字コードの識別に必要な最小のビット長とする。
【００２０】
例えば、アルファベットの“Ａ”から“Ｆ”までの６つの文字で構成される文字コード体系があるとする。ここで、６は２のべき乗ではないが、２の２乗と２の１乗との和に分解できる。そこで、変換テーブルは、４（２の２乗）個の文字コードを格納する第１の領域と、２（２の１乗）個の文字コードを格納する第２の領域とに分割される。そして、第１の領域では、個々の文字コードに対して２ビットのインデックス値が付与される。第２の領域では、個々の文字コードに対して１ビットのインデックス値が付与される。
【００２１】
平文変換手段１ｂは、入力された平文３を取得する。そして、平文変換手段１ｂは、変換テーブル記憶手段１ａが記憶する変換テーブルを参照して、取得した平文３を構成するそれぞれの文字コードをインデックス値に変換する。例えば、平文変換手段１ｂは、平文３に文字“Ａ”の文字コードが含まれていると、これをインデックス値“００”に変換する。
【００２２】
暗号化手段１ｃは、平文変換手段１ｂの変換結果であるインデックス値を順次取得する。そして、暗号化手段１ｃは、ビット長を変えずに、取得したインデックス値を暗号値に暗号化する。例えば、暗号化手段１ｃは、インデックス値“００”を暗号値“１０”に暗号化する。
【００２３】
暗号文出力手段１ｄは、暗号化手段１ｃの処理結果である暗号値を順次取得する。そして、暗号文出力手段１ｄは、変換テーブル記憶手段１ａが記憶する変換テーブルを参照して、取得した暗号値を文字コードに変換する。ここでは、暗号値と変換テーブルのインデックス値とを同一視するものとする。例えば、暗号文出力手段１ｄは、暗号値“１０”を文字“Ｃ”の文字コードに変換する。そして、暗号文出力手段１ｄは、得られた文字コードの列を、平文３に対応する暗号文４として出力する。
【００２４】
復号装置２は、変換テーブル記憶手段２ａ、暗号文変換手段２ｂ、復号手段２ｃおよび平文出力手段２ｄを有する。変換テーブル記憶手段２ａは、暗号化装置１の変換テーブル記憶手段１ａが記憶する変換テーブルと同一のテーブルを記憶している。
【００２５】
暗号文変換手段２ｂは、入力された暗号文５を取得する。そして、暗号文変換手段２ｂは、変換テーブル記憶手段２ａが記憶する変換テーブルを参照して、取得した暗号文５を構成するそれぞれの文字コードをインデックス値に変換する。例えば、暗号文変換手段２ｂは、暗号文５に文字“Ｃ”の文字コードが含まれていると、これをインデックス値“１０”に変換する。
【００２６】
復号手段２ｃは、暗号文変換手段２ｂの変換結果であるインデックス値を順次取得する。そして、復号手段２ｃは、ビット長を変えずに、取得したインデックス値を復号値に復号する。例えば、復号手段２ｃは、インデックス値“１０”を復号値“００”に復号する。
【００２７】
平文出力手段２ｄは、復号手段２ｃの処理結果である復号値を順次取得する。そして、平文出力手段２ｄは、変換テーブル記憶手段２ａが記憶する変換テーブルを参照して、取得した復号値を文字コードに変換する。例えば、平文出力手段２ｄは、復号値“００”を文字“Ａ”の文字コードに変換する。そして、平文出力手段２ｄは、得られた文字コードの列を、暗号文５に対応する平文６として出力する。
【００２８】
なお、暗号化装置１と復号装置２とが別個に変換テーブルを保持するのではなく、暗号化装置１と復号装置２とから共通に参照可能な記憶手段に変換テーブルを格納するようにしてもよい。
【００２９】
このような暗号化装置１によれば、平文３が入力されると、平文変換手段１ｂにより、それぞれ２のべき乗個の情報を格納する１以上の領域に分割された変換テーブルに基づいて、平文３を構成するそれぞれの文字コードが領域に応じたビット長のインデックス値に変換される。次に、暗号化手段１ｃにより、ビット長が変更されることなく、インデックス値が暗号値に暗号化される。そして、暗号文出力手段１ｄにより、変換テーブルに基づいて、暗号値が文字コードに変換され、文字コードの列が暗号文４として出力される。
【００３０】
また、このような復号装置２によれば、暗号文５が入力されると、暗号文変換手段２ｂにより、それぞれ２のべき乗個の情報を格納する１以上の領域に分割された変換テーブルに基づいて、暗号文５を構成するそれぞれの文字コードが領域に応じたビット長のインデックス値に変換される。次に、復号手段２ｃにより、ビット長が変更されることなく、インデックス値が復号値に復号される。そして、平文出力手段２ｄにより、変換テーブルに基づいて、復号値が文字コードに変換され、文字コードの列が平文６として出力される。
【００３１】
これにより、暗号処理によって変換テーブルに存在しないビット列が生成されることを確実に防止できる。従って、複雑な処理を必要とせず、所定の文字コード体系で符号化された暗号文を容易に生成および復号することができる。
【００３２】
このような暗号化装置１および復号装置２は、例えば、データベースに格納するデータの暗号化および復号に利用できる。すなわち、データベースを構築したストレージデバイスに対する不正アクセスや、ストレージデバイスの盗難による情報の漏洩を防止するために、各データを暗号化して格納することが考えられる。そこで、データベースに格納する文字データに対する暗号処理を例に、本発明の実施の形態を具体的に説明する。
【００３３】
［第１の実施の形態］
図２は、本実施の形態のシステム構成を示す図である。図２に示すデータベースシステムは、データベースに格納する文字データに対して暗号処理を行うものである。本実施の形態のデータベースシステムは、サーバ１００、データベース１１０、クライアント２１およびネットワーク１０で構成される。
【００３４】
クライアント２１は、ネットワーク１０を介してサーバ１００と接続されている。クライアント２１は、ユーザが使用するコンピュータである。サーバ１００は、データベース１１０と接続されている。サーバ１００は、データベース１１０の管理機能を有するコンピュータである。データベース１１０には、文字データが暗号化されて格納されている。
【００３５】
クライアント２１は、データベース１１０に格納されたデータを利用する場合、ネットワーク１０を通じてサーバ１００に対してデータ処理の要求を行う。サーバ１００は、クライアント２１からの要求に応じて、データベース１１０に格納されたデータの処理を行う。ここで、サーバ１００は、データ更新の場合には文字データを暗号化してデータベース１１０に格納し、データ検索の場合には取得した暗号文を復号してクライアント２１に応答する。
【００３６】
このように、サーバ１００が文字データの暗号化および復号の処理を行い、クライアント２１とデータベース１１０との間でデータを中継する。なお、サーバ１００とクライアント２１との間の通信も、ＤＥＳやＡＥＳ等の暗号技術を用いて暗号化して行うことが可能である。
【００３７】
図３は、サーバのハードウェア構成を示す図である。サーバ１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０８を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、通信インタフェース１０６およびストレージデバイスインタフェース１０７が接続されている。
【００３８】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。
【００３９】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０８を介してＣＰＵ１０１に送信する。
【００４０】
通信インタフェース１０６は、ネットワーク１０に接続されている。通信インタフェース１０６は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。ストレージデバイスインタフェース１０７は、データベース１１０に対してデータの入出力を行う通信インタフェースである。
【００４１】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図３には、サーバ１００のハードウェア構成を示したが、クライアント２１も同様のハードウェアで実現できる。
【００４２】
図４は、第１の実施の形態のサーバの機能を示すブロック図である。サーバ１００は、データベース管理部１２０、初期値記憶部１３１、共通鍵記憶部１３２、変換テーブル記憶部１３３、暗号化部１４０および復号部１５０を有している。
【００４３】
データベース管理部１２０は、クライアント２１からの要求に応じてデータベース１１０内のデータの入出力を行う。ここで、データベース１１０に対して文字データを入力する際には、データベース管理部１２０は、暗号化部１４０を介してデータベース１１０へ文字データを書き込む。また、データベース１１０から文字データを取得し出力する際には、データベース管理部１２０は、復号部１５０を介してデータベース１１０内の文字データを取得する。
【００４４】
初期値記憶部１３１は、暗号化部１４０および復号部１５０が暗号処理で用いる初期ベクタを記憶する。初期ベクタとは、先頭の文字を暗号化および復号する際に使用するビット列である。共通鍵記憶部１３２は、暗号化部１４０および復号部１５０が暗号処理で用いる共通鍵を記憶する。変換テーブル記憶部１３３は、文字コードと文字コードを識別するインデックスとの対応関係を定義した変換テーブルを記憶する。
【００４５】
暗号化部１４０は、データベース管理部１２０から受け取った文字データを暗号化し、データベース１１０に格納する。暗号化に際しては、初期値記憶部１３１、共通鍵記憶部１３２および変換テーブル記憶部１３３を参照する。
【００４６】
復号部１５０は、データベース管理部１２０からの要求に応じてデータベース１１０から暗号化された文字データを取得し、取得した文字データを復号する。そして、復号部１５０は、復号した文字データをデータベース管理部１２０に渡す。復号に際しては、初期値記憶部１３１、共通鍵記憶部１３２および変換テーブル記憶部１３３を参照する。
【００４７】
図５は、変換テーブルのデータ構造例を示す図である。変換テーブル１３３ａは、変換テーブル記憶部１３３に格納されている。変換テーブル１３３ａには、インデックスを示す項目、文字コードを示す項目および有効ビット数を示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられている。
【００４８】
インデックスは、文字コードを一意に識別するための数値である。インデックスは、個々の文字コードに対して、０から順番に付与される。図５では、インデックスを２進数で表記している。
【００４９】
文字コードは、所定の文字コード体系で定義された、文字を識別するための数値である。文字コードは、インデックスと１対１に対応していればよく、インデックスの順序に合わせて整列する必要はない。図５では、文字コードを１６進数で表記している。
【００５０】
有効ビット数は、インデックスのうち、暗号化および復号の対象となるビットのビット数である。例えば、有効ビット数が４ビットの場合、インデックスの下位４ビットが暗号化および復号の対象となる。なお、インデックスの下位から有効ビット数だけ抽出したビット列が、本実施の形態の概要で述べたインデックス値に相当する。
【００５１】
有効ビット数およびその有効ビット数に対応付けられる文字コードの個数は、変換テーブル１３３ａに格納される文字コードの総数を２のべき乗数の和に分解することで決定される。例えば、文字コードの総数が２６個の場合、２６＝２の４乗（１６）＋２の３乗（８）＋２の１乗（２）と分解できる。そこで、有効ビット数４の文字コードが１６個、有効ビット数３の文字コードが８個、有効ビット数１の文字コードが２個と決定される。
【００５２】
なお、本実施の形態では、説明を容易にするため、アルファベット２６文字からなる文字コード体系を想定する。
ここで、図５に示すように、出現頻度が高いアルファベットに対して、大きい有効ビット数を割り当てることにする。これは、文字の暗号化は、有効ビット数が同じ文字コードの中での変換として実現されるからである。例えば、文字“Ｅ”を暗号化すると、１６文字のうちのいずれか１つに変換される。一方、文字“Ｑ”を暗号化すると、“Ｑ”または“Ｚ”のいずれか１つに変換される。従って、変換のパターンが少なくなる小さな有効ビット数を、出現頻度が高い文字に割り当てることは、セキュリティの観点から好ましくない。
【００５３】
次に、暗号化部１４０の処理機能について詳細に説明する。以下、暗号化アルゴリズムとしてＤＥＳを用い、暗号利用モードとしてＣＦＢ（Cipher FeedBack）モードを用いるものとする。
【００５４】
図６は、第１の実施の形態の暗号化部の機能例を示すブロック図である。暗号化部１４０は、平文変換部１４１、シフトレジスタ１４２、暗号化処理部１４３、暗号データ記憶部１４４、排他的論理和演算部１４５および暗号文出力部１４６を有している。
【００５５】
平文変換部１４１は、データベース管理部１２０から平文３１が入力されると、変換テーブル記憶部１３３に格納された変換テーブル１３３ａを参照して、平文３１を構成する個々の文字コードを暗号化対象のビット列に変換する。暗号化対象のビット列は、インデックスのうち、下位の桁から有効ビット数だけ切り出したものである。そして、平文変換部１４１は、暗号化対象のビット列を、順次排他的論理和演算部１４５に出力する。
【００５６】
シフトレジスタ１４２は、所定のビット数だけビット列を格納することができると共に、ビットの格納位置を右から左へ向かってシフトすることができる。シフトレジスタ１４２は、排他的論理和演算部１４５から演算結果が出力されと、演算結果のビット数だけ格納されたデータを左にシフトする。そして、シフトレジスタ１４２は、排他的論理和演算部１４５の演算結果を右側に格納する。暗号化処理の開始時には、初期値記憶部１３１に格納された初期ベクタがシフトレジスタ１４２に設定される。
【００５７】
暗号化処理部１４３は、シフトレジスタ１４２に設定された値を、共通鍵記憶部１３２に格納されている共通鍵を用いて、ＤＥＳのアルゴリズムに従って暗号化する。そして、暗号化処理部１４３は、暗号化処理の結果を暗号データ記憶部１４４に格納する。
【００５８】
排他的論理和演算部１４５は、平文変換部１４１から暗号化対象のビット列を取得すると、暗号データ記憶部１４４に格納されたビット列の先頭から、暗号化対象のビット数だけ切り出す。そして、排他的論理和演算部１４５は、切り出したビット列と暗号化対象のビット列との排他的論理和の演算を行う。その後、排他的論理和演算部１４５は、演算結果を出力すると共に、シフトレジスタ１４２の入力として演算結果を与える。
【００５９】
暗号文出力部１４６は、排他的論理和演算部１４５から演算結果のビット列を取得すると、変換テーブル１３３ａを参照して、取得したビット列を文字コードに変換する。変換先の文字コードは、変換テーブル１３３ａのインデックスおよび有効ビット数に基づいて特定する。そして、暗号文出力部１４６は、変換した一連の文字コードを結合し、平文３１に対応する暗号文３２として出力して、データベース１１０に格納する。
【００６０】
図７は、第１の実施の形態の暗号化処理の進行例を示す図である。図７に示す例は、平文“ＪＡＺＺ”を表す文字データを暗号化するものである。
第１の状態［ＳＴ１１］には、１つ目の文字“Ｊ”に対する暗号化処理が示されている。このとき、シフトレジスタ１４２には初期ベクタが設定されている。暗号化処理が開始されると、まず、暗号化処理部１４３によってシフトレジスタ１４２内の値が暗号化され、暗号データ記憶部１４４に格納される。次に、排他的論理和演算部１４５によって、暗号データ記憶部１４４内の先頭３ビットが抽出され、文字“Ｊ”に対応するビット列“１１１”との排他的論理和の演算が行われる。そして、演算結果として、例えば、ビット列“００１”が得られる。ビット列“００１”は、暗号文出力部１４６によって、文字“Ｇ”の文字コードに変換される。
【００６１】
第２の状態［ＳＴ１２］には、２つ目の文字“Ａ”に対する暗号化処理が示されている。このとき、シフトレジスタ１４２は左に３ビットだけシフトされ、右に前回の演算結果“００１”が格納されている。この状態で、暗号化処理部１４３によってシフトレジスタ１４２内の値が暗号化され、暗号データ記憶部１４４に格納される。次に、排他的論理和演算部１４５によって、暗号データ記憶部１４４内の先頭４ビットが抽出され、文字“Ａ”に対応するビット列“００１０”との排他的論理和の演算が行われる。そして、演算結果として、例えば、ビット列“１１１１”が得られる。ビット列“１１１１”は、暗号文出力部１４６によって、文字“Ｗ”の文字コードに変換される。
【００６２】
以後同様に、３つ目および４つ目の文字“Ｚ”の暗号化が順次行われる。第３の状態［ＳＴ１３］には、３つ目の文字“Ｚ”に対する暗号化処理が示されている。この例では、ビット列“０”が得られている。第４の状態［ＳＴ１４］には、４つ目の文字“Ｚ”に対する暗号化処理が示されている。この例では、ビット列“１”が得られている。状態［ＳＴ１３］と状態［ＳＴ１４］とで得られるビット列が異なるのは、ＣＦＢモードでは、暗号化処理の結果が、それ以前に行われた暗号化処理の結果に依存するからである。
【００６３】
以上の処理によって得られた文字列“ＧＷＱＺ”が、暗号文３２として暗号文出力部１４６によって出力される。
次に、復号部１５０の復号処理の機能について詳細に説明する。以下、暗号化部１４０と同様、暗号化アルゴリズムとしてＤＥＳを用い、暗号利用モードとしてＣＦＢモードを用いるものとする。
【００６４】
図８は、第１の実施の形態の復号部の機能例を示すブロック図である。復号部１５０は、暗号文変換部１５１、シフトレジスタ１５２、暗号化処理部１５３、暗号データ記憶部１５４、排他的論理和演算部１５５および平文出力部１５６を有している。
【００６５】
暗号文変換部１５１は、データベース管理部１２０からの要求に応じてデータベース１１０から暗号文３３を取得すると、変換テーブル１３３ａを参照して、暗号文３３を構成する個々の文字コードを復号対象のビット列に変換する。復号対象のビット列は、インデックスのうち、下位の桁から有効ビット数だけ切り出したものである。そして、暗号文変換部１５１は、復号対象のビット列を、順次排他的論理和演算部１５５に出力する。
【００６６】
シフトレジスタ１５２は、所定のビット数だけビット列を格納することができると共に、ビットの格納位置を右から左へ向かってシフトすることができる。シフトレジスタ１５２は、排他的論理和演算部１５５で演算が行われると、復号対象のビット列のビット数だけ格納されたデータを左にシフトする。そして、シフトレジスタ１５２は、復号対象のビット列を右側に格納する。復号処理の開始時には、初期値記憶部１３１に格納された初期ベクタがシフトレジスタ１５２に設定される。
【００６７】
暗号化処理部１５３は、シフトレジスタ１５２に設定された値を、共通鍵記憶部１３２に格納されている共通鍵を用いて、ＤＥＳのアルゴリズムに従って暗号化する。そして、暗号化処理部１５３は、暗号化処理の結果を暗号データ記憶部１５４に格納する。
【００６８】
排他的論理和演算部１５５は、暗号文変換部１５１から復号対象のビット列を取得すると、暗号データ記憶部１５４に格納されたビット列の先頭から、復号対象のビット数だけ切り出す。そして、排他的論理和演算部１５５は、切り出したビット列と復号対象のビット列との排他的論理和の演算を行う。その後、排他的論理和演算部１５５は、演算結果を出力すると共に、演算の際に入力された復号対象のビット列をシフトレジスタ１５２の入力として与える。
【００６９】
平文出力部１５６は、排他的論理和演算部１５５から演算結果のビット列を取得すると、変換テーブル１３３ａを参照して、取得したビット列を文字コードに変換する。変換先の文字コードは、変換テーブル１３３ａのインデックスおよび有効ビット数に基づいて特定する。そして、平文出力部１５６は、変換した一連の文字コードを結合し、暗号文３３に対応する平文３４として、データベース管理部１２０に通知する。
【００７０】
図９は、第１の実施の形態の復号処理の進行例を示す図である。図９に示す例は、暗号文“ＧＷＱＺ”を表す暗号データを復号するものである。
第１の状態［ＳＴ２１］には、１つ目の文字“Ｇ”に対する復号処理が示されている。このとき、シフトレジスタ１５２には初期ベクタが設定されている。復号処理が開始されると、まず、暗号化処理部１５３によってシフトレジスタ１５２内の値が暗号化され、暗号データ記憶部１５４に格納される。次に、排他的論理和演算部１５５によって、暗号データ記憶部１５４内の先頭３ビットが抽出され、文字“Ｇ”に対応するビット列“００１”との排他的論理和の演算が行われる。そして、演算結果として、例えば、ビット列“１１１”が得られる。ビット列“１１１”は、平文出力部１５６によって、文字“Ｊ”の文字コードに変換される。
【００７１】
第２の状態［ＳＴ２２］には、２つ目の文字“Ｗ”に対する復号処理が示されている。このとき、シフトレジスタ１５２は左に３ビットだけシフトされ、右に前回の復号対象のビット列“００１”が格納されている。この状態で、暗号化処理部１５３によってシフトレジスタ１５２内の値が暗号化され、暗号データ記憶部１５４に格納される。次に、排他的論理和演算部１５５によって、暗号データ記憶部１５４内の先頭４ビットが抽出され、文字“Ｗ”に対応するビット列“１１１１”との排他的論理和の演算が行われる。そして、演算結果として、例えば、ビット列“００１０”が得られる。ビット列“００１０”は、平文出力部１５６によって、文字“Ａ”の文字コードに変換される。
【００７２】
以後同様に、３つ目の文字“Ｑ”および４つ目の文字“Ｚ”の復号が順次行われる。第３の状態［ＳＴ２３］には、３つ目の文字“Ｑ”に対する復号処理が示されている。この例では、ビット列“１”が得られている。第４の状態［ＳＴ２４］には、４つ目の文字“Ｚ”に対する復号処理が示されている。この例では、ビット列“１”が得られている。
【００７３】
以上の処理によって得られた文字列“ＪＡＺＺ”が、平文３４として平文出力部１５６によって出力される。
このような暗号化処理および復号処理を行うサーバを用いることで、ビット長が元の文字データと同一であり、かつ、文字コードのみから構成される暗号データを容易に生成し復号することができる。従って、文字データのみを扱うように設定されたデータベースにも、暗号データを正常に格納することができる。その結果、データベースに格納したデータの不正アクセスを防止することができる。
【００７４】
［第２の実施の形態］
次に、第２の実施の形態について説明する。第２の実施の形態のデータベースシステムは、第１の実施の形態における暗号化処理および復号処理を、複数の文字について並列処理できるようしたものである。第２の実施の形態のシステム構成は、第１の実施の形態のものと同様である。以下、暗号化処理を行う暗号化部および復号処理を行う復号部の機能の詳細について、第１の実施の形態と異なる部分を中心に説明する。
【００７５】
図１０は、第２の実施の形態の暗号化部の機能例を示すブロック図である。図１０に示す暗号化部１４０ａは、図６に示した第１の実施の形態の暗号化部１４０に対応するものである。暗号化部１４０ａは、平文変換部１４１ａ、シフトレジスタ１４２ａ、暗号化処理部１４３、暗号データ記憶部１４４ａ、排他的論理和演算部１４５ａ，１４５ｂ，１４５ｃ，・・・，１４５ｈおよび暗号文出力部１４６ａを有している。
【００７６】
平文変換部１４１ａは、平文が入力されると、平文を構成する個々の文字コードを暗号化対象のビット列に変換する。ここで、平文変換部１４１ａは、所定の個数の文字コードを並列処理することができる。図１０の例では、８個の文字コードを並列処理することができる。そして、平文変換部１４１ａは、暗号化対象のビット列を、排他的論理和演算部１４５ａ，１４５ｂ，１４５ｃ，・・・，１４５ｈにそれぞれ出力する。
【００７７】
シフトレジスタ１４２ａは、ビット列を格納することができると共に、ビットの格納位置を右から左へ向かってシフトすることができる。シフトレジスタ１４２ａは、排他的論理和演算部１４５ａから演算結果が出力されると、演算結果のビット数だけ格納されたデータを左にシフトする。そして、シフトレジスタ１４２ａは、排他的論理和演算部１４５ａの演算結果を右側に格納する。
【００７８】
暗号化処理部１４３は、シフトレジスタ１４２ａに設定された値を暗号化し、暗号化処理の結果を暗号データ記憶部１４４ａに格納する。ここで、暗号データ記憶部１４４ａは、ビット列を、並列処理する文字コードの個数と同数の部分ビット列に分割して格納する。すなわち、図１０の例では、８個の部分ビット列に分割して格納する。
【００７９】
排他的論理和演算部１４５ａは、平文変換部１４１ａから暗号化対象のビット列を取得すると、暗号データ記憶部１４４ａに格納された１番目の部分ビット列を取得し、部分ビット列の先頭から暗号化対象のビット数だけ切り出す。そして、排他的論理和演算部１４５ａは、切り出したビット列と暗号化対象のビット列との排他的論理和の演算を行う。排他的論理和演算部１４５ｂ，１４５ｃ，・・・，１４５ｈも、同様に、暗号データ記憶部１４４ａに格納された対応する部分ビット列を取得して、排他的論理和の演算を行う。
【００８０】
暗号文出力部１４６ａは、排他的論理和演算部１４５ａ，１４５ｂ，１４５ｃ，・・・，１４５ｈから演算結果のビット列を取得すると、取得したビット列を文字コードにそれぞれ変換する。そして、暗号文出力部１４６ａは、変換した一連の文字コードを結合し、平文に対応する暗号文として出力する。
【００８１】
なお、並列処理可能な文字コードの個数は、暗号データ記憶部１４４ａに格納されるビット列のビット長と、変換テーブル１３３ａで定義された有効ビット数の最大値とから決定される。例えば、暗号データ記憶部１４４ａに格納されるビット列のビット長が３２ビット、有効ビット数の最大値が４ビットである場合は、最大で８個の文字コードを並列処理することができる。
【００８２】
図１１は、第２の実施の形態の復号部の機能例を示すブロック図である。図１１に示す復号部１５０ａは、図８に示した第１の実施の形態の復号部１５０に対応するものである。復号部１５０ａは、暗号文変換部１５１ａ、シフトレジスタ１５２ａ、暗号化処理部１５３、暗号データ記憶部１５４ａ、排他的論理和演算部１５５ａ，１５５ｂ，１５５ｃ，・・・，１５５ｈおよび平文出力部１５６ａを有している。
【００８３】
暗号文変換部１５１ａは、暗号文を取得すると、暗号文を構成する個々の文字コードを復号対象のビット列に変換する。ここで、暗号文変換部１５１ａは、所定の個数の文字コードを並列処理することができる。そして、暗号文変換部１５１ａは、復号対象のビット列を、排他的論理和演算部１５５ａ，１５５ｂ，１５５ｃ，・・・，１５５ｈにそれぞれ出力する。
【００８４】
シフトレジスタ１５２ａは、ビット列を格納することができると共に、ビットの格納位置を右から左へ向かってシフトすることができる。シフトレジスタ１５２ａは、排他的論理和演算部１５５ａで演算が行われると、復号対象のビット列のビット数だけ格納されたデータを左にシフトする。そして、シフトレジスタ１５２ａは、復号対象のビット列を右側に格納する。
【００８５】
暗号化処理部１５３は、シフトレジスタ１５２ａに設定された値を暗号化し、暗号化処理の結果を暗号データ記憶部１５４ａに格納する。ここで、暗号データ記憶部１５４ａは、ビット列を、並列処理する文字コードの個数と同数の部分ビット列に分割して格納する。
【００８６】
排他的論理和演算部１５５ａは、暗号文変換部１５１ａから復号対象のビット列を取得すると、暗号データ記憶部１５４ａに格納された１番目の部分ビット列を取得し、部分ビット列の先頭から復号対象のビット数だけ切り出す。そして、排他的論理和演算部１５５ａは、切り出したビット列と復号対象のビット列との排他的論理和の演算を行う。排他的論理和演算部１５５ｂ，１５５ｃ，・・・，１５５ｈも、同様に、暗号データ記憶部１５４ａに格納された対応する部分ビット列を取得して、排他的論理和の演算を行う。
【００８７】
平文出力部１５６ａは、排他的論理和演算部１５５ａ，１５５ｂ，１５５ｃ，・・・，１５５ｈから演算結果のビット列を取得すると、取得したビット列を文字コードにそれぞれ変換する。そして、平文出力部１５６ａは、変換した一連の文字コードを結合し、暗号文に対応する平文として出力する。
【００８８】
なお、並列処理可能な文字コードの個数は、暗号化部１４０ａと同様、暗号データ記憶部１５４ａに格納されるビット列のビット長と、変換テーブル１３３ａで定義された有効ビット数の最大値とから決定される。
【００８９】
このような暗号化処理および復号処理を行うサーバを用いることで、第１の実施の形態と同様の効果を得られる。更に、第２の実施の形態のサーバを用いることで、暗号化処理および復号処理を大幅に高速化できる。
【００９０】
［第３の実施の形態］
次に、第３の実施の形態について説明する。第３の実施の形態のデータベースシステムは、第１の実施の形態のデータベースシステムを拡張し、暗号の安全性をより強化したものである。以下、第１の実施の形態と異なる部分を中心に説明する。
【００９１】
ＣＦＢモードのような連鎖機能を有する暗号利用モードは、前の暗号化処理で得られる暗号値を利用して次の文字を暗号化する。このため、平文の途中で一度異なる文字が出現すれば、それ以降に既出の文字と同一の文字が出現しても、前の暗号値と異なる暗号値が生成される。
【００９２】
しかし、一般的な暗号利用モードでは、先頭部分が同一になりやすい多数の平文を暗号化すると、暗号強度が低下する恐れがある。例えば、住所を表す平文は、先頭部分に“東京都○○区”などの特定の文字列が出現する確率が高い。このため、住所を表す多数の平文を暗号化すると、個々の平文の暗号化に連鎖機能を有する暗号利用モードを用いても、先頭部分が同一の暗号文が多数生成されてしまう。
【００９３】
特に、データベースには、住所や電話番号など先頭部分が同一になりやすい文字データを大量に格納することがある。この場合、先頭部分が同一である暗号文が多数出現することになり、暗号解読の手掛かりとなってしまう恐れがある。
【００９４】
そこで、第３の実施の形態では、先頭部分が同一の平文を暗号化しても、対応する暗号文の先頭部分は同一にならないようにする。
図１２は、第３の実施の形態のサーバの機能例を示すブロック図である。サーバ１００ｂは、データベース管理部１２０、初期値記憶部１３１、共通鍵記憶部１３２、変換テーブル記憶部１３３、ダミー位置記憶部１３４、暗号化部１４０ｂおよび復号部１５０ｂを有している。データベース管理部１２０、初期値記憶部１３１、共通鍵記憶部１３２および変換テーブル記憶部１３３の構成および機能は、それぞれ第１の実施の形態のものと同じである。
【００９５】
ダミー位置記憶部１３４は、暗号化部１４０ｂがダミー文字として選択する文字コードおよび復号部１５０ｂがダミー暗号として選択する文字コードの位置を指定した位置情報を記憶する。ダミー文字およびダミー暗号については、後で詳細に説明する。
【００９６】
暗号化部１４０ｂは、データベース管理部１２０から受け取った文字データを暗号化し、データベース１１０に格納する。暗号化に際しては、初期値記憶部１３１、共通鍵記憶部１３２、変換テーブル記憶部１３３およびダミー位置記憶部１３４を参照する。
【００９７】
復号部１５０ｂは、データベース管理部１２０からの要求に応じてデータベース１１０から暗号化された文字データを取得し、取得した文字データを復号する。そして、復号部１５０ｂは、復号した文字データをデータベース管理部１２０に渡す。復号に際しては、初期値記憶部１３１、共通鍵記憶部１３２、変換テーブル記憶部１３３およびダミー位置記憶部１３４を参照する。
【００９８】
次に、暗号化部１４０ｂの処理機能について詳細に説明する。第１の実施の形態と同様、暗号化アルゴリズムとしてＤＥＳを用い、暗号利用モードとしてＣＦＢモードを用いるものとする。
【００９９】
図１３は、第３の実施の形態の暗号化部の機能例を示すブロック図である。暗号化部１４０ｂは、平文変換部１４１、シフトレジスタ１４２、暗号化処理部１４３、暗号データ記憶部１４４、排他的論理和演算部１４５、暗号文出力部１４６ｂ、順序変換部１４７およびダミー文字選択部１４８を有している。平文変換部１４１、シフトレジスタ１４２、暗号化処理部１４３、暗号データ記憶部１４４および排他的論理和演算部１４５の処理機能は、それぞれ第１の実施の形態のものと同じである。
【０１００】
順序変換部１４７は、平文３５が入力されると、平文３５の文字順序を変換して新たな平文を生成する。具体的には、順序変換部１４７は、平文３５を先頭と最後尾とが連続した循環文字列とみなし、所定の指定方法に従って、循環文字列上で先頭文字と２番目以降の文字を辿る回転方向とを指定する。これにより、順序変換した文字列が生成される。そして、順序変換部１４７は、順序変換した文字列をダミー文字選択部１４８に出力する。
【０１０１】
ダミー文字選択部１４８は、順序変換部１４７から文字列を取得すると、ダミー位置記憶部１３４に格納されている位置情報を参照し、位置情報で指定される文字をダミー文字として選択する。そして、ダミー文字選択部１４８は、順序変換部１４７から取得した文字列の先頭に選択したダミー文字を付加して、新たな平文として平文変換部１４１に出力する。
【０１０２】
暗号文出力部１４６ｂは、排他的論理和演算部１４５から演算結果のビット列を順次取得する。ここで、暗号文出力部１４６ｂは、先頭のビット列、すなわち、ダミー文字選択部１４８が付加したダミー文字に対応するビット列を破棄する。そして、暗号文出力部１４６ｂは、残りのビット列をそれぞれ文字コードに変換し、変換した一連の文字コードを結合して暗号文３６として出力する。
【０１０３】
図１４は、順序変換処理の概要を示す図である。順序変換部１４７は、入力された平文３５を、図１４に示すような循環文字列とみなす。すなわち、平文３５がｎ文字（ｎは自然数）で構成されるとき、先頭文字Ｌ１と最後尾文字Ｌｎとが連続しているとみなす。ここで、順序変換部１４７は、所定の指定方法に従って、循環文字列の中の１文字Ｌｋ（ｋは１以上ｎ以下の自然数）を、新たな先頭文字に指定する。
【０１０４】
更に、順序変換部１４７は、指定した先頭文字から２番目以降の文字を辿る回転方向（順方向／逆方向）を指定する。例えば、文字Ｌｋから逆方向を指定した場合、Ｌｋ，Ｌｋ−１，・・・，Ｌ１，Ｌｎ，・・・，Ｌｋ＋１という文字列が得られる。このように文字列を順序変換することで、先頭部分が同一である文字列の出現頻度を低くすることができる。また、文字列の回転を利用して順序変換することで、順序を再現する処理も容易となる。
【０１０５】
図１５は、第３の実施の形態の暗号化処理の進行例を示す図である。図１５に示す例は、暗号化対象のビット列Ｄ０，Ｄ１，Ｄ２，Ｄ３を暗号化するものである。ただし、ビット列Ｄ０はダミー文字に対応する。
【０１０６】
第１の状態［ＳＴ３１］には、ビット列Ｄ０に対する暗号化処理が示されている。暗号化処理の基本的な流れは、第１の実施の形態と同じである。そして、演算結果として、ビット列Ｃ０が得られる。ビット列Ｃ０は、暗号文出力部１４６ｂによって破棄される。
【０１０７】
第２の状態［ＳＴ３２］には、ビット列Ｄ１に対する暗号化処理が示されている。このとき、シフトレジスタ１４２はビット列Ｃ０のビット数だけ左にシフトされ、右にビット列Ｃ０が格納されている。そして、演算結果として、ビット列Ｃ１が得られる。ビット列Ｃ１は、暗号文出力部１４６ｂによって、１つ目の文字コードに対応するビット列として取り扱われる。
【０１０８】
以後同様に、ビット列Ｄ２およびビット列Ｄ３に対する暗号化が順次行われる。第３の状態［ＳＴ３３］には、ビット列Ｄ２に対する暗号化処理が示されている。ここで得られたビット列Ｃ２は、暗号文出力部１４６ｂによって、２つ目の文字コードに対応するビット列として取り扱われる。第４の状態［ＳＴ３４］には、ビット列Ｄ３に対する暗号化処理が示されている。ここで得られたビット列Ｃ３は、暗号文出力部１４６ｂによって、３つ目の文字コードに対応するビット列として取り扱われる。
【０１０９】
このように、最初にダミー文字を暗号化することで、それ以降の暗号化処理をダミー文字の処理結果に依存させることができる。
次に、復号部１５０ｂの復号処理の機能について詳細に説明する。以下、暗号化部１４０ｂと同様、暗号化アルゴリズムとしてＤＥＳを用い、暗号利用モードとしてＣＦＢモードを用いるものとする。
【０１１０】
図１６は、第３の実施の形態の復号部の機能例を示すブロック図である。復号部１５０ｂは、暗号文変換部１５１、シフトレジスタ１５２、暗号化処理部１５３、暗号データ記憶部１５４、排他的論理和演算部１５５、平文出力部１５６ｂ、ダミー暗号選択部１５７および順序再生部１５８を有している。暗号文変換部１５１、シフトレジスタ１５２、暗号化処理部１５３、暗号データ記憶部１５４および排他的論理和演算部１５５の処理機能は、それぞれ第１の実施の形態のものと同じである。
【０１１１】
ダミー暗号選択部１５７は、暗号文３７が入力されると、ダミー位置記憶部１３４に格納されている位置情報を参照し、位置情報で指定される暗号文字をダミー暗号として選択する。そして、ダミー暗号選択部１５７は、暗号文３７の先頭に選択したダミー暗号を付加して、新たな暗号文として暗号文変換部１５１に出力する。
【０１１２】
平文出力部１５６ｂは、排他的論理和演算部１５５から演算結果のビット列を順次取得する。ここで、平文出力部１５６ｂは、先頭のビット列、すなわち、ダミー暗号選択部１５７が付加したダミー暗号に対応するビット列を破棄する。そして、平文出力部１５６ｂは、残りのビット列をそれぞれ文字コードに変換し、変換した一連の文字コードからなる文字列を順序再生部１５８に出力する。
【０１１３】
順序再生部１５８は、平文出力部１５６ｂから文字列を取得すると、暗号化部１４０ｂの順序変換部１４７で変換された文字順序を逆変換して、平文３８を再生する。すなわち、順序再生部１５８は、取得した文字列を先頭と最後尾とが連続した循環文字列とみなし、順序変換部１４７と逆の操作を行う。そして、順序再生部１５８は、再生した平文３８を出力する。
【０１１４】
図１７は、第３の実施の形態の復号処理の進行例を示す図である。図１７に示す例は、復号対象のビット列Ｃ０，Ｃ１，Ｃ２，Ｃ３を復号するものである。ただし、ビット列Ｃ０はダミー暗号に対応する。
【０１１５】
第１の状態［ＳＴ４１］には、ビット列Ｃ０に対する復号処理が示されている。復号処理の基本的な流れは、第１の実施の形態と同じである。そして、演算結果として、ビット列Ｄ０が得られる。ビット列Ｄ０は、平文出力部１５６ｂによって破棄される。
【０１１６】
第２の状態［ＳＴ４２］には、ビット列Ｃ１に対する復号処理が示されている。このとき、シフトレジスタ１５２はビット列Ｃ０のビット数だけ左にシフトされ、右にビット列Ｃ０が格納されている。そして、演算結果として、ビット列Ｄ１が得られる。ビット列Ｄ１は、平文出力部１５６ｂによって、１つ目の文字コードに対応するビット列として取り扱われる。
【０１１７】
以後同様に、ビット列Ｃ２およびビット列Ｃ３に対する復号が順次行われる。第３の状態［ＳＴ４３］には、ビット列Ｃ２に対する復号処理が示されている。ここで得られたビット列Ｄ２は、平文出力部１５６ｂによって、２つ目の文字コードに対応するビット列として取り扱われる。第４の状態［ＳＴ４４］には、ビット列Ｃ３に対する復号処理が示されている。ここで得られたビット列Ｄ３は、平文出力部１５６ｂによって、３つ目の文字コードに対応するビット列として取り扱われる。
【０１１８】
このように、最初にダミー暗号を復号することで、暗号化部１４０ｂによって生成された暗号文を復号することができる。
このような暗号化処理および復号処理を行うサーバを用いることで、第１の実施の形態と同様の効果を得られる。更に、第３の実施の形態のサーバを用いることで、先頭部分が同一になりやすい文字データを多数暗号化する場合でも、文字列の順序が変換されて、暗号文の先頭部分が同一になる可能性を低くできる。また、ダミー文字の暗号化によって初期ベクタが更新されるため、順序変換した文字列の先頭部分が同一になったとしても、対応する暗号文の先頭部分は同一にならない。従って、データベースに格納された多数の暗号文から元の文字列を推測するのを困難にし、暗号の安全性低下を効率的に防止することができる。
【０１１９】
なお、本実施の形態では、暗号化アルゴリズムとしてＤＥＳを用いたが、他の暗号化アルゴリズムを用いてもよい。また、本実施の形態では暗号利用モードとしてＣＦＢモードを用いたが、ＣＢＣ（Cipher Block Chaining）モードやＯＦＢ（Output FeedBack）モードなどの他の暗号利用モードを用いてもよい。特に、第１の実施の形態および第２の実施の形態では、連鎖機能を有さない暗号利用モードを用いてもよい。
【０１２０】
また、本実施の形態では、変換テーブルにおいて、有効ビット数が大きい領域にできる限り多くの文字コードを配置するようにしたが、有効ビット数が同じ領域を２つ以上作成してもよい。例えば、２６＝２の３乗（８）＋２の３乗（８）＋２の３乗（８）＋２の１乗（２）のように分割することも可能である。この場合、文字コードから暗号化対象または復号対象のビット列に変換する際に、どの領域にある対応関係を使用したかを後段の処理機能に通知することで、逆変換を容易に行える。
【０１２１】
また、本実施の形態では、変換テーブル内に有効ビット数を明記したが、有効ビット数の判定方法は、さまざまな代替方法が考えられる。例えば、暗号化処理および復号処理の際に、変換テーブル内での相対位置から、自動的に有効ビット数を判定するようにしてもよい。
【０１２２】
以上、本発明の暗号処理プログラム、暗号処理方法および暗号処理装置を図示の実施の形態に基づいて説明したが、本発明はこれに限定されるものではなく、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、本発明に他の任意の構成物や工程が付加されていてもよい。また、本発明は、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【０１２３】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、サーバが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープ（ＭＴ）などがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc - Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１２４】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１２５】
上記プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
【図面の簡単な説明】
【０１２６】
【図１】本実施の形態の概要を示す図である。
【図２】本実施の形態のシステム構成を示す図である。
【図３】サーバのハードウェア構成を示す図である。
【図４】第１の実施の形態のサーバの機能を示すブロック図である。
【図５】変換テーブルのデータ構造例を示す図である。
【図６】第１の実施の形態の暗号化部の機能例を示すブロック図である。
【図７】第１の実施の形態の暗号化処理の進行例を示す図である。
【図８】第１の実施の形態の復号部の機能例を示すブロック図である。
【図９】第１の実施の形態の復号処理の進行例を示す図である。
【図１０】第２の実施の形態の暗号化部の機能例を示すブロック図である。
【図１１】第２の実施の形態の復号部の機能例を示すブロック図である。
【図１２】第３の実施の形態のサーバの機能例を示すブロック図である。
【図１３】第３の実施の形態の暗号化部の機能例を示すブロック図である。
【図１４】順序変換処理の概要を示す図である。
【図１５】第３の実施の形態の暗号化処理の進行例を示す図である。
【図１６】第３の実施の形態の復号部の機能例を示すブロック図である。
【図１７】第３の実施の形態の復号処理の進行例を示す図である。
【符号の説明】
【０１２７】
１  暗号化装置
１ａ，２ａ  変換テーブル記憶手段
１ｂ  平文変換手段
１ｃ  暗号化手段
１ｄ  暗号文出力手段
２  復号装置
２ｂ  暗号文変換手段
２ｃ  復号手段
２ｄ  平文出力手段
３，６  平文
４，５  暗号文
【図１】
2008152059.tif 000003
【図２】
2008152059.tif 000004
【図３】
2008152059.tif 000005
【図４】
2008152059.tif 000006
【図５】
2008152059.tif 000007
【図６】
2008152059.tif 000008
【図７】
2008152059.tif 000009
【図８】
2008152059.tif 000010
【図９】
2008152059.tif 000011
【図１０】
2008152059.tif 000012
【図１１】
2008152059.tif 000013
【図１２】
2008152059.tif 000014
【図１３】
2008152059.tif 000015
【図１４】
2008152059.tif 000016
【図１５】
2008152059.tif 000017
【図１６】
2008152059.tif 000018
【図１７】
2008152059.tif 000019