【文献】
BELLARE, M. and BOLDYREVA, A.,The Security of Chaffing and Winnowing,Lecture Notes in Computer Science,2000年,Vol.1976,p.517-530,5 A New Chaffing-and-Winnowing Scheme
【文献】
Desai, A.,The Security of All-or-Nothing Encryption: Protecting against Exhaustive Key Search,Lecture Notes in Computer Science,2000年,Vol.1880,p.359-375
(58)【調査した分野】(Int.Cl.,DB名)
前記第2暗号鍵のサイズが前記平文ブロックのサイズより大きい場合、前記鍵ブロック生成手段は、前記第2暗号鍵を n 分割 (n >= 2) した各部分と、前記暗号ブロック列を n 分割した各部分ブロックとの排他的論理和をそれぞれ算出することで、n 個の鍵ブロックを生成する、請求項1に記載の暗号化装置。
【発明を実施するための形態】
【0020】
以下、本発明の実施の形態について、図面を用いて説明する。尚、すべての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。
【0021】
[実施形態1]
図1は、実施形態1に係る暗号化装置2000を例示するブロック図である。
図1において、矢印は情報の流れを表している。さらに、
図1において、各ブロックは、ハードウエア単位の構成ではなく、機能単位の構成を表している。
【0022】
暗号化装置2000は、取得部2020、第2暗号鍵生成部2040、第3暗号鍵生成部2060、カウンタモード暗号化部2080、及び鍵ブロック生成部2100を有する。
【0023】
取得部2020は平文ブロック列及び第1暗号鍵を取得する。平文ブロック列は複数の平文ブロックで構成される。第2暗号鍵生成部2040は第2暗号鍵を生成する。第3暗号鍵生成部2060は第3暗号鍵を生成する。第3暗号鍵は、第1暗号鍵と、第2暗号鍵の一部又は全部との排他的論理和として算出される。カウンタモード暗号化部2080は、第3暗号鍵を暗号鍵として用いて平文ブロック列を暗号化し、暗号ブロック列を生成する。暗号化には、カウンタモードを暗号利用モードとするブロック暗号が用いられる。鍵ブロック生成部2100は鍵ブロックを生成する。鍵ブロックは、第2暗号鍵と暗号ブロック列の各ブロックとの排他的論理和として算出される。
【0024】
図2は、暗号化装置2000によって実行される処理を数式等を用いて例示した図である。以下、
図2を適宜参照しながら、それぞれの機能構成部の機能について説明する。ただし、
図2に示す処理はあくまで例示であり、暗号化装置2000によって実行される処理は
図2に示す処理に限定されない。また、
図2の例では、第1暗号鍵の鍵長 L が、平文ブロックのブロック長よりも長い場合を想定している。しかし、第1暗号鍵の鍵長 L は、平文ブロックのブロック長以下であってもよい。
【0025】
<取得部2020>
取得部2020が行う処理は、例えば
図2の(1)で表される。ここで、取得部2020が第1暗号鍵及び平文ブロック列を取得する方法は様々である。例えば取得部2020は、外部の装置から入力される第1暗号鍵及び平文ブロック列を取得する。その他にも例えば、取得部2020は、手動で入力される第1暗号鍵及び平文ブロック列を取得する。さらに取得部2020は、外部の装置にアクセスして、第1暗号鍵及び平文ブロック列を取得してもよい。また、取得部2020は、第1暗号鍵と平文ブロック列とを異なる方法で取得してもよい。例えば、第1暗号鍵は外部の装置から取得され、平文ブロック列は手動で入力される。
【0026】
<第2暗号鍵生成部2040>
第2暗号鍵生成部2040が第2暗号鍵を生成する方法は様々である。例えば第2暗号鍵生成部2040は、所定のビット長のランダムなビット列を生成し、これを第2暗号鍵とする。また例えば、第2暗号鍵の候補を複数用意しておき、第2暗号鍵生成部2040は、その中から利用する第2暗号鍵を選択してもよい。なお、上述の「所定のビット長」は、予め第2暗号鍵生成部2040に設定されていてもよいし、所定のビット長を記憶している記憶装置等から第2暗号鍵生成部2040が取得するようにしてもよい。
【0027】
第2暗号鍵生成部2040が行う処理は、例えば
図2の(2)で表される。
図2の(2)では、第2暗号鍵の鍵長(上述の「所定のビット長」)が、平文ブロックのブロック長と等しい。ただし、第2暗号鍵の鍵長は、平文ブロックのブロック長と異なっていてもよい。
【0028】
<第3暗号鍵生成部2060>
前述の通り、第3暗号鍵生成部2060は第1暗号鍵と、第2暗号鍵の一部又は全部との排他的論理和として第3暗号鍵を生成する。
【0029】
第2暗号鍵のビット長が第1暗号鍵のビット長よりも長い場合、第3暗号鍵生成部2060は、第1暗号と、第2暗号鍵の一部との排他的論理和を算出する。例えばこの処理は、
図2の(3)及び(4)で表される。
図2において、平文ブロックのブロック長は、第1暗号鍵の鍵長 L より長い。そこで第3暗号鍵生成部2060は、
図2の(3)の処理によって第2暗号鍵 ke2 の下位 L ビットを算出し、この値を k とする。そして、
図2の(4)において、第3暗号鍵生成部2060は、L ビットの第1暗号鍵 ke1 と、第2暗号鍵の下位 L ビットである k との排他的論理和を算出することで、第3暗号鍵 ke3 を算出する。
【0030】
なお、第2暗号鍵のビット長が第1暗号鍵のビット長以下である場合、
図2の(3)の処理は不要となる。
【0031】
<カウンタモード暗号化部2080>
カウンタモード暗号化部2080は、ブロック暗号の暗号化利用モードの一つであるカウンタモードを利用して、複数の平文ブロックを暗号化する。ここで、カウンタモードのブロック暗号では、暗号鍵、カウンタの初期値、及び暗号化対象の平文ブロック列を入力として、暗号ブロック列を生成する。
【0032】
カウンタモード暗号化部2080は、前述の第3暗号鍵を暗号鍵として用いる。また、カウンタモード暗号化部2080は、暗号化対象の平文ブロック列として、取得部2020によって取得された平文ブロック列を用いる。さらにカウンタモード暗号化部2080は、カウンタの初期値として、例えば0を用いる。ただし、カウンタの初期値は任意の値でよく、0に限定されない。
【0033】
ここで、入力された暗号鍵、カウンタの初期値、及び平文ブロック列を用いてカウンタモードのブロック暗号で暗号化を行う方法自体は既存の技術である。そのため、この方法についての詳細な説明は省略する。
【0034】
カウンタモード暗号化部2080が行う処理は、例えば
図2の(5)で表される。ここで、EncCtr(ke3; i; x[1],..., x[n]) は、「暗号鍵 ke3、カウンタの初期値 i、及び平文ブロック列 {x[1]、...、x[n]} を入力とし、カウンタモードのブロック暗号で暗号化を行う関数」を表している。
図2の(5)では、暗号ブロック列として、{y[1]、...、y[n]} が生成される。
【0035】
<鍵ブロック生成部2100>
鍵ブロック生成部2100は、第2暗号鍵及び暗号ブロック列の各ブロックとの排他的論理和として、鍵ブロックを生成する。この処理は、例えば
図2の(6)で表される。
図2の(6)において、y[n+1] は鍵ブロックを表す。こうすることで、第2暗号鍵が、暗号ブロック列によってマスクされる。
【0036】
ここで、第2暗号鍵のビット長が各暗号ブロックのビット長より長い場合、そのまま第2暗号鍵と各暗号ブロックとの排他的論理和を計算すると、第2暗号鍵の一部がマスクされない。そこで例えば、鍵ブロック生成部2100は、第2暗号鍵を複数の部分鍵に分割し、各部分鍵について暗号ブロック列との排他的論理和演算をすることで、複数の鍵ブロックを生成する。こうすることで、第2暗号鍵の全体が暗号ブロック列によってマスクされるようにする。
【0037】
図3は、鍵ブロック生成部2100が複数の鍵ブロックを生成する方法を概念的に例示する図である。
図3において、第2暗号鍵の鍵長は暗号ブロックのブロック長の2倍である。ここで、暗号ブロックのブロック長を X とおく。例えば鍵ブロック生成部2100は、第2暗号鍵を2等分し、上位 X ビットから成る部分鍵 kp1 及び下位 X ビットから成る部分鍵 kp2 を生成する。
【0038】
そして、鍵ブロック生成部2100は、暗号ブロック列を2等分し、片方のブロック列及び部分鍵 kp1 とを用いて第1の鍵ブロックを生成する。また、鍵ブロック生成部2100は、もう片方のブロック列及び部分鍵 kp2 を用いて第2の鍵ブロックを生成する。具体的には、鍵ブロック生成部2100は、部分鍵 kp1 と、ブロック列 {y[1],...,y[n/2]} に含まれる各ブロックとの排他的論理和を算出し、算出された値を第1の鍵ブロックとする。さらに、鍵ブロック生成部2100は、部分鍵 kp2 と、ブロック列 {y[(n/2)+1],...,y[n]} に含まれる各ブロックとの排他的論理和を算出し、算出された値を第2の鍵ブロックとする。
【0039】
<その他の機能について>
暗号化装置2000は、出力部2120をさらに有していてもよい(図示せず)。出力部2120は、暗号ブロック列及び鍵ブロックを出力する。例えば出力部2120は、暗号ブロック列及び鍵ブロックから成るブロック列(以下、出力ブロック列)を出力する。出力部2120が行う処理は、例えば
図2の(7)で表される。
図2の(7)において、出力ブロック列は、暗号ブロック列 {y[1],...,y[n]} と鍵ブロック y[n+1] とを結合したブロック列 {y[1],...,y[n],y[n+1]} である。ただし、出力部2120は、暗号ブロック列及び鍵ブロックを別々に出力してもよい。
【0040】
なお、鍵ブロックが複数生成された場合、出力部2120は、生成した鍵ブロックを全て出力する。例えば
図3の例の場合、出力部2120は、暗号ブロック列 {y[1],...,y[n]}、並びに鍵ブロック y[n+1] 及び y[n+2] を出力する。
【0041】
出力部2120によって出力された暗号ブロック列及び鍵ブロックの利用方法は様々である。例えば出力部2120によって出力された暗号ブロック列及び鍵ブロックは、暗号化装置2000の内部又は外部に設けられた記憶部に記録される。その後、その記憶部に記録された暗号ブロック列及び鍵ブロックは、暗号ブロック列の復号処理を行う装置(例えば後述の復号装置3000)によって取得される。また、出力部2120は、暗号ブロック列及び鍵ブロックを外部に送信してもよい。
【0042】
なお、暗号ブロック列及び鍵ブロックは異なる記憶部に記憶されてもよい。また、暗号ブロック列に含まれる各ブロックは異なる記憶部に記憶されてもよい。例えば、出力ブロック列を m 個(m > 0)のブロック列に分割し、分割後のブロック列をそれぞれ異なる記憶装置に記憶する。このように出力ブロック列を複数に分割してそれぞれ異なる記憶装置に記憶することにより、悪意ある第三者が暗号ブロック列及び鍵ブロックの全てを取得してしまう確率を低くすることができる。
【0043】
また、出力ブロック列を RAID や多重化などの冗長化手段によって冗長化した後に記憶装置に記憶するようにしてもよい。さらに、冗長化された出力ブロック列を複数のブロック列に分け、それぞれ異なる記憶装置に記憶するようにしてもよい。
【0044】
<処理の流れ>
図4は、実施形態1の暗号化装置2000によって実行される処理の流れを例示するフローチャートである。取得部2020は平文ブロック列及び第1暗号鍵を取得する(S102)。第2暗号鍵生成部2040は第2暗号鍵を生成する(S104)。第3暗号鍵生成部2060は第3暗号鍵を生成する(S106)。カウンタモード暗号化部2080は、第3暗号鍵を暗号鍵としてカウンタモードのブロック暗号で平文ブロック列を暗号化し、暗号ブロック列を生成する(S108)。鍵ブロック生成部2100は鍵ブロックを生成する(S110)。
【0045】
<ハードウエア構成例>
暗号化装置2000の各機能構成部は、各機能構成部を実現するハードウエア(例:ハードワイヤードされた電子回路など)で実現されてもよいし、ハードウエアとソフトウエアとの組み合わせ(例:電子回路とそれを制御するプログラムの組み合わせなど)で実現されてもよい。以下、各機能構成部をハードウエアとソフトウエアとの組み合わせで実現する場合について、その構成を具体的に例示する。
【0046】
暗号化装置2000は、PC(Personal Computer)、携帯端末、又はサーバマシンなどの種々の計算機として実装される。ここで暗号化装置2000は、暗号化装置2000を実装するための専用の計算機に実装されてもよいし、その他のアプリケーション等も含まれている汎用の計算機に実装されてもよい。
【0047】
図5は、暗号化装置2000のハードウエア構成を例示するブロック図である。暗号化装置2000は、バス1020、プロセッサ1040、メモリ1060、ストレージ1080、及び入出力インタフェース1100を有する。バス1020は、プロセッサ1040、メモリ1060、ストレージ1080、及び入出力インタフェース1100が、相互にデータを送受信するためのデータ伝送路である。ただし、プロセッサ1040などを互いに接続する方法は、バス接続に限定されない。プロセッサ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 等のメモリであってもよい。入出力インタフェース1100は、暗号化装置2000が入出力デバイスや外部の装置等との間でデータを送受信するための入出力インタフェースである。
【0048】
ストレージ1080は、暗号化装置2000の機能を実現するためのプログラムを記憶している。具体的には、取得部2020、第2暗号鍵生成部2040、第3暗号鍵生成部2060、カウンタモード暗号化部2080、及び鍵ブロック生成部2100の機能をそれぞれ実現するプログラムモジュールを記憶している。プロセッサ1040は、これら各プログラムモジュールを実行することで、取得部2020、第2暗号鍵生成部2040、第3暗号鍵生成部2060、カウンタモード暗号化部2080、及び鍵ブロック生成部2100の機能をそれぞれ実現する。ここでプロセッサ1040は、上記各モジュールを実行する際、これらのモジュールをメモリ1060上に読み出してから実行してもよいし、メモリ1060上に読み出さずに実行してもよい。
【0049】
暗号化装置2000のハードウエア構成は
図5に示した構成に限定されない。例えば、各プログラムモジュールはメモリ1060に格納されてもよい。この場合、暗号化装置2000は、ストレージ1080を備えていなくてもよい。
【0050】
<作用・効果>
非特許文献1に記載されている手法及び非特許文献2に記載されている手法について説明した後、本実施形態の暗号化装置の作用・効果について説明する。
【0051】
図6は非特許文献1における暗号文生成処理 EplsAenc() を例示する図であり、
図7は非特許文献1における復号処理 EplsAdec() を例示する図である。一方、
図8は非特許文献2における暗号文生成処理 AONEenc() を例示する図であり、
図9は非特許文献2における復号処理 AONEdec() を例示する図である。なお、
図7における Enc() は、ブロックを暗号化する任意の暗号化処理を表す関数である。また、
図8における Dec() は、Enc() で暗号化されたブロックを復号する任意の復号処理を表す関数である。
【0052】
非特許文献2の手法は、非特許文献1の暗号文生成処理よりも少ない計算量で暗号文生成処理を実現している。非特許文献1の暗号文生成処理では、2n+1 回の暗号化処理(n 回の EncCtr 及び n+1 回の Enc)及び 2n 回の排他的論理和演算処理が行われている。これに対し、非特許文献2の暗号文生成処理では、n 回の暗号化処理(EncCtr)及び 3n+1 回の排他的論理和演算処理が行われている。よって、非特許文献2の暗号文生成処理は、非特許文献1の暗号文生成処理と比較して、暗号化処理が少なくなり、排他的論理和演算処理が多くなっている。ここで一般に、暗号化処理は排他的論理和演算処理よりも計算量が多い。そのため、非特許文献2の暗号文生成処理は、非特許文献1の暗号文生成処理よりも計算量が少なくなっている。
【0053】
ただし、非特許文献2の手法では、以下に示す理由から、生成される暗号文の安全性が、非特許文献1の手法で生成される暗号文の安全性よりも低い。
図7に示す非特許文献1の復号処理では、暗号ブロック [1],...,y[n+1] のいずれか1つでも足りないと、
図7(1)の処理で k' が計算できない。そのため、
図7(3)の処理で平文ブロック x[1],...,x[n] のいずれもが計算できない。よって、非特許文献1の手法では、暗号文生成処理で出力される全てのブロックが揃わなければ平文ブロックのいずれもが復号できない。
【0054】
一方、
図9に示す非特許文献2の復号処理では、n+1 個の暗号ブロックの内、n ブロックが取得されてしまうと、平文の一部を復号できてしまう。これは、n ブロックの暗号文から y'[n+1] を復号できてしまうことに起因する。非特許文献2の手法では、AONEenc() の処理を非決定的にしている情報は、鍵 k 及び y'[n+1] である。そのため、鍵 k が手に入る状況では、y'[n+1] のみが AONEenc() の処理を非決定的にする情報となる。そのため、y'[n+1] を復元できると、AONEenc() の処理の非決定性が損なわれてしまう。
【0055】
例えば、n ブロックの暗号文を取得し、それらを用いて y'[n+1] を復元した悪意ある第三者は、この y'[n+1]、及び適当に生成した n ブロックの平文ブロック列 w[1],...,w[n] を用いて AONEenc() の処理を実行する。そして、この悪意ある第三者は、生成された暗号文と取得した暗号文とを比較する。ここで、もしこれらが異なれば、「平文は w[1],...,w[n] ではない」ということが分かってしまう。このように平文の内容を推測できてしまうことは、暗号文の安全性が低いことを意味する。
【0056】
本実施形態の暗号化装置2000によれば、暗号化処理に用いる暗号鍵として、第1暗号鍵と第2暗号鍵との排他的論理和として算出した第3暗号鍵が用いられる。よって、第1暗号鍵及び第2暗号鍵のいずれかが秘匿されていれば、平文の一部であっても復号することができない。また、暗号化処理の回数は非特許文献2の暗号文生成処理と同様に n 回であり、非特許文献1の手法よりも計算量が少ない。
【0057】
よって、本実施形態の暗号化装置2000によれば、ブロック暗号の安全性を向上させつつ、少ない計算量で暗号文を生成できる。
【0058】
[実施形態2]
図10は、実施形態2に係る復号装置3000を例示するブロック図である。
図10において、矢印は情報の流れを表している。さらに、
図10において、各ブロックは、ハードウエア単位の構成ではなく、機能単位の構成を表している。
【0059】
復号装置3000は、暗号ブロック列を復号して平文ブロック列を生成する。復号装置3000が処理対象とする暗号ブロック列は、暗号化装置2000によって生成された暗号ブロック列である。そのために、復号装置3000は、取得部3020、第2復号鍵生成部3040、第3復号鍵生成部3060、及びカウンタモード復号部3080を有する。
【0060】
取得部3020は、対象ブロック列及び第1復号鍵を取得する。対象ブロック列は、前述した鍵ブロック及び暗号ブロック列を有する。暗号ブロック列は、複数の暗号ブロックを有する。第2復号鍵生成部3040は、第2復号鍵を生成する。第2復号鍵は、暗号ブロック列に含まれる各暗号ブロックの排他的論理和として生成される。第3復号鍵生成部3060は、第3復号鍵を生成する。第3復号鍵は、第1復号鍵及び第2復号鍵の排他的論理和として生成される。カウンタモード復号部3080は、暗号ブロックを復号して平文ブロック列を生成する。なお、カウンタモード復号部3080は、ブロック暗号の利用モードとして、カウンタモードを利用する。また、カウンタモード復号部3080は、第3復号鍵を復号鍵として利用する。
【0061】
図11は、復号装置3000によって実行される処理を数式等を用いて例示した図である。以下、
図11を適宜参照しながら、それぞれの機能構成部の機能について説明する。ただし、
図11に示す処理はあくまで例示であり、復号装置3000によって実行される処理は
図11に示す処理に限定されない。また、
図11の例では、第1復号鍵の鍵長 L が、暗号ブロックのブロック長よりも長い場合を想定している。しかし、第1復号鍵の鍵長 L は、暗号ブロックのブロック長以下であってもよい。
【0062】
<取得部3020の詳細>
対象ブロック列に含まれる暗号ブロック列は、暗号化装置2000のカウンタモード暗号化部2080によって生成された暗号ブロック列である。また、対象ブロック列に含まれる鍵ブロックは、暗号化装置2000の鍵ブロック生成部2100によって生成された鍵ブロックである。つまり、対象ブロックは、出力部2120によって出力された出力ブロックに相当する。取得部3020が行う処理は、例えば
図11の(1)で表される。
【0063】
例えば取得部3020は、暗号化装置2000によって記憶装置に記憶された暗号ブロック列及び鍵ブロックを取得する。また例えば、暗号化装置2000によって送信される暗号ブロック列及び鍵ブロックを受信することで、対象ブロック列を取得する。また例えば、取得部3020は、手動で入力される暗号ブロック列及び鍵ブロックを取得してもよい。
【0064】
また、取得部3020が取得する第1復号鍵は、暗号化装置2000が暗号ブロック列を生成する際に用いた第1暗号鍵と同じ値である。取得部3020は、暗号化装置2000から第1復号鍵を取得してもよいし、手動で入力される第1復号鍵を取得してもよいし、復号装置3000の内部又は外部の記憶装置に記憶されている第1復号鍵を取得してもよい。
【0065】
<第2復号鍵生成部3040>
第2復号鍵生成部3040は、暗号ブロック列の各ブロック列及び鍵ブロックとの排他的論理和を算出し、その算出結果を用いて第2復号鍵を生成する。例えば第2復号鍵生成部3040の処理は、
図11の(2)で表される。
図11の(2)において、第2復号鍵生成部3040は、対象ブロック列 {y[1],...,y[n+1]} の各ブロックの排他的論理和を算出し、その算出結果を第2復号鍵 kd2 とする。
【0066】
ここで、対象ブロック列に鍵ブロックが複数含まれる場合がある。この場合、第2復号鍵生成部3040は、各鍵ブロックから部分鍵を生成し、その部分鍵を結合することで第2復号鍵を生成する。
図12は、複数の鍵ブロックから第2復号鍵を生成する処理を概念的に例示する図である。
図12において、対象ブロックには、第1の鍵ブロック y[n+1] 及び第2の鍵ブロック y[n+2] が含まれる。
【0067】
第2復号鍵生成部3040は、暗号ブロック列の一部である {y[1],...,y[n/2]} の各ブロックと第1の鍵ブロック y[n+1] との排他的論理和を算出することで、第1の部分鍵を生成する。次に、第2復号鍵生成部3040は、暗号ブロック列の一部である {y[(n/2)+1],...,y[n]} の各ブロックと第2の鍵ブロック y[n+2] との排他的論理和を算出することで、第2の部分鍵を生成する。そして、第2復号鍵生成部3040は、第1の部分鍵と第2の部分鍵を結合することで、第2復号鍵を生成する。
【0068】
なお、第2復号鍵生成部3040は、「暗号ブロック列に含まれる各ブロックの内、どのブロックをどの部分鍵との排他的論理和演算に用いるか」を把握する必要がある。例えば第2復号鍵生成部3040は、m 個の部分鍵を取得した場合、暗号ブロック列を m 等分して複数のブロック列に分け、各ブロック列をいずれか1つの部分鍵との排他的論理和演算に用いるように構成されている。また、第2復号鍵生成部3040は、「暗号ブロック列に含まれる各ブロックの内、どのブロックをどの部分鍵との排他的論理和演算に用いるか」を示す情報を、鍵ブロックと共に取得してもよい。第2復号鍵生成部3040は、暗号化装置2000から出力されるこの情報を取得してもよいし、手動で入力されるこの情報を取得してもよいし、復号装置3000の内部又は外部の記憶装置に記憶されているこの情報を取得してもよい。
【0069】
<第3復号鍵生成部3060>
第3復号鍵生成部3060は、第2復号鍵の一部又は全部と第1復号鍵との排他的論理和を算出し、その算出結果を第3復号鍵とする。第2復号鍵のビット長が第1復号鍵のビット長より長い場合、第3復号鍵生成部3060は、第2復号鍵の一部と第1復号鍵との排他的論理和を算出し、第3復号鍵とする。この場合における第3復号鍵生成部3060の処理は、例えば
図11の(3)及び(4)で表される。
図11において、第1復号鍵のビット長は L である。そこで、
図11の(3)において、第3復号鍵生成部3060は、第2復号鍵の下位 L ビットである部分鍵 k を生成している。そして、
図11の(4)において、第3復号鍵生成部3060は、第1復号鍵 kd1 と部分鍵 k との排他的論理和を算出し、その算出結果を第3復号鍵 kd3 としている。
【0070】
一方、第2復号鍵のビット長が第1復号鍵のビット長以下である場合、第3復号鍵生成部3060は、第2復号鍵の全部と第1復号鍵との排他的論理和を第3復号鍵とする。この場合、
図11の(3)の処理は不要となる。
【0071】
<カウンタモード復号部3080>
カウンタモード復号部3080は、ブロック暗号の暗号化利用モードの一つであるカウンタモードを利用して暗号ブロック列を復号し、平文ブロックを生成する。カウンタモード復号部3080は、前述の第3復号鍵を復号鍵として用いる。また、カウンタモード復号部3080は、復号対象の暗号ブロック列として、取得部3020によって取得された暗号ブロック列を用いる。さらに、カウンタモード復号部3080は、カウンタモード暗号化部2080が暗号ブロック列の生成に利用したカウンタの初期値と同じ値を、復号処理におけるカウンタの初期値として用いる。カウンタモード復号部3080は、暗号化装置2000からカウンタの初期値を取得してもよいし、手動で入力されるカウンタの初期値を取得してもよいし、復号装置3000の内部又は外部に記憶されているカウンタの初期値を取得してもよい。またカウンタの初期値は、カウンタモード復号部3080に予め設定されていてもよい。
【0072】
なお、入力された復号鍵、カウンタの初期値、及び暗号ブロック列を用い、カウンタモードのブロック暗号で復号処理を行う方法自体は、既存の技術である。そのため、この方法についての詳細な説明は省略する。
【0073】
カウンタモード復号部3080が行う処理は、例えば
図11の(5)で表される。ここで、DecCtr(kd3; i; y[1], ... , y[n]) は、「復号鍵 kd3、カウンタの初期値 i、暗号ブロック列 {y[1]、...、y[n]} を入力とし、カウンタモードのブロック暗号で復号処理を行う関数」を表している。
図11の(5)では、平文ブロック列として、x[1],...,x[n] が生成される。
【0074】
<出力部3100>
復号装置3000は、出力部3100をさらに有していてもよい(図示せず)。出力部3100は、カウンタモード復号部3080によって復号された平文ブロックを出力する(例えば
図11の(6))。
【0075】
<処理の流れ>
図13は、実施形態2の復号装置3000によって実行される処理の流れを例示するフローチャートである。取得部3020は、対象ブロック列及び第1復号鍵を取得する(S202)。第2復号鍵生成部3040は、第2復号鍵を生成する(S204)。第3復号鍵生成部3060は、第3復号鍵を生成する(S206)。カウンタモード復号部3080は、暗号ブロック列をカウンタモードのブロック暗号で復号し、平文ブロック列を生成する(S208)。
【0076】
<ハードウエア構成例>
復号装置3000の各機能構成部は、各機能構成部を実現するハードウエア(例:ハードワイヤードされた電子回路など)で実現されてもよいし、ハードウエアとソフトウエアとの組み合わせ(例:電子回路とそれを制御するプログラムの組み合わせなど)で実現されてもよい。以下、各機能構成部をハードウエアとソフトウエアとの組み合わせで実現する場合について、その構成を具体的に例示する。
【0077】
復号装置3000は、PC(Personal Computer)、携帯端末、又はサーバマシンなどの種々の計算機として実装される。ここで復号装置3000は、復号装置3000を実装するための専用の計算機に実装されてもよいし、その他のアプリケーション等も含まれている汎用の計算機に実装されてもよい。
【0078】
図14は、復号装置3000のハードウエア構成を例示するブロック図である。復号装置3000は、バス4020、プロセッサ4040、メモリ4060、ストレージ4080、及び入出力インタフェース4100を有する。ここで、バス4020、プロセッサ4040、メモリ4060、ストレージ4080、及び入出力インタフェース4100はそれぞれ、
図5の暗号化装置2000におけるバス1020、プロセッサ1040、メモリ1060、ストレージ1080、及び入出力インタフェース1100と同様の機能を有する。
【0079】
ストレージ4080は、復号装置3000の機能を実現するためのプログラムを記憶している。具体的には、取得部3020、第2復号鍵生成部3040、第3復号鍵生成部3060、及びカウンタモード復号部3080の機能をそれぞれ実現するプログラムモジュールを記憶している。プロセッサ4040は、これら各プログラムモジュールを実行することで、取得部3020、第2復号鍵生成部3040、第3復号鍵生成部3060、及びカウンタモード復号部3080の機能をそれぞれ実現する。ここでプロセッサ4040は、上記各モジュールを実行する際、これらのモジュールをメモリ4060上に読み出してから実行してもよいし、メモリ4060上に読み出さずに実行してもよい。
【0080】
復号装置3000のハードウエア構成は
図14に示した構成に限定されない。例えば、各プログラムモジュールはメモリ4060に格納されてもよい。この場合、復号装置3000は、ストレージ4080を備えていなくてもよい。
【0081】
<作用・効果>
本実施形態の復号装置3000によれば、実施形態1の暗号化装置2000によって生成された暗号ブロック列を復号し、平文ブロック列を得ることができる。
【0082】
[実施形態3]
図15は、実施形態3の暗号処理システム5000を例示するブロック図である。暗号処理システム5000は、実施形態1の暗号化装置2000及び実施形態2の復号装置3000を有する。暗号化装置2000の構成は例えば
図1で表される。また、復号装置3000の構成は、例えば
図10で表される。そのため
図15において、暗号化装置2000と復号装置3000が有する各機能構成部は省略されている。
【0083】
復号装置3000は、実施形態2で説明したいずれかの方法で、暗号化装置2000によって生成された暗号ブロック列及び鍵ブロックから成る対象ブロック列を取得する。本実施形態の暗号処理システム5000によれば、安全性が高く、かつ計算量が少ない方法で暗号化及び復号が行える。
【0084】
以上、図面を参照して本発明の実施形態について述べたが、これらは本発明の例示であり、上記各実施形態の組み合わせ、及び上記実施形態以外の様々な構成を採用することもできる。
【0085】
以下、参考形態の例を付記する。
1. 複数の平文ブロックで構成される平文ブロック列、及び第1暗号鍵を取得する取得手段と、
第2暗号鍵を生成する第2暗号鍵生成手段と、
前記第1暗号鍵と、前記第2暗号鍵の一部又は全部との排他的論理和として、第3暗号鍵を算出する第3暗号鍵生成手段と、
前記第3暗号鍵を暗号鍵とするカウンタモードのブロック暗号で前記平文ブロック列を暗号化して、暗号ブロック列を生成するカウンタモード暗号化手段と、
前記第2暗号鍵と前記暗号ブロック列の各ブロックとの排他的論理和を算出することで鍵ブロックを生成する鍵ブロック生成手段と、
を有する暗号化装置。
2. 前記第2暗号鍵のサイズが前記平文ブロックのサイズより大きい場合、前記鍵ブロック生成手段は、前記第2暗号鍵を n 分割 (n >= 2) した各部分と、前記暗号ブロック列を n 分割した各部分ブロックとの排他的論理和をそれぞれ算出することで、n 個の鍵ブロックを生成する、1.に記載の暗号化装置。
3. 前記暗号ブロック列及び前記鍵ブロックを有するブロック列を出力するブロック列出力手段を有する1.又は2.に記載の暗号化装置。
4. 鍵ブロック、複数の暗号ブロックを有する暗号ブロック列、及び第1復号鍵を取得する取得手段と、
前記暗号ブロック列に含まれる各暗号ブロックの排他的論理和を算出し、その算出結果を用いて第2復号鍵を生成する第2復号鍵生成手段と、
前記第1復号鍵と、前記第2復号鍵の一部又は全部との排他的論理和として、第3復号鍵を算出する第3復号鍵生成手段と、
前記第3復号鍵を復号鍵とするカウンタモードのブロック暗号で前記暗号ブロック列を復号して平文ブロック列を生成するカウンタモード復号手段と、
を有する復号装置。
5. 前記取得手段は、複数の鍵ブロックを取得し、
前記第2復号鍵生成手段は、各前記鍵ブロックと、前記暗号ブロック列を n (n > 0) 分割した各部分ブロックとの排他的論理和をそれぞれ算出し、算出した複数の値を結合することで前記第2復号鍵を生成する4.に記載の復号装置。
6. 1.乃至3.いずれか一つに記載の暗号化装置と、4.又は5.に記載の復号装置とを有する暗号処理システム。
7. コンピュータによって実行される暗号化方法であって、
複数の平文ブロックで構成される平文ブロック列、及び第1暗号鍵を取得する取得ステップと、
第2暗号鍵を生成する第2暗号鍵生成ステップと、
前記第1暗号鍵と、前記第2暗号鍵の一部又は全部との排他的論理和として、第3暗号鍵を算出する第3暗号鍵生成ステップと、
前記第3暗号鍵を暗号鍵とするカウンタモードのブロック暗号で前記平文ブロック列を暗号化して、暗号ブロック列を生成するカウンタモード暗号化ステップと、
前記第2暗号鍵と前記暗号ブロック列の各ブロックとの排他的論理和を算出することで鍵ブロックを生成する鍵ブロック生成ステップと、
を有する暗号化方法。
8. 前記第2暗号鍵のサイズが前記平文ブロックのサイズより大きい場合、前記鍵ブロック生成ステップは、前記第2暗号鍵を n 分割 (n >= 2) した各部分と、前記暗号ブロック列を n 分割した各部分ブロックとの排他的論理和をそれぞれ算出することで、n 個の鍵ブロックを生成する、7.に記載の暗号化方法。
9. 前記暗号ブロック列及び前記鍵ブロックを有するブロック列を出力するブロック列出力ステップを有する7.又は8.に記載の暗号化方法。
10. コンピュータによって実行される復号方法であって、
鍵ブロック、複数の暗号ブロックを有する暗号ブロック列、及び第1復号鍵を取得する取得ステップと、
前記暗号ブロック列に含まれる各暗号ブロックの排他的論理和を算出し、その算出結果を用いて第2復号鍵を生成する第2復号鍵生成ステップと、
前記第1復号鍵と、前記第2復号鍵の一部又は全部との排他的論理和として、第3復号鍵を算出する第3復号鍵生成ステップと、
前記第3復号鍵を復号鍵とするカウンタモードのブロック暗号で前記暗号ブロック列を復号して平文ブロック列を生成するカウンタモード復号ステップと、
を有する復号方法。
11. 前記取得ステップは、複数の鍵ブロックを取得し、
前記第2復号鍵生成ステップは、各前記鍵ブロックと、前記暗号ブロック列を n (n > 0) 分割した各部分ブロックとの排他的論理和をそれぞれ算出し、算出した複数の値を結合することで前記第2復号鍵を生成する10.に記載の復号方法。
12. コンピュータに、1.乃至3.いずれか一つに記載の暗号化装置として動作する機能を持たせる暗号化プログラム。
13. コンピュータに、4.又は5.に記載の復号装置として動作する機能を持たせる復号プログラム。
【0086】
この出願は、2014年12月4日に出願された日本出願特願2014−245932号を基礎とする優先権を主張し、その開示の全てをここに取り込む。