JP2007086421A - 特定コードを回避する暗号化装置および暗号化方法 - Google Patents
特定コードを回避する暗号化装置および暗号化方法 Download PDFInfo
- Publication number
- JP2007086421A JP2007086421A JP2005275258A JP2005275258A JP2007086421A JP 2007086421 A JP2007086421 A JP 2007086421A JP 2005275258 A JP2005275258 A JP 2005275258A JP 2005275258 A JP2005275258 A JP 2005275258A JP 2007086421 A JP2007086421 A JP 2007086421A
- Authority
- JP
- Japan
- Prior art keywords
- specific code
- block
- encryption
- random number
- avoidance
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】 共通鍵暗号技術において、共通鍵暗号としての安全性を落とすことなく、平文の特定コードの利用を避けて、暗号文を生成する。
【解決手段】 特定コードと判別されたブロックはそのまま出力し、特定コードでないと判別されたブロックについては、特定コードを回避した暗号化処理を行う。特定コードを回避する暗号化処理は、特定コード領域をスライドさせ、特定コード領域外で暗号化を行い、暗号化後に特定コード領域を元の位置に戻すことにより実現する。
【選択図】 図1
【解決手段】 特定コードと判別されたブロックはそのまま出力し、特定コードでないと判別されたブロックについては、特定コードを回避した暗号化処理を行う。特定コードを回避する暗号化処理は、特定コード領域をスライドさせ、特定コード領域外で暗号化を行い、暗号化後に特定コード領域を元の位置に戻すことにより実現する。
【選択図】 図1
Description
本発明はセキュリティ技術に係り、特にデジタル情報を秘密裏に送受信および保管するためのデータの暗号化技術に関する。
暗号技術はデジタル情報を通信したり、保管したりする場合に、その情報のセキュリティ確保のために用いられる。暗号化の対象となるデータのサイズや種類は様々であり、それらに応じて暗号処理も異なる。
例えば、通信時は、ネットワーク層などの下位のレイヤでは、通信路上で送受信されるパケットをパケット単位で暗号化する一方、アプリケーション層のような上位のレイヤでは、通信路上で送受信されるデータをファイル単位で暗号化するなど、暗号化を行う階層により、その処理が変わる。
また、保管時は、ディスクのセクター単位で暗号化する利用形態もあれば、ファイルシステムの枠組みで定義されるデータに対して暗号化を適用する利用形態もある。
暗号化の対象となるデータの種類等や、暗号化処理の利用状況に応じて、鍵交換頻度や暗号処理によるサイズ増加の許容範囲など、暗号処理への要求仕様は異なるため、対象や利用状況に応じて適切な暗号化処理を選択する、あるいは、新しい暗号化処理方法を開発する必要がある。
現在、データを暗号化する方式は、その安全性のよりどころとなる暗号プリミティブ自体と、利用モードと呼ばれるその暗号プリミティブの利用方法との組み合わせにより決定される。暗号プリミティブは、達成すべき安全性や処理速度の観点から選択され、利用モードは、達成したい機能に従って選択される。
例えば、金融など非常に高い安全性が求められる分野で、通信路上のデータを暗号化したり改ざん検知を行ったりする場合は、高い安全性を達成できる256ビット鍵長の暗号プリミティブ、例えばAES(Advanced Encryption Standard)と、改ざん検知機能付き暗号処理を実現する利用モード、例えば、CCM(Counter with CBC−MAC)との組み合わせが選択される。この選択により、高い安全性と改ざん検知機能を有する暗号処理を実現できる。
現在、暗号のために用いられる暗号プリミティブには、主に、ブロック暗号、疑似乱数生成器の二種類がある。それぞれ実用的な方式が提案され、さまざまな用途で用いられてきている。ブロック暗号は、一般に鍵および初期値のセットアップが高速である。よって、頻繁に鍵や初期値が切り替わるような暗号通信にはブロック暗号が適している。一方、疑似乱数生成器は鍵をセットアップするまでは時間がかかるが、一度鍵の準備ができると極めて高速に暗号を処理することができる。よって、鍵や初期値の変更が小頻度であるようなデータを扱う場合には疑似乱数生成器が有利である。
利用モードについては、例えば、ブロック暗号の利用モードとして、ECB(Electronic Code Book)、 CBC(Cipher Block Chaining)、 CFB(Cipher Feedback)、 OFB(Output Feedback)、 CTR(Counter)など多くが知られている。それぞれ、並列処理性や、安全性、自己同期性、実装コストなどの観点から利点のある方式であり、利用の状況に応じてこれらから適切なものを選ぶ。一方、疑似乱数生成器を使った暗号プリミティブの利用モードとしては、バイナリ加算モードが一般的である。これは、ストリーム暗号と呼ばれ、多く用いられている。擬似乱数生成器を使った暗号プリミティブの利用モードには、そのほかMULTI−S01がある。
情報通信ネットワークの進展と共に電子情報に対する秘匿や認証のための暗号化技術の重要性は増している。一方で、さまざまな種類のデジタル情報を扱うようになり、採用する暗号技術により、問題が生じる場合がある。
現在の暗号処理は、安全性を最優先に構成されている。完全に情報を秘匿するために、暗号文は全くのランダムなデータに変換される。しかし、このようなランダムなデータは実用上非常に扱いにくいことがある。例えば、通信路上で送受信されるデータを暗号化する場合、暗号文が完全な乱数である以上、通信としての機能、例えばデータの区切りを識別したり、同期を回復したりといった機能が静的なものに限定される。これは、動的なコンテンツ、例えばデータ長がわからないものや、同期ずれ、アウトオブオーダ(Out−Of−Order)の懸念がある通信データを扱う上では致命的な問題である。
例えば、PGP(Pretty Good Privacy)など従来の暗号実装では、ほぼ乱数の振る舞いをする暗号文に対して冗長データを付加し、上記問題を解決している。具体的には、符号化後もデータの区切りを判別するなど、データを取扱うための制御に用いる所定のコード(以後、特定コードと呼ぶ。)を予め定義し、この特定コードが出現しないように暗号文を符号化する。データの区切り等、もともと特定コードにより判別していた箇所には、特定コードを冗長データとして追加する。これにより、データの区切り等を判別することができる。
上記方法が用いられている例として、インターネットのメールプロトコル上で用いられる暗号やバイナリデータに対して行う符号化手法、uuencode, BinHex, base64などがある。これらの符号化手法を暗号に利用する場合は、任意の暗号方式で暗号化した暗号文に対し、先ほどの符号化手法で冗長データをつけながら特定コードを回避し、符号化する。
しかしながら、この手法にはいくつかの問題がある。まず、冗長データを付加するため、必然的にデータ長が増加する。データ長の増加は、元のデータ(平文)の長さに関係なく数バイト伸びるというのではなく、平文が長ければ長いほど、追加するの暗号文長も伸びる。例えば、base64ならば4/3倍(=133%)の長さとなる。その他の方式も同様にデータ長が長くなり、結果的にデータ送信時間が増大する。
また、データ長が増加することにより、別の弊害も生じる。一つは、暗号文の一部にアクセス(読み書き)を行うとき、そのアドレス計算が煩雑になることである。冗長データとして新たなデータが付加されるため、意図したデータへのアクセスには余計な計算やバイト単位のシフトなどが必要になる。さらに、データ量の大きいデータベースなどを、ある時刻から暗号文に置き換える場合、平文のデータベースから暗号文化への移行方法に自由度がない。全ての読み出し、書き込みのアクセスを停止し、データベースを暗号化し、これが完成してから、再度サービス(データの読み出し、書き込み)を開始する必要がある。なぜならば、移行状態で、平文と暗号文とを動的に置き換えると、暗号文のサイズは平文のサイズよりも大きいため、平文の領域では足りず、結果的に暗号文が格納できないためである。
以上の事情により、いかに暗号後のデータ長を拡張することなく、暗号文を符号化するかという問題は工業的観点から重要な問題として捉えられてきた。
一般に、暗号化前後のデータ長を不変とするために、暗号文の生成(符号化)に算術加算を使う技術がある(例えば、特許文献1参照。)
しかしながら、上記特許文献1の技術では、特定コードもその他の箇所も区別なく暗号化されるため、特定コードが後処理において重要な役割を果たすデータ列には適用し難い。
しかしながら、上記特許文献1の技術では、特定コードもその他の箇所も区別なく暗号化されるため、特定コードが後処理において重要な役割を果たすデータ列には適用し難い。
一方、従来のブロック暗号をOFBやCTRモードで使い、ブロック単位で暗号化をする/しないをスイッチングする技術がある(例えば、非特許文献1参照。)。
非特許文献1に開示されている技術は、符号化(暗号化)の結果、上記のような特定コードが出現するブロックについては、そのブロックの暗号処理を行わず、平文ブロックのまま暗号文ブロックとして出力する。各ブロック毎に、暗号化し、その結果により、暗号文を出力するか平文を出力するか判断し、逐次暗号化を進める。
しかし、上記の非特許文献1に開示されている方法には、安全性の観点から欠点がある。本既存技術では、特定コードのパターンが符号化の結果生成されてしまう場合には暗号処理を行わず平文を、暗号化せずにそのまま出力する。従って、この部分の情報が漏洩する。ブロック長が長く、かつ、特定コード種類数が限定されていれば、暗号化されない平文ブロックの確率は小さくなるが、現実にはそうでない。例えばASCII文字の1バイトコードを暗号化する場合、特定コードを、未定義文字、非表記文字とすると、暗号文の半分以上が特定コードに該当する。
以上のように、通信路上で送受信される多種多様なデータの暗号化においては、暗号後のデータ(暗号文)に特定コードが含まれないような符号化手法が必須な技術であるにもかかわらず、既存の技術では、暗号文長を増大させるか、または、安全性を低下させるかのいずれかの方法でしか対処できないという問題がある。
本発明は、上記事情を鑑みてなされたものであり、特定コードを出現させることなく暗号文を生成でき、安全性が高く、かつ、データ送信時間が増大しない暗号化技術を提供することを目的とする。
本発明は、メッセージをスキャンしている途中に、システムで定義される特殊な記号の出現を検出し、特殊な記号が出現した場合はデータ変換(暗号化)を行わない。また、データ変換においても、特殊な記号を回避して行う。データ変換は、メッセージの平文における特殊な記号の領域をスライドさせ、特殊な記号以外の領域内で行う。
具体的には、メッセージをブロック単位で暗号化する暗号化装置であって、入力されたメッセージを構成する各ブロックについて、予め定めた所定幅の領域を有する特定のコードであるか否かを判別する判別手段と、前記判別手段で前記特定のコードでないと判別されたブロックに対し、当該特定のコードを回避する暗号化処理を行う特定コード回避暗号化手段と、前記判別手段で前記特定のコードと判別されたブロックは、当該ブロックのまま暗号文ブロックとして出力し、前記判別手段で前記特定のコードでないと判別されたブロックは、前記特定コード回避暗号化手段で暗号化処理を施した後のブロックを前記暗号文ブロックとして出力する出力手段と、を備えることを特徴とする暗号化装置を提供する。
本発明によれば、特定コードを出現させることなく暗号文を生成でき、安全性が高く、かつ、データ送信時間が増大しない暗号化技術を提供することができる。
<<第一の実施形態>>
以下、本発明を適用した第一の実施形態を図面を用いて説明する。本実施形態の暗号化装置は、所定のブロック単位で入力されたデータを、暗号化して出力するブロック暗号の処理を行う。暗号化装置は、ブロックデータが入力されると、特定のコード(以後、特定コードと呼ぶ。)はそのまま出力し、特定コード以外のコードは、暗号化して出力する。
以下、本発明を適用した第一の実施形態を図面を用いて説明する。本実施形態の暗号化装置は、所定のブロック単位で入力されたデータを、暗号化して出力するブロック暗号の処理を行う。暗号化装置は、ブロックデータが入力されると、特定のコード(以後、特定コードと呼ぶ。)はそのまま出力し、特定コード以外のコードは、暗号化して出力する。
特定コードは、入力されるデータ列の中で、制御などの特殊な目的で使用される予め定められたコードである。本実施形態において、予め定義されている特定コードは、tから始まる幅dの連続する1領域(t〜t+d-1)に渡るものとする。すなわち、領域端の特定コードtから、t+1、t+2、・・・・・、t+d−1までの、d個のコードが、特定コードとして定義されているものとする。
図1は、本実施形態の暗号化装置3001の機能ブロック図である。本図に示すように、本実施形態の暗号化装置3001は、入力された所定のブロック単位の平文M(以後、メッセージブロックMと呼ぶ。)の暗号化処理を行う暗号処理部3011と、暗号処理部3011から所定の場合に呼ばれ、入力されたメッセージブロックMに対し、特定コードを回避する暗号化処理(以後、特定コード回避暗号処理と呼ぶ。)を行う特定コード回避暗号処理部3012と、後述する圧縮乱数を生成する圧縮乱数生成処理部3013と、擬似乱数を生成する擬似乱数生成器3014とを備える。擬似乱数生成器3014には秘密鍵K3021と初期値I3022とが入力される。
本実施形態の暗号化装置3001において、メッセージブロックMが入力された場合の暗号処理部3011における暗号処理について以下に説明する。
図2は、本実施形態の暗号処理部3011において、メッセージブロックMが入力された場合の処理の流れの概略の説明図である。
メッセージブロックMが入力されると(ステップ101)、暗号処理部3011は、入力されたメッセージブロックMが特定コードであるかどうかを判定する(ステップ102)。特定コードと判定した場合、暗号処理部3011は、入力されたメッセージブロックMをそのまま暗号化されたブロックデータC(以後、暗号文ブロックCと呼ぶ。)として出力する(ステップ105)。
暗号処理部3011は、特定コードでないと判定した場合、特定コード回避暗号処理部3012を呼び出し、メッセージブロックMに対して後述する特定コード回避暗号処理を行い(ステップ104)、その結果を、暗号文ブロックCとして出力する(ステップ105)。
次に、特定コード回避暗号処理部3012による特定コード回避暗号処理について説明する。本実施形態の特定コード回避暗号処理によれば、特定コード回避暗号処理部3012の出力は特定コードとはならない。また、本処理は可逆となる。
図3は、本実施形態の特定コード回避暗号処理部3012の処理の処理フローである。ここで、本明細書中では、以下、メッセージブロックMのビット長|M|をLと表す。定義されている特定コードの領域は、tから始まる幅dの連続した1領域、すなわち、t〜(t+d-1)である。
特定コード回避暗号処理部3012は、暗号処理部3011からメッセージブロックMを受け取ると(ステップ1401)、−(t+d)を法2Lで加算する(ステップ1402)。加算した結果を、中間値ブロックM’とする。
次に、圧縮乱数生成処理部3013にメッセージブロックMのビット長Lに応じた圧縮乱数Sの生成を行わせる(ステップ1403)。
ここで、圧縮乱数とは、hをパラメータとし、Lビットではありながらもその値が0からh−dに限定されるよう出力が圧縮された乱数のことである。ステップ1403では、圧縮乱数生成処理部3013は、パラメータhを2L−d(h=2L−d)とし、出力が0から2L−(d+1)までの2L−d通りに限定された圧縮乱数Sを生成する。生成する乱数を0から2L−(d+1)までの間の値に限定するのは、メッセージの種類が2L−d通りしかないため、情報理論上情報を隠蔽するためには2L−d通りの乱数で十分だからである。圧縮乱数生成処理については、後述する。
次に、特定コード回避暗号処理部3012は、中間値ブロックM’と、圧縮乱数生成処理部3013により生成された圧縮乱数Sとを、Lビット長のレジスタ幅で算術加算する(中間値ブロックM’に圧縮乱数Sを法2L−dで加算する)(ステップ1404)。すなわち、(S−(t+d))mod(2L−d)を計算する。加算結果を中間値ブロックC’とする。
最後に、中間値ブロックC’に(t+d)を法2Lで加算し(ステップ1405)、暗号文ブロックCを得る(ステップ1406)。
本実施形態の上記特定コード回避暗号処理によるデータの変換の様子を、図4を用いて説明する。図4は、本実施形態の特定コード回避暗号処理のイメージ図である。ここでは、メッセージブロックMのビット長を8として説明する。定義されている特定コードの領域は、図3同様、t〜(t+d−1)とする。メッセージブロックMは0x00から0xffまでの256通りあり、そのうちt〜(t+d−1)の値は、暗号処理部3011の処理により、入力として与えられない。
本実施形態の特定コード回避暗号処理のポイントは、図4に示すように、特定コード領域(t〜(t+d−1))が端(ff-d−1〜ff)に来るよう変換し、変換後の00〜(ff-d)の特定コード領域外で暗号化を行う点である。
入力されるメッセージブロックMを数直線1501で表す。ステップ1402の処理により、特定コード領域(t〜(t+d−1))は、入力されるメッセージブロックMの取り得る範囲内で整数として最も大きいもの(ff-d−1〜ff)となるよう変換される。このときの中間値ブロックM’を数直線1502で表す。ステップ1402の処理により、有効なデータを法2L−dで扱うことができるようになる。
ステップ1404における法2L−dでの変換(攪拌)では、(ff-d−1〜ff)に移動された特定コード領域は、その攪拌の影響を受けない。ステップ1404処理後の中間値ブロックC’を数直線1503で表す。
最後に、ステップ1405によりステップ1402で行った変換の逆変換を行うことで特定コード領域(ff-d−1〜ff)を元の場所(t〜(t+d−1))に戻す。ステップ1405の処理後の暗号文ブロックCを数直線1504で表す。
以上の処理により、暗号文ブロックCでは、特定コード領域以外の部分は、秘密情報である圧縮乱数Sで攪拌されている。また、数直線1504で示すように、本特定コード回避暗号処理により出力が特定コード領域(t〜(t+d))となるものもない。以上説明したように、本特定コード回避暗号処理は、可逆な変換を独立に組み合わせたものであるため、全体として可逆であり、かつ、特定コードを出力しないものといえる。
次に、圧縮乱数生成処理部3013による圧縮乱数Sの具体的な生成方法を説明する。圧縮乱数Sの生成は、安全性が多少低いが高速に生成する第一の方法と、処理量は比較的大きくなるが、安全性の高い第二の方法とがある。まず、第一の方法について説明する。
図5は、圧縮乱数Sの生成方法の中で、安全性が多少低いが高速に生成できる第一の方法の説明図である。本生成方法では、最終的に0から2L−(d−1)までの2L−d通りの乱数を生成する。
圧縮乱数生成処理部3013は、擬似乱数生成記3013にLビットの乱数S’を生成させる(ステップ401)。なお、Lビットの乱数S’の生成方法については、後述する。そして、圧縮乱数生成処理部3013は、得られたS’について、2L−dの剰余をとる(ステップ402)。すなわち、S’mod(2L−d)を計算する。そして、圧縮乱数生成処理部3013は、その結果を圧縮乱数Sとして出力する(ステップ403)。
上述の処理からわかるように、S’が0の場合および2L−dの場合、結果Sは0になる。また、S’が1の場合および2L−(d+1)の場合、結果Sは1になる。すなわち、各S’の値が同じ確率で発生することを前提とすると、圧縮乱数Sの所定の値については、その値となる確率がその他の値に比較して2倍となる。よって、これを暗号に利用した場合、若干、各S値の発生に偏りが生じ、これが、暗号解読の手がかりとなり、情報の漏洩に繋がる可能性がある。しかしながら、ブロックサイズが大きい場合は、上記Sの偏りは現実的な問題とはなり難い。
次に、処理量は比較的大きくなるが、安全性の高い第二の方法について説明する。本方法は、厳密に高い安全性を確保したい場合や、ブロック長が小さい場合に有効である。
図6は、圧縮乱数の生成方法の中で、第二の方法の説明図である。
本生成方法においても、0から2L−2までの2L−d通りの乱数を生成する。
圧縮乱数生成処理部3013は、第一の方法と同様に、後述の方法により、擬似乱数生成器3014にLビットの乱数を生成させる(ステップ501)。そして、圧縮乱数生成処理部3013は、得られた出力S’について、S’<2L−dであるか否か判別する(ステップ502)。圧縮乱数生成処理部3013は、出力S’が、2L−dより小さい場合(S’<2L−dの場合)、S’を出力Sとして出力する。一方、出力S’が2L−d以上の場合(S’≧2L−dの場合)、本出力を破棄し、再度乱数を生成するためにステップ501に戻る。
以上の処理により、各値の発生確率が偏らない、安全な圧縮乱数Sの生成が可能となる。なお、上記処理によれば、出力S’が2L−d以上の場合、ステップ501に戻る処理を、S’<2L−dになるまで繰り返す。従って、乱数の生成には、そのループ処理の回数に応じて処理時間差が発生する。しかし、この時間差が攻撃者に知られた、すなわち、ループ処理の回数が攻撃者に知られたとしても、圧縮乱数の安全性には影響しないため、タイミング攻撃の観点からもこの処理方式には問題はない。
ここで、擬似乱数生成器3014によるLビットの乱数S’の生成の方法について説明する。図7は、擬似乱数生成器3014においてLビットの乱数S’を生成する処理の説明図である。
擬似乱数生成器3014は、既存の暗号学的擬似乱数発生器601を備える。また、暗号学的擬似乱数発生器601の入力として、鍵K3021と初期値I3022とが与えられる。暗号学的疑似乱数生成器601は、鍵K3021と初期値I3022との入力を受け付けると、任意の長さの乱数(但し、本実施形態では、Lビット以上の長さとする。)を生成する。擬似乱数生成器3014は、生成されたLビット以上の長さを有する乱数の先頭のLビットのみを抽出し、乱数S’として出力する。以上、擬似乱数生成器3014において、Lビットの乱数S’を生成する方法について説明した。
次に、上記処理に従って暗号化されたブロックデータである暗号文ブロックCを復号する場合の処理について説明する。
図8は、本実施形態の復号装置4001の機能ブロック図である。本図に示すように、本実施形態の復号装置4001は、入力された暗号文ブロックCの復号処理を行う復号処理部4011と、復号処理部4011から所定の場合に呼ばれ、暗号文ブロックCに対し、特定コードを回避して復号処理(以後、特定コード回避復号処理と呼ぶ。)を行う、特定コード回避復号処理部4012と、特定コード回避復号処理に用いられる圧縮乱数を生成する圧縮乱数生成処理部4013と、擬似乱数を生成する擬似乱数生成器4014とを備える。擬似乱数生成器4014には秘密鍵K4021と初期値I4022とが入力される。なお、圧縮乱数生成処理部4013と擬似乱数生成器4014とは暗号化装置3001の同名のものと基本的に同じであるため、ここでは説明しない。
本実施形態の復号装置4001において、暗号文ブロックCが入力された場合の復号処理部4001における復号処理について以下に説明する。
図9は、本実施形態の復号処理部4011において、暗号文ブロックCが入力された場合の処理の流れの概略の説明図である。
暗号文ブロックCが入力されると(ステップ701)、復号処理部4011は、暗号文ブロックCが特定コードであるか否かを判定する(ステップ702)。特定コードと判定した場合、復号処理部4011は、入力された暗号文ブロックCをそのまま復号された平文のブロックデータP(以後、平文ブロックPと呼ぶ。)として出力する(ステップ705)。
特定コードでないと判定した場合、復号処理部4011は、特定コード回避復号処理部4012を呼び出し、暗号文ブロックCに対して後述する特定コード回避復号処理を行い(ステップ704)、その結果を平文ブロックPとして出力する(ステップ705)。
次に特定コード回避復号処理部4012による特定コード回避復号処理について説明する。図10は、本実施形態の特定コード回避復号処理部4012の処理の処理フローである。また、図11は、本実施形態の特定コード回避復号処理のイメージ図である。特定コード領域は、暗号化処理の説明の際と同様、tから始まる幅dの連続した1領域、すなわち、t〜(t+d−1)である。また、図11においては、暗号文ブロックCのビット長を8(暗号文ブロックCは0x00から0xffの256通り)の場合を例に挙げて説明する。
特定コード回避復号処理部4012は、復号処理部4011から暗号文ブロックCを受け取ると(ステップ3201)、−(t+d)を法2Lで加算する(ステップ3202)。加算結果を、中間値ブロックC’’とする。
特定コード回避復号処理部4012は、特定コード領域(t〜(t+d-1))を、入力される暗号文ブロックCの取り得る範囲内で整数として最も大きいもの(ff-d−1〜ff)となるよう変換する。入力される暗号文ブロックCを数直線3301で表し、ステップ3202の処理後の中間値ブロックC’’を数直線3302で表す。このように、ステップ3202の処理により、有効なデータを法2L−dで扱うことができるようになる。
次に、特定コード回避復号処理部4012は、圧縮乱数生成処理部4013に暗号文ブロックCのビット長Lに応じた圧縮乱数Sの生成を行わせる(ステップ3203)。圧縮乱数Sの生成については、上述の特定コード回避暗号化処理と同様であるため、ここでは説明しない。
次に、特定コード回避復号処理部4012は、中間値ブロックC’’から、圧縮乱数Sを法2L−dで減算する(ステップ3204)。減算結果を、中間値ブロックP’’とする。このとき、図11の数直線3302に示すように、法2L−dでの変換(攪拌)は、特定コード領域(ff-d−1〜ff)に影響を与えない。中間値ブロックP’’を数直線3303で表す。
最後に、中間値ブロックP’’にt+dを法2Lで加算し(ステップ3205)、復号後の平文のブロックデータである平文ブロックPを得る(ステップ3206)。これは、ステップ3202で行った変換の逆変換であり、特定コード領域(ff-d−1〜ff)を元の場所(t〜(t+d−1))に戻す処理である。ステップ3205の処理後の平文ブロックPを数直線3304で表す。このように、ステップ3206処理後のブロックデータは、特定コード領域を回避した平文ブロックPとなる。
以上説明したように、本実施形態の暗号化装置3001による暗号化処理は、特定コードを出現させることなく暗号文を生成できる。また、その暗号化時に、データ長を増大させることもない。特定コード以外の領域で、通常の攪拌処理を行うため、安全性の低下もない。
また、本実施形態の暗号化装置3001による暗号化処理は、圧縮乱数生成処理部3013により生成された圧縮乱数Sおよび特定コード領域にのみ依存し、入力されたメッセージブロックMには依存しない。
また、上述のように、メッセージブロックMが特定コードである場合の処理はもとより、特定コードでない場合に行われる特定コード回避暗号処理において行われる各変換は、算術加算といった単純な変換であり、逆変換も容易である。従って、その復号装置も逆変換を逆順に重ねることにより容易に実現できる。
実装プラットフォームの中には、加算処理をする場合としない場合との処理時間差を攻撃者が見地できるものがある。このような実装環境においては、条件分岐処理による処理時間差があると、暗号が解読され、秘密情報の漏洩につながる場合がある。しかしながら、本実施形態の特定コード回避暗号処理には、条件分岐処理がない。したがって、条件分岐処理に伴う処理時間差が発生しないため、処理時間差によるタイミング攻撃が実現可能な実装環境においても、安全性の高い処理を実現することができる。
<<第二の実施形態>>
次に、本発明の第二の実施形態を説明する。第一の実施形態は、回避すべき特定コードが連続した1領域に定義されている場合の暗号化および復号化処理である。しかしながら、回避すべき特定コードは、必ずしも連続した範囲に定義されているとは限らない。特定コードとして定義される領域は複数存在する場合もある。
次に、本発明の第二の実施形態を説明する。第一の実施形態は、回避すべき特定コードが連続した1領域に定義されている場合の暗号化および復号化処理である。しかしながら、回避すべき特定コードは、必ずしも連続した範囲に定義されているとは限らない。特定コードとして定義される領域は複数存在する場合もある。
例えば、SHIFT−JISにおける漢字エリアは、グループにおける許可されたシンボルが一連続ではない。SHIFT−JISコードでは、漢字以外のコードを特定コードとしてみた場合、多数の特定コードグループが存在する。このため、SHIFT−JIS漢字からSHIFT−JIS漢字へのランダムな変換を実現するためには、いくつもの非漢字エリア(特定コード範囲)を考慮しながらの符号化が必要である。本実施形態は、このように、特定コードが複数の不連続な範囲に渡り定義されている場合に、それらを回避し、暗号化および復号をする場合の実施形態である。
本実施形態の暗号化装置3001、および、復号装置4001は、第一の実施形態と基本的に同様である。
また、本実施形態の暗号処理部3011の処理の流れも基本的に第一の実施形態と同様である。ただし、この中で、特定コード回避暗号処理部3012の処理は、以下のとおりである。
図12は、本実施形態の特定コード回避暗号処理部3012の処理の処理フローである。本実施形態においても、メッセージブロックMのビット長|M|をLと表す。また、本実施形態においては、特定コードとして定義される特定コード領域がm個存在するものとする。mは自然数である。それぞれの特定コード領域は、文字tiから始まる幅diの連続する領域からなるものとする。iはm以下の自然数である。
特定コード回避暗号処理部3012は、暗号処理部3011からメッセージブロックMを受け取ると(ステップ2601)、特定コード回避暗号処理部3012は、3つの変数i、D1、D2を、それぞれ、i=1、D1=0、D2=0と初期化し、メッセージブロックMを中間値ブロックM’とする(ステップ2602)。
次に、中間値ブロックM’に、法2L−D2で−(ti+di−D1)を加算し(ステップ2603)、変数D1、D2にそれぞれti、diを加え、結果を中間値ブロックM’と置き換える(ステップ2604)。
iを1づつ増加させながら、ステップ2603およびステップ2604の処理を、iがmになるまで繰り返す(ステップ2605、2606)。
次に、特定コード回避暗号処理部3012は、圧縮乱数生成部3013に圧縮乱数Sを生成させ(ステップ2607)、上記ステップ2603〜2606の処理後の中間値ブロックM’に、生成した圧縮乱数Sを法2L−D2で加算する(ステップ2608)。ここで、圧縮乱数生成部3013による圧縮乱数Sの生成方法は、第一の実施形態と同様である。加算結果を、中間値ブロックC’とする。
次に、特定コード回避暗号処理部3012は、変数D1、D2からそれぞれti、diを減算する(ステップ2609)。そして、中間値ブロックC’にti+di−D1を法2L−D2で加算し、それを中間値ブロックC’とする(ステップ2610)。
iを1づつ減少させながら、ステップ2609およびステップ2610の処理を、iが1になるまで繰り返す(ステップ2611、2612)。
特定コード回避暗号処理部3012は、最終的に得られた出力を、暗号文ブロックCとして出力する(ステップ2613)。
本実施形態の特定コード回避暗号処理によるデータの変換の様子を、図13を用いて説明する。図13は、本実施形態の特定コード回避暗号処理によるデータの変換のイメージ図である。本実施形態では、特定コード領域が複数あるため、その領域数分、特定コード領域が端になるよう移動させる変換処理を行い、全ての特定コード領域外の範囲内で暗号化を行い、その後、端に寄せた各特定コード領域をもとの箇所に戻す変換処理を行う。
ここでは、m=3の場合を例にあげて説明する。すなわち、定義されている特定コードの領域をt1〜(t1+d1)、t2〜(t2+d2)、t3〜(t3+d3)とする。また、メッセージブロックMのビット長は8とする。
図13に示すように、本実施形態によれば、各特定コード領域t1〜(t1+d1)、t2〜(t2+d2)、t3〜(t3+d3)を順に端に寄せるよう変換し、特定コード領域害の範囲において、暗号化を行う。
入力されるメッセージブロックMを数直線2701で表す。i=1の場合のステップ2602〜2606の処理により、領域t1〜(t1+d1−1)は、入力されるメッセージブロックMの取り得る範囲内で整数として最も大きいもの(ff-d1−1〜ff)となるよう変換される。このときの中間値ブロックM’を数直線2702で表す。
i=2の場合のステップ2602〜2606の処理により、領域t2〜(t2+d2-1)は、その時点の中間値ブロックM’の取り得る範囲内で整数として最も大きいもの(ff-d1-d2-1〜ff-d1)となるよう変換される。このときの中間値ブロックM’を数直線2703で表す。
そして、i=3の場合のステップ2602〜2606の処理により、領域t3〜(t3+d3-1)は、その時点の中間値ブロックM’の取り得る範囲内で整数として最も大きいもの(ff-d1-d2-d3-1〜ff-d1-d2)となるよう変換される。このときの中間値ブロックM’を数直線2704で表す。
以上の処理により、有効なデータ、すなわち、特定コード以外のデータを、法2L-(d1+d2+d3)で扱うことができるようになる。また、ステップ2608における法2L-(d1+d2+d3)での攪拌による変換は、端にまとめられた特定コード領域(ff-d1-d2-d3-1〜ff)に影響を与えない。ステップ2608処理後の中間値ブロックC’を数直線2705で表す。
その後、ステップ2609から2612を繰り返し、ステップ2602から2606で行った変換の逆変換を行い、特定コード領域ff-d1-d2-d3〜ffを、領域毎に、それぞれ元の場所t3〜(t3+d3-1)、t2〜(t2+d2-1)、t1〜(t1+d1-1)にこの順に戻す。この時の中間値ブロックC’を、それぞれ、数直線2706、2707、2708で表す。数直線2708は最終的な出力である暗号文ブロックCでもある。
このとき、特定コード領域以外の部分は、秘密情報である圧縮乱数Sで攪拌されている。また、数直線2708で示すように、本実施形態の特定コード回避暗号処理により、その出力が各特定コード領域t1〜(t1+d1-1)、t2〜(t2+d2-1)、t3〜(t3+d3-1)となるものもない。以上説明したように、本実施形態の特定コード回避暗号処理は、可逆な変換を独立に組み合わせたものであるため、全体として可逆であり、かつ、特定コードを出力しないものといえる。
次に、本実施形態の特定コード回避暗号処理により暗号化された暗号文ブロックCを復号する場合の処理について説明する。
本実施形態の復号装置は、基本的に第一の実施形態の復号装置4001と同様の機能構成を有する。このため、ここでは説明しない。また、本実施形態の復号装置4001において、暗号文ブロックCが入力された場合の復号処理部4011による復号処理、圧縮乱数生成処理部4013、擬似乱数生成器4014の処理も基本的に第一の実施形態と同様である。
ただし、本実施形態においては、文字tiから始まる幅diの連続した領域である特定コード領域が、m個存在する。したがって、特定コード回避復号処理部4012の処理は以下のとおりとなる。
図14は、本実施形態の特定コード回避復号処理部4012による特定コード回避復号処理の処理フローである。図14の説明では、暗号文ブロックCのビット長をLとする。また、図15は、本実施形態の特定コード回避復号処理のイメージ図である。図15においては、暗号文ブロックCのビット長は8、mは3の場合を例に挙げて説明する。また、入力される暗号文ブロックCを数直線2901で表す。
特定コード回避復号処理部4012は、復号処理部4011から暗号文ブロックCを受け取ると(ステップ2801)、3つの変数i、D1、D2を、それぞれ、i=1、D1=0、D2=0と初期化し、暗号文ブロックCを、中間値ブロックC’’とする(ステップ2802)。
次に、中間値ブロックC’’に、法2L−D2で−(ti+di−D1)を加算し(ステップ2803)、変数D1、D2にそれぞれti、diを加え、加算結果を、中間値ブロックC’’に置き換える(ステップ2804)。
iを1づつ増加させながら、ステップ2803およびステップ2804の処理を、iがmになるまで繰り返す(ステップ2805、2806)。
特定コード回避復号処理部4012は、特定コード領域(ti〜(ti+di−1))を、その時点の暗号ブロックCの取り得る範囲内で整数として最も大きいものとなるよう変換する。変換後の暗号文ブロックCを表す数直線のiが1、2、3の場合の例を、それぞれ数直線2902、2903、2904で表す。本処理により、本実施形態の特定コード以外のデータを、法2L−Σdiで扱うことができる。
次に、特定コード回避復号処理部4012は、圧縮乱数生成処理部4013に中間値ブロックC’’のビット長Lに応じた圧縮乱数Sの生成を行わせる(ステップ2807)。圧縮乱数Sの生成については、第一の実施形態と同様である。
次に、上記ステップ2806までの処理後の中間値ブロックC’’から圧縮乱数Sを法2L−Σdiで減算する(ステップ2808)。減算結果を、中間値ブロックP’’とする。また、この時の中間値ブロックP’’を、図15の数直線2905で表す。本図に示すように、数直線2904において、法2L−Σdiでの攪拌は、特定コード領域に影響を与えない。
次に、特定コード回避復号処理部4012は、変数D1、D2からそれぞれti、diを減算する(ステップ2809)。そして、ステップ2808処理後の中間値ブロックP’’にti+di−D1を法2L−D2で加算し、その結果を中間値ブロックP’’に置き換える(ステップ2810)。
iを1づつ減少させながら、ステップ2809およびステップ2810の処理を、iが1になるまで繰り返す(ステップ2811、2812)。
mが3の場合、ステップ2809から2812を繰り返し、ステップ2802から2806で行った変換の逆変換を行い、特定コード領域ff-d1-d2-d3−1〜ffを、領域毎に、それぞれ元の場所t3〜(t3+d3-1)、t2〜(t2+d2-1)、t1〜(t1+d1-1)にこの順に戻す。この時の中間値ブロックP’’を、それぞれ、数直線2906、2907、2908で表す。数直線1908は、最終的な出力である平文ブロックPである。
このように、本実施形態の特定コード回避復号処理後の暗号文ブロックCは、特定コード領域を回避した平文ブロックPとなる。
以上説明したように、本実施形態の暗号化装置3001による暗号化処理は、特定コードを出現させることなく暗号文を生成できる。また、その暗号化時に、データ長を増大させることもない。特定コード以外の領域で、通常の攪拌処理を行うため、安全性の低下もない。
また、本実施形態の暗号化処理は、第一の実施形態同様、圧縮乱数Sおよび特定コード領域にのみ依存し、入力されたメッセージブロックMには依存しない。また、第一の実施形態同様、各変換は算術加算といった単純な変換であり、逆変換も容易である。従って、復号装置も容易に実現できる。
本実施形態も、第一の実施形態同様、処理時間差によるタイミング攻撃が実現可能な実装環境においても、安全性の高い処理を実現することができる。
<<第三の実施形態>>
次に本発明の第三の実施形態を説明する。本実施形態は、第一および第二の実施形態と異なり、特定コード回避暗号処理部3012における処理に分岐処理を用いる。分岐処理を用いることにより、分岐処理暗号化したコードが特定コードであれば、特定コード外にずらし、そうでない場合は、そのまま暗号文として出力するといった簡易でシンプルな処理フローにより、特定コードを回避する暗号化処理を実現することができる。
次に本発明の第三の実施形態を説明する。本実施形態は、第一および第二の実施形態と異なり、特定コード回避暗号処理部3012における処理に分岐処理を用いる。分岐処理を用いることにより、分岐処理暗号化したコードが特定コードであれば、特定コード外にずらし、そうでない場合は、そのまま暗号文として出力するといった簡易でシンプルな処理フローにより、特定コードを回避する暗号化処理を実現することができる。
本実施形態では、暗号化装置3001、復号装置4001の機能構成は第一および第二の実施形態と基本的に同じであるため、以下、異なる構成である特定コード回避暗号処理部3012による特定コード回避暗号処理および特定コード回避復号処理部4012による特定コード回避復号処理についてのみ説明する。
まず、予め定義されている特定コードが1種類(t)である場合を例に挙げて説明する。
図16は、本実施形態の特定コードが1種類である場合の特定コード回避暗号処理を説明するための処理フローである。
特定コード回避暗号処理部3012は、暗号処理部3011からメッセージブロックMを受け取ると(ステップ201)、圧縮乱数生成処理部3013にメッセージブロックMのビット長Lに応じた圧縮乱数Sの生成を行わせる(ステップ202)。ここでは、2L−1通りの出力からランダムに圧縮乱数Sを生成させる。なお、圧縮乱数生成処理部3013による圧縮乱数Sの生成は、上述のように第一および第二の実施形態と同様であるため、ここでは説明しない。
次に、特定コード回避暗号処理部3012は、入力されたメッセージブロックMと、圧縮乱数生成処理部3013により生成された圧縮乱数Sとを、Lビット長のレジスタ幅で算術加算する。ここでは、メッセージブロックMに圧縮乱数Sを法2Lで加算、すなわち、(S+M)mod2Lを計算し、その結果を中間値ブロックC’として出力する(ステップ203)。
次に、特定コード回避暗号処理部3012は、中間値ブロックC’を次の条件分岐にかける(ステップ204)。中間値ブロックC’がtとt+S−1との間である場合(t≦C’≦(t+S−1)の場合)は、中間値ブロックC’をmod2Lで1インクリメント(+1)し、本処理の出力である暗号文ブロックC(C=C’+1)とする(ステップ205、206)。中間値ブロックC’がそれ以外の場合は(ステップ204)、出力C’をそのまま本処理の出力である暗号文ブロックC(C=C’)とする(ステップ207、206)。
以上のように、本実施形態の特定コード回避暗号処理による暗号文ブロックCは、特定コードtとはならない。また、本処理は可逆である。
次に、本実施形態の特定コード回避暗号処理部3012による特定コード回避暗号処理が、可逆であり、かつ、特定コードtを出力しないものであることを説明する。図17は、本実施形態の特定コードが1種類である場合の特定コード回避暗号処理部3012による特定コード回避暗号処理のイメージ図である。
入力されるメッセージブロックMを、数直線301で表す。ここでは、メッセージブロックMのビット長が8の場合を例に挙げて説明する。なお、定義されている特定コードはtである。つまり、0x00から0xffまでの256通りあるメッセージブロックMのうち、tだけは、暗号処理部3011の処理により、入力として与えられない。
ステップ203の算術加算により、メッセージブロックMの値は(t+S)mod28に移動する。この時のブロックデータ(中間値ブロックC’)を、数直線302で表す。
次に、ステップ204の条件分岐で、中間値ブロックC’は、その値がtとt+S−1の間に属する場合(t≦C’≦t+S−1)、+1されて、暗号ブロックCとなる。すなわち、t≦C’≦t+S−1の範囲のものは、mod28でt+1≦C(=C’+1)≦t+Sとなる。一方、中間値ブロックC’の値が、t未満、または、t+Sより大きいものは、(t+S)mod28がそのまま暗号ブロックCとなる。このときのブロックデータ(暗号ブロックC)を、数直線303で表す。数直線303で示されるように、暗号ブロックCには、その値がtとなるものは存在しない。
次に、上記処理に従って暗号化された暗号文ブロックCを、復号する場合の処理である、特定コード回避復号処理部4012による特定コード回避復号処理について説明する。ここでも、特定コードはtとする。
図18は、本実施形態の特定コードが1種類である場合の特定コード回避復号処理の処理フローである。
特定コード回避復号処理部4012は、復号処理部4011から暗号文ブロックCを受け取ると(ステップ801)、圧縮乱数生成処理部4013に、暗号文ブロックCのビット長Lに応じた圧縮乱数Sの生成を行わせる(ステップ802)。圧縮乱数生成処理部4013による圧縮乱数Sの生成については、上述の各実施形態と同様であるため、ここでは説明しない。
次に、特定コード回避復号処理部4012は、暗号文ブロックCと、圧縮乱数Sと、特定コードtとの関係を判別する(ステップ803)。暗号文ブロックCが、t+1とt+Sとの間に属する場合、すなわち、t+1≦C≦t+Sの場合、暗号文ブロックCを1デクリメントし(−1)たものを、中間値ブロックC’’とする(ステップ804)。
一方、暗号文ブロックCが、t+1とt+Sとの間以外に属する場合、暗号文ブロックCをそのまま中間値ブロックC’’とする(ステップ807)。
そして、中間値ブロックC’’から圧縮乱数Sを、Lビット長のレジスタ幅で減算する(ステップ805)。すなわち、(C’’−S)mod2Lを計算する。
そして、ステップ805で得られた結果を平文ブロックPとして出力する(ステップ806)。
図19に、本実施形態の特定コードが1種類である場合の特定コード回避復号処理のイメージ図を示す。入力される暗号文ブロックCを、数直線901で表す。ここでは、暗号時と同様、暗号文ブロックCのビット長が8の場合を例に挙げて説明する。定義されている特定コードはtとする。つまり、0x00から0xffまでの256通りあるメ暗号文ブロックCのうち、tだけは、復号処理部4011の処理により、入力として与えられない。
ステップ803、804、807の処理後の中間値ブロックC’’を、数直線902で表す。すなわち、t+1≦C≦t+Sの場合、暗号文ブロックCのビット長幅で1デクリメント(左に移動)し、その他の場合は、そのままとする。
その後、数直線902で表される中間値ブロックC’’に対し、ステップ805の処理を施し、平文ブロックPとしたものを、数直線903で表す。本図に示すように、ステップ805の処理後のブロックデータは、特定コードtを回避したブロックデータとなる。
以上説明したように、本実施形態の特定コード回避暗号処理は、圧縮乱数として生成されたSと、特定コードtとにのみに依存し、入力されたメッセージブロックM(平文の値)には依存しない。また、上述のように、メッセージブロックMが特定コードである場合の処理はもとより、そうでない場合に行われる特定コード回避暗号処理内の各変換は、それぞれ、算術加算と条件分岐といった非常に単純な変換であり、その逆変換も容易である。従って、復号装置4001内での特定コード回避復号処理は、暗号化装置3001内の特定コード回避暗号処理の逆変換を逆順に重ねることにより実現できる。
なお、本実施形態では、特定コード回避暗号処理において、最終的な出力に特定コードであるtが含まれないようにするために、中間値ブロックC’の、所定の範囲に属するものを全て1インクリメントすることとしているが、これに限られない。
入力されたメッセージブロックMに圧縮乱数Sを加算した後に特定コードtとなる出力(図17の数直線302において、特定コードtとなる出力)を、メッセージブロックMに圧縮乱数Sを加算した後にt+Sとなる箇所に移動させることも可能である。すなわち、暗号文出力tとt+Sとを入れ替えてもよい。この場合の特定コード回避暗号処理の処理フローを図20に、処理のイメージを図21に示す。
図20に示すように、特定コード回避暗号処理部3012は、暗号処理部3011からメッセージブロックMを受け取ると(ステップ2301)、圧縮乱数生成処理部3013にメッセージブロックMのビット長Lに応じた圧縮乱数の生成を行わせる(ステップ2303)。そして、特定コード回避暗号処理部3012は、入力されたメッセージブロックMと、圧縮乱数SとをLビット長のレジスタ幅で算術加算し、その結果を中間値ブロックC’とする(ステップ2303)。ここまでは、上記本実施形態の処理と同様である。
次に、本変形例では、特定コード回避暗号処理部3012は、中間値ブロックC’が、特定コードtであるか否かを判別する(ステップ2304)。
中間値ブロックC’が特定コードtである場合、中間値ブロックC’に圧縮乱数Sを法2Lで加算し(ステップ2305)、暗号文ブロックCとして出力する(ステップ2306)。
一方、中間値ブロックC’が特定コードt以外の場合、中間値ブロックC’をそのまま暗号文ブロックCとし(ステップ2307)、出力する(ステップ2306)。
以上の処理を図21のイメージ図を用いて説明する。ここでは、メッセージブロックMのビット長を8とする。
上記ステップ2303の算術加算により、数直線2401で表されるメッセージブロックMの値は、(t+S)mod28に移動する。このときの中間値ブロックC’を、数直線2402で表す。その後、ステップ2304の分岐により、数直線2402上で、特定コードtとなるもののみ、t+Sに移動させ、その他の数直線2402上のものは、そのままとする。この時の暗号ブロックCを数直線2403で表す。
なお、この場合の特定コード回避復号処理は、基本的に上記図18で説明した処理と同様であるが、ステップ803、804、807において、暗号文ブロックCが特定コードtであるか否かを判別し、特定コードtである場合、暗号文ブロックCに圧縮乱数Sを法2Lで加算して中間値ブロックC’’とし、その他の場合は、暗号文ブロックCをそのまま中間値ブロックC’’とする。
次に、本実施形態の特定コード回避暗号処理および特定コード回避復号処理において、特定コードがtから始まる幅dの連続する1領域に定義されている場合の処理を説明する。すなわち、特定コードが、t、t+1、t+2、・・・・、t+d−1のd通りの場合の各処理について説明する。
図22は、本実施形態の特定コードが連続する一領域に定義されている場合の特定コード回避暗号処理の処理フローである。本実施形態で先に説明した、特定コードがtのみの1種類である場合の同処理と異なる点は、圧縮乱数の生成パラメータが2L−dであること(Lは、メッセージブロックMのビット長)と、条件分岐後に、選出された範囲のコードに加算する値がdであることとの2点である。言い換えれば、先に説明した例は、本例の中で、dを1とした特殊な場合である。
特定コード回避暗号処理部3012は、暗号処理部3011からメッセージブロックMを受け取ると(ステップ1001)、圧縮乱数生成処理部3013に圧縮乱数Sの生成を行わせる(ステップ1002)。ここでは、2L−d通りの出力からランダムに圧縮乱数Sを生成させる。圧縮乱数Sの生成は、他の各実施形態と同様である。
次に、特定コード回避暗号処理部3012は、入力されたメッセージブロックMと、圧縮乱数生成処理部3013により生成された圧縮乱数Sとを、Lビット長のレジスタ幅で算術加算する。つまり、(S+M)mod2Lを計算する。そして、その結果を中間値ブロックC’として出力する(ステップ1003)。
次に、特定コード回避暗号処理部3012は、中間値ブロックC’を次の条件分岐にかける(ステップ1004)。中間値ブロックC’がtとt+S−1との間である場合(t≦C’≦(t+S−1)の場合)は、中間値ブロックC’をmod2Lでdインクリメント(+d)し、本処理の出力である暗号文ブロックC(C=C’+d)とする(ステップ1005、1006)。一方、中間値ブロックC’がそれ以外の場合は(ステップ204)、中間値ブロックC’をそのまま本処理の出力である暗号文ブロックC(C=C’)とする(ステップ1007、1006)。
次に、本例の特定コード回避暗号処理が、特定コードグループdを出力しないこと、および、本処理による変換(符号化)の可逆性について説明する。図23は、そのイメージ図である。
入力されるメッセージブロックMを、数直線1101で表す。ここでは、メッセージブロックMのビット長が8の場合を例に挙げて説明する。また、定義されている特定コードは、tから始まる連続した1領域のd個、すなわち、t、t+1、t+2、・・・・、t+d−1である。つまり、0x00から0xffまでの256通りあるメッセージブロックMのうち、上記特定コード群は、暗号処理部3011の処理により、入力として与えられない。
ステップ1003の算術加算により、メッセージブロックMの値は中間値ブロックC’となり、(t+S)mod28に移動する。この時の中間値ブロックC’を、数直線1102で表す。
次に、ステップ1004の条件分岐で、中間値ブロックC’は、その値がtとt+S−1の間に属する場合(t≦C’≦t+S−1)、+dされ、出力である暗号文ブロックCとされる。すなわち、t≦C’≦t+S−1の範囲のものは、mod28でt+d≦C(=C’+d)≦t+S+d−1となる。一方、中間値ブロックC’の値が、t未満、または、t+Sより大きい場合は、(t+S)mod28がそのまま出力である暗号文ブロックCとされる。
このときの出力である暗号文ブロックCを、数直線1103で表す。数直線1103で示されるように、本処理により出力される暗号文ブロックCには、その値がtから始まる幅dの連続した1領域の特定コードとなるものは存在しない。
次に、上記処理に従って暗号化された暗号文ブロックCを復号する場合の処理である、特定コード回避復号処理部4012による特定コード回避復号処理について説明する。ここでも、特定コードは、tから始まる幅dの連続した1領域とする。
図24は、本実施形態の特定コードが連続する一領域に定義されている場合の特定コード回避復号処理の処理フローである。
特定コード回避復号処理部4012は、復号処理部4011から暗号文ブロックCを受け取ると(ステップ1201)、圧縮乱数生成処理部4013に、暗号文ブロックCのビット長Lに応じた圧縮乱数Sの生成を行わせる(ステップ1202)。圧縮乱数Sの生成は、他の実施形態と同様である。
次に、特定コード回避復号処理部4012は、暗号文ブロックCと、圧縮乱数Sと、特定コード群t〜t+d−1との関係を判別する(ステップ1203)。
暗号文ブロックCが、t+dとt+d+S−1との間に属する場合、すなわち、t+d≦C≦t+d+S−1の場合、暗号文ブロックCをdデクリメントし(−d)たものを、中間値ブロックC’’とする(ステップ1204)。
一方、暗号文ブロックCが、t+dからt+d+S−1の間以外に属する場合、暗号文ブロックCをそのまま中間値ブロックC’’とする(ステップ1207)。
そして、中間値ブロックC’’から圧縮乱数Sを、Lビット長のレジスタ幅で減算する(ステップ1205)。すなわち、(C’’−S)mod2Lを計算する。
そして、ステップ1205で得られた結果を平文ブロックPとして出力する(ステップ1206)。
図25に、本実施形態の特定コードがtから始まる連続した1領域のd個である場合の特定コード回避復号処理のイメージ図を示す。入力される暗号文ブロックCを、数直線1301で表す。ここでは、暗号文ブロックCのビット長が8の場合を例に挙げて説明する。定義されている特定コードはtから始まる幅dの連続した1領域である。つまり、0x00から0xffまでの256通りあるメッセージブロックMのうち、tから始まる幅dの連続した1領域だけは、復号処理部4011の処理により、入力として与えられない。
ステップ1203、1204、1207の処理後の中間値ブロックC’’を、数直線1302で表す。すなわち、t+d≦C≦t+d+S−1の場合、暗号文ブロックCのビット長幅でdデクリメント(左に移動)し、その他の場合は、そのままとする。
その後、数直線1302で表される中間値ブロックC’’に対し、ステップ1205の処理を施したものを、数直線1303で表す。本図に示すように、ステップ1205の処理後のブロックデータは、特定コード群を回避した平文ブロックPとなる。
以上説明したように、本実施形態の特定コード回避暗号処理は、圧縮乱数として生成されたSと、特定コード(t〜t+d−1)とにのみに依存し、入力されたメッセージブロックM(平文の値)には依存しない。また、上述のように、メッセージブロックMが特定コードである場合の処理はもとより、そうでない場合に行われる特定コード回避暗号処理内の各変換は、それぞれ、算術加算と条件分岐といった非常に単純な変換であり、その逆変換も容易である。従って、復号装置4001内での特定コード回避復号処理は、暗号化装置3001内の特定コード回避暗号処理の逆変換を逆順に重ねることにより実現できる。
なお、本実施形態では、特定コード回避暗号処理において、最終的な出力に特定コードであるtからt+d−1が含まれないようにするために、中間値ブロックC’の、所定の範囲に属するものを全てdインクリメントすることとしているが、これに限られない。上記特定コードtが1種類である場合の例で説明したように、入力されたメッセージブロックMに圧縮乱数Sを加算した後にtからt+d−1となる出力を、メッセージブロックMに圧縮乱数を加算した後にt+S〜t+S+d−1となる箇所に移動させることも可能である。
<<第四の実施形態>>
次に、上記各実施形態で説明した、暗号化装置3001および復号装置4001を用いたデータベースサーバシステムを説明する。
次に、上記各実施形態で説明した、暗号化装置3001および復号装置4001を用いたデータベースサーバシステムを説明する。
本データベースサーバシステムにより提供する情報サービスの概要は以下のとおりである。
権限を有する者が、データベースサーバに上記各実施形態で説明した暗号化装置3001およびそれに対応する復号装置4001を実現するセキュアモジュールを適用する。データベースサーバは、適用された暗号化装置3001を用いて、保持すべきデータベースのデータを、暗号化して保持する。
権限のないものがデータベースサーバにアクセスした場合、暗号化されたデータを閲覧することとなる。一方、権限のあるものが閲覧する場合、上記復号装置4001によって復号したものを閲覧、編集等することができる。データベースが権限のあるものにより更新された場合、当該データベース内のデータは再度、暗号化装置3001により暗号化された後、上書きされる。
図26は、本実施形態のデータベースサーバシステムの、データベースサーバ2001の機能ブロック図である。本図に示すように、データベースサーバ2001は、CPU2002と、ネットワーク2005への接続インタフェースであるネットワークインタフェース2004と、磁気ディスク2003と、セキュアモジュール2006とを備える。
セキュアモジュール2006は、上述の各実施形態で説明した暗号化装置3001および復号装置4001を実現するモジュールで、暗号ソフト2007および秘密鍵2008を備える。暗号ソフト2007により、暗号化装置3001および復号装置4001を実現する。なお、秘密鍵2008は、暗号化装置3001および復号装置4001において、圧縮乱数Sを生成する際の鍵として用いられる。
磁気ディスク2003は、データベース2009と、文字ルール2010とを保持する。本実施形態のデータベース2009の一例を図27に示す。本図に示すように、データベース2009は、複数のカラムとレコードとからなるデータベースであり、例えば、氏名が保持される氏名欄2009aと、本籍地が保持される本籍地欄2009bと、年齢が保持される年齢欄2009cと、性別が保持される性別欄2009dと、取引額が保持される取引額欄2009eとを備える。
上記のデータベース2009は、従来の方法で暗号化すると、データベースとしてのフォーマットが壊れるほか、部分的な閲覧を行うことやファイル操作(分割やマージ)が基本的には不可能となる。また、こうしたデータベースはCOBOL等のプログラム言語で作成されることが多いため、各セルで利用可能なデータ種別、文字種類、文字数などは限定される。従って、例えば、データ種別が文字列と定められている本籍地欄2009bに保持される本籍地データを暗号化し、その結果バイナリデータとなった場合、データ種別が異なるため元の本籍地欄2009bに暗号化後のバイナリデータ自体を保存できない、予め定められた容量サイズを超えため元の本籍地欄2009bに暗号化後のデータを保存できない、などの問題が生じる。
ところが、上記各実施形態で説明した暗号化装置3001によれば、上述の心配はない。すなわち、各列毎に暗号化する際、使用が許可されているコード以外の、例えば、各列の区切りを示す制御コード等を特定コードとして予め定義しておけばよい。
文字ルール2010は、データベース2009の書式を定義したファイルであり、データベース2009のシステムに固有のセル内容を記述したものである。暗号処理の前後の各列の書式は、文字ルール2010により特定される。文字ルール2010として保持されるデータの一例を図28に示す。本図に示すように、文字ルール2010は、データベース2009の各列の左から順に付与された番号を格納する列欄2010aと、予め定められた各列のルールを記述するルール欄2010bとを備える。本実施形態では、ルール欄2010bで使用を許可されているコード以外は、特定コードとして処理される。
次に、磁気ディスク2003に保持されるデータベース2009であって、本実施形態の暗号ソフト2007により実現される暗号化装置3001により暗号化された後のデータベース2009の一例を図29に示す。
本図に示すように、氏名欄2009aには、氏名欄2009aに格納されている氏名データを暗号化したもの、すなわちアルファベット間で変換がなされた後のデータが格納される。本籍地欄2009bには、本籍地欄2009bに格納されている本籍地データを暗号化したもの、ここでは、都道府県名間で変換がなされた後のデータが格納される。年齢欄2009cおよび取引額欄2009eには、それぞれ数値データを暗号化したものが、性別欄2009dには、MまたはFの2値間で暗号化したものが、格納される。
権限のない者が、本データベースサーバ2001にアクセスし、データベース2009を閲覧した場合、上記図29の内容を閲覧することとなる。権限のない者は、閲覧した内容から、本籍地欄2009bには、都道府県名が格納されていること、氏名欄2009aにはアルファベットの文字が格納されていることといった情報しか得ることができない。
本データベースサーバシステムにより提供する情報サービスの処理について説明する。データベースサーバ2001には、権限を有する者により、上記各実施形態で説明した暗号化装置3001および復号装置4001を実現するセキュアモジュール2006が適用されるものとする。
データベースサーバ2001は、保持すべきデータベース2009を、セキュアモジュール2006により実現される暗号化装置3001により暗号化し、保持する。
具体的には、CPU2002が、セキュアモジュール2006に保持すべきデータとともに、暗号化を要求する暗号化要求を送信する。セキュアモジュール2006は、上記各実施形態のいずれかの暗号化装置3001を実現する暗号ソフト2007と、秘密鍵2008と、文字ルール2010とを用いて、受け取ったデータを暗号化し、CPU2002に返す。CPU2002は、受け取った暗号化後のデータを、データベース2009として磁気ディスク2003に保持する。
権限を有する者よりデータベースの閲覧要求を受け付けると、CPU2002は、データベース2009の表示に先立ち、セキュアモジュール2006へ復号を要求する。復号要求には、例えば、復号を要求するデータのセル位置の情報などが含まれる。もちろん、それ以外の情報を送信してもよい。
CPU2002から、上記情報を受け取ったセキュアモジュール2006では、上記暗号化時に用いられた暗号化装置3001に対応付けられた復号装置4001を実現する暗号ソフト2007を呼び出し、圧縮乱数S生成のための鍵として秘密鍵2008とを用い、復号を要求されたデータの復号処理を行い、結果を依頼元のCPU2002に返信する。このとき、文字ルール2010にアクセスし、各セルの特定コードを把握し、復号時に用いる。
復号処理を終えると、CPU2002は、データベース閲覧ソフトとして動作し、セキュアモジュール2006から返信された復号後のデータを表示する。
ここで、データベースの閲覧を要求した権限を有する者は、表示されたデータを閲覧するだけでなく、変更、新規挿入などの処理を行うことができる。
権限を有するものからデータの上書き要求を受け取ると、CPU2002は、セキュアモジュール2006にデータの暗号化を要求する。ここでは、変更されたセルのデータのみ暗号化するよう構成することも可能である。このとき、CPU2002は、暗号化の要求には、暗号化されたデータのセル位置、新規セルデータなどが含まれる。
CPU2002から、上記情報を受け取ったセキュアモジュール2006では、暗号ソフト2007、秘密鍵2008および文字ルール2010を用いて受け取ったデータを暗号化し、CPU2002に返す。
CPU2002は受け取った暗号化後のデータを、該当のセル位置に上書きする。
以上の各実施形態によれば、予め定義した特定コードを回避して暗号文を生成することができる。従って、フォーマット化されたデータにおいて、各データのフォーマットを残したまま、暗号化することができ、暗号文としての使い勝手が向上する。また、各実施形態によれば、生成した暗号文のサイズが元の平文から変化しない。従って、暗号文の再符号化の必要がなくなる。また、サイズの変化がないため、転送処理時間や保存に必要な領域が増大することもない。
3001:暗号化装置、3011:暗号処理部、3012:特定コード回避暗号処理部、3013:圧縮乱数生成処理部、3014:擬似乱数生成器、3021:秘密鍵K、3022:初期値I、4001:復号装置、4011:復号処理部、4012:特定コード回避復号処理部、4013:圧縮乱数生成処理部、4014:擬似乱数生成器、4021:秘密鍵K、4022:初期値I、2001:データベースサーバ、2002:CPU、2003:磁気ディスク、2004:ネットワークインタフェース、2005:ネットワーク、2006:セキュアモジュール、2007:暗号ソフト、2008:秘密鍵、2009:データベース、2010:文字ルール、2009a:氏名欄、2009b:本籍地欄、2009c:年齢欄、2009d:性別欄、2009e:取引額欄、2010a:列欄、2010b:ルール欄
Claims (10)
- メッセージをブロック単位で暗号化する暗号化装置であって、
入力されたメッセージを構成する各ブロックについて、予め定めた所定幅の領域を有する特定のコードであるか否かを判別する判別手段と、
前記判別手段で前記特定のコードでないと判別されたブロックに対し、当該特定のコードを回避する暗号化処理を行う特定コード回避暗号化手段と、
前記判別手段で前記特定のコードと判別されたブロックは、当該ブロックのまま暗号文ブロックとして出力し、前記判別手段で前記特定のコードでないと判別されたブロックは、前記特定コード回避暗号化手段で暗号化処理を施した後のブロックを前記暗号文ブロックとして出力する出力手段と、を備えること
を特徴とする暗号化装置。 - 請求項1記載の暗号化装置であって、
前記特定コード回避暗号化手段は、
前記ブロックを、前記特定コードとして定められた領域の右隣のビットが0ビットの位置にくるようブロック長幅でスライドさせる第一のスライド手段と、
前記第一のスライド手段においてスライド後のブロックに攪拌処理を施す攪拌手段と、
前記攪拌処理後のブロックを、前記第一のスライド手段で行ったスライド幅と同量のスライドを前記第一のスライドと逆方向に行う第二のスライド手段と、を備えること
を特徴とする暗号化装置。 - 請求項1記載の暗号化装置であって、
前記特定コード回避暗号化処理は、
前記ブロックに攪拌処理を施す攪拌手段と、
前記攪拌処理後のブロックが、前記特定コードとして定められた領域に該当する箇所から当該特定コードに対して攪拌処理を行った場合に該当する箇所の間にあるか否かを判別するブロック判別手段と、
前記ブロック判別手段の判別結果が、前記間にあるものの場合、前記攪拌処理後のブロックを、前記特定コードの領域幅分、当該特定コード領域側へスライドさせるスライド手段と、を備えること
を特徴とする暗号化装置。 - 請求項1記載の暗号化装置であって、
前記特定コード回避暗号化処理は、
前記ブロックに攪拌処理を施す攪拌手段と、
前記攪拌処理後のブロックが、前記特定コードとして定められた領域に該当する箇所にあるか否かを判別するブロック判別手段と、
前記ブロック判別手段の判別結果が、前記箇所にあるものの場合、前記攪拌処理後のブロックを、当該特定コードが攪拌される箇所に移動させること移動手段と、を備えること
を特徴とする暗号化装置。 - 請求項2から4のいずれか1項記載の暗号化装置であって、
前記攪拌処理には、前記処理単位のブロックのデータ長(Lとする)と同じデータ長の乱数であって、その取り得る値が前記特定コードの領域幅(dとする)分を除いたもの(2L−d)である圧縮乱数を用いること
を特徴とする暗号化装置。 - 請求項5記載の暗号化装置であって、
前記圧縮乱数は、前記データ長Lの乱数を生成し、当該生成した乱数について、前記(2L−d)の剰余を取ることにより、生成すること
を特徴とする暗号化装置。 - 請求項5記載の暗号化装置であって、
前記圧縮乱数は、前記データ長Lの乱数を生成し、当該生成した乱数が前記(2L−d)外の値の場合、破棄するとともに当該(2L−d)内の値になるまで、前記データ長Lの乱数の生成を繰り返すことにより生成すること
を特徴とする暗号化装置。 - 暗号化されたメッセージをブロック単位で復号する復号装置であって、
入力された暗号化されたメッセージを構成する各ブロックについて、予め定められた特定のコードであるか否かを判別する判別手段と、
前記判別手段で特定のコードでないと判別されたブロックについて、当該特定のコードを回避する復号処理を行う特定コード回避復号手段と、
前記判別手段で前記特定のコードと判別されたブロックは、当該ブロックをそのまま平文ブロックとして出力し、前記判別手段で前記特定のコードでないと判別されたブロックは、前記特定コード回避復号手段で復号処理を施した後のブロックを前記平文ブロックとして出力する出力手段と、を備えること
を特徴とする復号装置。 - データを暗号化して保持し、ユーザからの指示に従って復号してユーザに提示するデータベースサーバであって、
暗号化されたデータを保持する記憶装置と、
前記記憶装置に保持するデータを暗号化する請求項1から7のいずれか1項記載の暗号化装置と、
ユーザからの指示に従って、前記記憶装置に暗号化された保持されているデータを復号する請求項8記載の復号装置と、を備えること
を特徴とするデータベースサーバ。 - メッセージをブロック単位で暗号化する暗号化方法であって、
入力されたメッセージを構成する各ブロックについて、予め定めた所定幅の領域を有する特定のコードであるか否かを判別する判別ステップと、
前記判別ステップで前記特定のコードと判別された場合、当該ブロックを、当該ブロックのまま暗号文ブロックとして出力し、前記判別ステップで前記特定のコードでないと判別された場合、当該ブロックに対し、当該特定のコードを回避する暗号化処理を行い、前記暗号化処理後のブロックを前記暗号文ブロックとして出力する出力ステップと、を備えること
を特徴とする暗号化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005275258A JP2007086421A (ja) | 2005-09-22 | 2005-09-22 | 特定コードを回避する暗号化装置および暗号化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005275258A JP2007086421A (ja) | 2005-09-22 | 2005-09-22 | 特定コードを回避する暗号化装置および暗号化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007086421A true JP2007086421A (ja) | 2007-04-05 |
Family
ID=37973464
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005275258A Pending JP2007086421A (ja) | 2005-09-22 | 2005-09-22 | 特定コードを回避する暗号化装置および暗号化方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007086421A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8577032B2 (en) | 2007-08-06 | 2013-11-05 | Nec Corporation | Common key block encryption device, common key block encryption method, and program |
-
2005
- 2005-09-22 JP JP2005275258A patent/JP2007086421A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8577032B2 (en) | 2007-08-06 | 2013-11-05 | Nec Corporation | Common key block encryption device, common key block encryption method, and program |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Barker et al. | Recommendation for the triple data encryption algorithm (TDEA) block cipher | |
US7945049B2 (en) | Stream cipher using multiplication over a finite field of even characteristic | |
CN1100419C (zh) | 再加密数据的设备和方法 | |
CN101536398B (zh) | 用于白盒实现的加密方法 | |
US8345876B1 (en) | Encryption/decryption system and method | |
EP2197144A1 (en) | Methods and devices for a chained encryption mode | |
CN106888081B (zh) | 白盒实施方案内中间值的宽编码 | |
CN107273724B (zh) | 为白盒实施方案的输入和输出加水印 | |
US20020159588A1 (en) | Cryptography with unconditional security for the internet, commercial intranets, and data storage | |
Babu | Modification affine ciphers algorithm for cryptography password | |
Joshy et al. | Text to image encryption technique using RGB substitution and AES | |
CN105978680A (zh) | 在白盒实现方案中实现填充 | |
GB2319704A (en) | Data encryption technique | |
Choubey et al. | Cryptographic techniques in information security | |
Erondu et al. | An encryption and decryption model for data security using vigenere with advanced encryption standard | |
JP4703805B2 (ja) | 暗号化装置、暗号化方法、復号化装置、復号化方法および通信システム | |
Park et al. | Methods for practical whitebox cryptography | |
CN115765963A (zh) | 基于密文域可逆隐写的文字图像审计信息记录与提取方法 | |
Saudagar et al. | Image encryption based on advanced encryption standard (aes) | |
JP2007086421A (ja) | 特定コードを回避する暗号化装置および暗号化方法 | |
JP5415020B2 (ja) | ストリーム暗号の暗号化装置、復号化装置、mac生成装置、ストリーム暗号の暗号化方法、復号化方法、mac生成方法およびプログラム | |
JP2008139742A (ja) | 非線形関数器、ストリーム暗号の暗号化装置、復号化装置、mac生成装置、ストリーム暗号の暗号化方法、復号化方法、mac生成方法およびプログラム | |
Wadisman et al. | Implementation of cryptography Merkle-Hellman knapsack combination, discrete algorithm and ASCII table modification for PHP source code security | |
JP5293612B2 (ja) | 暗号化装置、復号装置、暗号化方法、復号方法およびプログラム | |
Vats et al. | DEVELOPMENT OF SECURE COMMUNICATION USING ENCRYPTION AND STEGANOGRAPHY |