(57)【要約】【課題】  共通鍵暗号技術において、共通鍵暗号としての安全性を落とすことなく、平文の特定コードの利用を避けて、暗号文を生成する。【解決手段】  特定コードと判別されたブロックはそのまま出力し、特定コードでないと判別されたブロックについては、特定コードを回避した暗号化処理を行う。特定コードを回避する暗号化処理は、特定コード領域をスライドさせ、特定コード領域外で暗号化を行い、暗号化後に特定コード領域を元の位置に戻すことにより実現する。【選択図】  図１
2007086421.tif 000002
【特許請求の範囲】
【請求項１】
メッセージをブロック単位で暗号化する暗号化装置であって、
入力されたメッセージを構成する各ブロックについて、予め定めた所定幅の領域を有する特定のコードであるか否かを判別する判別手段と、
前記判別手段で前記特定のコードでないと判別されたブロックに対し、当該特定のコードを回避する暗号化処理を行う特定コード回避暗号化手段と、
前記判別手段で前記特定のコードと判別されたブロックは、当該ブロックのまま暗号文ブロックとして出力し、前記判別手段で前記特定のコードでないと判別されたブロックは、前記特定コード回避暗号化手段で暗号化処理を施した後のブロックを前記暗号文ブロックとして出力する出力手段と、を備えること
を特徴とする暗号化装置。
【請求項２】
請求項１記載の暗号化装置であって、
前記特定コード回避暗号化手段は、
前記ブロックを、前記特定コードとして定められた領域の右隣のビットが０ビットの位置にくるようブロック長幅でスライドさせる第一のスライド手段と、
前記第一のスライド手段においてスライド後のブロックに攪拌処理を施す攪拌手段と、
前記攪拌処理後のブロックを、前記第一のスライド手段で行ったスライド幅と同量のスライドを前記第一のスライドと逆方向に行う第二のスライド手段と、を備えること
を特徴とする暗号化装置。
【請求項３】
請求項１記載の暗号化装置であって、
前記特定コード回避暗号化処理は、
前記ブロックに攪拌処理を施す攪拌手段と、
前記攪拌処理後のブロックが、前記特定コードとして定められた領域に該当する箇所から当該特定コードに対して攪拌処理を行った場合に該当する箇所の間にあるか否かを判別するブロック判別手段と、
前記ブロック判別手段の判別結果が、前記間にあるものの場合、前記攪拌処理後のブロックを、前記特定コードの領域幅分、当該特定コード領域側へスライドさせるスライド手段と、を備えること
を特徴とする暗号化装置。
【請求項４】
請求項１記載の暗号化装置であって、
前記特定コード回避暗号化処理は、
前記ブロックに攪拌処理を施す攪拌手段と、
前記攪拌処理後のブロックが、前記特定コードとして定められた領域に該当する箇所にあるか否かを判別するブロック判別手段と、
前記ブロック判別手段の判別結果が、前記箇所にあるものの場合、前記攪拌処理後のブロックを、当該特定コードが攪拌される箇所に移動させること移動手段と、を備えること
を特徴とする暗号化装置。
【請求項５】
請求項２から４のいずれか１項記載の暗号化装置であって、
前記攪拌処理には、前記処理単位のブロックのデータ長（Ｌとする）と同じデータ長の乱数であって、その取り得る値が前記特定コードの領域幅（ｄとする）分を除いたもの（２Ｌ−ｄ）である圧縮乱数を用いること
を特徴とする暗号化装置。
【請求項６】
請求項５記載の暗号化装置であって、
前記圧縮乱数は、前記データ長Ｌの乱数を生成し、当該生成した乱数について、前記（２Ｌ−ｄ）の剰余を取ることにより、生成すること
を特徴とする暗号化装置。
【請求項７】
請求項５記載の暗号化装置であって、
前記圧縮乱数は、前記データ長Ｌの乱数を生成し、当該生成した乱数が前記（２Ｌ−ｄ）外の値の場合、破棄するとともに当該（２Ｌ−ｄ）内の値になるまで、前記データ長Ｌの乱数の生成を繰り返すことにより生成すること
を特徴とする暗号化装置。
【請求項８】
暗号化されたメッセージをブロック単位で復号する復号装置であって、
入力された暗号化されたメッセージを構成する各ブロックについて、予め定められた特定のコードであるか否かを判別する判別手段と、
前記判別手段で特定のコードでないと判別されたブロックについて、当該特定のコードを回避する復号処理を行う特定コード回避復号手段と、
前記判別手段で前記特定のコードと判別されたブロックは、当該ブロックをそのまま平文ブロックとして出力し、前記判別手段で前記特定のコードでないと判別されたブロックは、前記特定コード回避復号手段で復号処理を施した後のブロックを前記平文ブロックとして出力する出力手段と、を備えること
を特徴とする復号装置。
【請求項９】
データを暗号化して保持し、ユーザからの指示に従って復号してユーザに提示するデータベースサーバであって、
暗号化されたデータを保持する記憶装置と、
前記記憶装置に保持するデータを暗号化する請求項１から７のいずれか１項記載の暗号化装置と、
ユーザからの指示に従って、前記記憶装置に暗号化された保持されているデータを復号する請求項８記載の復号装置と、を備えること
を特徴とするデータベースサーバ。
【請求項１０】
メッセージをブロック単位で暗号化する暗号化方法であって、
入力されたメッセージを構成する各ブロックについて、予め定めた所定幅の領域を有する特定のコードであるか否かを判別する判別ステップと、
前記判別ステップで前記特定のコードと判別された場合、当該ブロックを、当該ブロックのまま暗号文ブロックとして出力し、前記判別ステップで前記特定のコードでないと判別された場合、当該ブロックに対し、当該特定のコードを回避する暗号化処理を行い、前記暗号化処理後のブロックを前記暗号文ブロックとして出力する出力ステップと、を備えること
を特徴とする暗号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はセキュリティ技術に係り、特にデジタル情報を秘密裏に送受信および保管するためのデータの暗号化技術に関する。
【背景技術】
【０００２】
暗号技術はデジタル情報を通信したり、保管したりする場合に、その情報のセキュリティ確保のために用いられる。暗号化の対象となるデータのサイズや種類は様々であり、それらに応じて暗号処理も異なる。
【０００３】
例えば、通信時は、ネットワーク層などの下位のレイヤでは、通信路上で送受信されるパケットをパケット単位で暗号化する一方、アプリケーション層のような上位のレイヤでは、通信路上で送受信されるデータをファイル単位で暗号化するなど、暗号化を行う階層により、その処理が変わる。
【０００４】
また、保管時は、ディスクのセクター単位で暗号化する利用形態もあれば、ファイルシステムの枠組みで定義されるデータに対して暗号化を適用する利用形態もある。
【０００５】
暗号化の対象となるデータの種類等や、暗号化処理の利用状況に応じて、鍵交換頻度や暗号処理によるサイズ増加の許容範囲など、暗号処理への要求仕様は異なるため、対象や利用状況に応じて適切な暗号化処理を選択する、あるいは、新しい暗号化処理方法を開発する必要がある。
【０００６】
現在、データを暗号化する方式は、その安全性のよりどころとなる暗号プリミティブ自体と、利用モードと呼ばれるその暗号プリミティブの利用方法との組み合わせにより決定される。暗号プリミティブは、達成すべき安全性や処理速度の観点から選択され、利用モードは、達成したい機能に従って選択される。
【０００７】
例えば、金融など非常に高い安全性が求められる分野で、通信路上のデータを暗号化したり改ざん検知を行ったりする場合は、高い安全性を達成できる２５６ビット鍵長の暗号プリミティブ、例えばＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）と、改ざん検知機能付き暗号処理を実現する利用モード、例えば、ＣＣＭ（Ｃｏｕｎｔｅｒ  ｗｉｔｈ  ＣＢＣ−ＭＡＣ）との組み合わせが選択される。この選択により、高い安全性と改ざん検知機能を有する暗号処理を実現できる。
【０００８】
現在、暗号のために用いられる暗号プリミティブには、主に、ブロック暗号、疑似乱数生成器の二種類がある。それぞれ実用的な方式が提案され、さまざまな用途で用いられてきている。ブロック暗号は、一般に鍵および初期値のセットアップが高速である。よって、頻繁に鍵や初期値が切り替わるような暗号通信にはブロック暗号が適している。一方、疑似乱数生成器は鍵をセットアップするまでは時間がかかるが、一度鍵の準備ができると極めて高速に暗号を処理することができる。よって、鍵や初期値の変更が小頻度であるようなデータを扱う場合には疑似乱数生成器が有利である。
【０００９】
利用モードについては、例えば、ブロック暗号の利用モードとして、ＥＣＢ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｄｅ  Ｂｏｏｋ）、  ＣＢＣ（Ｃｉｐｈｅｒ  Ｂｌｏｃｋ  Ｃｈａｉｎｉｎｇ）、  ＣＦＢ（Ｃｉｐｈｅｒ  Ｆｅｅｄｂａｃｋ）、  ＯＦＢ（Ｏｕｔｐｕｔ  Ｆｅｅｄｂａｃｋ）、  ＣＴＲ（Ｃｏｕｎｔｅｒ）など多くが知られている。それぞれ、並列処理性や、安全性、自己同期性、実装コストなどの観点から利点のある方式であり、利用の状況に応じてこれらから適切なものを選ぶ。一方、疑似乱数生成器を使った暗号プリミティブの利用モードとしては、バイナリ加算モードが一般的である。これは、ストリーム暗号と呼ばれ、多く用いられている。擬似乱数生成器を使った暗号プリミティブの利用モードには、そのほかＭＵＬＴＩ−Ｓ０１がある。
【００１０】
情報通信ネットワークの進展と共に電子情報に対する秘匿や認証のための暗号化技術の重要性は増している。一方で、さまざまな種類のデジタル情報を扱うようになり、採用する暗号技術により、問題が生じる場合がある。
【００１１】
現在の暗号処理は、安全性を最優先に構成されている。完全に情報を秘匿するために、暗号文は全くのランダムなデータに変換される。しかし、このようなランダムなデータは実用上非常に扱いにくいことがある。例えば、通信路上で送受信されるデータを暗号化する場合、暗号文が完全な乱数である以上、通信としての機能、例えばデータの区切りを識別したり、同期を回復したりといった機能が静的なものに限定される。これは、動的なコンテンツ、例えばデータ長がわからないものや、同期ずれ、アウトオブオーダ（Ｏｕｔ−Ｏｆ−Ｏｒｄｅｒ）の懸念がある通信データを扱う上では致命的な問題である。
【００１２】
例えば、ＰＧＰ（Ｐｒｅｔｔｙ  Ｇｏｏｄ  Ｐｒｉｖａｃｙ）など従来の暗号実装では、ほぼ乱数の振る舞いをする暗号文に対して冗長データを付加し、上記問題を解決している。具体的には、符号化後もデータの区切りを判別するなど、データを取扱うための制御に用いる所定のコード（以後、特定コードと呼ぶ。）を予め定義し、この特定コードが出現しないように暗号文を符号化する。データの区切り等、もともと特定コードにより判別していた箇所には、特定コードを冗長データとして追加する。これにより、データの区切り等を判別することができる。
【００１３】
上記方法が用いられている例として、インターネットのメールプロトコル上で用いられる暗号やバイナリデータに対して行う符号化手法、ｕｕｅｎｃｏｄｅ，  ＢｉｎＨｅｘ，  ｂａｓｅ６４などがある。これらの符号化手法を暗号に利用する場合は、任意の暗号方式で暗号化した暗号文に対し、先ほどの符号化手法で冗長データをつけながら特定コードを回避し、符号化する。
【００１４】
しかしながら、この手法にはいくつかの問題がある。まず、冗長データを付加するため、必然的にデータ長が増加する。データ長の増加は、元のデータ（平文）の長さに関係なく数バイト伸びるというのではなく、平文が長ければ長いほど、追加するの暗号文長も伸びる。例えば、ｂａｓｅ６４ならば４／３倍（＝１３３％）の長さとなる。その他の方式も同様にデータ長が長くなり、結果的にデータ送信時間が増大する。
【００１５】
また、データ長が増加することにより、別の弊害も生じる。一つは、暗号文の一部にアクセス（読み書き）を行うとき、そのアドレス計算が煩雑になることである。冗長データとして新たなデータが付加されるため、意図したデータへのアクセスには余計な計算やバイト単位のシフトなどが必要になる。さらに、データ量の大きいデータベースなどを、ある時刻から暗号文に置き換える場合、平文のデータベースから暗号文化への移行方法に自由度がない。全ての読み出し、書き込みのアクセスを停止し、データベースを暗号化し、これが完成してから、再度サービス（データの読み出し、書き込み）を開始する必要がある。なぜならば、移行状態で、平文と暗号文とを動的に置き換えると、暗号文のサイズは平文のサイズよりも大きいため、平文の領域では足りず、結果的に暗号文が格納できないためである。
【００１６】
以上の事情により、いかに暗号後のデータ長を拡張することなく、暗号文を符号化するかという問題は工業的観点から重要な問題として捉えられてきた。
【００１７】
一般に、暗号化前後のデータ長を不変とするために、暗号文の生成（符号化）に算術加算を使う技術がある（例えば、特許文献１参照。）
しかしながら、上記特許文献１の技術では、特定コードもその他の箇所も区別なく暗号化されるため、特定コードが後処理において重要な役割を果たすデータ列には適用し難い。
【００１８】
一方、従来のブロック暗号をＯＦＢやＣＴＲモードで使い、ブロック単位で暗号化をする／しないをスイッチングする技術がある（例えば、非特許文献１参照。）。
【００１９】
非特許文献１に開示されている技術は、符号化（暗号化）の結果、上記のような特定コードが出現するブロックについては、そのブロックの暗号処理を行わず、平文ブロックのまま暗号文ブロックとして出力する。各ブロック毎に、暗号化し、その結果により、暗号文を出力するか平文を出力するか判断し、逐次暗号化を進める。
【００２０】
【特許文献１】特許第０３４７３１７１号公報
【非特許文献１】岩村恵市，  林淳一，  「特定符号を生成しない暗号化方式に関する一提案」，  コンピュータセキュリティシンポジウム２００３論文集、ｐｐ２１７〜ｐｐ２２２、平成１５年１０月２９日（水）〜１０月３１日（金），  社団法人情報処理学会
【発明の開示】
【発明が解決しようとする課題】
【００２１】
しかし、上記の非特許文献１に開示されている方法には、安全性の観点から欠点がある。本既存技術では、特定コードのパターンが符号化の結果生成されてしまう場合には暗号処理を行わず平文を、暗号化せずにそのまま出力する。従って、この部分の情報が漏洩する。ブロック長が長く、かつ、特定コード種類数が限定されていれば、暗号化されない平文ブロックの確率は小さくなるが、現実にはそうでない。例えばＡＳＣＩＩ文字の１バイトコードを暗号化する場合、特定コードを、未定義文字、非表記文字とすると、暗号文の半分以上が特定コードに該当する。
【００２２】
以上のように、通信路上で送受信される多種多様なデータの暗号化においては、暗号後のデータ（暗号文）に特定コードが含まれないような符号化手法が必須な技術であるにもかかわらず、既存の技術では、暗号文長を増大させるか、または、安全性を低下させるかのいずれかの方法でしか対処できないという問題がある。
【００２３】
本発明は、上記事情を鑑みてなされたものであり、特定コードを出現させることなく暗号文を生成でき、安全性が高く、かつ、データ送信時間が増大しない暗号化技術を提供することを目的とする。
【課題を解決するための手段】
【００２４】
本発明は、メッセージをスキャンしている途中に、システムで定義される特殊な記号の出現を検出し、特殊な記号が出現した場合はデータ変換（暗号化）を行わない。また、データ変換においても、特殊な記号を回避して行う。データ変換は、メッセージの平文における特殊な記号の領域をスライドさせ、特殊な記号以外の領域内で行う。
【００２５】
具体的には、メッセージをブロック単位で暗号化する暗号化装置であって、入力されたメッセージを構成する各ブロックについて、予め定めた所定幅の領域を有する特定のコードであるか否かを判別する判別手段と、前記判別手段で前記特定のコードでないと判別されたブロックに対し、当該特定のコードを回避する暗号化処理を行う特定コード回避暗号化手段と、前記判別手段で前記特定のコードと判別されたブロックは、当該ブロックのまま暗号文ブロックとして出力し、前記判別手段で前記特定のコードでないと判別されたブロックは、前記特定コード回避暗号化手段で暗号化処理を施した後のブロックを前記暗号文ブロックとして出力する出力手段と、を備えることを特徴とする暗号化装置を提供する。
【発明の効果】
【００２６】
本発明によれば、特定コードを出現させることなく暗号文を生成でき、安全性が高く、かつ、データ送信時間が増大しない暗号化技術を提供することができる。
【発明を実施するための最良の形態】
【００２７】
＜＜第一の実施形態＞＞
以下、本発明を適用した第一の実施形態を図面を用いて説明する。本実施形態の暗号化装置は、所定のブロック単位で入力されたデータを、暗号化して出力するブロック暗号の処理を行う。暗号化装置は、ブロックデータが入力されると、特定のコード（以後、特定コードと呼ぶ。）はそのまま出力し、特定コード以外のコードは、暗号化して出力する。
【００２８】
特定コードは、入力されるデータ列の中で、制御などの特殊な目的で使用される予め定められたコードである。本実施形態において、予め定義されている特定コードは、ｔから始まる幅ｄの連続する１領域（ｔ〜ｔ+ｄ-１）に渡るものとする。すなわち、領域端の特定コードｔから、ｔ+１、ｔ+２、・・・・・、ｔ+ｄ−１までの、ｄ個のコードが、特定コードとして定義されているものとする。
【００２９】
図１は、本実施形態の暗号化装置３００１の機能ブロック図である。本図に示すように、本実施形態の暗号化装置３００１は、入力された所定のブロック単位の平文Ｍ（以後、メッセージブロックＭと呼ぶ。）の暗号化処理を行う暗号処理部３０１１と、暗号処理部３０１１から所定の場合に呼ばれ、入力されたメッセージブロックＭに対し、特定コードを回避する暗号化処理（以後、特定コード回避暗号処理と呼ぶ。）を行う特定コード回避暗号処理部３０１２と、後述する圧縮乱数を生成する圧縮乱数生成処理部３０１３と、擬似乱数を生成する擬似乱数生成器３０１４とを備える。擬似乱数生成器３０１４には秘密鍵Ｋ３０２１と初期値Ｉ３０２２とが入力される。
【００３０】
本実施形態の暗号化装置３００１において、メッセージブロックＭが入力された場合の暗号処理部３０１１における暗号処理について以下に説明する。
【００３１】
図２は、本実施形態の暗号処理部３０１１において、メッセージブロックＭが入力された場合の処理の流れの概略の説明図である。
【００３２】
メッセージブロックＭが入力されると（ステップ１０１）、暗号処理部３０１１は、入力されたメッセージブロックＭが特定コードであるかどうかを判定する(ステップ１０２)。特定コードと判定した場合、暗号処理部３０１１は、入力されたメッセージブロックＭをそのまま暗号化されたブロックデータＣ（以後、暗号文ブロックＣと呼ぶ。）として出力する（ステップ１０５）。
【００３３】
暗号処理部３０１１は、特定コードでないと判定した場合、特定コード回避暗号処理部３０１２を呼び出し、メッセージブロックＭに対して後述する特定コード回避暗号処理を行い（ステップ１０４）、その結果を、暗号文ブロックＣとして出力する（ステップ１０５）。
【００３４】
次に、特定コード回避暗号処理部３０１２による特定コード回避暗号処理について説明する。本実施形態の特定コード回避暗号処理によれば、特定コード回避暗号処理部３０１２の出力は特定コードとはならない。また、本処理は可逆となる。
【００３５】
図３は、本実施形態の特定コード回避暗号処理部３０１２の処理の処理フローである。ここで、本明細書中では、以下、メッセージブロックＭのビット長｜Ｍ｜をＬと表す。定義されている特定コードの領域は、ｔから始まる幅ｄの連続した１領域、すなわち、ｔ〜（ｔ+ｄ-１）である。
【００３６】
特定コード回避暗号処理部３０１２は、暗号処理部３０１１からメッセージブロックＭを受け取ると（ステップ１４０１）、−（ｔ＋ｄ）を法２Ｌで加算する（ステップ１４０２）。加算した結果を、中間値ブロックＭ’とする。
【００３７】
次に、圧縮乱数生成処理部３０１３にメッセージブロックＭのビット長Ｌに応じた圧縮乱数Ｓの生成を行わせる（ステップ１４０３）。
【００３８】
ここで、圧縮乱数とは、ｈをパラメータとし、Ｌビットではありながらもその値が０からｈ−ｄに限定されるよう出力が圧縮された乱数のことである。ステップ１４０３では、圧縮乱数生成処理部３０１３は、パラメータｈを２Ｌ−ｄ（ｈ＝２Ｌ−ｄ）とし、出力が０から２Ｌ−（ｄ+１）までの２Ｌ−ｄ通りに限定された圧縮乱数Ｓを生成する。生成する乱数を０から２Ｌ−（ｄ+１）までの間の値に限定するのは、メッセージの種類が２Ｌ−ｄ通りしかないため、情報理論上情報を隠蔽するためには２Ｌ−ｄ通りの乱数で十分だからである。圧縮乱数生成処理については、後述する。
【００３９】
次に、特定コード回避暗号処理部３０１２は、中間値ブロックＭ’と、圧縮乱数生成処理部３０１３により生成された圧縮乱数Ｓとを、Ｌビット長のレジスタ幅で算術加算する（中間値ブロックＭ’に圧縮乱数Ｓを法２Ｌ−ｄで加算する）（ステップ１４０４）。すなわち、（Ｓ−（ｔ＋ｄ））ｍｏｄ（２Ｌ−ｄ）を計算する。加算結果を中間値ブロックＣ’とする。
【００４０】
最後に、中間値ブロックＣ’に（ｔ＋ｄ）を法２Ｌで加算し（ステップ１４０５）、暗号文ブロックＣを得る（ステップ１４０６）。
【００４１】
本実施形態の上記特定コード回避暗号処理によるデータの変換の様子を、図４を用いて説明する。図４は、本実施形態の特定コード回避暗号処理のイメージ図である。ここでは、メッセージブロックＭのビット長を８として説明する。定義されている特定コードの領域は、図３同様、ｔ〜（ｔ+ｄ−１）とする。メッセージブロックＭは０ｘ００から０ｘｆｆまでの２５６通りあり、そのうちｔ〜（ｔ+ｄ−１）の値は、暗号処理部３０１１の処理により、入力として与えられない。
【００４２】
本実施形態の特定コード回避暗号処理のポイントは、図４に示すように、特定コード領域（ｔ〜（ｔ+ｄ−１））が端（ｆｆ-ｄ−１〜ｆｆ）に来るよう変換し、変換後の００〜（ｆｆ-ｄ）の特定コード領域外で暗号化を行う点である。
【００４３】
入力されるメッセージブロックＭを数直線１５０１で表す。ステップ１４０２の処理により、特定コード領域（ｔ〜（ｔ+ｄ−１））は、入力されるメッセージブロックＭの取り得る範囲内で整数として最も大きいもの（ｆｆ-ｄ−１〜ｆｆ）となるよう変換される。このときの中間値ブロックＭ’を数直線１５０２で表す。ステップ１４０２の処理により、有効なデータを法２Ｌ−ｄで扱うことができるようになる。
【００４４】
ステップ１４０４における法２Ｌ−ｄでの変換（攪拌）では、（ｆｆ-ｄ−１〜ｆｆ）に移動された特定コード領域は、その攪拌の影響を受けない。ステップ１４０４処理後の中間値ブロックＣ’を数直線１５０３で表す。
【００４５】
最後に、ステップ１４０５によりステップ１４０２で行った変換の逆変換を行うことで特定コード領域（ｆｆ-ｄ−１〜ｆｆ）を元の場所（ｔ〜（ｔ+ｄ−１））に戻す。ステップ１４０５の処理後の暗号文ブロックＣを数直線１５０４で表す。
【００４６】
以上の処理により、暗号文ブロックＣでは、特定コード領域以外の部分は、秘密情報である圧縮乱数Ｓで攪拌されている。また、数直線１５０４で示すように、本特定コード回避暗号処理により出力が特定コード領域（ｔ〜（ｔ+ｄ））となるものもない。以上説明したように、本特定コード回避暗号処理は、可逆な変換を独立に組み合わせたものであるため、全体として可逆であり、かつ、特定コードを出力しないものといえる。
【００４７】
次に、圧縮乱数生成処理部３０１３による圧縮乱数Ｓの具体的な生成方法を説明する。圧縮乱数Ｓの生成は、安全性が多少低いが高速に生成する第一の方法と、処理量は比較的大きくなるが、安全性の高い第二の方法とがある。まず、第一の方法について説明する。
【００４８】
図５は、圧縮乱数Ｓの生成方法の中で、安全性が多少低いが高速に生成できる第一の方法の説明図である。本生成方法では、最終的に０から２Ｌ−（ｄ−１）までの２Ｌ−ｄ通りの乱数を生成する。
【００４９】
圧縮乱数生成処理部３０１３は、擬似乱数生成記３０１３にＬビットの乱数Ｓ’を生成させる（ステップ４０１）。なお、Ｌビットの乱数Ｓ’の生成方法については、後述する。そして、圧縮乱数生成処理部３０１３は、得られたＳ’について、２Ｌ−ｄの剰余をとる（ステップ４０２）。すなわち、Ｓ’ｍｏｄ（２Ｌ−ｄ）を計算する。そして、圧縮乱数生成処理部３０１３は、その結果を圧縮乱数Ｓとして出力する（ステップ４０３）。
【００５０】
上述の処理からわかるように、Ｓ’が０の場合および２Ｌ−ｄの場合、結果Ｓは０になる。また、Ｓ’が１の場合および２Ｌ−（ｄ+１）の場合、結果Ｓは１になる。すなわち、各Ｓ’の値が同じ確率で発生することを前提とすると、圧縮乱数Ｓの所定の値については、その値となる確率がその他の値に比較して２倍となる。よって、これを暗号に利用した場合、若干、各Ｓ値の発生に偏りが生じ、これが、暗号解読の手がかりとなり、情報の漏洩に繋がる可能性がある。しかしながら、ブロックサイズが大きい場合は、上記Ｓの偏りは現実的な問題とはなり難い。
【００５１】
次に、処理量は比較的大きくなるが、安全性の高い第二の方法について説明する。本方法は、厳密に高い安全性を確保したい場合や、ブロック長が小さい場合に有効である。
【００５２】
図６は、圧縮乱数の生成方法の中で、第二の方法の説明図である。
【００５３】
本生成方法においても、０から２Ｌ−２までの２Ｌ−ｄ通りの乱数を生成する。
【００５４】
圧縮乱数生成処理部３０１３は、第一の方法と同様に、後述の方法により、擬似乱数生成器３０１４にＬビットの乱数を生成させる（ステップ５０１）。そして、圧縮乱数生成処理部３０１３は、得られた出力Ｓ’について、Ｓ’＜２Ｌ−ｄであるか否か判別する（ステップ５０２）。圧縮乱数生成処理部３０１３は、出力Ｓ’が、２Ｌ−ｄより小さい場合（Ｓ’＜２Ｌ−ｄの場合）、Ｓ’を出力Ｓとして出力する。一方、出力Ｓ’が２Ｌ−ｄ以上の場合（Ｓ’≧２Ｌ−ｄの場合）、本出力を破棄し、再度乱数を生成するためにステップ５０１に戻る。
【００５５】
以上の処理により、各値の発生確率が偏らない、安全な圧縮乱数Ｓの生成が可能となる。なお、上記処理によれば、出力Ｓ’が２Ｌ−ｄ以上の場合、ステップ５０１に戻る処理を、Ｓ’＜２Ｌ−ｄになるまで繰り返す。従って、乱数の生成には、そのループ処理の回数に応じて処理時間差が発生する。しかし、この時間差が攻撃者に知られた、すなわち、ループ処理の回数が攻撃者に知られたとしても、圧縮乱数の安全性には影響しないため、タイミング攻撃の観点からもこの処理方式には問題はない。
【００５６】
ここで、擬似乱数生成器３０１４によるＬビットの乱数Ｓ’の生成の方法について説明する。図７は、擬似乱数生成器３０１４においてＬビットの乱数Ｓ’を生成する処理の説明図である。
【００５７】
擬似乱数生成器３０１４は、既存の暗号学的擬似乱数発生器６０１を備える。また、暗号学的擬似乱数発生器６０１の入力として、鍵Ｋ３０２１と初期値Ｉ３０２２とが与えられる。暗号学的疑似乱数生成器６０１は、鍵Ｋ３０２１と初期値Ｉ３０２２との入力を受け付けると、任意の長さの乱数（但し、本実施形態では、Ｌビット以上の長さとする。）を生成する。擬似乱数生成器３０１４は、生成されたＬビット以上の長さを有する乱数の先頭のＬビットのみを抽出し、乱数Ｓ’として出力する。以上、擬似乱数生成器３０１４において、Ｌビットの乱数Ｓ’を生成する方法について説明した。
【００５８】
次に、上記処理に従って暗号化されたブロックデータである暗号文ブロックＣを復号する場合の処理について説明する。
【００５９】
図８は、本実施形態の復号装置４００１の機能ブロック図である。本図に示すように、本実施形態の復号装置４００１は、入力された暗号文ブロックＣの復号処理を行う復号処理部４０１１と、復号処理部４０１１から所定の場合に呼ばれ、暗号文ブロックＣに対し、特定コードを回避して復号処理（以後、特定コード回避復号処理と呼ぶ。）を行う、特定コード回避復号処理部４０１２と、特定コード回避復号処理に用いられる圧縮乱数を生成する圧縮乱数生成処理部４０１３と、擬似乱数を生成する擬似乱数生成器４０１４とを備える。擬似乱数生成器４０１４には秘密鍵Ｋ４０２１と初期値Ｉ４０２２とが入力される。なお、圧縮乱数生成処理部４０１３と擬似乱数生成器４０１４とは暗号化装置３００１の同名のものと基本的に同じであるため、ここでは説明しない。
【００６０】
本実施形態の復号装置４００１において、暗号文ブロックＣが入力された場合の復号処理部４００１における復号処理について以下に説明する。
【００６１】
図９は、本実施形態の復号処理部４０１１において、暗号文ブロックＣが入力された場合の処理の流れの概略の説明図である。
【００６２】
暗号文ブロックＣが入力されると（ステップ７０１）、復号処理部４０１１は、暗号文ブロックＣが特定コードであるか否かを判定する（ステップ７０２）。特定コードと判定した場合、復号処理部４０１１は、入力された暗号文ブロックＣをそのまま復号された平文のブロックデータＰ（以後、平文ブロックＰと呼ぶ。）として出力する（ステップ７０５）。
【００６３】
特定コードでないと判定した場合、復号処理部４０１１は、特定コード回避復号処理部４０１２を呼び出し、暗号文ブロックＣに対して後述する特定コード回避復号処理を行い（ステップ７０４）、その結果を平文ブロックＰとして出力する（ステップ７０５）。
【００６４】
次に特定コード回避復号処理部４０１２による特定コード回避復号処理について説明する。図１０は、本実施形態の特定コード回避復号処理部４０１２の処理の処理フローである。また、図１１は、本実施形態の特定コード回避復号処理のイメージ図である。特定コード領域は、暗号化処理の説明の際と同様、ｔから始まる幅ｄの連続した１領域、すなわち、ｔ〜（ｔ+ｄ−１）である。また、図１１においては、暗号文ブロックＣのビット長を８（暗号文ブロックＣは０ｘ００から０ｘｆｆの２５６通り）の場合を例に挙げて説明する。
【００６５】
特定コード回避復号処理部４０１２は、復号処理部４０１１から暗号文ブロックＣを受け取ると（ステップ３２０１）、−（ｔ＋ｄ）を法２Ｌで加算する（ステップ３２０２）。加算結果を、中間値ブロックＣ’’とする。
【００６６】
特定コード回避復号処理部４０１２は、特定コード領域（ｔ〜（ｔ+ｄ-１））を、入力される暗号文ブロックＣの取り得る範囲内で整数として最も大きいもの（ｆｆ-ｄ−１〜ｆｆ）となるよう変換する。入力される暗号文ブロックＣを数直線３３０１で表し、ステップ３２０２の処理後の中間値ブロックＣ’’を数直線３３０２で表す。このように、ステップ３２０２の処理により、有効なデータを法２Ｌ−ｄで扱うことができるようになる。
【００６７】
次に、特定コード回避復号処理部４０１２は、圧縮乱数生成処理部４０１３に暗号文ブロックＣのビット長Ｌに応じた圧縮乱数Ｓの生成を行わせる（ステップ３２０３）。圧縮乱数Ｓの生成については、上述の特定コード回避暗号化処理と同様であるため、ここでは説明しない。
【００６８】
次に、特定コード回避復号処理部４０１２は、中間値ブロックＣ’’から、圧縮乱数Ｓを法２Ｌ−ｄで減算する（ステップ３２０４）。減算結果を、中間値ブロックＰ’’とする。このとき、図１１の数直線３３０２に示すように、法２Ｌ−ｄでの変換（攪拌）は、特定コード領域（ｆｆ-ｄ−１〜ｆｆ）に影響を与えない。中間値ブロックＰ’’を数直線３３０３で表す。
【００６９】
最後に、中間値ブロックＰ’’にｔ＋ｄを法２Ｌで加算し（ステップ３２０５）、復号後の平文のブロックデータである平文ブロックＰを得る（ステップ３２０６）。これは、ステップ３２０２で行った変換の逆変換であり、特定コード領域（ｆｆ-ｄ−１〜ｆｆ）を元の場所（ｔ〜（ｔ+ｄ−１））に戻す処理である。ステップ３２０５の処理後の平文ブロックＰを数直線３３０４で表す。このように、ステップ３２０６処理後のブロックデータは、特定コード領域を回避した平文ブロックＰとなる。
【００７０】
以上説明したように、本実施形態の暗号化装置３００１による暗号化処理は、特定コードを出現させることなく暗号文を生成できる。また、その暗号化時に、データ長を増大させることもない。特定コード以外の領域で、通常の攪拌処理を行うため、安全性の低下もない。
【００７１】
また、本実施形態の暗号化装置３００１による暗号化処理は、圧縮乱数生成処理部３０１３により生成された圧縮乱数Ｓおよび特定コード領域にのみ依存し、入力されたメッセージブロックＭには依存しない。
【００７２】
また、上述のように、メッセージブロックＭが特定コードである場合の処理はもとより、特定コードでない場合に行われる特定コード回避暗号処理において行われる各変換は、算術加算といった単純な変換であり、逆変換も容易である。従って、その復号装置も逆変換を逆順に重ねることにより容易に実現できる。
【００７３】
実装プラットフォームの中には、加算処理をする場合としない場合との処理時間差を攻撃者が見地できるものがある。このような実装環境においては、条件分岐処理による処理時間差があると、暗号が解読され、秘密情報の漏洩につながる場合がある。しかしながら、本実施形態の特定コード回避暗号処理には、条件分岐処理がない。したがって、条件分岐処理に伴う処理時間差が発生しないため、処理時間差によるタイミング攻撃が実現可能な実装環境においても、安全性の高い処理を実現することができる。
【００７４】
＜＜第二の実施形態＞＞
次に、本発明の第二の実施形態を説明する。第一の実施形態は、回避すべき特定コードが連続した１領域に定義されている場合の暗号化および復号化処理である。しかしながら、回避すべき特定コードは、必ずしも連続した範囲に定義されているとは限らない。特定コードとして定義される領域は複数存在する場合もある。
【００７５】
例えば、ＳＨＩＦＴ−ＪＩＳにおける漢字エリアは、グループにおける許可されたシンボルが一連続ではない。ＳＨＩＦＴ−ＪＩＳコードでは、漢字以外のコードを特定コードとしてみた場合、多数の特定コードグループが存在する。このため、ＳＨＩＦＴ−ＪＩＳ漢字からＳＨＩＦＴ−ＪＩＳ漢字へのランダムな変換を実現するためには、いくつもの非漢字エリア（特定コード範囲）を考慮しながらの符号化が必要である。本実施形態は、このように、特定コードが複数の不連続な範囲に渡り定義されている場合に、それらを回避し、暗号化および復号をする場合の実施形態である。
【００７６】
本実施形態の暗号化装置３００１、および、復号装置４００１は、第一の実施形態と基本的に同様である。
【００７７】
また、本実施形態の暗号処理部３０１１の処理の流れも基本的に第一の実施形態と同様である。ただし、この中で、特定コード回避暗号処理部３０１２の処理は、以下のとおりである。
【００７８】
図１２は、本実施形態の特定コード回避暗号処理部３０１２の処理の処理フローである。本実施形態においても、メッセージブロックＭのビット長｜Ｍ｜をＬと表す。また、本実施形態においては、特定コードとして定義される特定コード領域がｍ個存在するものとする。ｍは自然数である。それぞれの特定コード領域は、文字ｔｉから始まる幅ｄｉの連続する領域からなるものとする。ｉはｍ以下の自然数である。
【００７９】
特定コード回避暗号処理部３０１２は、暗号処理部３０１１からメッセージブロックＭを受け取ると（ステップ２６０１）、特定コード回避暗号処理部３０１２は、３つの変数ｉ、Ｄ１、Ｄ２を、それぞれ、ｉ＝１、Ｄ１＝０、Ｄ２＝０と初期化し、メッセージブロックＭを中間値ブロックＭ’とする（ステップ２６０２）。
【００８０】
次に、中間値ブロックＭ’に、法２Ｌ−Ｄ２で−（ｔｉ＋ｄｉ−Ｄ１）を加算し（ステップ２６０３）、変数Ｄ１、Ｄ２にそれぞれｔｉ、ｄｉを加え、結果を中間値ブロックＭ’と置き換える（ステップ２６０４）。
【００８１】
ｉを１づつ増加させながら、ステップ２６０３およびステップ２６０４の処理を、ｉがｍになるまで繰り返す（ステップ２６０５、２６０６）。
【００８２】
次に、特定コード回避暗号処理部３０１２は、圧縮乱数生成部３０１３に圧縮乱数Ｓを生成させ（ステップ２６０７）、上記ステップ２６０３〜２６０６の処理後の中間値ブロックＭ’に、生成した圧縮乱数Ｓを法２L−Ｄ２で加算する（ステップ２６０８）。ここで、圧縮乱数生成部３０１３による圧縮乱数Ｓの生成方法は、第一の実施形態と同様である。加算結果を、中間値ブロックＣ’とする。
【００８３】
次に、特定コード回避暗号処理部３０１２は、変数Ｄ１、Ｄ２からそれぞれｔｉ、ｄｉを減算する（ステップ２６０９）。そして、中間値ブロックＣ’にｔｉ＋ｄｉ−Ｄ１を法２L−Ｄ２で加算し、それを中間値ブロックＣ’とする（ステップ２６１０）。
【００８４】
ｉを１づつ減少させながら、ステップ２６０９およびステップ２６１０の処理を、ｉが１になるまで繰り返す（ステップ２６１１、２６１２）。
【００８５】
特定コード回避暗号処理部３０１２は、最終的に得られた出力を、暗号文ブロックＣとして出力する（ステップ２６１３）。
【００８６】
本実施形態の特定コード回避暗号処理によるデータの変換の様子を、図１３を用いて説明する。図１３は、本実施形態の特定コード回避暗号処理によるデータの変換のイメージ図である。本実施形態では、特定コード領域が複数あるため、その領域数分、特定コード領域が端になるよう移動させる変換処理を行い、全ての特定コード領域外の範囲内で暗号化を行い、その後、端に寄せた各特定コード領域をもとの箇所に戻す変換処理を行う。
【００８７】
ここでは、ｍ＝３の場合を例にあげて説明する。すなわち、定義されている特定コードの領域をｔ１〜（ｔ１+ｄ１）、ｔ２〜（ｔ２+ｄ２）、ｔ３〜（ｔ３+ｄ３）とする。また、メッセージブロックＭのビット長は８とする。
【００８８】
図１３に示すように、本実施形態によれば、各特定コード領域ｔ１〜（ｔ１+ｄ１）、ｔ２〜（ｔ２+ｄ２）、ｔ３〜（ｔ３+ｄ３）を順に端に寄せるよう変換し、特定コード領域害の範囲において、暗号化を行う。
【００８９】
入力されるメッセージブロックＭを数直線２７０１で表す。ｉ＝１の場合のステップ２６０２〜２６０６の処理により、領域ｔ１〜（ｔ１+ｄ１−１）は、入力されるメッセージブロックＭの取り得る範囲内で整数として最も大きいもの（ｆｆ-ｄ１−１〜ｆｆ）となるよう変換される。このときの中間値ブロックＭ’を数直線２７０２で表す。
【００９０】
ｉ＝２の場合のステップ２６０２〜２６０６の処理により、領域ｔ２〜（ｔ２+ｄ２-１）は、その時点の中間値ブロックＭ’の取り得る範囲内で整数として最も大きいもの（ｆｆ-ｄ１-ｄ２-１〜ｆｆ-ｄ１）となるよう変換される。このときの中間値ブロックＭ’を数直線２７０３で表す。
【００９１】
そして、ｉ＝３の場合のステップ２６０２〜２６０６の処理により、領域ｔ３〜（ｔ３+ｄ３-１）は、その時点の中間値ブロックＭ’の取り得る範囲内で整数として最も大きいもの（ｆｆ-ｄ１-ｄ２-ｄ３-１〜ｆｆ-ｄ１-ｄ２）となるよう変換される。このときの中間値ブロックＭ’を数直線２７０４で表す。
【００９２】
以上の処理により、有効なデータ、すなわち、特定コード以外のデータを、法２Ｌ-（ｄ１+ｄ２+ｄ３）で扱うことができるようになる。また、ステップ２６０８における法２Ｌ-（ｄ１+ｄ２+ｄ３）での攪拌による変換は、端にまとめられた特定コード領域（ｆｆ-ｄ１-ｄ２-ｄ３-１〜ｆｆ）に影響を与えない。ステップ２６０８処理後の中間値ブロックＣ’を数直線２７０５で表す。
【００９３】
その後、ステップ２６０９から２６１２を繰り返し、ステップ２６０２から２６０６で行った変換の逆変換を行い、特定コード領域ｆｆ-ｄ１-ｄ２-ｄ３〜ｆｆを、領域毎に、それぞれ元の場所ｔ３〜（ｔ３+ｄ３-１）、ｔ２〜（ｔ２+ｄ２-１）、ｔ１〜（ｔ１+ｄ１-１）にこの順に戻す。この時の中間値ブロックＣ’を、それぞれ、数直線２７０６、２７０７、２７０８で表す。数直線２７０８は最終的な出力である暗号文ブロックＣでもある。
【００９４】
このとき、特定コード領域以外の部分は、秘密情報である圧縮乱数Ｓで攪拌されている。また、数直線２７０８で示すように、本実施形態の特定コード回避暗号処理により、その出力が各特定コード領域ｔ１〜（ｔ１+ｄ１-１）、ｔ２〜（ｔ２+ｄ２-１）、ｔ３〜（ｔ３+ｄ３-１）となるものもない。以上説明したように、本実施形態の特定コード回避暗号処理は、可逆な変換を独立に組み合わせたものであるため、全体として可逆であり、かつ、特定コードを出力しないものといえる。
【００９５】
次に、本実施形態の特定コード回避暗号処理により暗号化された暗号文ブロックＣを復号する場合の処理について説明する。
【００９６】
本実施形態の復号装置は、基本的に第一の実施形態の復号装置４００１と同様の機能構成を有する。このため、ここでは説明しない。また、本実施形態の復号装置４００１において、暗号文ブロックＣが入力された場合の復号処理部４０１１による復号処理、圧縮乱数生成処理部４０１３、擬似乱数生成器４０１４の処理も基本的に第一の実施形態と同様である。
【００９７】
ただし、本実施形態においては、文字ｔｉから始まる幅ｄｉの連続した領域である特定コード領域が、ｍ個存在する。したがって、特定コード回避復号処理部４０１２の処理は以下のとおりとなる。
【００９８】
図１４は、本実施形態の特定コード回避復号処理部４０１２による特定コード回避復号処理の処理フローである。図１４の説明では、暗号文ブロックＣのビット長をＬとする。また、図１５は、本実施形態の特定コード回避復号処理のイメージ図である。図１５においては、暗号文ブロックＣのビット長は８、ｍは３の場合を例に挙げて説明する。また、入力される暗号文ブロックＣを数直線２９０１で表す。
【００９９】
特定コード回避復号処理部４０１２は、復号処理部４０１１から暗号文ブロックＣを受け取ると（ステップ２８０１）、３つの変数ｉ、Ｄ１、Ｄ２を、それぞれ、ｉ＝１、Ｄ１＝０、Ｄ２＝０と初期化し、暗号文ブロックＣを、中間値ブロックＣ’’とする（ステップ２８０２）。
【０１００】
次に、中間値ブロックＣ’’に、法２Ｌ−Ｄ２で−（ｔｉ＋ｄｉ−Ｄ１）を加算し（ステップ２８０３）、変数Ｄ１、Ｄ２にそれぞれｔｉ、ｄｉを加え、加算結果を、中間値ブロックＣ’’に置き換える（ステップ２８０４）。
【０１０１】
ｉを１づつ増加させながら、ステップ２８０３およびステップ２８０４の処理を、ｉがｍになるまで繰り返す（ステップ２８０５、２８０６）。
【０１０２】
特定コード回避復号処理部４０１２は、特定コード領域（ｔｉ〜（ｔｉ＋ｄｉ−１））を、その時点の暗号ブロックＣの取り得る範囲内で整数として最も大きいものとなるよう変換する。変換後の暗号文ブロックＣを表す数直線のｉが１、２、３の場合の例を、それぞれ数直線２９０２、２９０３、２９０４で表す。本処理により、本実施形態の特定コード以外のデータを、法２Ｌ−Σｄｉで扱うことができる。
【０１０３】
次に、特定コード回避復号処理部４０１２は、圧縮乱数生成処理部４０１３に中間値ブロックＣ’’のビット長Ｌに応じた圧縮乱数Ｓの生成を行わせる（ステップ２８０７）。圧縮乱数Ｓの生成については、第一の実施形態と同様である。
【０１０４】
次に、上記ステップ２８０６までの処理後の中間値ブロックＣ’’から圧縮乱数Ｓを法２Ｌ−Σｄｉで減算する（ステップ２８０８）。減算結果を、中間値ブロックＰ’’とする。また、この時の中間値ブロックＰ’’を、図１５の数直線２９０５で表す。本図に示すように、数直線２９０４において、法２Ｌ−Σｄｉでの攪拌は、特定コード領域に影響を与えない。
【０１０５】
次に、特定コード回避復号処理部４０１２は、変数Ｄ１、Ｄ２からそれぞれｔｉ、ｄｉを減算する（ステップ２８０９）。そして、ステップ２８０８処理後の中間値ブロックＰ’’にｔｉ＋ｄｉ−Ｄ１を法２L−Ｄ２で加算し、その結果を中間値ブロックＰ’’に置き換える（ステップ２８１０）。
【０１０６】
ｉを１づつ減少させながら、ステップ２８０９およびステップ２８１０の処理を、ｉが１になるまで繰り返す（ステップ２８１１、２８１２）。
【０１０７】
ｍが３の場合、ステップ２８０９から２８１２を繰り返し、ステップ２８０２から２８０６で行った変換の逆変換を行い、特定コード領域ｆｆ-ｄ１-ｄ２-ｄ３−１〜ｆｆを、領域毎に、それぞれ元の場所ｔ３〜（ｔ３+ｄ３-１）、ｔ２〜（ｔ２+ｄ２-１）、ｔ１〜（ｔ１+ｄ１-１）にこの順に戻す。この時の中間値ブロックＰ’’を、それぞれ、数直線２９０６、２９０７、２９０８で表す。数直線１９０８は、最終的な出力である平文ブロックＰである。
【０１０８】
このように、本実施形態の特定コード回避復号処理後の暗号文ブロックＣは、特定コード領域を回避した平文ブロックＰとなる。
【０１０９】
以上説明したように、本実施形態の暗号化装置３００１による暗号化処理は、特定コードを出現させることなく暗号文を生成できる。また、その暗号化時に、データ長を増大させることもない。特定コード以外の領域で、通常の攪拌処理を行うため、安全性の低下もない。
【０１１０】
また、本実施形態の暗号化処理は、第一の実施形態同様、圧縮乱数Ｓおよび特定コード領域にのみ依存し、入力されたメッセージブロックＭには依存しない。また、第一の実施形態同様、各変換は算術加算といった単純な変換であり、逆変換も容易である。従って、復号装置も容易に実現できる。
【０１１１】
本実施形態も、第一の実施形態同様、処理時間差によるタイミング攻撃が実現可能な実装環境においても、安全性の高い処理を実現することができる。
【０１１２】
＜＜第三の実施形態＞＞
次に本発明の第三の実施形態を説明する。本実施形態は、第一および第二の実施形態と異なり、特定コード回避暗号処理部３０１２における処理に分岐処理を用いる。分岐処理を用いることにより、分岐処理暗号化したコードが特定コードであれば、特定コード外にずらし、そうでない場合は、そのまま暗号文として出力するといった簡易でシンプルな処理フローにより、特定コードを回避する暗号化処理を実現することができる。
【０１１３】
本実施形態では、暗号化装置３００１、復号装置４００１の機能構成は第一および第二の実施形態と基本的に同じであるため、以下、異なる構成である特定コード回避暗号処理部３０１２による特定コード回避暗号処理および特定コード回避復号処理部４０１２による特定コード回避復号処理についてのみ説明する。
【０１１４】
まず、予め定義されている特定コードが１種類（ｔ）である場合を例に挙げて説明する。
【０１１５】
図１６は、本実施形態の特定コードが１種類である場合の特定コード回避暗号処理を説明するための処理フローである。
【０１１６】
特定コード回避暗号処理部３０１２は、暗号処理部３０１１からメッセージブロックＭを受け取ると（ステップ２０１）、圧縮乱数生成処理部３０１３にメッセージブロックＭのビット長Ｌに応じた圧縮乱数Ｓの生成を行わせる（ステップ２０２）。ここでは、２Ｌ−１通りの出力からランダムに圧縮乱数Ｓを生成させる。なお、圧縮乱数生成処理部３０１３による圧縮乱数Ｓの生成は、上述のように第一および第二の実施形態と同様であるため、ここでは説明しない。
【０１１７】
次に、特定コード回避暗号処理部３０１２は、入力されたメッセージブロックＭと、圧縮乱数生成処理部３０１３により生成された圧縮乱数Ｓとを、Ｌビット長のレジスタ幅で算術加算する。ここでは、メッセージブロックＭに圧縮乱数Ｓを法２Ｌで加算、すなわち、（Ｓ＋Ｍ）ｍｏｄ２Ｌを計算し、その結果を中間値ブロックＣ’として出力する（ステップ２０３）。
【０１１８】
次に、特定コード回避暗号処理部３０１２は、中間値ブロックＣ’を次の条件分岐にかける（ステップ２０４）。中間値ブロックＣ’がｔとｔ＋Ｓ−１との間である場合（ｔ≦Ｃ’≦（ｔ＋Ｓ−１）の場合）は、中間値ブロックＣ’をｍｏｄ２Ｌで１インクリメント（＋１）し、本処理の出力である暗号文ブロックＣ（Ｃ＝Ｃ’＋１）とする（ステップ２０５、２０６）。中間値ブロックＣ’がそれ以外の場合は（ステップ２０４）、出力Ｃ’をそのまま本処理の出力である暗号文ブロックＣ（Ｃ＝Ｃ’）とする（ステップ２０７、２０６）。
【０１１９】
以上のように、本実施形態の特定コード回避暗号処理による暗号文ブロックＣは、特定コードｔとはならない。また、本処理は可逆である。
【０１２０】
次に、本実施形態の特定コード回避暗号処理部３０１２による特定コード回避暗号処理が、可逆であり、かつ、特定コードｔを出力しないものであることを説明する。図１７は、本実施形態の特定コードが１種類である場合の特定コード回避暗号処理部３０１２による特定コード回避暗号処理のイメージ図である。
【０１２１】
入力されるメッセージブロックＭを、数直線３０１で表す。ここでは、メッセージブロックＭのビット長が８の場合を例に挙げて説明する。なお、定義されている特定コードはｔである。つまり、０ｘ００から０ｘｆｆまでの２５６通りあるメッセージブロックＭのうち、ｔだけは、暗号処理部３０１１の処理により、入力として与えられない。
【０１２２】
ステップ２０３の算術加算により、メッセージブロックＭの値は（ｔ＋Ｓ）ｍｏｄ２８に移動する。この時のブロックデータ（中間値ブロックＣ’）を、数直線３０２で表す。
【０１２３】
次に、ステップ２０４の条件分岐で、中間値ブロックＣ’は、その値がｔとｔ＋Ｓ−１の間に属する場合（ｔ≦Ｃ’≦ｔ＋Ｓ−１）、＋１されて、暗号ブロックＣとなる。すなわち、ｔ≦Ｃ’≦ｔ＋Ｓ−１の範囲のものは、ｍｏｄ２８でｔ＋１≦Ｃ（＝Ｃ’＋１）≦ｔ＋Ｓとなる。一方、中間値ブロックＣ’の値が、ｔ未満、または、ｔ＋Ｓより大きいものは、（ｔ＋Ｓ）ｍｏｄ２８がそのまま暗号ブロックＣとなる。このときのブロックデータ（暗号ブロックＣ）を、数直線３０３で表す。数直線３０３で示されるように、暗号ブロックＣには、その値がｔとなるものは存在しない。
【０１２４】
次に、上記処理に従って暗号化された暗号文ブロックＣを、復号する場合の処理である、特定コード回避復号処理部４０１２による特定コード回避復号処理について説明する。ここでも、特定コードはｔとする。
【０１２５】
図１８は、本実施形態の特定コードが１種類である場合の特定コード回避復号処理の処理フローである。
【０１２６】
特定コード回避復号処理部４０１２は、復号処理部４０１１から暗号文ブロックＣを受け取ると（ステップ８０１）、圧縮乱数生成処理部４０１３に、暗号文ブロックＣのビット長Ｌに応じた圧縮乱数Ｓの生成を行わせる（ステップ８０２）。圧縮乱数生成処理部４０１３による圧縮乱数Ｓの生成については、上述の各実施形態と同様であるため、ここでは説明しない。
【０１２７】
次に、特定コード回避復号処理部４０１２は、暗号文ブロックＣと、圧縮乱数Ｓと、特定コードｔとの関係を判別する（ステップ８０３）。暗号文ブロックＣが、ｔ+１とｔ+Ｓとの間に属する場合、すなわち、ｔ+１≦Ｃ≦ｔ+Ｓの場合、暗号文ブロックＣを１デクリメントし（−１）たものを、中間値ブロックＣ’’とする（ステップ８０４）。
【０１２８】
一方、暗号文ブロックＣが、ｔ+１とｔ+Ｓとの間以外に属する場合、暗号文ブロックＣをそのまま中間値ブロックＣ’’とする（ステップ８０７）。
【０１２９】
そして、中間値ブロックＣ’’から圧縮乱数Ｓを、Ｌビット長のレジスタ幅で減算する（ステップ８０５）。すなわち、（Ｃ’’−Ｓ）ｍｏｄ２Ｌを計算する。
【０１３０】
そして、ステップ８０５で得られた結果を平文ブロックＰとして出力する（ステップ８０６）。
【０１３１】
図１９に、本実施形態の特定コードが１種類である場合の特定コード回避復号処理のイメージ図を示す。入力される暗号文ブロックＣを、数直線９０１で表す。ここでは、暗号時と同様、暗号文ブロックＣのビット長が８の場合を例に挙げて説明する。定義されている特定コードはｔとする。つまり、０ｘ００から０ｘｆｆまでの２５６通りあるメ暗号文ブロックＣのうち、ｔだけは、復号処理部４０１１の処理により、入力として与えられない。
【０１３２】
ステップ８０３、８０４、８０７の処理後の中間値ブロックＣ’’を、数直線９０２で表す。すなわち、ｔ+１≦Ｃ≦ｔ+Ｓの場合、暗号文ブロックＣのビット長幅で１デクリメント（左に移動）し、その他の場合は、そのままとする。
【０１３３】
その後、数直線９０２で表される中間値ブロックＣ’’に対し、ステップ８０５の処理を施し、平文ブロックＰとしたものを、数直線９０３で表す。本図に示すように、ステップ８０５の処理後のブロックデータは、特定コードｔを回避したブロックデータとなる。
【０１３４】
以上説明したように、本実施形態の特定コード回避暗号処理は、圧縮乱数として生成されたＳと、特定コードｔとにのみに依存し、入力されたメッセージブロックＭ（平文の値）には依存しない。また、上述のように、メッセージブロックＭが特定コードである場合の処理はもとより、そうでない場合に行われる特定コード回避暗号処理内の各変換は、それぞれ、算術加算と条件分岐といった非常に単純な変換であり、その逆変換も容易である。従って、復号装置４００１内での特定コード回避復号処理は、暗号化装置３００１内の特定コード回避暗号処理の逆変換を逆順に重ねることにより実現できる。
【０１３５】
なお、本実施形態では、特定コード回避暗号処理において、最終的な出力に特定コードであるｔが含まれないようにするために、中間値ブロックＣ’の、所定の範囲に属するものを全て１インクリメントすることとしているが、これに限られない。
【０１３６】
入力されたメッセージブロックＭに圧縮乱数Ｓを加算した後に特定コードｔとなる出力（図１７の数直線３０２において、特定コードｔとなる出力）を、メッセージブロックＭに圧縮乱数Ｓを加算した後にｔ+Ｓとなる箇所に移動させることも可能である。すなわち、暗号文出力ｔとｔ+Ｓとを入れ替えてもよい。この場合の特定コード回避暗号処理の処理フローを図２０に、処理のイメージを図２１に示す。
【０１３７】
図２０に示すように、特定コード回避暗号処理部３０１２は、暗号処理部３０１１からメッセージブロックＭを受け取ると（ステップ２３０１）、圧縮乱数生成処理部３０１３にメッセージブロックＭのビット長Ｌに応じた圧縮乱数の生成を行わせる（ステップ２３０３）。そして、特定コード回避暗号処理部３０１２は、入力されたメッセージブロックＭと、圧縮乱数ＳとをＬビット長のレジスタ幅で算術加算し、その結果を中間値ブロックＣ’とする（ステップ２３０３）。ここまでは、上記本実施形態の処理と同様である。
【０１３８】
次に、本変形例では、特定コード回避暗号処理部３０１２は、中間値ブロックＣ’が、特定コードｔであるか否かを判別する（ステップ２３０４）。
【０１３９】
中間値ブロックＣ’が特定コードｔである場合、中間値ブロックＣ’に圧縮乱数Ｓを法２Ｌで加算し(ステップ２３０５）、暗号文ブロックＣとして出力する（ステップ２３０６）。
【０１４０】
一方、中間値ブロックＣ’が特定コードｔ以外の場合、中間値ブロックＣ’をそのまま暗号文ブロックＣとし（ステップ２３０７）、出力する（ステップ２３０６）。
【０１４１】
以上の処理を図２１のイメージ図を用いて説明する。ここでは、メッセージブロックＭのビット長を８とする。
【０１４２】
上記ステップ２３０３の算術加算により、数直線２４０１で表されるメッセージブロックＭの値は、（ｔ+Ｓ）ｍｏｄ２８に移動する。このときの中間値ブロックＣ’を、数直線２４０２で表す。その後、ステップ２３０４の分岐により、数直線２４０２上で、特定コードｔとなるもののみ、ｔ+Ｓに移動させ、その他の数直線２４０２上のものは、そのままとする。この時の暗号ブロックＣを数直線２４０３で表す。
【０１４３】
なお、この場合の特定コード回避復号処理は、基本的に上記図１８で説明した処理と同様であるが、ステップ８０３、８０４、８０７において、暗号文ブロックＣが特定コードｔであるか否かを判別し、特定コードｔである場合、暗号文ブロックＣに圧縮乱数Ｓを法２Ｌで加算して中間値ブロックＣ’’とし、その他の場合は、暗号文ブロックＣをそのまま中間値ブロックＣ’’とする。
【０１４４】
次に、本実施形態の特定コード回避暗号処理および特定コード回避復号処理において、特定コードがｔから始まる幅ｄの連続する１領域に定義されている場合の処理を説明する。すなわち、特定コードが、ｔ、ｔ+１、ｔ+２、・・・・、ｔ+ｄ−１のｄ通りの場合の各処理について説明する。
【０１４５】
図２２は、本実施形態の特定コードが連続する一領域に定義されている場合の特定コード回避暗号処理の処理フローである。本実施形態で先に説明した、特定コードがｔのみの１種類である場合の同処理と異なる点は、圧縮乱数の生成パラメータが２Ｌ−ｄであること（Ｌは、メッセージブロックＭのビット長）と、条件分岐後に、選出された範囲のコードに加算する値がｄであることとの２点である。言い換えれば、先に説明した例は、本例の中で、ｄを１とした特殊な場合である。
【０１４６】
特定コード回避暗号処理部３０１２は、暗号処理部３０１１からメッセージブロックＭを受け取ると（ステップ１００１）、圧縮乱数生成処理部３０１３に圧縮乱数Ｓの生成を行わせる（ステップ１００２）。ここでは、２Ｌ−ｄ通りの出力からランダムに圧縮乱数Ｓを生成させる。圧縮乱数Ｓの生成は、他の各実施形態と同様である。
【０１４７】
次に、特定コード回避暗号処理部３０１２は、入力されたメッセージブロックＭと、圧縮乱数生成処理部３０１３により生成された圧縮乱数Ｓとを、Ｌビット長のレジスタ幅で算術加算する。つまり、（Ｓ＋Ｍ）ｍｏｄ２Ｌを計算する。そして、その結果を中間値ブロックＣ’として出力する（ステップ１００３）。
【０１４８】
次に、特定コード回避暗号処理部３０１２は、中間値ブロックＣ’を次の条件分岐にかける（ステップ１００４）。中間値ブロックＣ’がｔとｔ＋Ｓ−１との間である場合（ｔ≦Ｃ’≦（ｔ＋Ｓ−１）の場合）は、中間値ブロックＣ’をｍｏｄ２Ｌでｄインクリメント（＋ｄ）し、本処理の出力である暗号文ブロックＣ（Ｃ＝Ｃ’＋ｄ）とする（ステップ１００５、１００６）。一方、中間値ブロックＣ’がそれ以外の場合は（ステップ２０４）、中間値ブロックＣ’をそのまま本処理の出力である暗号文ブロックＣ（Ｃ＝Ｃ’）とする（ステップ１００７、１００６）。
【０１４９】
次に、本例の特定コード回避暗号処理が、特定コードグループｄを出力しないこと、および、本処理による変換(符号化）の可逆性について説明する。図２３は、そのイメージ図である。
【０１５０】
入力されるメッセージブロックＭを、数直線１１０１で表す。ここでは、メッセージブロックＭのビット長が８の場合を例に挙げて説明する。また、定義されている特定コードは、ｔから始まる連続した１領域のｄ個、すなわち、ｔ、ｔ+１、ｔ+２、・・・・、ｔ+ｄ−１である。つまり、０ｘ００から０ｘｆｆまでの２５６通りあるメッセージブロックＭのうち、上記特定コード群は、暗号処理部３０１１の処理により、入力として与えられない。
【０１５１】
ステップ１００３の算術加算により、メッセージブロックＭの値は中間値ブロックＣ’となり、（ｔ＋Ｓ）ｍｏｄ２８に移動する。この時の中間値ブロックＣ’を、数直線１１０２で表す。
【０１５２】
次に、ステップ１００４の条件分岐で、中間値ブロックＣ’は、その値がｔとｔ＋Ｓ−１の間に属する場合（ｔ≦Ｃ’≦ｔ＋Ｓ−１）、＋ｄされ、出力である暗号文ブロックＣとされる。すなわち、ｔ≦Ｃ’≦ｔ＋Ｓ−１の範囲のものは、ｍｏｄ２８でｔ＋ｄ≦Ｃ（＝Ｃ’＋ｄ）≦ｔ＋Ｓ+ｄ−１となる。一方、中間値ブロックＣ’の値が、ｔ未満、または、ｔ＋Ｓより大きい場合は、（ｔ＋Ｓ）ｍｏｄ２８がそのまま出力である暗号文ブロックＣとされる。
【０１５３】
このときの出力である暗号文ブロックＣを、数直線１１０３で表す。数直線１１０３で示されるように、本処理により出力される暗号文ブロックＣには、その値がｔから始まる幅ｄの連続した１領域の特定コードとなるものは存在しない。
【０１５４】
次に、上記処理に従って暗号化された暗号文ブロックＣを復号する場合の処理である、特定コード回避復号処理部４０１２による特定コード回避復号処理について説明する。ここでも、特定コードは、ｔから始まる幅ｄの連続した１領域とする。
【０１５５】
図２４は、本実施形態の特定コードが連続する一領域に定義されている場合の特定コード回避復号処理の処理フローである。
【０１５６】
特定コード回避復号処理部４０１２は、復号処理部４０１１から暗号文ブロックＣを受け取ると（ステップ１２０１）、圧縮乱数生成処理部４０１３に、暗号文ブロックＣのビット長Ｌに応じた圧縮乱数Ｓの生成を行わせる（ステップ１２０２）。圧縮乱数Ｓの生成は、他の実施形態と同様である。
【０１５７】
次に、特定コード回避復号処理部４０１２は、暗号文ブロックＣと、圧縮乱数Ｓと、特定コード群ｔ〜ｔ+ｄ−１との関係を判別する（ステップ１２０３）。
【０１５８】
暗号文ブロックＣが、ｔ+ｄとｔ+ｄ+Ｓ−１との間に属する場合、すなわち、ｔ+ｄ≦Ｃ≦ｔ+ｄ+Ｓ−１の場合、暗号文ブロックＣをｄデクリメントし（−ｄ）たものを、中間値ブロックＣ’’とする（ステップ１２０４）。
【０１５９】
一方、暗号文ブロックＣが、ｔ+ｄからｔ+ｄ+Ｓ−１の間以外に属する場合、暗号文ブロックＣをそのまま中間値ブロックＣ’’とする（ステップ１２０７）。
【０１６０】
そして、中間値ブロックＣ’’から圧縮乱数Ｓを、Ｌビット長のレジスタ幅で減算する（ステップ１２０５）。すなわち、（Ｃ’’−Ｓ）ｍｏｄ２Ｌを計算する。
【０１６１】
そして、ステップ１２０５で得られた結果を平文ブロックＰとして出力する（ステップ１２０６）。
【０１６２】
図２５に、本実施形態の特定コードがｔから始まる連続した１領域のｄ個である場合の特定コード回避復号処理のイメージ図を示す。入力される暗号文ブロックＣを、数直線１３０１で表す。ここでは、暗号文ブロックＣのビット長が８の場合を例に挙げて説明する。定義されている特定コードはｔから始まる幅ｄの連続した１領域である。つまり、０ｘ００から０ｘｆｆまでの２５６通りあるメッセージブロックＭのうち、ｔから始まる幅ｄの連続した１領域だけは、復号処理部４０１１の処理により、入力として与えられない。
【０１６３】
ステップ１２０３、１２０４、１２０７の処理後の中間値ブロックＣ’’を、数直線１３０２で表す。すなわち、ｔ+ｄ≦Ｃ≦ｔ+ｄ+Ｓ−１の場合、暗号文ブロックＣのビット長幅でｄデクリメント（左に移動）し、その他の場合は、そのままとする。
【０１６４】
その後、数直線１３０２で表される中間値ブロックＣ’’に対し、ステップ１２０５の処理を施したものを、数直線１３０３で表す。本図に示すように、ステップ１２０５の処理後のブロックデータは、特定コード群を回避した平文ブロックＰとなる。
【０１６５】
以上説明したように、本実施形態の特定コード回避暗号処理は、圧縮乱数として生成されたＳと、特定コード（ｔ〜ｔ+ｄ−１）とにのみに依存し、入力されたメッセージブロックＭ（平文の値）には依存しない。また、上述のように、メッセージブロックＭが特定コードである場合の処理はもとより、そうでない場合に行われる特定コード回避暗号処理内の各変換は、それぞれ、算術加算と条件分岐といった非常に単純な変換であり、その逆変換も容易である。従って、復号装置４００１内での特定コード回避復号処理は、暗号化装置３００１内の特定コード回避暗号処理の逆変換を逆順に重ねることにより実現できる。
【０１６６】
なお、本実施形態では、特定コード回避暗号処理において、最終的な出力に特定コードであるｔからｔ+ｄ−１が含まれないようにするために、中間値ブロックＣ’の、所定の範囲に属するものを全てｄインクリメントすることとしているが、これに限られない。上記特定コードｔが１種類である場合の例で説明したように、入力されたメッセージブロックＭに圧縮乱数Ｓを加算した後にｔからｔ+ｄ−１となる出力を、メッセージブロックＭに圧縮乱数を加算した後にｔ+Ｓ〜ｔ+Ｓ+ｄ−１となる箇所に移動させることも可能である。
【０１６７】
＜＜第四の実施形態＞＞
次に、上記各実施形態で説明した、暗号化装置３００１および復号装置４００１を用いたデータベースサーバシステムを説明する。
【０１６８】
本データベースサーバシステムにより提供する情報サービスの概要は以下のとおりである。
【０１６９】
権限を有する者が、データベースサーバに上記各実施形態で説明した暗号化装置３００１およびそれに対応する復号装置４００１を実現するセキュアモジュールを適用する。データベースサーバは、適用された暗号化装置３００１を用いて、保持すべきデータベースのデータを、暗号化して保持する。
【０１７０】
権限のないものがデータベースサーバにアクセスした場合、暗号化されたデータを閲覧することとなる。一方、権限のあるものが閲覧する場合、上記復号装置４００１によって復号したものを閲覧、編集等することができる。データベースが権限のあるものにより更新された場合、当該データベース内のデータは再度、暗号化装置３００１により暗号化された後、上書きされる。
【０１７１】
図２６は、本実施形態のデータベースサーバシステムの、データベースサーバ２００１の機能ブロック図である。本図に示すように、データベースサーバ２００１は、ＣＰＵ２００２と、ネットワーク２００５への接続インタフェースであるネットワークインタフェース２００４と、磁気ディスク２００３と、セキュアモジュール２００６とを備える。
【０１７２】
セキュアモジュール２００６は、上述の各実施形態で説明した暗号化装置３００１および復号装置４００１を実現するモジュールで、暗号ソフト２００７および秘密鍵２００８を備える。暗号ソフト２００７により、暗号化装置３００１および復号装置４００１を実現する。なお、秘密鍵２００８は、暗号化装置３００１および復号装置４００１において、圧縮乱数Ｓを生成する際の鍵として用いられる。
【０１７３】
磁気ディスク２００３は、データベース２００９と、文字ルール２０１０とを保持する。本実施形態のデータベース２００９の一例を図２７に示す。本図に示すように、データベース２００９は、複数のカラムとレコードとからなるデータベースであり、例えば、氏名が保持される氏名欄２００９ａと、本籍地が保持される本籍地欄２００９ｂと、年齢が保持される年齢欄２００９ｃと、性別が保持される性別欄２００９ｄと、取引額が保持される取引額欄２００９ｅとを備える。
【０１７４】
上記のデータベース２００９は、従来の方法で暗号化すると、データベースとしてのフォーマットが壊れるほか、部分的な閲覧を行うことやファイル操作（分割やマージ）が基本的には不可能となる。また、こうしたデータベースはＣＯＢＯＬ等のプログラム言語で作成されることが多いため、各セルで利用可能なデータ種別、文字種類、文字数などは限定される。従って、例えば、データ種別が文字列と定められている本籍地欄２００９ｂに保持される本籍地データを暗号化し、その結果バイナリデータとなった場合、データ種別が異なるため元の本籍地欄２００９ｂに暗号化後のバイナリデータ自体を保存できない、予め定められた容量サイズを超えため元の本籍地欄２００９ｂに暗号化後のデータを保存できない、などの問題が生じる。
【０１７５】
ところが、上記各実施形態で説明した暗号化装置３００１によれば、上述の心配はない。すなわち、各列毎に暗号化する際、使用が許可されているコード以外の、例えば、各列の区切りを示す制御コード等を特定コードとして予め定義しておけばよい。
【０１７６】
文字ルール２０１０は、データベース２００９の書式を定義したファイルであり、データベース２００９のシステムに固有のセル内容を記述したものである。暗号処理の前後の各列の書式は、文字ルール２０１０により特定される。文字ルール２０１０として保持されるデータの一例を図２８に示す。本図に示すように、文字ルール２０１０は、データベース２００９の各列の左から順に付与された番号を格納する列欄２０１０ａと、予め定められた各列のルールを記述するルール欄２０１０ｂとを備える。本実施形態では、ルール欄２０１０ｂで使用を許可されているコード以外は、特定コードとして処理される。
【０１７７】
次に、磁気ディスク２００３に保持されるデータベース２００９であって、本実施形態の暗号ソフト２００７により実現される暗号化装置３００１により暗号化された後のデータベース２００９の一例を図２９に示す。
【０１７８】
本図に示すように、氏名欄２００９ａには、氏名欄２００９ａに格納されている氏名データを暗号化したもの、すなわちアルファベット間で変換がなされた後のデータが格納される。本籍地欄２００９ｂには、本籍地欄２００９ｂに格納されている本籍地データを暗号化したもの、ここでは、都道府県名間で変換がなされた後のデータが格納される。年齢欄２００９ｃおよび取引額欄２００９ｅには、それぞれ数値データを暗号化したものが、性別欄２００９ｄには、ＭまたはＦの２値間で暗号化したものが、格納される。
【０１７９】
権限のない者が、本データベースサーバ２００１にアクセスし、データベース２００９を閲覧した場合、上記図２９の内容を閲覧することとなる。権限のない者は、閲覧した内容から、本籍地欄２００９ｂには、都道府県名が格納されていること、氏名欄２００９ａにはアルファベットの文字が格納されていることといった情報しか得ることができない。
【０１８０】
本データベースサーバシステムにより提供する情報サービスの処理について説明する。データベースサーバ２００１には、権限を有する者により、上記各実施形態で説明した暗号化装置３００１および復号装置４００１を実現するセキュアモジュール２００６が適用されるものとする。
【０１８１】
データベースサーバ２００１は、保持すべきデータベース２００９を、セキュアモジュール２００６により実現される暗号化装置３００１により暗号化し、保持する。
【０１８２】
具体的には、ＣＰＵ２００２が、セキュアモジュール２００６に保持すべきデータとともに、暗号化を要求する暗号化要求を送信する。セキュアモジュール２００６は、上記各実施形態のいずれかの暗号化装置３００１を実現する暗号ソフト２００７と、秘密鍵２００８と、文字ルール２０１０とを用いて、受け取ったデータを暗号化し、ＣＰＵ２００２に返す。ＣＰＵ２００２は、受け取った暗号化後のデータを、データベース２００９として磁気ディスク２００３に保持する。
【０１８３】
権限を有する者よりデータベースの閲覧要求を受け付けると、ＣＰＵ２００２は、データベース２００９の表示に先立ち、セキュアモジュール２００６へ復号を要求する。復号要求には、例えば、復号を要求するデータのセル位置の情報などが含まれる。もちろん、それ以外の情報を送信してもよい。
【０１８４】
ＣＰＵ２００２から、上記情報を受け取ったセキュアモジュール２００６では、上記暗号化時に用いられた暗号化装置３００１に対応付けられた復号装置４００１を実現する暗号ソフト２００７を呼び出し、圧縮乱数Ｓ生成のための鍵として秘密鍵２００８とを用い、復号を要求されたデータの復号処理を行い、結果を依頼元のＣＰＵ２００２に返信する。このとき、文字ルール２０１０にアクセスし、各セルの特定コードを把握し、復号時に用いる。
【０１８５】
復号処理を終えると、ＣＰＵ２００２は、データベース閲覧ソフトとして動作し、セキュアモジュール２００６から返信された復号後のデータを表示する。
【０１８６】
ここで、データベースの閲覧を要求した権限を有する者は、表示されたデータを閲覧するだけでなく、変更、新規挿入などの処理を行うことができる。
【０１８７】
権限を有するものからデータの上書き要求を受け取ると、ＣＰＵ２００２は、セキュアモジュール２００６にデータの暗号化を要求する。ここでは、変更されたセルのデータのみ暗号化するよう構成することも可能である。このとき、ＣＰＵ２００２は、暗号化の要求には、暗号化されたデータのセル位置、新規セルデータなどが含まれる。
【０１８８】
ＣＰＵ２００２から、上記情報を受け取ったセキュアモジュール２００６では、暗号ソフト２００７、秘密鍵２００８および文字ルール２０１０を用いて受け取ったデータを暗号化し、ＣＰＵ２００２に返す。
【０１８９】
ＣＰＵ２００２は受け取った暗号化後のデータを、該当のセル位置に上書きする。
【０１９０】
以上の各実施形態によれば、予め定義した特定コードを回避して暗号文を生成することができる。従って、フォーマット化されたデータにおいて、各データのフォーマットを残したまま、暗号化することができ、暗号文としての使い勝手が向上する。また、各実施形態によれば、生成した暗号文のサイズが元の平文から変化しない。従って、暗号文の再符号化の必要がなくなる。また、サイズの変化がないため、転送処理時間や保存に必要な領域が増大することもない。
【図面の簡単な説明】
【０１９１】
【図１】第一の実施形態の暗号化装置の機能ブロック図である。
【図２】第一の実施形態のメッセージブロックＭが入力された場合の処理フローである。
【図３】第一の実施形態の特定コード回避暗号処理の処理フローである
【図４】第一の実施形態の特定コード回避暗号処理のイメージ図である。
【図５】第一の実施形態の圧縮乱数生成の第一の方法の処理フローである。
【図６】第一の実施形態の圧縮乱数生成の第二の方法の処理フローである。
【図７】第一の実施形態の擬似乱数を生成する処理の説明図である。
【図８】第一の実施形態の復号装置の機能ブロック図である。
【図９】第一の実施形態の復号処理の処理フローである。
【図１０】第一の実施形態の特定コード回避復号処理の処理フローである。
【図１１】第一の実施形態の特定コード回避復号処理のイメージ図である。
【図１２】第二の実施形態の特定コード回避暗号処理の処理フローである。
【図１３】第二の実施形態の特定コード回避暗号処理によるデータの変換の様子のイメージ図である。
【図１４】第二の実施形態の特定コード回避復号処理の処理フローである。
【図１５】第二の実施形態の特定コード回避復号処理のイメージ図である。
【図１６】第三の実施形態の特定コードが１種類である場合の特定コード回避暗号処理の処理フローである。
【図１７】第三の実施形態の特定コードが１種類である場合の特定コード回避暗号処理のイメージ図である。
【図１８】第三の実施形態の特定コードが１種類である場合の特定コード回避復号処理の処理フローである。
【図１９】第三の実施形態の特定コードが１種類である場合の特定コード回避復号処理のイメージ図である。
【図２０】第三の実施形態の別例の特定コード回避暗号処理の処理フローである。
【図２１】第三の実施形態の別例の特定コード回避暗号処理のイメージ図である。
【図２２】第三の実施形態の特定コードが連続する一領域に定義されている場合の特定コード回避暗号処理の処理フローである。
【図２３】第三の実施形態の特定コードが連続する一領域に定義されている場合の特定コード回避暗号処理のイメージ図である。
【図２４】第三の実施形態の特定コードが連続する一領域に定義されている場合の特定コード回避復号処理の処理フローである。
【図２５】第三の実施形態の特定コードが連続する一領域に定義されている場合の特定コード回避復号処理のイメージ図である。
【図２６】第四の実施形態のデータベースサーバの機能ブロック図である。
【図２７】第四の実施形態のデータベースの一例である。
【図２８】第四の実施形態の文字ルールとして保持されるデータの一例である。
【図２９】第四の実施形態の暗号化された後のデータベースの一例である。
【符号の説明】
【０１９２】
３００１：暗号化装置、３０１１：暗号処理部、３０１２：特定コード回避暗号処理部、３０１３：圧縮乱数生成処理部、３０１４：擬似乱数生成器、３０２１：秘密鍵Ｋ、３０２２：初期値Ｉ、４００１：復号装置、４０１１：復号処理部、４０１２：特定コード回避復号処理部、４０１３：圧縮乱数生成処理部、４０１４：擬似乱数生成器、４０２１：秘密鍵Ｋ、４０２２：初期値Ｉ、２００１：データベースサーバ、２００２：ＣＰＵ、２００３：磁気ディスク、２００４：ネットワークインタフェース、２００５：ネットワーク、２００６：セキュアモジュール、２００７：暗号ソフト、２００８：秘密鍵、２００９：データベース、２０１０：文字ルール、２００９ａ：氏名欄、２００９ｂ：本籍地欄、２００９ｃ：年齢欄、２００９ｄ：性別欄、２００９ｅ：取引額欄、２０１０ａ：列欄、２０１０ｂ：ルール欄
【図１】
2007086421.tif 000003
【図２】
2007086421.tif 000004
【図３】
2007086421.tif 000005
【図４】
2007086421.tif 000006
【図５】
2007086421.tif 000007
【図６】
2007086421.tif 000008
【図７】
2007086421.tif 000009
【図８】
2007086421.tif 000010
【図９】
2007086421.tif 000011
【図１０】
2007086421.tif 000012
【図１１】
2007086421.tif 000013
【図１２】
2007086421.tif 000014
【図１３】
2007086421.tif 000015
【図１４】
2007086421.tif 000016
【図１５】
2007086421.tif 000017
【図１６】
2007086421.tif 000018
【図１７】
2007086421.tif 000019
【図１８】
2007086421.tif 000020
【図１９】
2007086421.tif 000021
【図２０】
2007086421.tif 000022
【図２１】
2007086421.tif 000023
【図２２】
2007086421.tif 000024
【図２３】
2007086421.tif 000025
【図２４】
2007086421.tif 000026
【図２５】
2007086421.tif 000027
【図２６】
2007086421.tif 000028
【図２７】
2007086421.tif 000029
【図２８】
2007086421.tif 000030
【図２９】
2007086421.tif 000031