【文献】
N. MIYAHO. et al.,Study on a Disaster Recovery Network Mechanism by Using Widely Distributed Client Nodes,Fourth International Conference on Systems and Networks Communications, 2009 (ICSNC’09),米国,IEEE,2009年 9月20日,pp.217−223
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0019】
以下、本発明の実施の形態について、図面を用いて説明する。尚、すべての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。
【0020】
[実施形態1]
図1は、実施形態1に係る暗号化装置2000を、その使用環境と共に示すブロック図である。
図1において、矢印の流れは情報の流れを示している。また、
図1において、各ブロックは、ハードウエア単位の構成ではなく、機能単位の構成を示している。
【0021】
暗号化装置2000は、暗号化対象のデータを取得し、取得したデータの暗号化を行う。以下、暗号化対象のデータを、対象データと表記する。
【0022】
暗号化装置2000は、データ取得部2020、中間データ生成部2040、及び暗号化部2060を有する。以下、それぞれについて説明する。
【0023】
<データ取得部2020>
データ取得部2020は対象データを取得する。
【0024】
<中間データ生成部2040>
中間データ生成部2040は、対象データから中間データを生成する。具体的には、中間データ生成部2040は、対象データから得られる所定サイズごとの各ブロックについて、そのブロックに含まれる部分データを、そのブロックと異なるブロックに含まれる部分データを用いて復元可能に変換することで、中間データを生成する。ここで、部分データのサイズは、上記所定サイズの単位をビットとした場合、1ビット以上かつ所定サイズ以下の値である。また、あるブロックに含まれる部分データのサイズと、その部分データの変換に用いる他のブロックに含まれる部分データのサイズとは、同一であってもよいし異なっていてもよい。
【0025】
図2は、中間データ生成部2040が行う処理の具体例を示す図である。
図2において、対象データXは、「111110000010」という12ビットのデータである。ここで、
図2において、所定サイズは4ビットである。そのため、対象データXから得られる所定サイズのブロックは、「1111」、「1000」、及び「0010」という3つのブロックである。また、全ての部分データのサイズを1ビットとする。
【0026】
なお、
図2において、対象データXを区切る点線が示されているものの、これは理解を容易にするための図示である。中間データ生成部2040は、実際に対象データXの分割を行う必要はない。ただし、中間データ生成部2040は、実際に対象データXを分割してもよい。
【0027】
図2は、中間データ生成部2040が、各ブロックの末尾のビット(部分データ)が示す値を、そのビットの値と、次のブロックの先頭のビット(部分データ)が示す値との排他的論理和に変換する場合を例示している。1番目のブロックの末尾のビットが示す値である 1 は、2番目のブロックの先頭のビットが示す値である 1 との排他的論理和である 0 に変換される。同様に、2番目のブロックの末尾のビットが示す値、及び3番目のブロックの末尾のビットが示す値も変換される。なお、3番目のブロックは末尾のブロックであるため、中間データ生成部2040は、1番目のブロックを、3番目のブロックの次のブロックとして扱う。その結果、中間データ生成部2040は、「111010000011」という中間データ Y を生成する。
【0028】
なお、中間データ生成部2040は、あるブロックに含まれる部分データを、複数の部分データを用いて変換してもよい。この際、複数の部分データは、同一のブロックに含まれていてもよいし、異なるブロックに含まれていてもよい。
【0029】
また、中間データ生成部2040は、あるブロックに含まれる部分データを、他のブロックに含まれる部分データを加工したデータを用いて変換してもよい。例えば中間データ生成部2040は、あるブロックに含まれる部分データを、他のブロックに含まれる部分データのハッシュ値を用いて変換する。この場合、中間データ生成部2040は、ハッシュ値を算出する機能を有する。
【0030】
<暗号化部2060>
暗号化部2060は、中間データを、中間データ生成部2040の説明で述べた所定サイズごとに分割して、複数の暗号化対象ブロックを生成する。暗号化部2060は、各暗号化対象ブロックを独立に暗号化することで、中間データから暗号文を生成する。ここで、「暗号化対象ブロックを独立に暗号化する」とは、ある暗号化対象ブロックを暗号化する際に、他の暗号化対象ブロックを利用しないことを意味する。これは、ブロック暗号の暗号利用モードのうち、ECB モードに相当する処理である。
【0031】
なお、上記所定サイズとしては、任意の大きさを用いることができる。例えば所定サイズは、AES 暗号におけるブロック長と同じ 128 ビットである。
【0032】
<ハードウエア構成>
暗号化装置2000が有する各機能構成部は、例えば、個々に又は複数組み合わせられた状態で、少なくとも1つのハードウエア構成要素として実現される。その他にも例えば、各機能構成部は、少なくとも1つのソフトウエア構成要素として実現される。その他にも例えば、各機能構成部は、ハードウエア構成要素とソフトウエア構成要素の組み合わせにより実現される。
【0033】
図3は、暗号化装置2000のハードウエア構成を例示するブロック図である。
図3において、暗号化装置2000は、バス1020、プロセッサ1040、メモリ1060、及びストレージ1080を有する。
【0034】
バス1020は、プロセッサ1040、メモリ1060、及びストレージ1080が、相互にデータを送受信するためのデータ伝送路である。プロセッサ1040は、例えば CPU (Central Processing Unit) や GPU (Graphics Processing Unit) などの演算処理装置である。メモリ1060は、例えば RAM (Random Access Memory) や ROM (Read Only Memory) などのメモリである。ストレージ1080は、例えばハードディスク、SSD (Solid State Drive) 、又はメモリカードなどの記憶装置である。また、ストレージ1080は、RAM や ROM 等のメモリであってもよい。
【0035】
データ取得モジュール1220は、暗号化装置2000に、データ取得部2020の機能を持たせるためのプログラムである。プロセッサ1040は、データ取得モジュール1220を実行することで、データ取得部2020の機能を実現する。
【0036】
中間データ生成モジュール1240は、暗号化装置2000に、中間データ生成部2040の機能を持たせるためのプログラムである。プロセッサ1040は、中間データ生成モジュール1240を実行することで、中間データ生成部2040の機能を実現する。
【0037】
暗号化モジュール1260は、暗号化装置2000に、暗号化部2060の機能を持たせるためのプログラムである。プロセッサ1040は、暗号化モジュール1260を実行することで、暗号化部2060の機能を実現する。
【0038】
例えばプロセッサ1040は、上記各モジュールをメモリ1060上に読み出して実行する。ただし、プロセッサ1040は、上記各モジュールを、メモリ1060上に読み出さずに実行してもよい。
【0039】
ストレージ1080は、上記各モジュールを格納する。
【0040】
暗号化装置2000のハードウエア構成は、
図3に示した構成に限定されない。例えば、各モジュールはメモリ1060に格納されてもよい。この場合、暗号化装置2000は、ストレージ1080を備えていなくてもよい。
【0041】
<処理の流れ>
図4は、実施形態1の暗号化装置2000によって実行される処理の流れを例示するフローチャートである。ステップS102において、データ取得部2020は、対象データを取得する。ステップS104において、中間データ生成部2040は、対象データから中間データを生成する。ステップS106において、暗号化部2060は、中間データを複数の暗号化対象ブロックに分割する。ステップS108において、暗号化部2060は、各暗号化対象ブロックを暗号化して暗号文を生成する。
【0042】
<作用・効果>
暗号化装置2000は、対象データから中間データを生成し、その中間データから暗号文(ブロック暗号)を生成する。ここで、中間データ生成部2040は、対象データから得られる所定サイズの各ブロックについて、そのブロックに含まれる部分データを、そのブロックとは異なるブロックに含まれる部分データを用いて変換する。暗号化装置2000は、このように各ブロックに含まれる部分データを別のブロックに含まれる部分データを用いて変換することで、ブロック間に関連性を持たせる。
【0043】
ここで前述したように、各ブロックを独立して処理する ECB モードには、「生成された暗号文において、ブロック単位での改ざんが可能である」という脆弱性がある。本実施形態の暗号化装置2000は、暗号化を行う前にブロック間に関連性を持たせた中間データを生成し、その中間データから暗号文を生成する。このようにすることで、暗号化装置2000によって生成される暗号文に対し、ブロック単位ですり替えを行う攻撃を行うことが困難になるため、暗号文の安全性が高まる。以下に、暗号文に対してブロック単位ですり替えを行う攻撃を行うことが困難になる理由を説明する。
【0044】
まず、本実施形態の暗号化装置2000によれば、改ざんされたブロックを含む暗号文を復号することで中間データを得ても、その中間データから対象データを算出することができない。そのため、暗号化装置2000によって生成された暗号文を復号する復号装置は、ブロックをすり替えられている暗号文を取得した場合、その暗号文を正常に復号することができない。その結果、復号装置は、暗号文に何らかの攻撃が行われたことを知ることができる。したがって、暗号化装置2000によれば、復号装置において、ブロック単位ですり替えが行われた暗号文が、正しい暗号文として扱われてしまうことを防ぐことができる。よって、暗号文に対してブロック単位ですり替えを行う攻撃を行うことが困難になる。
【0045】
また、本実施形態において「対象データを中間データに変換してから暗号化を行う」という方法で生成された暗号文の安全性が、対象データを直接暗号化する ECB モードの暗号化によって生成される暗号文の安全性よりも低くすることはない。これは、以下のように数学的に証明できる。
【0046】
証明する命題は、以下の数式(1)に示す命題である。この命題は、「ECB モードの処理で生成された暗号文は安全である」が成り立てば、「暗号化装置2000によって生成される暗号文は安全である」が成り立つことを示している。この数式において、E(K, M) はECB モードの処理で対象データを直接暗号化することで得られる暗号文を表し、E(K, f(M)) は本実施形態の暗号化装置2000によって生成される暗号文を表す。E は ECB モードで行う暗号化を表す関数、K は暗号化に用いる鍵、M は対象データである。また、関数 f は、中間データ生成部2040が行う処理を表す。つまり、f(M) は、中間データを表す。
【数1】
【0047】
ここで、上記命題を証明するために、この命題の対偶を証明する。この対偶は、下記数式(2)で表される。
【数2】
【0048】
まず、E(K, f(M)) を解読可能なアルゴリズム A が存在すると仮定する。したがって、数式(3)に示すように、このアルゴリズム A に E(K, f(M)) を与えると M が算出される。すると、以下の数式(4)が成り立つこととなる。
【数3】
【0049】
上記(4)により、E(K, f(M)) を解読可能なアルゴリズムがあれば、E(K, M) を解読可能なアルゴリズムが存在することになる。このことから、数式(2)で表される対偶は真である。よって、数式(1)で表される命題も真である。
【0050】
以上のように、本実施形態の暗号化装置2000によって生成される暗号文の安全性が、一般の ECB モードの暗号化によって生成される暗号文の安全性より低くなることはない。
【0051】
<<IV(Initial Value) を用いて生成されるブロック暗号の脆弱性>>
暗号化に IV と呼ばれる値を用いる暗号利用モード(以下、IV モード)が広く利用されている。ここで、IV モードには、CBC モード(Cipher Block Chaining Mode)、CTR モード(Counter Mode)、CFB モード(Cipher Feedback Mode)、及び OFB モード(Output Feedback Mode)などがある。
【0052】
本発明者は、IV モードで生成されるブロック暗号に脆弱性があり、この脆弱性を無くすことは困難であることを発見した。そのため本発明者は、この脆弱性を持たない ECB モードで生成されるブロック暗号を、本発明によってさらに安全なものにすることで、ECB モードを利用しやすいものにすることを考えた。以下、IV モードで生成されるブロック暗号の脆弱性について説明する。
【0053】
まず、IV モードの利用方法について簡単に説明する。ここで、IV モードで生成される暗号文を I(K, M) と表記する。K は暗号化処理及び復号処理の双方で利用される秘密鍵であり、M は暗号化対象のメッセージである。暗号化装置では、I(K, M) が、K 及び IV を利用して M を暗号化することで、暗号文 I(K, M) を生成する。
【0054】
I(K, M) を復号する復号装置では、K 及び IV が必要である。正規の復号装置は、事前に暗号を生成する暗号化装置とやりとりをしておくことで、秘密鍵 K を入手している。また、復号装置は、I(K, M) と共に IV を取得する。例えば復号装置は、I(K, M) と IV とが連結したデータを、暗号化装置から取得する。このように、秘密鍵 K は第三者が知り得ない状態でやりとりされるのに対し、IV は第三者でも知り得る状態でやりとりされる。
【0055】
本発明者が発見した IV モードで生成されたブロック暗号に存在する脆弱性は、「暗号化装置や暗号化装置で用いられる暗号プログラムを提供する者が、装置で行われる処理に不正な処理を含めることで、暗号化装置のユーザや復号装置のユーザに気づかれずに秘密鍵 K を取得できてしまう」という脆弱性である。このように、「暗号化装置や暗号化装置で用いられる暗号プログラムを提供する者が、装置で行われる処理に不正な処理を含めることで、ユーザに気づかれないように行う攻撃」を、インサイダー攻撃と呼ぶ。
【0056】
まず、インサイダー攻撃のモデルを、以下の5つの要件を満たすものとして定義する。このモデルは、以降で説明する各インサイダー攻撃に共通のモデルである。第1の要件は、攻撃者が、暗号化装置で用いられる暗号プログラムの納入業者であることである。
【0057】
第2の要件は、暗号化装置のユーザが攻撃の対象であることである。そのため、例えば攻撃の内容は、この暗号化装置を用いて生成された暗号文を解読することで、ユーザが正規の宛先にのみ伝達したいと考えている情報を解読してしまうというものである。
【0058】
第3の要件は、攻撃者が、暗号化装置から復号装置に送られる暗号文を取得できることである。一般に、暗号文はネットワークを介してやりとりされることが多い。例えば、メールの送信元が暗号化装置である場合、暗号化装置は、メールの本文や添付ファイルを暗号化して暗号文を生成し、この暗号文を復号装置へ送信する。そのため、攻撃者は、暗号化装置と復号装置との間でやりとりされる通信を盗聴することで、暗号文を取得できる。このような盗聴の方法は既知の技術であるため、説明を省略する。
【0059】
第4の要件は、暗号化装置が、暗号文を生成するために用いた暗号鍵を外部に出力しないということである。例えば暗号化装置がネットワークを介して暗号鍵を外部に出力してしまうとする。こうすると暗号文は、ここで説明するインサイダー攻撃とは無関係に、容易に解読されてしまう。そこで、インサイダー攻撃のモデルでは、このように暗号鍵を外部に出力するような攻撃を行えない状況を仮定する。
【0060】
第5の要件は、暗号化装置のユーザが、暗号化装置によって出力された暗号文を復号できることである。この要件により、ユーザは、暗号化装置に暗号化させたデータ(本実施形態における対象データ)が、暗号化装置によって改ざんされていないことを確認できる。
【0061】
以下、上記要件が満たされているという前提の下で、本発明者が見出したインサイダー攻撃について説明する。このインサイダー攻撃は、「攻撃者が、暗号化装置に提供する暗号プログラムのうち、IV を生成するプログラムを悪意あるプログラムにすることで、秘密鍵 K を取得する」というものである。一般に、IV は乱数として生成されることが多い。これに対し、攻撃者は、提供する暗号プログラムにおいて、IV の生成方法を、「秘密鍵 K を暗号化した値 e(K) を算出し、この e(K) の値を IV として用いる」という方法にする。ここで、e(K) は、攻撃者のみが知る復号用関数 d によって復号できる。
【0062】
暗号化装置では、値が e(K) である IV を用いて暗号化を行い、暗号文 I(K, M)を生成する。そして、暗号化装置は、I(K, M) と IV を、復号装置へ送信する。攻撃者は、暗号化装置と復号装置との間の通信を盗聴することで、I(K,M) と IV を取得する。攻撃者は、前述した復号用関数 d を用いて IV を復号することで、秘密鍵 K を取得できる。こうすると、攻撃者は、取得した秘密鍵 K を用いて I(K,M) を復号し、メッセージ M を取得することができてしまう。
【0063】
暗号化装置や復号装置のユーザが上述の攻撃に気づくことは難しい。一般の暗号プログラムの場合は IV に乱数が設定される一方、上述の悪意あるプログラムの場合は IV に暗号文 e(K) が設定される。しかし、ユーザがある値を見たときに、それが乱数なのか暗号文なのかを見分けることは困難である。そのため、暗号化装置や復号装置のユーザが IV の値 e(K) を見ても、この値が秘密鍵 K を暗号化することで生成されたものなのか、一般的な乱数なのかを見分けることは困難である。
【0064】
以上のように、暗号化装置に対して暗号プログラムを提供する者は、暗号化装置や復号装置のユーザに気づかれない方法で、IV モードで生成されたブロック暗号に用いられる暗号鍵を取得できてしまう。その結果、暗号文を復号することができてしまう。
【0065】
<暗号化装置2000の詳細>
次に、本実施形態の暗号化装置2000について更に詳細に説明する。
【0066】
<<データ取得部2020の詳細>>
データ取得部2020が対象データを取得する方法は様々である。データ取得部2020は、暗号化装置2000の内部又は外部から対象データを取得する。例えば暗号化装置2000は、種々のアプリケーションによって生成されたデータ(例:メーラによって生成されたメール)を対象データとして取得する。この場合、例えばデータ取得部2020は、暗号化装置2000の内部又は外部で動作するアプリケーションから対象データを取得する。また、暗号化装置2000は、対象データが格納されている格納部から対象データを取得してもよい。また、暗号化装置2000は、外部から手動又は自動で入力される対象データを取得してもよい。
【0067】
<<暗号化部2060の詳細>>
暗号化部2060が各暗号化対象ブロックを暗号化する暗号アルゴリズムは、各暗号化対象ブロックを独立に暗号化するものであればよい。ブロック暗号において各ブロックを独立に暗号化する ECB モードでは、種々の暗号アルゴリズムが用いられている。暗号化部2060は、この種々の暗号アルゴリズムを利用できる。
【0068】
暗号化部2060は、暗号化装置2000の内部又は外部から取得した暗号鍵を用いて、各暗号化対象ブロックを暗号化する。なお、暗号化装置と復号装置との間で暗号鍵をやりとりする方法は既知の技術であるため、説明を省略する。
【0069】
<<中間データ生成部2040の詳細>>
中間データ生成部2040は、「値の並びが所定規則に従うビット列を対象データに付加することで、対象データのサイズを所定サイズの倍数にする」という処理を行ってもよい。前述したように、中間データ生成部2040は、対象データから得られる所定サイズの各ブロックについて処理を行うことで、中間データを生成する。ここで、対象データのサイズが所定サイズの倍数でない場合、得られるブロックの中には、所定サイズに満たないブロックが含まれる。これに対し、中間データ生成部2040が対象データのサイズを所定サイズの倍数にすれば、全てのブロックのサイズが所定サイズになる。
【0070】
対象データに対してビット列を付加する処理の具体例を説明する。まず中間データ生成部2040は、対象データのサイズを所定サイズで割った余りを算出する。そして、中間データ生成部2040は、この余りの値で表されるサイズを持つビット列であり、かつ値の並びが所定規則に従うビット列を、その暗号化対象ブロックに付加する。
【0071】
上述した、値の並びが所定規則に従うビット列は様々である。例えばこのビット列は、全てのビットの値が 0 であるビット列である。また例えば、このビット列は、全てのビットの値が 1 であるビット列である。その他にも例えば、このビット列は、「01」や「110」など、特定のビット列の繰り返しで表されるビット列である。以下、この特定のビット列を、繰り返し単位ビット列と表記する。
【0072】
ここで、中間データ生成部2040が対象データに付加するビット列のサイズが、繰り返し単位ビット列のサイズの倍数でない場合も考えられる。例えば、中間データ生成部2040が付加するビット列の長さが10ビットである場合に、繰り返し単位ビット列が「110」であるとする。この場合、例えば中間データ生成部2040は、「110+110+110+11」のように、繰り返し単位ビット列をできる限り繰り返すように、付加するビット列を生成する。
【0073】
ただし、中間データ生成部2040は、繰り返し単位ビット列のサイズが、対象データに付加するビット列のサイズの約数となるようにしてもよい。例えば中間データ生成部2040は、サイズの異なる繰り返し単位ビット列を複数用意しておき、その中から、サイズが対象データに付加するビット列の約数である繰り返し単位ビット列を選択して用いる。
【0074】
中間データ生成部2040が用いる繰り返し単位ビット列は、予め暗号化装置2000の内部に格納されていてもよいし、外部から与えられてもよい。繰り返し単位ビット列が外部から与えられる場合、例えばデータ取得部2020が、対象データと共に繰り返し単位ビット列を取得してもよい。
【0075】
以上のように所定規則に従うビット列を付加することによって対象データのサイズを所定サイズの倍数にすることには、インサイダー攻撃を防ぐことができるという作用効果がある。以下、具体的に説明する。
【0076】
暗号化処理と復号処理とで共通の秘密鍵が用いられると仮定する。この場合、例えば、「暗号化部2060によって生成される暗号文の一部が秘密鍵の一部を表すように、対象データに対して悪意あるビット列を付加する」というインサイダー攻撃を行うことが考えられる。具体的には、次の流れで攻撃を行う。1)対象データのサイズが所定サイズの倍数になるまで、対象データの末尾に、ランダムに生成したビットを付加する。2)ビット列を付加した後の対象データに対して中間データ生成部2040と暗号化部2060による処理を実行することで、暗号文を生成する。3)生成された暗号文の末尾 n ビットと、秘密鍵の末尾 n ビットとを比較する。ここで、例えば n は1である。4)生成された暗号文の末尾 n ビットと、秘密鍵の末尾 n ビットとが同一になるまで、1)から3)の処理を繰り返す。5)生成された暗号文の末尾 n ビットと、秘密鍵の末尾 n ビットとが同一になった場合、この暗号文を暗号化部2060による出力とする。
【0077】
以上の流れで処理を行うことにより、暗号化部2060によって生成された暗号文の末尾 n ビットが、秘密鍵の末尾 n ビットを表すようになる。この暗号文を、暗号文Xと表記する。このインサイダー攻撃を行う攻撃者は、さらに次の流れで攻撃を行うことで、秘密鍵全体を取得できる。まず、暗号化装置2000と復号装置との通信を盗聴することで、暗号文Xを取得する。この攻撃者は、暗号文Xの末尾 n ビットを抽出することで、秘密鍵の末尾 n ビットを知る。そして、この攻撃者は、秘密鍵の残りの部分をブルートフォース等の方法で見つけることで、秘密鍵全体を取得する。
【0078】
ここで一般に、暗号鍵のサイズは大きいため、ブルートフォースで暗号鍵を見つけようとすると膨大な時間がかかり、現実的な時間で見つけることは難しい。しかし、上記の方法で秘密鍵の一部を知ることができれば、ブルートフォースで秘密鍵を見つけるために要する時間が指数的に短縮される。その結果、攻撃者にとって、ブルートフォースで秘密鍵を見つけることが容易になってしまう。
【0079】
そこで、中間データ生成部2040は、値の並びが所定規則に従うビット列を対象データに付加することで対象データのサイズを所定サイズの倍数にする。この所定サイズは、暗号化部2060が暗号化の処理単位とする暗号化対象ブロックのサイズである。これにより、上述したインサイダー攻撃を行うことが難しくなる。その理由は、以下に示す通りである。
【0080】
まず、上述の方法でインサイダー攻撃を行う場合に、対象データに付加する悪意あるビット列が、所定規則に従っていないとする。この場合、暗号文から対象データを復元する復号装置は、対象データに付加されているビット列が所定規則に従っているか否かのチェックを行うことで、このビット列に悪意があるか否かをチェックすることができる。また、対象データに付加する悪意あるビット列として、所定規則に従うビット列であり、かつ攻撃者の意図に合うビット列(例:秘密鍵の一部を表すビット列)を生成することは確率的に困難である。よって、例えば上記所定規則を公開するように暗号化装置2000の製造業者に義務づけておき、復号装置における上記のチェックを可能にすれば、ユーザに気づかれないようにインサイダー攻撃が行われることを防ぐことができる。
【0081】
さらに、「中間データ生成部2040が、値が所定規則に従うビット列を付加して対象データのサイズを所定サイズの倍数にした場合において、暗号化装置2000によって生成される暗号文は、暗号鍵の情報を暗号文に含めようとするインサイダー攻撃に対して安全である」という命題を証明する。証明する命題を、命題2とおく。ただし、1)中間データ生成部2040が対象データと同じサイズの中間データを生成すること、及び2)暗号化部2060が中間データと同じサイズの暗号文を生成すること、を前提条件とする。対象データに対してビット列を付加することで、対象データのサイズは、所定サイズの倍数になっている。そのため、その後、中間データ生成部2040や暗号化部2060は、対象データのサイズを変更する必要がない。
【0082】
上記前提条件は、数式(5)に表すことができる。ここで、Length(X) は、データXのサイズを表す。また、M0 は、値が所定規則に従うビット列を付加することでサイズが所定サイズの倍数となった対象データである。f(M0) は、M0 から生成される中間データである。また、数式(1)と同様に、E は ECB モードで行う暗号化を表す関数であり、K は暗号鍵である。
【数4】
【0083】
以下、上記命題を証明する。まず、暗号化装置2000によって暗号文 C = E(K, f(M0)) が生成されたとする。そして、暗号文 C は、インサイダー攻撃に対して安全でないと仮定する。この仮定により、前述したインサイダー攻撃のモデルにおける第5の要件から、暗号化装置2000のユーザは、暗号文 C を復号できることになる。
【0084】
インサイダー攻撃は、暗号文に対して、暗号鍵 K の情報の一部 K' を加えるとする。ここで、Length(K') > 0 であることは明らかである。そのため、この不等式及び数式(5)より、Length(K') + Length(M0) > Length(C) を得る。よって、暗号文 C のサイズは、K' のサイズと M0 のサイズの和より小さくなる。これは、暗号文 C を生成する際に、データのサイズを圧縮する非自明な圧縮処理が行われることを意味する。
【0085】
ここで、暗号化装置2000のユーザは、このような非自明な圧縮処理が行われた暗号文 C を復号することができない。よって、前述した仮定と矛盾する。このことから、命題が真であることが証明される。
【0086】
<<暗号文の復号方法>>
例えば対象データが宛先へ送るメッセージである場合、この宛先は、暗号化装置2000がこの対象データから生成した暗号文を復号できる必要がある。
図5は、暗号化装置2000によって生成された暗号文を復号する復号装置3000を示す図である。以下、この復号装置3000について説明する。
【0087】
復号装置3000は、暗号文取得部3020、暗号文復号部3040、及び対象データ復元部3060を有する。暗号文取得部3020は、暗号化装置2000によって生成された暗号文を取得する。暗号文復号部3040は、この暗号文を復号して、中間データを算出する。対象データ復元部3060は、この中間データから対象データを復元する。
【0088】
暗号文取得部3020が暗号文を取得する方法は様々である。例えば暗号化装置2000がネットワークを介して復号装置3000に対して暗号文を送信する場合、暗号文取得部3020は、この暗号文を受信することで、暗号文を取得する。また例えば、暗号化装置2000が復号装置3000からアクセス可能な記憶装置に暗号文を格納する場合、暗号文取得部3020は、この記憶装置から暗号文を読み出すことで、暗号文を取得する。
【0089】
暗号文復号部3040は、暗号文を所定サイズごとに分割して復号対象ブロックを生成し、各復号対象ブロックを復号する。各復号対象ブロックを復号する方法は、暗号化部2060が各暗号化対象ブロックを暗号化した方法に依存する。例えば、暗号化部2060と復号装置との双方で共通鍵を利用する場合、暗号文復号部3040は、この共通鍵を予め保持しておき、この暗号鍵を用いて各復号対象ブロックを復号する。暗号化部2060によって利用される暗号アルゴリズムは、例えば一般の ECB モードの処理で実行される暗号アルゴリズムである。そのため、この暗号アルゴリズムで暗号化された暗号文を復号する復号アルゴリズムも既知である。
【0090】
ここで、復号装置3000が複数の暗号化装置2000それぞれから暗号文を取得する場合、暗号文復号部3040は、各暗号化装置2000の ID に対応づけて、その暗号化装置2000から取得する暗号文から中間データを算出するための情報を保持しておく。例えば上述のように共通鍵を用いる方法の場合、復号装置3000は、暗号化装置2000の ID に対応づけて共通鍵を保持しておく。
【0091】
対象データ復元部3060は、復号対象ブロックを結合した中間データを得る。この中間データは、中間データ生成部2040によって生成された中間データと同一である。対象データ復元部3060は、この中間データから、データ取得部2020によって取得された対象データを算出する。この算出方法は、中間データ生成部2040が中間データを生成した方法に依存する。例えば復号装置3000が複数の暗号化装置2000それぞれから暗号文を取得する場合、対象データ復元部3060は、暗号化装置2000の ID に対応づけて、その暗号化装置2000の中間データ生成部2040によって生成された中間データから対象データを算出する方法を予め保持しておく。
【0092】
[実施形態2]
実施形態2に係る暗号化装置2000は、実施形態1に係る暗号化装置2000と同様に、例えば
図1で表される。実施形態2の暗号化装置2000は、以下で説明する点を除き、実施形態1に係る暗号化装置2000と同様の機能を有する。
【0093】
実施形態2の中間データ生成部2040は、対象データから得られる各ブロックについて、そのブロックに含まれる部分データを、そのブロックから所定個離れた別のブロックに含まれる部分データを用いて変換する。これにより、中間データ生成部2040は、対象データから中間データを生成する。なお、あるブロックAから所定個離れたブロックBは、ブロックAより所定個後ろのブロックであってもよいし、ブロックAより所定個前のブロックであってもよい。例えば、上記所定個が3個である場合、中間データ生成部2040は、i 番目のブロックに含まれる部分データの変換に、(i+3) 番目のブロックに含まれる部分データ又は (i-3) 番目のブロックに含まれる部分データを用いる。
【0094】
例えば中間データ生成部2040は、上記所定個を n 個、所定サイズを b とした場合、対象データに含まれる全てのビットそれぞれを、そのビットから (n*b) 個離れたビットを用いて変換する。
【0095】
図6は、実施形態2の暗号化装置2000が中間データを生成する処理を擬似コードとして例示する図である。手続 f は、対象データから中間データを生成する手続である。
図6において、a は対象データ、n は対象データのサイズ、m は繰り返し数を表す。繰り返し数については後述する。なお、
図6の例において、対象データに含まれる各部分データのサイズは1バイトであるとする。
【0096】
図6において、対象データは、1バイトの要素をn個持つ配列として表されている。そして、手続 f は、配列の i 番目の要素である a[i] を、a[i] 自身と、その1つ前の要素である a[i-1] との和として算出する。
【0097】
繰り返し数 m は、手続 f において、「配列 a に含まれる全ての要素それぞれを変換する」という一連の処理を繰り返す回数である。
【0098】
なお、
図6に示す疑似コードで生成された中間データは、
図7の疑似コードで示される手続 finv によって、対象データを復元することができる。つまり、中間データ生成部2040が
図6に示す方法で中間データを生成する場合、復号装置3000の対象データ復元部3060は、
図7に示す方法で対象データを復元する。なお、
図7において、a は中間データ、n は中間データのサイズ、m は繰り返し数を表す。finv が取得する m の値は、中間データ a を生成する際に手続 f に与えた繰り返し数と同じである必要がある。
【0099】
なお、前述したように、手続 f は、a[i] を、a[i] と a[i-1] との和として算出する。しかし、手続 f が中間データを生成するための演算は、和を算出する演算に限定されない。例えば、手続 f は、a[i] を、a[i] と a[i-1] との排他的論理和として算出する。ただし、finv で行う演算は、f で行う演算に応じて変更する必要がある。
【0100】
ここで、f と finv において、繰り返し数 m は引数として与えられているため、繰り返し数 m は可変な値である。しかし、繰り返し数 m は固定されている方が好ましい。これは、繰り返し数 m が任意の数でよい場合、インサイダー攻撃が行われる恐れがあるためである。以下、具体的に説明する。
【0101】
まず、暗号化処理と復号処理において、共通の秘密鍵が用いられると仮定する。そして、このインサイダー攻撃は、「暗号化部2060によって出力される暗号文の末尾 n ビットが、秘密鍵の末尾 n ビットを表すようにする」というものである。具体的には次のような流れで攻撃が行われる。1)m に1を設定する。2) f を実行して中間データを生成する。3)この中間データから暗号文を生成する。4)生成された暗号文の末尾 n ビットと秘密鍵の末尾 n ビットを比較する。5)生成された暗号文の末尾 n ビットと秘密鍵の末尾 n ビットとが同一でない場合、m に1を加算する。6)生成された暗号文の末尾 n ビットと秘密鍵の末尾 n ビットとが同一になるまで、2)から5)を繰り返す。7)生成された暗号文の末尾 n ビットと、秘密鍵の末尾 n ビットとが同一になった場合、この暗号文を暗号化部2060による出力とする。
【0102】
このようにして暗号文の一部に秘密鍵の一部が含まれるようにした攻撃者は、実施形態1で説明した方法で、秘密鍵全体を取得することができてしまう。なお、このように繰り返し数 m の値が可変である場合、例えば復号装置3000は、暗号文と共に繰り返し数 m を取得する。
【0103】
このインサイダー攻撃は、繰り返し数 m を予め固定しておけば防ぐことができる。例えば、暗号化装置2000の製造業者に、繰り返し数 m の公表を義務づけておく。このとき、暗号化装置2000が公表した繰り返し数 m を無視して上述のインサイダー攻撃を行ったとする。この場合、復号装置3000は、公表された繰り返し数 m で finv を実行しても、対象データを復元することができない。そのため、復号装置3000は、暗号化装置2000において上述のインサイダー攻撃が行われていることを検知することができる。
【0104】
<作用・効果>
本実施形態によれば、中間データ生成部2040において、各ブロックに含まれる部分データの変換に用いるブロックを、そのブロックから所定個離れたブロックにする。そのため、変換に用いるブロックの位置を乱数等によって決めるアルゴリズムと比較し、アルゴリズムの構築が容易である。よって、中間データ生成部2040の設計及び実装が容易である。
【0105】
[実施形態3]
図8は、実施形態3に係る暗号化装置2000を示すブロック図である。ここで、
図8において、矢印の流れは情報の流れを示している。また、
図8において、各ブロックは、ハードウエア単位の構成ではなく、機能単位の構成を示している。なお、実施形態3の暗号化装置2000は、以下で説明する点を除き、実施形態1に係る暗号化装置2000と同様の機能を有する。
【0106】
実施形態3の暗号化装置2000は、整数変換部2080を有する。整数変換部2080は、入力された整数とは異なる整数を出力する。
【0107】
実施形態3の中間データ生成部2040は、次のように動作する。まず、中間データ生成部2040は、対象データに含まれる各部分データについて、対象データにおけるその部分データの位置を整数変換部2080に入力する。そして、中間データ生成部2040は、その部分データを、整数変換部2080によって出力された整数によって表される位置にある部分データを用いて変換する。
【0108】
整数変換部2080は、例えば S-BOX を用いて実現される。S-BOX は、入力する整数と出力する整数とを対応付ける対応テーブルを有する。S-BOX は、この対応テーブルを参照して、整数変換部2080に入力された整数に対応する整数を出力する。
【0109】
図9は、S-BOX が有する対応テーブル200を例示する図である。対応テーブル200は、入力202及び出力204を有する。S-BOX は、この対応テーブルの中から、入力202が S-BOX に入力された整数を示すレコードを割り出し、割り出したレコードの出力204に示されている整数を出力する。例えば、整数変換部2080に対して3が入力されたとする。対応テーブル200において、入力202が3を示すレコードは、出力204として30を示している。したがって、整数変換部2080は、30を出力する。よって、中間データ生成部2040は、対象データの3番目の部分データの値を、対象データの30番目の部分データの値を用いて変換を行う。
【0110】
整数変換部2080は、S-BOX を有する形態に限定されない。例えば整数変換部2080は、乱数を生成する乱数生成部を有する。整数変換部2080は、乱数生成部を用いて、整数変換部2080に対して入力された整数とは異なる整数であり、かつ対象データのサイズ以下の値を表す整数を、ランダムに出力する。また例えば、整数変換部2080は、入力された値のハッシュ値を算出するハッシュ値生成部を有していてもよい。
【0111】
ここで、整数変換部2080によって出力される整数の範囲の大きさは、対象データに含まれる上記部分データの数と同じである必要がある。例えば、部分データの数が n である場合、整数変換部2080によって出力される整数の範囲は、「0 以上 (n-1) 以下」や「1 以上 n 以下」などである必要がある。
【0112】
そこで、例えば整数変換部2080は、対象データに含まれる部分データの数に基づいて、出力する整数を決定する。
【0113】
整数変換部2080が S-BOX を利用する形態である場合、例えば整数変換部2080は、以下に示す方法で S-BOX を初期化する。まず、整数変換部2080は、データ取得部2020が対象データを取得した際に、データ取得部2020から、対象データのサイズを取得する。次に、整数変換部2080は、上述した対応テーブルのレコードを全て削除する。そして、整数変換部2080は、対象データのサイズの範囲内であり、かつ互いに異なる乱数を順に生成し、生成した乱数を順に対応テーブルのレコードとして登録していく。ここで、所定の範囲内の乱数を生成する技術は既知の技術であるため、説明を省略する。
【0114】
なお、中間データ生成部2040が対象データの先頭の部分データの位置を 0 として扱う場合に、S-BOX、乱数生成部、又はハッシュ値生成部から出力される整数の最小値が m であるとする。この場合、整数変換部2080は、S-BOX、乱数生成部、又にハッシュ値生成部によって出力される整数から m を引いた値を出力する。
【0115】
ここで、実施形態1で説明したように、中間データ生成部2040は、対象データから得られる所定サイズごとの各ブロックについて、そのブロックに含まれる部分データを、別のブロックに含まれる部分データを用いて変換する。したがって、あるブロックに含まれる複数の部分データそれぞれの位置を整数変換部2080に入力した場合、少なくとも1つの出力は、他のブロックに含まれる部分データの位置を示す必要がある。整数変換部2080は、このことを考慮して実現される必要がある。例えば S-BOX が有する対応テーブルを初期化する際には、このことを考慮して初期化する。そのために、例えば整数変換部2080は、S-BOX を初期化する際に、対象データのサイズ、上記所定サイズ、及び各部分データのサイズを取得する。
【0116】
<作用・効果>
本実施形態によれば、中間データ生成部2040において、各ブロックに含まれる部分データの変換に用いるブロックの位置を、整数変換部2080によって出力される整数によって決める。そのため、実施形態2の中間データ生成部2040による中間データの生成方法と比較し、より柔軟に中間データの生成方法を決めることができる。
【0117】
以上、図面を参照して本発明の実施形態について述べたが、これらは本発明の例示であり、上記実施形態の組み合わせ、及び上記実施形態以外の様々な構成を採用することもできる。
以下、参考形態の例を付記する。
1. 対象データを取得するデータ取得手段と、
前記対象データから得られる所定サイズごとの各ブロックについて、そのブロックに含まれる部分データを、そのブロックと異なる前記ブロックに含まれる部分データを用いて復元可能に変換することで、前記対象データから中間データを生成する中間データ生成手段と、
前記中間データを前記所定サイズごとに分割して複数の暗号化対象ブロックを生成し、各前記暗号化対象ブロックを独立に暗号化して暗号文を生成する暗号文生成手段と、
を有する暗号化装置。
2. 前記中間データ生成手段は、前記対象データのサイズが前記所定サイズの倍数でない場合、前記対象データに対して、所定規則に従う並びを持つビット列を付加することで、前記対象データのサイズを前記所定サイズの倍数にする1.に記載の暗号化装置。
3. 前記中間データ生成手段は、前記対象データから得られる所定サイズの各前記ブロックについて、そのブロックに含まれる部分データを、そのブロックから所定個離れた別のブロックに含まれる部分データを用いて変換することで、前記対象データから前記中間データを生成する1.又は2.に記載の暗号化装置。
4. 前記中間データ生成手段は、前記対象データに含まれる各ビットを、そのビットから所定個離れたビットを用いて変換することで、前記中間データを生成する3.に記載の暗号化装置。
5. 入力された整数とは異なる整数を出力する整数変換手段を有し、
前記中間データ生成手段は、前記対象データに含まれる各部分データについて、その部分データの位置を前記整数変換手段に入力し、その部分データの値を、前記整数変換手段から出力された整数が表す位置にある部分データの値を用いて変換する1.又は2.に記載の暗号化装置。
6. 暗号化装置を制御するコンピュータによって実行される制御方法であって、
対象データを取得するデータ取得ステップと、
前記対象データから得られる所定サイズごとの各ブロックについて、そのブロックに含まれる部分データを、そのブロックと異なる前記ブロックに含まれる部分データを用いて復元可能に変換することで、前記対象データから中間データを生成する中間データ生成ステップと、
前記中間データを前記所定サイズごとに分割して複数の暗号化対象ブロックを生成し、各前記暗号化対象ブロックを独立に暗号化して暗号文を生成する暗号文生成ステップと、
を有する制御方法。
7. 前記中間データ生成ステップは、前記対象データのサイズが前記所定サイズの倍数でない場合、前記対象データに対して、所定規則に従う並びを持つビット列を付加することで、前記対象データのサイズを前記所定サイズの倍数にする6.に記載の制御方法。
8. 前記中間データ生成ステップは、前記対象データから得られる所定サイズの各前記ブロックについて、そのブロックに含まれる部分データを、そのブロックから所定個離れた別のブロックに含まれる部分データを用いて変換することで、前記対象データから前記中間データを生成する6.又は7.に記載の制御方法。
9. 前記中間データ生成ステップは、前記対象データに含まれる各ビットを、そのビットから所定個離れたビットを用いて変換することで、前記中間データを生成する8.に記載の制御方法。
10. 入力された整数とは異なる整数を出力する整数変換ステップを有し、
前記中間データ生成ステップは、前記対象データに含まれる各部分データについて、その部分データの位置を入力として前記整数変換ステップを実行し、その部分データの値を、前記整数変換ステップによって出力された整数が表す位置にある部分データの値を用いて変換する6.又は7.に記載の制御方法。
11. コンピュータに、暗号化装置として動作する機能を持たせるプログラムであって、前記コンピュータに、
対象データを取得するデータ取得機能と、
前記対象データから得られる所定サイズごとの各ブロックについて、そのブロックに含まれる部分データを、そのブロックと異なる前記ブロックに含まれる部分データを用いて復元可能に変換することで、前記対象データから中間データを生成する中間データ生成機能と、
前記中間データを前記所定サイズごとに分割して複数の暗号化対象ブロックを生成し、各前記暗号化対象ブロックを独立に暗号化して暗号文を生成する暗号文生成機能と、
を持たせるプログラム。
12. 前記中間データ生成機能は、前記対象データのサイズが前記所定サイズの倍数でない場合、前記対象データに対して、所定規則に従う並びを持つビット列を付加することで、前記対象データのサイズを前記所定サイズの倍数にする11.に記載のプログラム。
13. 前記中間データ生成機能は、前記対象データから得られる所定サイズの各前記ブロックについて、そのブロックに含まれる部分データを、そのブロックから所定個離れた別のブロックに含まれる部分データを用いて変換することで、前記対象データから前記中間データを生成する11.又は12.に記載のプログラム。
14. 前記中間データ生成機能は、前記対象データに含まれる各ビットを、そのビットから所定個離れたビットを用いて変換することで、前記中間データを生成する13.に記載のプログラム。
15. 前記コンピュータに、入力された整数とは異なる整数を出力する整数変換機能を持たせ、
前記中間データ生成機能は、前記対象データに含まれる各部分データについて、その部分データの位置を入力として前記整数変換機能を実行し、その部分データの値を、前記整数変換機能によって出力された整数が表す位置にある部分データの値を用いて変換する11.又は12.に記載のプログラム。