以下に添付図面を参照して、この発明にかかる記憶装置の好適な実施形態を詳細に説明する。
(第1の実施形態)
図1は、MKBを用いた認証鍵共有を実現する記憶装置10およびアクセス装置20の構成例を示すブロック図である。
図1に示すように、記憶装置10は、MKB11と、メディア鍵(KM)12と、乱数発生部1と、演算部2と、データ記憶部3と、暗号化部4とを備えている。乱数発生部1は、乱数(R)13を発生する。演算部2は、予め定められた一方向性関数にKM12とR13とを入力し、アクセス装置20と共有する認証鍵であるKT14を算出する。データ記憶部3は、データを記憶する記憶部であり、秘匿領域を含む。暗号化部4は、KT14を用いてデータ記憶部3から読み出されたデータを暗号化する。
アクセス装置20は、デバイス鍵(KD)31と、MKB処理部21と、演算部22と、復号部23と、データ利用部24とを備えている。MKB処理部21は、KD31を用いてMKB11を処理することによりメディア鍵(KM)32を導出するMKB処理を実行する。演算部22は、演算部2と同じ一方向性関数にKM12とR13とを入力して認証鍵であるKT33を算出する。正常に処理された場合は、KT14とKT33とは一致する。復号部23は、KT33を用いて、暗号化部4により暗号化されたデータを復号する。データ利用部24は、復号されたデータを利用する。
MKBを用いた認証鍵共有は、図1のように構成された記憶装置10およびアクセス装置20により、例えば、以下のように実現される。図1に示すように、記憶装置10のデータ記憶部3から読み出すデータはKT14によって暗号化される。アクセス装置20がKT14と同一のKT33を導出できない限り、読出しデータを正しく復号することはできない。アクセス装置20がKT14と同一のKT33を導出するためには、アクセス装置20が、当該アクセス装置20が保持するKD31を用いて、MKBを処理して正しいKM32が取得できることが必要である。KD31がMKB11によって無効化されていた場合、アクセス装置20のMKB処理部21によるMKB処理によって正しくKM32を取得することができない。従って、その場合、アクセス装置20は記憶装置10から読み出したデータを正しく復号することができない。このようにして、記憶装置10のデータ記憶部3のデータの秘匿が実現される。
MKBとデバイス鍵の具体的な構成方法の一例は、例えば特許文献1に記載されている。以下、MKBとデバイス鍵の構成方法の一例について簡単に説明する。
まず、図2のような生成行列を用意する。当該生成行列の各成分k(0,0)〜k(4,2)は16バイトのデータである。数0、数1または数2を5個並べた順列の全体をDとおく(D={0,1,2}^5)。Dの要素を経路という。また、経路の先頭を含む部分順列を、当該経路に随伴する経路(随伴経路)と呼ぶ。例えば、x=(2,0,2,2,1)は経路であり、経路xの随伴経路は、(2)、(2,0)、(2,0,2)、(2,0,2,2)および(2,0,2,2,1)である。各デバイスにはDの要素である1つの経路が割り当てられる。さらに、各デバイスは、当該デバイスに割り当てられている経路の随伴経路と生成行列とによって定まる鍵束を格納している。例えば、デバイスx(上記経路xが割り当てられているデバイス)は、以下の(1)式に示す鍵束を格納している。
{PF(2),PF(2,0),PF(2,0,2),PF(2,0,2,2),PF(2,0,2,2,1)}・・・(1)
関数PFは、例えば、以下の(2)式のように定義されている。
PF(n)=k(0,n),
PF(n0,n1)=G(k(1,n1),PF(n0)),
PF(n0,n1,n2)=G(k(2,n2),PF(n0,n1)),
PF(n0,n1,n2,n3)
=G(k(3,n3),PF(n0,n1,n2)),
PF(n0,n1,n2,n3,n4)
=G(k(4,n4),PF(n0,n1,n2,n3))・・・(2)
Gは一方向性関数を表す。このような鍵束が、デバイスxに割り当てられたデバイス鍵である。
さて、16バイトのメディア鍵をKMとする。リボーク(無効化)する端末が存在しない場合、以下の(3)式に示すデータの集合M1をMKBとして配布する。
M1={E(k(0,0),KM),E(k(0,1),KM),E(k(0,2),KM)}・・・(3)
E(k,X)は、データXを鍵kで暗号化した結果として得られる暗号化データである。
デバイスx=(2,0,2,2,1)をリボークするMKBは次のように構成する。xの境界集合は以下の(4)式で表される集合である。
{(0)、(1)、(2,1)、(2,2)、(2,0,0)、(2,0,1)、(2,0,2,0)、(2,0,2,1)、(2,0,2,2,0)、(2,0,2,2,2)}・・・(4)
M2を以下の(5)式で表されるデータ集合として定める。
M2={
E(PF(0),KM),
E(PF(1),KM),
E(PF(2,1),KM),
E(PF(2,2),KM),
E(PF(2,0,0),KM),
E(PF(2,0,1),KM),
E(PF(2,0,2,0),KM),
E(PF(2,0,2,1),KM),
E(PF(2,0,2,2,0),KM),
E(PF(2,0,2,2,2),KM)}・・・(5)
デバイスxは、上述のように(1)式の鍵束{PF(2),PF(2,0),PF(2,0,2),PF(2,0,2,2),PF(2,0,2,2,1)}を格納している。しかし、デバイスxは、この鍵束の中のいずれの鍵によってM2のいずれの要素を復号しても正しくKMを得ることはできない。従って、デバイスxはリボークされている。
しかも、デバイスx以外のデバイスは、M2の適当な要素を復号して正しくKMを得ることができる。実際、経路xと異なる経路yを考える。経路yの第1の要素が0または1であれば、デバイスy(経路yが割り当てられているデバイス)はPF(0)またはPF(1)を格納している。従って、M2の要素である、E(PF(0),KM)またはE(PF(1),KM)を復号してKMが得られる。経路yの第1の要素が2で第2の要素が1または2であれば、yはPF(2,1)またはPF(2,2)を格納している。従って、M2の要素であるE(PF(2,1),KM)またはE(PF(2,2),KM)を復号してKMが得られる。このように、デバイスxと異なる任意のデバイスyについて、デバイスyが格納する鍵束に含まれるいずれかの鍵を用いて、M2のいずれかの要素を復号してKMを得ることができる。
次に、上記x=(2,0,2,2,1)に加えてx2=(1,1,0,0,2)を無効化するMKBの構成方法を示す。xとx2の境界集合は以下の(6)式のようになる。
{(0)、(1)、(2,1)、(2,2)、(1,0)、(1,2)、(2,0,0)、(2,0,1)、(1,1,1)、(1,1,2)、(2,0,2,0)、(2,0,2,1)、(1,1,0,1)、(1,1,0,2)、(2,0,2,2,0)、(2,0,2,2,2)、(1,1,0,0,0)、(1,1,0,0,1)}・・・(6)
従って、xとx2とを無効化するMKBであるM3は以下の(7)式で与えられる。
M3={
E(PF(0),KM),
E(PF(1),KM),
E(PF(2,1),KM),
E(PF(2,2),KM),
E(PF(1,0),KM),
E(PF(1,2),KM),
E(PF(2,0,0),KM),
E(PF(2,0,1),KM),
E(PF(1,1,1),KM),
E(PF(1,1,2),KM),
E(PF(2,0,2,0),KM),
E(PF(2,0,2,1),KM),
E(PF(1,1,0,1),KM),
E(PF(1,1,0,2),KM),
E(PF(2,0,2,2,0),KM),
E(PF(2,0,2,2,2),KM),
E(PF(1,1,0,0,0),KM),
E(PF(1,1,0,0,1),KM)}・・・(7)
無効化対象のデバイス鍵が特別な組み合わせである場合は、MKBのサイズを節約して効率的に無効化することが可能である。例えば、(2,0,?,?,?)という一群のデバイス鍵を無効化する場合を考える。ただし、「?」には0、1または2の数値が入る。これら3^3=27個のデバイスを無効化するMKBは以下の(8)式で示すM4で与えられる。
M4={E(PF(2,1),KM),E(PF(2,2),KM)}・・・(8)
図1のような認証鍵共有の方法では、MKBから導出されるメディア鍵(KM)は同一である。従って、上述のようにアクセス装置が不正に解析されてKMが取得され、かつ、不正に解析されたアクセス装置を特定できない場合には、データの不正流出を防止することができない。
そこで、第1の実施形態にかかる記憶装置は、MKBによるデバイスの無効化を可能としつつ、アクセス装置を識別する識別情報(デバイス番号)を用いてアクセス装置ごとに異なる認証鍵を生成する。これにより、不正にアクセスするアクセス装置(ソフトウェア)等が配布された場合であっても、不正に解析されたアクセス装置を特定できるため、データの不正流出を回避可能となる。
図3は、第1の実施形態にかかる記憶装置100の構成の一例を示すブロック図である。図3に示すように、記憶装置100は、デバイス鍵記憶部1101と、取得部1102と、受信部1103と、メディア鍵記憶部1104と、鍵生成部1105と、乱数生成部1106と、鍵暗号化部1107と、データ暗号化部1108と、データ記憶部1109と、を備えている。
デバイス鍵記憶部1101は、図2に示す生成行列Mのような行列形式で複数のデバイス鍵を格納する。取得部1102は、デバイス鍵記憶部1101に記憶されたデバイス鍵のうち、いずれかのデバイス鍵を特定するインデックス(鍵インデックスi(m))をアクセス装置200から取得(受信)する。受信部1103は、アクセス装置200の送信部2104(後述)から、アクセス装置200に割り当てられたデバイス番号mを受信する。メディア鍵記憶部1104は、メディア鍵KMを記憶する。
鍵生成部1105は、生成行列M、鍵インデックスi(m)、および、デバイス番号mから、アクセス装置200との間で共有する認証鍵(以下、認証鍵KAという)を生成する。鍵生成部1105は、第1算出部1105aと、第2算出部1105bとを備えている。
第1算出部1105aは、鍵インデックスi(m)で特定されるデバイス鍵から関数PFによる経路関数値(後述)を算出し、算出した値(算出値)をデバイス番号mで変換した復号鍵Kdを算出する。
第2算出部1105bは、認証鍵KAを暗号化した鍵情報を復号鍵Kdにより復号することにより認証鍵KAを算出する。本実施形態では、第2算出部1105bは、メディア鍵KMを経路関数値で暗号化したメディア鍵KM’を復号鍵Kdで復号することにより認証鍵KAを算出する。
なお、認証鍵を算出する方法は、復号鍵を用いた復号演算に限られるものではない。認証鍵に演算を施して得られる鍵情報に対して、当該演算に対応する演算を施すための鍵を用いて認証鍵を算出する方法であれば、あらゆる方法を適用できる。
乱数生成部1106は、乱数Rを生成する。鍵暗号化部1107は、乱数Rを認証鍵KAで暗号化する。
データ記憶部1109は、アクセス装置200からアクセス可能なデータを記憶する。データ記憶部1109は、秘匿領域1110と、一般領域1111と、を含む。秘匿領域1110は、無効化されておらず、認証鍵KAを生成できるアクセス装置200のみがデータを読み出し可能なデータ領域である。一般領域1111は、認証鍵KAによる認証を行わずにデータを読み出し可能なデータ領域である。
本実施形態では、一般領域1111は、図1で説明したようなMKBを変換したMKB(Twisted MKB(以下、変換MKBという))を記憶する。変換MKBのデータ構造の詳細については後述する。
データ暗号化部1108は、乱数Rを用いて秘匿領域1110に格納されている読み出し対象データ(データD)を暗号化し、暗号化データD’=E(R,D)を算出する。
図4は、第1の実施形態にかかるアクセス装置200の構成の一例を示すブロック図である。図4に示すように、アクセス装置200は、読取部2101と、変換デバイス鍵記憶部2102と、鍵選択部2103と、送信部2104と、番号記憶部2105と、鍵復号部2106と、データ復号部2107と、データ利用部2108と、を備えている。
読取部2101は、記憶装置100の一般領域1111から変換MKBを読み取る。なお、記憶装置100から変換MKBをアクセス装置200に送信する代わりに、アクセス装置200が、記憶装置100以外の第三者から変換MKBを取得するように構成してもよい。
変換デバイス鍵記憶部2102は、記憶装置100のデバイス鍵記憶部1101に記憶された複数のデバイス鍵を変換した複数の変換デバイス鍵(Twisted Device Key)を記憶する。変換デバイス鍵のデータ構造の詳細については後述する。
鍵選択部2103は、複数の変換デバイス鍵の中から、変換MKBに応じた変換デバイス鍵を選択し、選択した変換デバイス鍵から認証鍵KAを算出する。
送信部2104は、選択された復号鍵Kdを特定する鍵インデックスi(m)を記憶装置100に送信する。番号記憶部2105は、アクセス装置200のデバイス番号mを記憶する。
鍵復号部2106は、鍵選択部2103により算出された認証鍵KAを用いて暗号化乱数R’から乱数Rを復号する。データ復号部2107は、乱数Rを用いて暗号化データD’からデータDを復号する。データ利用部2108は、データDを利用する処理部である。例えば、データ利用部2108は、データDをディスプレイなどに表示する処理を行う。
次に、このように構成された第1の実施形態にかかる記憶装置100およびアクセス装置200によるアクセス処理について図5を用いて説明する。図5は、第1の実施形態におけるアクセス処理の全体の流れを示すシーケンス図である。
まず、アクセス装置200の読取部2101が、記憶装置100に対して変換MKBの送信を要求する(ステップS101)。記憶装置100は、要求に応じて一般領域1111から変換MKBを読み出し、アクセス装置200に送信する(ステップS102)。
アクセス装置200の鍵選択部2103は、変換デバイス鍵記憶部2102に記憶された複数の変換デバイス鍵から、変換MKBに対応する変換デバイス鍵を復号鍵Kdとして選択する(ステップS103)。鍵選択部2103は、選択した復号鍵Kdを特定する情報である鍵インデックスi(m)を算出する(ステップS104)。送信部2104は、算出された鍵インデックスi(m)と、番号記憶部2105に記憶されたデバイス番号mとを記憶装置100に送信する(ステップS105)。
記憶装置100の取得部1102は、アクセス装置200から送信された鍵インデックスi(m)を受信する。鍵生成部1105の第1算出部1105aは、受信された鍵インデックスi(m)で特定されるデバイス鍵から関数PFによる経路関数値を算出する。そして、第1算出部1105aは、経路関数値をデバイス番号mで変換した復号鍵Kdを算出する(ステップS106)。
また、鍵生成部1105は、メディア鍵KMを経路関数値で暗号化したメディア鍵KM’を算出する(ステップS107)。第2算出部1105bは、復号鍵Kdによりメディア鍵KM’を復号することにより認証鍵KAを算出する(ステップS108)。
一方、アクセス装置200では、鍵選択部2103が、鍵インデックスi(m)に対応するメディア鍵KM’を、読取部2101により読み取られた変換MKBから取得する(ステップS109)。鍵選択部2103は、取得したメディア鍵KM’を、ステップS103で選択した復号鍵Kdにより復号した認証鍵KAを算出する(ステップS110)。
ここまでの処理により、記憶装置100およびアクセス装置200のそれぞれが同一の認証鍵KAを得ることができる(ステップS108、ステップS110)。これ以降、共有する認証鍵KAを用いた各種処理を実行可能となる。以下では、認証鍵KAを用いて秘匿領域1110からのデータを読み出す処理を例に説明するが、適用可能な処理はこれに限られるものではない。例えば、アクセス装置200が記憶装置100の秘匿領域1110にデータを書き込む場合についても、認証鍵KAを共有するまでの処理は図5と同様の処理が適用できる。
記憶装置100で認証鍵KAが算出されると、乱数生成部1106が、乱数Rを生成する(ステップS111)。鍵暗号化部1107は、乱数Rを認証鍵KAで暗号化した乱数である暗号化乱数R’を算出する(ステップS112)。データ暗号化部1108は、秘匿領域1110に記憶されたデータDを乱数Rで暗号化したデータである暗号化データD’を算出する(ステップS113)。記憶装置100は、暗号化乱数R’と暗号化データD’とをアクセス装置200に送信する(ステップS114)。
アクセス装置200の鍵復号部2106は、受信した暗号化乱数R’を認証鍵KAで復号した乱数Rを算出する(ステップS115)。データ復号部2107は、受信した暗号化データD’を乱数Rで復号したデータDを算出する(ステップS116)。
このような処理により、MKB技術を用いた認証鍵共有による秘匿領域へのアクセス処理を実現できる。
次に、上記のようなアクセス処理の具体例についてさらに説明する。以下では、アクセス装置200に経路x=(2,0,2,2,1)が割り当てられているものとする。
番号記憶部2105が格納するデバイス番号は、アクセス装置200に割り当てられている数値である。この数値は通常アクセス装置1台ごとに異なっているが、一群のアクセス装置200に共通であってもよい。本実施形態では、デバイス番号は、アクセス装置200に割り当てられた経路を表現する数値とする。すなわち、番号記憶部2105は、経路x=(2,0,2,2,1)を3進表現した数値であるデバイス番号m=20221_3=187を格納している。なお、*_3は、「*」が3進数であることを表す。
経路を3進表現するとは、経路に含まれる数値を順列の順に左から右に並べて3進数とみなすことをいう。なお、経路に含まれる数値は0、1、2に限られるものではない。また、経路に含まれる数値の個数の最大値は5に限られるものではない。すなわち、a個の数値をb個並べた順列全体の集合の要素を経路とするように構成できる(aおよびbは2以上の整数)。この場合、生成行列は、a行b列の行列となる。また、デバイス番号mは、例えば経路をa進表現した数値とすればよい。例えばa=2の場合、経路が数値0または1を含むように構成し、経路を2進表現した数値をデバイス番号mとするように構成する。
変換デバイス鍵記憶部2102は以下の(9)式に示す鍵束を格納しているものとする。
{G(m,PF(2)),G(m,PF(2,0)),G(m,PF(2,0,2)),G(m,PF(2,0,2,2)),G(m,PF(2,0,2,2,1))}・・・(9)
関数PFは以下の(10)式のように定義される。なお(+)はビットごとの排他的論理和を表す。
PF(n0)=k(0,n0),
PF(n0,n1)=PF(n0)(+)k(1,n1),
PF(n0,n1,n2)=PF(n0,n1)(+)k(2,n2),
PF(n0,n1,n2,n3)=PF(n0,n1,n2)(+)k(3,n3),
PF(n0,n1,n2,n3,n4)=PF(n0,n1,n2,n3)(+)k(4,n4)・・・(10)
(10)式は、上述の(2)式の一方向性関数Gとしてビットごとの排他的論理和を適用した例を表している。すなわち、関数PFは、生成行列Mの任意の経路に対して、生成行列Mの要素を用いて定義される関数(経路関数)である。
(9)式のGは一方向性関数であり、G(m,X)は数値Xにデータを利用するデバイス(アクセス装置200)のデバイス番号mを用いて一方向性関数を適用した結果を表す。一方向性関数としては、(10)式と同様のビットごとの排他的論理和を用いてもよい。
さらに、変換デバイス鍵記憶部2102は、以下の(11)式で示すような、格納している鍵束の添字の集合を格納している。
{(2)、(2,0)、(2,0,2)、(2,0,2,2)、(2,0,2,2,1)}・・・(11)
ここで、変換MKBのデータ構造の一例について説明する。変換MKBは、MKBインデックス(MKB indices)と、MKBインデックスに対応するベース鍵(MKBase(Media Key Base))を含んでいる。
MKBインデックスとは、デバイス鍵を無効化するための生成行列Mの経路の集合である。先に述べた通り、デバイス鍵と生成行列Mの経路とは一対一に対応している。無効化するデバイス(=経路)が存在しないとき、MKBインデックスは以下の(12)式のようになっている。
{0,1,2}・・・(12)
また、例えば、経路y0=(1,0,2,1,1)を無効化するMKBインデックスは以下の(13)式のようになる。
{(0)、(2)、(1,1)、(1,2)、(1,0,0)、(1,0,1)、(1,0,2,0)、(1,0,2,2)、(1,0,2,1,0)、(1,0,2,1,2)}・・・(13)
以下に、MKBインデックスの構成方法の一例を説明する。本実施形態では、生成行列Mが3×5行例(3行5列)である場合に即して説明を行うが、生成行列Mが一般のa×b行列である場合も同様である。
経路x=(n0,n1,n2,n3,n4)に対して、生成行列M上の経路の集合{(n0)、(n0,n1)、(n0,n1,n2)、(n0,n1,n2,n3)、(n0,n1,n2,n3,n4)}を、経路xの随伴経路集合と呼ぶ。また、随伴経路集合の要素である各経路を随伴経路と呼ぶ。経路xの随伴経路集合をAP(X)で表す。また、各随伴経路に対して、経路の最後の数値が異なる経路を境界経路と呼び、境界経路の集合を境界経路集合と呼ぶ。経路x=(n0,n1,n2,n3,n4)の境界経路集合BP(X)は以下の(14)式で与えられる。
BP(X)={(n)|n≠n0}∪{(n0,n)|n≠n1}∪{(n0,n1,n)|n≠n2}∪{(n0,n1,n2,n)|n≠n3}∪{(n0,n1,n2,n3,n)|n≠n4}・・・(14)
例えば、経路y0の境界経路集合は以下の(15)式のようになる。
{(0)、(2)、(1,1)、(1,2)、(1,0,0)、(1,0,1)、(1,0,2,0)、(1,0,2,2)、(1,0,2,1,0)、(1,0,2,1,2)}・・・(15)
経路y0を無効化するMKBインデックスはy0の境界経路集合である。
さらに、2つ以上の経路を無効化する場合を考える。
(定義)
(1)経路x1,x2,・・・,xNの随伴経路集合AP(x1,x2,・・・,xN)とは、各経路x1,x2,・・・,xNの随伴経路集合の和集合である:
AP(x1,x2,・・・,xN)=AP(x1)∪AP(x2)∪・・・∪AP(xN)。
(2)経路x1,x2,・・・,xNの境界経路集合BP(x1,x2,・・・,xN)とは、各経路x1,x2,・・・,xNの境界経路集合の和集合から、経路x1,x2,・・・,xNの随伴経路集合を除いた差集合である:
BP(x1,x2,・・・,xN)=BP(x1)∪BP(x2)∪・・・∪BP(xN)−AP(x1,x2,・・・,xN)。
(3)経路x1,x2,・・・,xNを無効化するMKBインデックスは、経路x1,x2,・・・,xNの境界経路集合BP(x1,x2,・・・,xN)である。
例えば、経路y1=(0,0,1,1,2)として、経路y0と経路y1の境界経路集合を求める。経路y0と経路y1の境界経路集合は、それぞれ上記(15)式および以下の(16)式のようになる。
{(1)、(2)、(0,1)、(0,2)、(0,0,0)、(0,0,2)、(0,0,1,0)、(0,0,1,2)、(0,0,1,1,0)、(0,0,1,1,1)}・・・(16)
従って、上記2つの境界経路集合の和集合は以下の(17)式のようになる。
{(0)、(1)、(2)、(1,1)、(1,2)、(0,1)、(0,2)、(1,0,0)、(1,0,1)、(0,0,0)、(0,0,2)、(1,0,2,0)、(1,0,2,2)、(0,0,1,0)、(0,0,1,2)、(1,0,2,1,0)、(1,0,2,1,2)、(0,0,1,1,0)、(0,0,1,1,1)}・・・(17)
従って、y0とy1の境界経路集合は以下の(18)式のようになる。
{(2)、(1,1)、(1,2)、(0,1)、(0,2)、(1,0,0)、(1,0,1)、(0,0,0)、(0,0,2)、(1,0,2,0)、(1,0,2,2)、(0,0,1,0)、(0,0,1,2)、(1,0,2,1,0)、(1,0,2,1,2)、(0,0,1,1,0)、(0,0,1,1,1)}・・・(18)
上記境界経路集合BP(y0,y1)が、経路y0と経路y1とを無効化するMKBインデックスである。
経路の集合Sが経路x1,x2,・・・,xNを無効化するとは、次の2つの条件が成立することをいう。
i)AP(x1,x2,・・・,xN)∩S=φ
ii){x1,x2,・・・,xN}に含まれない任意の経路yについてAP(y)∩S≠φ
以下に、MKBインデックス、すなわち、境界経路集合BP(x1,x2,・・・,xN)が、経路x1,x2,・・・,xNを無効化する集合であることを証明する。
AP(x1,x2,・・・,xN)∩BP(x1,x2,・・・,xN)=φは、BP(x1,x2,・・・,xN)の定義より自明である。
{x1,x2,・・・,xN}に含まれない任意の経路を経路yとする。AP(y)は長さ1から5までの5つの経路からなる。ただし、経路(順列)の長さとは要素数である。例えば、(1,0,2)の長さは3である。AP(y)={(n0)、(n0,n1)、(n0,n1,n2)、(n0,n1,n2,n3)、(n0,n1,n2,n3,n4)}とする。また、AP(y)∩BP(x1,・・・,xN)=φであると仮定する。n0はx1,・・・,xNのいずれかの最初の要素である。さもなければ、(n0)∈BP(x1,・・・,xN)となって仮定に矛盾する。次に、(n0,n1)は、x1,・・・,xNのいずれかの最初の2つの要素からなる順列に一致する。さもなければ、(n0,n1)∈BP(x1,・・・,xN)となって仮定に矛盾する。同様の推論を繰り返すことにより、結局、y=(n0,・・・,n4)は、x1,・・・,xNのいずれかに一致しなければならない。これは経路yが{x1,x2,・・・,xN}に含まれない経路であるとした仮定に反する。すなわち、経路yが{x1,x2,・・・,xN}に含まれない経路であれば、AP(y)∩BP(x1,・・・,xN)≠φ。以上により、MKBインデックスが経路x1,・・・,xNを無効化することが証明された。
次に、MKBインデックスBP(x1,・・・,xN)が、経路x1,・・・,xNを無効化する最小の集合であることを示す。
ρ∈BP(x1,・・・,xN)とする。経路ρを適当に長さ5まで伸ばして経路yを作る。ここで、経路u∈AP(y)∩(BP(x1,・・・,xN)−{ρ})とする。l(p)を経路pの長さとして、l(u)<l(ρ)であるとすると、ρ∈BP(x1,・・・,xN)であったから、ある番号iに対してu∈AP(xi)でなければならない。これは仮定に反する。また、l(u)=l(ρ)であるとするとu=ρとなり、仮定に矛盾する。l(u)>l(ρ)であると仮定する。経路uの最後の要素を取り除いた経路をu’とおくと、BP(x1,・・・,xN)の定義より、ある番号jが存在してu’∈AP(xj)でなければならない。従ってρ∈AP(xj)となり、仮定に矛盾する。結局、AP(y)∩(BP(x1,・・・,xN)−{ρ})=φとなる。以上で、BP(x1,・・・,xN)が経路x1,・・・,xNを無効化する最小の集合であることが証明された。
次に、ベース鍵について説明する。ベース鍵は、次のように定義されるデータの集合である。すなわち、MKBインデックスは生成行列Mの経路の集合であるが、MKBインデックスに属する各経路に対して、経路関数PFとメディア鍵KMとを用いて定義されるデータの集合をベース鍵という。
例えば、(18)式のMKBインデックスを考える。このMKBインデックスに対して、以下の(19)式はベース鍵の一例である。
{E(PF(2),KM),
E(PF(1,1),KM),
E(PF(1,2),KM),
E(PF(0,1),KM),
E(PF(0,2),KM),
E(PF(1,0,0),KM),
E(PF(1,0,1),KM),
E(PF(0,0,0),KM),
E(PF(0,0,2),KM),
E(PF(1,0,2,0),KM),
E(PF(1,0,2,2),KM),
E(PF(0,0,1,0),KM),
E(PF(0,0,1,2),KM),
E(PF(1,0,2,1,0),KM),
E(PF(1,0,2,1,2),KM),
E(PF(0,0,1,1,0),KM),
E(PF(0,0,1,1,1),KM)}・・・(19)
この例は、上記(5)式および(6)式で述べたMKBと同様のデータ構成になる。
本実施形態では、変換MKBは1つの記憶装置100に対して1つ存在する。アクセス装置200が記憶装置100の秘匿領域1110からデータを読み取る際は、まず、読取部2101が記憶装置100の一般領域1111から変換MKBを読み取る(図5のステップS101、ステップS102)。読取部2101は、読み取った変換MKBのMKBインデックスを鍵選択部2103に送る。鍵選択部2103は、変換デバイス鍵記憶部2102から変換デバイス鍵を読み取り、復号鍵Kdを選択する(ステップS103)。以下に、ステップS103の鍵選択部2103による復号鍵Kdの選択処理の詳細について説明する。
MKBインデックスをI_MKBとし、変換デバイス鍵記憶部2102が格納する添字の集合をI_Dとする。鍵選択部2103は、I_MKB∩I_D≠φであるか否かを調べる。I_MKB∩I_D=φであれば、デバイス鍵は無効化されている。この場合、鍵選択部2103は処理を停止する。一方、I_MKB∩I_D≠φであれば、鍵選択部2103は、u∈I_MKB∩I_Dである経路uを1つ見出す。鍵選択部2103は、この経路uに対応する(変換デバイス鍵中の)鍵を復号鍵Kdとして選択する。より具体的には、鍵選択部2103は次の動作を行う。なお、MKBインデックス(I_MKB)が以下の(20)式のようになっているとする。
I_MKB={(0)、(2)、(1,1)、(1,2)、(1,0,0)、(1,0,1)、(1,0,2,0)、(1,0,2,1,0)、(1,0,2,1,2)、(1,0,2,2,0)、(1,0,2,2,2)}・・・(20)
このMKBインデックスは、以下の(21)式の2つの経路y0とy2とを無効化するものである。
y0=(1,0,2,1,1)、y2=(1,0,2,2,1)・・・(21)
アクセス装置200に割り当てられている経路をx0=(1,0,2,0,1)とする。このとき、アクセス装置200の変換デバイス鍵記憶部2102は、以下の(22)式の添字を格納している。
I_D={(1)、(1,0)、(1,0,2)、(1,0,2,0)、(1,0,2,0,1)}・・・(22)
さらに、変換デバイス鍵記憶部2102は、以下の(23)式のデバイス鍵(束)を格納している。
D0={
G(100,PF(1)),
G(100,PF(1,0)),
G(100,PF(1,0,2)),
G(100,PF(1,0,2,0)),
G(100,PF(1,0,2,0,1))}・・・(23)
なお、アクセス装置200のデバイス番号mは、経路x0の3進表現10201_3から得られる100である。鍵選択部2103は、I_Dの添字(経路)を1つずつ順に選び、I_MKBに含まれているか否かを調べる。鍵選択部2103は、例えば以下に示すような関数key_choice()により、復号鍵Kdを選択する。
key_choice(I_D,I_MKB){
int i,j;
for(j=0;j<5;j++)
for(i=0;i<11;i++)
if(I_D[j]==I_MKB[i]){
復号鍵Kdとして、D0[j]を選択;
return j;
}
return −1;
}
この結果、(20)式のI_MKBと(22)式のI_Dに対しては、復号鍵KdとしてD0[3]=G(100,PF(1,0,2,0))が選択される。
他方、アクセス装置200に割り当てられている経路がy0である場合は、アクセス装置200に割り当てられている鍵束(変換デバイス鍵)および添字は以下の(24)式のようになる。
鍵束:{
G(103,PF(1)),
G(103,PF(1,0)),
G(103,PF(1,0,2)),
G(103,PF(1,0,2,1)),
G(103,PF(1,0,2,1,1))}、
添字:{(1)、(1,0)、(1,0,2)、(1,0,2,1)、(1,0,2,1,1)}・・・(24)
このアクセス装置200のデバイス番号mは10211_3=103である。このアクセス装置200の場合、関数key_choice()は復号鍵Kdを見出すことができず、数値−1を返して停止する。
鍵選択部2103が復号鍵Kdを見出すことができた場合、鍵選択部2103は、見出した復号鍵Kdの添字を送信部2104に送る。送信部2104は、添字を鍵インデックスi(m)として、記憶装置100に送る。上記の例では、(1,0,2,0)が復号鍵Kdの添字であるから、送信部2104は、鍵インデックスi(m)として添字(1,0,2,0)を記憶装置100に送る(ステップS105)。なお、鍵インデックスは、アクセス装置200のデバイス番号mに依存する。従って、鍵インデックスをi(m)と表記する。鍵インデックスは、a行b列の生成行列の1列からc列(cは1≦c≦bを満たす整数)までの行のいずれかを特定する情報となる。
なお、鍵インデックスi(m)を送信する代わりに、鍵選択部2103が、見出した復号鍵Kdの添字の長さを送信部2104に送ってもよい。上記の例では、復号鍵Kdの添字(1,0,2,0)の長さは4であるから、送信部2104は、鍵インデックスとして数4を記憶装置100に送る。記憶装置100では、別途アクセス装置200から取得するデバイス番号mと合わせて、復号鍵Kdの添字を取得することができる。具体的には、添字を取得する処理は例えば次のように行われる。
アクセス装置200には経路x0=(1,0,2,0,1)が割り当てられているものとする。このとき、当該アクセス装置200の番号記憶部2105はデバイス番号10201_3=100を格納している。記憶装置100がアクセス装置200からデバイス番号=10201_3と鍵インデックス=4を受け取ると、3進表記のデバイス番号から4つの添字を切りだして、復号鍵Kdの添字(1,0,2,0)を得ることができる。すなわち、記憶装置100が、鍵インデックスとアクセス装置200のデバイス番号と組み合わせて、復号鍵Kdの添字が得られるように、鍵インデックスを定義すればよい。
鍵選択部2103は次に、読取部2101から復号鍵Kdの添字に対応するベース鍵を読み取る。復号鍵Kdの添字が(1,0,2,0)である場合、鍵選択部2103は、対応するベース鍵である鍵KM’=E(PF(1,0,2,0),KM)を、読取部2101が読取った変換MKBから取得する(ステップS109)。鍵選択部2103は、以下の(25)式に示すように、復号鍵Kdによって取得した鍵KM’を復号して認証鍵KAを得る(ステップS110)。D(X,Y)は、YをXで復号する復号演算を表す。
KA=D(Kd,KM’)・・・(25)
一方、記憶装置100では、取得部1102が鍵インデックスi(m)をアクセス装置200から受け取る。取得部1102は、鍵インデックスi(m)を鍵生成部1105に送る。鍵生成部1105は、受信部1103にアクセス装置200のデバイス番号mを読み出すよう指示する。受信部1103は、アクセス装置200の番号記憶部2105から読み出されたデバイス番号mを受信し、受信したデバイス番号mを鍵生成部1105に送る。鍵生成部1105は、デバイス鍵記憶部1101から生成行列Mによって定められるデバイス鍵を読み出して、鍵インデックスi(m)に対応する認証鍵KAを生成する。
例えば、生成行列Mが図2で与えられ、m=100=10201_3、i(m)=4であるとき、鍵生成部1105は、以下のi)〜vi)の手続きによって認証鍵KAを得る。
i)復号鍵Kdの添字(1,0,2,0)を取得する。
ii)添字が定める経路に対する経路関数値PF(1,0,2,0)=k(0,1)(+)k(1,0)(+)k(2,2)(+)k(3,0)を算出する。
iii)復号鍵Kd=G(m,PF(1,0,2,0))=G(100,PF(1,0,2,0))を算出する(ステップS106)。
iv)メディア鍵記憶部1104からメディア鍵KMを取得する。
v)ii)で算出した経路関数値PF(1,0,2,0)によってメディア鍵KMを暗号化することにより、鍵KM’を取得する(ステップS107):KM’=E(PF(1,0,2,0),KM)。
vi)iii)で取得した復号鍵Kdによって鍵KM’を復号して認証鍵KAを得る(ステップS108):KA=D(Kd,KM’)。
鍵生成部1105は、算出した認証鍵KAを鍵暗号化部1107に送る。鍵暗号化部1107は、乱数生成部1106に乱数発生要求を出し、乱数発生部1106が発生した乱数R(ステップS111)を受け取る。鍵暗号化部1107は、乱数Rを認証鍵KAで暗号化し(ステップS112)、その結果である暗号化乱数R’=E(KA,R)をアクセス装置200に送る(ステップS114)。E(KA,R)は、Rを認証鍵KAで暗号化した結果を表す。一方、乱数Rは乱数発生部1106からデータ暗号化部1108にも送られる。アクセス装置200からの読み出し要求を受け、データ暗号化部1108は乱数Rを用いて、秘匿領域1110に格納されている読み出し対象のデータDを暗号化し、暗号化データD’=E(R,D)を得る(ステップS113)。データ暗号化部1108は暗号化データD’をアクセス装置200に送る(ステップS114)。
アクセス装置200は、暗号化乱数R’を受け取ると、暗号化乱数R’を鍵復号部2106に入力する。鍵復号部2106は、鍵選択部2103から、鍵選択部2103が先に算出した認証鍵KAを取得する。鍵復号部2106は、認証鍵KAを用いて暗号化乱数R’を復号し、乱数Rを得る(ステップS115):R=D(KA,R’)。鍵復号部2106は、得られた乱数Rをデータ復号部2107に送る。
データ復号部2107は、記憶装置100に読み出し要求を出す。上述のように、記憶装置100のデータ暗号化部1108は、読み出し要求を受け、暗号化データD’を出力する。データ復号部2107は、暗号化データD’を取得する。データ復号部2107は、暗号化データD’を乱数Rによって復号し、読み出し対象のデータDを得る(ステップS116)。データ復号部2107は、データDをデータ利用部2108に送る。データ利用部2108は、データDを画面表示するなどして利用する。
以上のように、本実施形態では、以下のような機能が実現される。
i)変換MKBは、MKBインデックスとベース鍵を含んでいる。特定の生成行列と、当該生成行列上の経路を想定した上で、MKBインデックスは無効化対象の経路の境界経路集合を用いて構成される。ベース鍵は、MKBインデックスに属する各経路の経路関数値と記憶装置100が格納する1つまたは複数のメディア鍵と呼ばれる情報から作られる。
ii)アクセス装置200は、アクセス装置200に割り当てられている識別情報(本実施形態ではデバイス番号)を格納しており、記憶装置100の秘匿領域1110のデータの読み出しまたは秘匿領域1110へのデータの書き込みの際に、当該識別情報を記憶装置100に送る。
iii)記憶装置100は、生成行列を格納している。記憶装置100は、生成行列、アクセス装置200から取得した識別情報、および、記憶装置100が格納するメディア鍵を用いて、認証鍵を生成する。
iv)アクセス装置200は、アクセス装置200に割り当てられている(生成行列上の)経路によって定められる、経路関数値を用いて算出されるデバイス鍵を格納しているが、当該デバイス鍵は、当該アクセス装置200が格納する識別情報を用いて変換されている(変換デバイス鍵)。
v)アクセス装置200は、変換デバイス鍵と、ベース鍵とから認証鍵を算出する。
vi)記憶装置100とアクセス装置200とは、それぞれが導出した(共通の)認証鍵を共有し、共有する認証鍵を乱数の暗号化やデータの暗号化に用いる。
本実施形態では、MKBインデックスによって、通常のMKBと同様の効率的なアクセス装置200の無効化が行われる。しかも、本実施形態では通常のMKBの場合とは異なり、アクセス装置200と記憶装置100の間で共有される認証鍵(上記の例ではKA=D(G(100,PF(1,0,2,0)),E(PF(1,0,2,0),KM)))は、アクセス装置200ごとに異なる。各アクセス装置200は互いに異なるデバイス番号を有しているので、認証鍵KAはアクセス装置200ごとに異なる。その結果、万一、あるアクセス装置200が不正に解析されて、記憶装置100との間で共有される認証鍵KAが暴露されたとしても、認証鍵KAを、異なるデバイス鍵を持つ、別のアクセス装置200でそのまま利用することはできない。
通常のMKBでは、あるMKBについてメディア鍵を知れば、記憶装置100によるアクセス装置200の認証が完了する。例えば図1の例では、メディア鍵KMを有していれば、記憶装置10の秘匿領域(データ記憶部3)からデータを読み出すことができることになる。このように、通常のMKBによる認証の場合、デバイス鍵は不要である。従って、次のようなシステムに対する攻撃のシナリオが成立する。
i)攻撃者は特定の(脆弱性を有する)アクセス装置200を分析してデバイス鍵を得る。
ii)攻撃者は不正取得したデバイス鍵を用いて、記憶装置100が格納するMKBのメディア鍵を取得する。
iii)攻撃者は不正に取得したメディア鍵を含む不正なアクセス装置200(ソフトウェア)を配布する。不正なアクセス装置200は記憶装置100の秘匿領域1110から自由にデータを読み出すことができる。不正なアクセス装置200自身はデバイス鍵を持っていないため、不正なアクセス装置200を解析して、不正に解析されたアクセス装置200のデバイス鍵を特定することはできない。従って、この方法では、不正に解析されたアクセス装置200を無効化することができない。
iv)不正に解析されたアクセス装置200のデバイス鍵を特定して無効化しない限り、MKB(とメディア鍵と)を更新しても、アクセス装置200を用いたメディア鍵の流出が続く。
一方、変換MKBを用いる本実施形態では、アクセス装置200が記憶装置100の秘匿領域1110にアクセスするためには、特定のアクセス装置200が算出した認証鍵KAとアクセス装置200の識別情報とが必要である。これらの情報を含み、記憶装置100に不正にアクセスするソフトウェア等が配布されれば、識別情報を特定できるため、当該識別情報で指定されるデータ利用機器(アクセス装置200)を、新しい変換MKBを配布することにより無効化できる。これにより、不正な解析を受けたと思われる当該データ利用機器からの認証鍵の流出を阻止することができる。
このように、第1の実施形態では、認証と暗号化によって保護された秘匿領域からのデータ不正流出を回避することができる。
(第2の実施形態)
第1の実施形態では、アクセス装置で算出した復号鍵のインデックス(鍵インデックス)を記憶装置が受け取り、鍵インデックスに基づいて記憶装置が認証鍵を算出した。第2の実施形態では、記憶装置はアクセス装置のデバイス番号だけを受け取り、記憶装置の側が当該デバイス番号に基づいて認証鍵を算出する。
図6は、第2の実施形態にかかる記憶装置100−2の構成の一例を示すブロック図である。図6に示すように、記憶装置100−2は、デバイス鍵記憶部1101と、取得部1102−2と、受信部1103と、メディア鍵記憶部1104−2と、鍵生成部1105−2と、乱数生成部1106と、鍵暗号化部1107と、データ記憶部1109と、データ復号部1112と、を備えている。
第2の実施形態では、取得部1102−2、メディア鍵記憶部1104−2および鍵生成部1105−2の機能と、データ復号部1112を追加した点と、データ暗号化部1108を削除した点と、が第1の実施形態と異なっている。その他の構成および機能は、第1の実施形態にかかる記憶装置100のブロック図である図3と同様であるので、同一符号を付し、ここでの説明は省略する。
なお、データ暗号化部1108は説明の便宜上削除したものであり、記憶装置100−2がデータ暗号化部1108を備えるように構成してもよい。また、第1の実施形態の記憶装置100が、本実施形態と同様のデータ復号部1112を備えるように構成してもよい。
取得部1102−2は、一般領域1111に記憶された変換MKBと、受信部1103により受信されたデバイス番号とを参照して、鍵インデックスi(m)を取得する点が、第1の実施形態の取得部1102と異なっている。なお、本実施形態では、第1の実施形態と異なるデータ構造の変換MKBを用いる。本実施形態の変換MKBのデータ構造の詳細については後述する。
取得部1102−2は、デバイス番号テーブルを用いて鍵インデックスを取得する。図7は、デバイス番号テーブルのデータ構造の一例を示す図である。図7に示すように、デバイス番号テーブルは、デバイス番号と変換デバイス鍵の経路(インデックス)とを対応づけて記憶している。なお、デバイス番号テーブルは、取得部1102−2が保持するように構成してもよいし、データ記憶部1109などの他の記憶部に保持するように構成してもよい。デバイス番号テーブルを用いた処理の詳細は後述する。
メディア鍵記憶部1104−2は、複数のメディア鍵(以下の例では、{KM0,KM1,KM2,KM3,KM4})を記憶する点が、1つのメディア鍵を記憶する第1の実施形態のメディア鍵記憶部1104と異なっている。
鍵生成部1105−2は、複数のメディア鍵から認証鍵KAを生成する点が、第1の実施形態と異なる。なお、第1の実施形態と同様にメディア鍵記憶部1104−2に1つのメディア鍵を記憶するように構成してもよい。この場合は、鍵生成部1105−2は、第1の実施形態の鍵生成部1105と同様の方法により認証鍵KAを生成すればよい。
鍵生成部1105−2は、第1算出部1105aと、第2算出部1105b−2とを備えている。第1算出部1105aの機能は第1の実施形態と同様である。
第2算出部1105b−2は、復号鍵Kdによりメディア鍵を復号することにより認証鍵KAを算出する。本実施形態では、第2算出部1105b−2は、複数のメディア鍵から算出され、変換MKBのベース鍵として記憶されている鍵情報のうち、鍵インデックスに対応する鍵情報を復号鍵Kdで復号することにより認証鍵KAを算出する。
データ復号部1112は、乱数Rを用いて暗号化データD’からデータDを復号する。
図8は、第2の実施形態にかかるアクセス装置200−2の構成の一例を示すブロック図である。図8に示すように、アクセス装置200−2は、読取部2101と、変換デバイス鍵記憶部2102と、鍵選択部2103−2と、送信部2104−2と、番号記憶部2105と、鍵復号部2106と、データ暗号化部2109と、を備えている。
第2の実施形態では、鍵選択部2103−2の機能、送信部2104−2の機能、データ復号部2107およびデータ利用部2108を削除したこと、および、データ暗号化部2109を追加したことが第1の実施形態と異なっている。その他の構成および機能は、第1の実施形態にかかるアクセス装置200のブロック図である図4と同様であるので、同一符号を付し、ここでの説明は省略する。
なお、データ復号部2107は説明の便宜上削除したものであり、アクセス装置200−2がデータ復号部2107を備えるように構成してもよい。また、第1の実施形態のアクセス装置200が、本実施形態と同様のデータ暗号化部2109を備えるように構成してもよい。
鍵選択部2103−2は、複数の変換デバイス鍵の中から、変換MKBに応じた変換デバイス鍵を選択し、選択した変換デバイス鍵から認証鍵KAを算出する。本実施形態では、変換MKBのデータ構造が第1の実施形態と異なるため、鍵選択部2103−2は、それに応じた処理により変換デバイス鍵を選択する。
送信部2104−2は、鍵インデックスi(m)を送信しない点が、第1の実施形態の送信部2104と異なっている。データ暗号化部2109は、乱数Rを用いて秘匿領域1110に書き込むデータDを暗号化し、暗号化データD’=E(R,D)を算出する。
次に、このように構成された第2の実施形態にかかる記憶装置100−2およびアクセス装置200−2によるアクセス処理について図9を用いて説明する。図9は、第2の実施形態におけるアクセス処理の全体の流れを示すシーケンス図である。
ステップS201〜ステップS204までは、図5のステップS101〜ステップS104までと同様であるため説明を省略する。
第2の実施形態では、送信部2104−2が、番号記憶部2105に記憶されたデバイス番号mを記憶装置100−2に送信する(ステップS205)。
記憶装置100−2の取得部1102−2は、図7のようなデバイス番号テーブルを参照し、受信されたデバイス番号に対応する経路(インデックス)を取得する(ステップS206)。取得部1102−2は、取得したインデックスから、復号鍵Kdの鍵インデックスを算出する(ステップS207)。この処理の詳細は後述する。
ステップS208〜ステップS214までは、図5のステップS106〜ステップS112までと同様であるため説明を省略する。
以下、図9では、認証鍵KAを用いて、アクセス装置200−2が記憶装置100−2の秘匿領域1110にデータを書き込む処理を例に説明する。
記憶装置100−1は、算出された暗号化乱数R’をアクセス装置200−2に送信する(ステップS215)。アクセス装置200−2の鍵復号部2106は、受信した暗号化乱数R’を認証鍵KAで復号した乱数Rを算出する(ステップS216)。データ暗号化部2109は、秘匿領域1110に書き込むべきデータDを乱数Rで暗号化した暗号化データD’を算出する(ステップS217)。アクセス装置200−2は、暗号化データD’を記憶装置100−2に送信する(ステップS218)。
記憶装置100−2のデータ復号部1112は、受信した暗号化データD’を乱数Rで復号したデータDを算出する(ステップS219)。
このような処理により、MKB技術を用いた認証鍵共有による秘匿領域へのアクセス処理を実現できる。
次に、上記のようなアクセス処理の具体例についてさらに説明する。以下では、アクセス装置200−2に経路x=(2,0,2,2,1)が割り当てられているものとする。従って、アクセス装置200−2の番号記憶部2105は、デバイス番号m=20221_3=187を格納している。また、変換デバイス鍵記憶部2102は、上述の(9)式と同様の鍵束、および、(11)式と同様の添字の集合を格納している。
記憶装置100−2の一般領域1111が格納する変換MKBはMKBインデックスと、ベース鍵とを含んでいる。MKBインデックスの構成は第1の実施形態に述べた通りである。本実施形態では、第1の実施形態とは若干異なるベース鍵を採用する。MKBインデックス(I_MKBと表記)は、上述の(20)式で与えられるとする。
これは、それぞれ経路y0=(1,0,2,1,1)と経路y2=(1,0,2,2,1)とを割り当てられたアクセス装置200−2を無効化するMKBインデックスである。このとき、本実施形態のベース鍵(B_MKBと表記)を、以下の(26)式のように定める。
B_MKB={
KM(0),
KM(2),
KM(1,1),
KM(1,2),
KM(1,0,0),
KM(1,0,1),
KM(1,0,2,0),
KM(1,0,2,1,0),
KM(1,0,2,1,2),
KM(1,0,2,2,0),
KM(1,0,2,2,2)}・・・(26)
なお、関数KMは、以下の(27)式で表される。
KM(n0)=E(PF(n0),KM0),
KM(n0,n1)=E(PF(n0,n1),KM1),
KM(n0,n1,n2)=E(PF(n0,n1,n2),KM2),
KM(n0,n1,n2,n3)=
E(PF(n0,n1,n2,n3),KM3),
KM(n0,n1,n2,n3,n4)=
E(PF(n0,n1,n2,n3,n4),KM4)・・・(27)
経路関数PFは第1の実施形態の通りである。{KM0,KM1,KM2,KM3,KM4}はメディア鍵であり、記憶装置100−2のメディア鍵記憶部1104−2に格納されている。第1の実施形態ではメディア鍵は1つであった。本実施形態は複数のメディア鍵を持つ例になっている。
本実施形態では、変換MKBは1つの記憶装置100−2に対して1つ存在する。アクセス装置200−2が記憶装置100−2の秘匿領域1110にデータを書き込む際は、まず、読取部2101が記憶装置100−2の一般領域1111から変換MKBを読み取る。読取部2101は、鍵選択部2103−2に読み取った変換MKBのMKBインデックスを送る。鍵選択部2103−2は、変換デバイス鍵記憶部2102から変換デバイス鍵を読み取り、復号鍵Kdを選択する。この復号鍵Kdの選択方法は第1の実施形態に述べた通りである。
鍵選択部2103−2が復号鍵Kdを見出すことができた場合、鍵選択部2103−2は読取部2101が読取った変換MKBから、復号鍵Kdの添字に対応するベース鍵を読み取る。例えば、復号鍵Kdの添字が(1,0,2,0)である場合、鍵選択部2103−2は、対応するベース鍵である鍵KM(1,0,2,0)を、変換MKBから読み取る。鍵選択部2103−2は、復号鍵Kdによって鍵KM(1,0,2,0)を復号して、認証鍵KAを得る(KA=D(Kd,KM(1,0,2,0)))。
一方、記憶装置100−2では、受信部1103がアクセス装置200−2の送信部2104−2から送信されたデバイス番号mを受信する。第1の実施形態とは異なり、本実施形態では、デバイス番号mは必ずしもデバイス鍵と数学的な関係を持たない。
すなわち、デバイス番号と変換デバイス鍵(の経路)とは図7のようなデバイス番号テーブルによって関連付けられている。デバイス番号テーブルでは、1つのデバイス番号に対して、ただ1つの変換デバイス鍵が対応している。一方、1つの変換デバイス鍵に対して複数のデバイス番号が対応するように構成してもよい。
受信部1103は、受信したデバイス番号mを取得部1102−2に送る。取得部1102−2は、図7のようなデバイス番号テーブルを参照し、デバイス番号mに対応する経路を見出す。例えば、m=1000であったとする。取得部1102−2は、デバイス番号テーブルを参照して、対応する変換デバイス鍵(の経路)(1,0,2,0,1)を得る。
次に、取得部1102−2は、復号鍵Kdを見出す。そのために、取得部1102−2は、取得した変換デバイス鍵の経路の随伴経路集合I_Dを作成する。以下の(28)式は、作成される随伴経路集合I_Dの一例を示す。
I_D={(1)、(1,0)、(1,0,2)、(1,0,2,0)、(1,0,2,0,1)}・・・(28)
取得部1102−2は、一般領域1111から変換MKBのMKBインデックス(I_MKB)を読み取り、アクセス装置200−2が生成する復号鍵Kdの鍵インデックスを算出する。この処理は、アクセス装置200−2で行われる処理と同様である。すなわち、取得部1102−2は、以下に示すような関数key_index(I_D,I_MKB)により、鍵インデックスを算出する。
key_index(I_D,I_MKB){
int i,j;
for(j=0;j<5;j++)
for(i=0;i<11;i++)
if(I_D[j]==I_MKB[i])
return j;
return −1;
}
I_Dは(22)式の通りであり、I_MKBは(20)式の通りであるとする。この場合、key_index(I_D,I_MKB)は3を返す。従って、取得部1102−2は、I_D[3]=(1,0,2,0)を選択する。取得部1102−2はさらに、一般領域1111から、復号鍵Kdの鍵インデックス(1,0,2,0)に対応するベース鍵である鍵KM(1,0,2,0)=E(PF(1,0,2,0),KM3)を読み取る。そして、取得部1102−2は、復号鍵Kdの鍵インデックス(1,0,2,0)、鍵KM(1,0,2,0)、および、デバイス番号mを鍵生成部1105−2に送る。
鍵生成部1105−2は、デバイス鍵記憶部1101から生成行列Mを読み出して、鍵インデックスi(m)に対応する認証鍵KAを生成する。例えば、鍵生成部1105−2は、以下の手続きによって認証鍵KAを得る。
i)鍵インデックスi(m)が定める経路に関する経路関数値PF(1,0,2,0)=k(0,1)(+)k(1,0)(+)k(2,2)(+)k(3,0)を算出する。
ii)復号鍵Kd=G(m,PF(1,0,2,0))=G(100,PF(1,0,2,0))を算出する。
iii)復号鍵Kdによって鍵KM(1,0,2,0)を復号して認証鍵KAを得る(KA=D(Kd,KM(1,0,2,0)))。
鍵生成部1105−2は、算出した認証鍵KAを鍵暗号化部1107に送る。鍵暗号化部1107は、乱数生成部1106に乱数発生要求を出し、乱数生成部1106が発生した乱数Rを受け取る。鍵暗号化部1107は、乱数Rを認証鍵KAで暗号化し、その結果である暗号化乱数R’=E(KA,R)をアクセス装置200−2に送る。一方、乱数生成部1106は、乱数Rをデータ復号部1112にも送る。データ復号部1112は、取得した乱数Rを保持する。
アクセス装置200−2は、取得した暗号化乱数R’を鍵復号部2106に入力する。鍵復号部2106は、鍵選択部2103−2から認証鍵KAを受け取り、当該認証鍵KAを用いて暗号化乱数R’を復号する。その結果平文の乱数Rを得る(R=D(KA,R’))。鍵復号部2106は、乱数Rをデータ暗号化部2109に送る。秘匿領域1110に書き込むデータDを受け取ると、データ暗号化部2109は、乱数Rを用いてデータDを暗号化し、暗号化データD’を得る(D’=E(R,D))。データ暗号化部2109は、暗号化データD’を記憶装置100−2に送る。
記憶装置100−2は、取得した暗号化データD’をデータ復号部1112に入力する。データ復号部1112は、先に取得して保持している乱数Rを用いて、暗号化データD’を復号し平文データDを得る(D=D(R,D’))。データ復号部1112はデータDを秘匿領域1110に記録する。
このように、第2の実施形態では、鍵インデックスを記憶装置から受信する代わりに、アクセス装置で算出して処理を行うことができる。
(第3の実施形態)
第1の実施形態では、MKB方式として特許文献1と同様の方式を用いる例を挙げたが、これに代えて、非特許文献1に開示されているMKB方式を用いてもよい。第3の実施形態では、非特許文献1に開示されているMKB方式の1つである、SD(Subset Difference)方式を用いる例を説明する。なお、第3の実施形態では、第1の実施形態における変換MKBとして、以下に説明するSD方式におけるMKBを用いる。
最初に、SD方式について図10〜図21を用いて説明する。
まず、デバイス番号をリーフに割り当てた木構造と、デバイスへ与えられる秘密鍵(デバイス鍵)について説明する。ここで、暗号化には共通鍵暗号方式、公開鍵暗号方式のいずれを用いてもよいが、説明を簡単にするため、以下、暗号化に共通鍵暗号方式を用いる場合を考える。この場合、あるuノードおよびvノードに対応する暗号化鍵と復号鍵は同一である。SD方式で、各デバイスは固有のデバイス番号を持ち、各デバイス番号は、図10のように木構造上の任意の1つのリーフに対応する。図10は、デバイス番号をリーフに割り当てた木構造を模式的に示す図である。
図10で、各デバイス番号は木構造の各リーフにそれぞれ割り当てられる。木構造中の最上位ノードをルートと呼ぶ。この木構造のリーフノードの高さ(Height)を「0」、ルートノードの高さ(Height)を「31」とすると、リーフの数、すなわち、デバイスの数は全部で231個となる。デバイス鍵は、木構造中の2つのノードに対して1つ割り当てられる。以下、2つのノードをuノードおよびvノードと表記したとき、特に断りのない限り、uノードはより上位に位置するノードであるとする。ある2つのノードであるuノードおよびvノードに対して割り当てられるデバイス鍵をkuvと表記する。また、uノードを祖先に持ち、かつvノードを祖先に持たないリーフの集合をSuvと表記する。このとき、デバイス番号dに割り当てられたリーフがSuvに属している場合、デバイス鍵としてkuvを与える(または後述のように導出可能とする)。後述のように、デバイスは、デバイス鍵を用いて暗号文を復号するための復号鍵を導出する。
図11は、図10に示した木構造をより具体的に示す図である。図11は、ルートノード「15」の高さ(Height)が「3」である場合の木構造を示す図である。この場合、リーフの数、すなわち、デバイスの数は全部で23=8個となる。uノードを図11のノード「13」、vノードを図11のノード「10」とする。この場合、uノードを祖先に持ち、かつvノードを祖先に持たないリーフの集合であるSuv=S(13,10)は、{ノード「1」、ノード「2」}={1,2}となる。従って、S(13,10)に属するリーフ(デバイス)には、kuv=k(13,10)が割り当てられる。
あり得るすべてのuノードおよびvノードの組み合わせに対してデバイス鍵kuvを生成すれば、すべてのデバイスに与えるデバイス鍵が生成されることになる。ここで、あり得るすべてのuノードおよびvノードの組み合わせに対してデバイス鍵kuvを独立に生成する場合、各デバイスが保持するデバイス鍵数が非常に大きくなる。このため、図12に示した要領でデバイス鍵を与える。
図12は、ノード「15」をルートとする図11と同様の木構造の例を示す図である。すべてのデバイス鍵を独立に生成する場合、リーフ「1」に相当するデバイスに与えられるデバイス鍵は、k(15,14)、k(15,11)、k(15,12)、k(15,5)、k(15,6)、k(15,7)、k(15,8)、k(15,10)、k(15,3)、k(15,4)、k(15,2)、k(13,10)、k(13,3)、k(13,4)、k(13,2)、k(9,2)となる。これに対し、以下の(29)式で定義される一方向性関数Gを導入し、デバイス鍵の個数を削減する。
G:{0,1}x→{0,1}3x・・・(29)
例えば、以下の(30)式のように、デバイス鍵k(15,14)を用いてデバイス鍵k(15,11)、k(15,12)を導出可能にする。
G(k(15,14))=k(15,11)||Kd(15,14)||k(15,12)・・・(30)
ここで、||はデータの連結を表し、Kd(15,14)は、uノードが「15」、vノードが「14」を表すインデックス情報が付加されている暗号文を復号するための復号鍵である。また、関数Gの構成方法は、例えば、出力長xのハッシュ関数Hを用いて以下の(31)式のように構成する方法がある。
G(k(15,14))
=H(k(15,14)||s0)
||H(k(15,14)||s1)
||H(k(15,14)||s2)
=k(15,11)||Kd(15,14)||k(15,12)
・・・(31)
ここで、s0、s1、s2は定数である。そして、上記例の場合、s0は、デバイス鍵k(15,14)から、uノードがノード「15」であり、vノードがノード「14」の左の子ノード「11」とするデバイス鍵k(15,11)を求めるための値である。s1は、デバイス鍵k(15,14)から、uノードがノード「15」、vノードがノード「14」を表すインデックス情報が付加されている暗号文を復号するための復号鍵Kd(15,14)を求めるための値である。s2は、デバイス鍵k(15,14)から、uノードがノード「15」であり、vノードがノード「14」の右の子ノード「12」とするデバイス鍵k(15,12)を求めるための値である。また、関数Gとして非特許文献2で開示されているAES−G3関数を用いてもよい。
このような一方向性関数Gを導入すれば、リーフ「1」に相当するデバイスに与えられるデバイス鍵として、k(15,14)、k(15,10)、k(15,2)、k(13,10)、k(13,2)、k(9,2)の6つを与えておけば、それ以外のデバイス鍵は一方向性関数Gを用いることにより導出可能である。例えば、デバイス鍵k(15,14)に、上記一方向性関数Gを適用することで、デバイス鍵k(15,11)、k(15,12)が得られる。また、k(15,11)に上記一方向性関数Gを適用することでk(15,5)、k(15,6)が得られる。また、k(15,12)に上記一方向性関数Gを適用することでk(15,7)、k(15,8)が得られる。同様にして、k(13,10)からはk(13,3)、k(13,4)が得られる。なお、上述のデバイス鍵に加え、すべてのデバイスに共通のデバイス鍵(root key)を与えてもよい。
図13は、暗号化処理動作を説明するためのフローチャートである。暗号化を行うデバイス(以下、暗号化デバイスという)は、無効デバイスのデバイス番号を(例えば信頼できる第三者から)受け取り、また、木構造の規模に関する情報を受け取る(ステップS1)。暗号化デバイスは、非特許文献1に記載された手法を用いて、暗号文の復号が可能な有効デバイスのデバイス番号が示すリーフの集合をSuvの和集合として表したときの各Suvにおけるuノードとvノードの組み合わせを求める(ステップS2)。
例えば、図14に示すように、リーフ「1」〜「8」がデバイス「1」〜「8」にそれぞれ対応し、デバイス「2」「5」「6」が無効デバイスであるとする。この場合、無効デバイスを除く有効デバイス「1」「3」「4」「7」「8」に対応するリーフの集合{1,3,4,7,8}は、ノード「13」を祖先に持ちかつノード「2」を祖先に持たないリーフの集合S(13,2)={1,3、4}と、ノード「14」を祖先に持ちかつノード「11」を祖先に持たないリーフの集合S(14,11)={7,8}の和集合S(13,2)+S(14、11)、すなわち、
{1,3,4,7,8}=S(13,2)+S(14、11)
と表すことができる。
このとき、S(13,2)のuノードおよびvノードの組み合わせに対応するデバイス鍵k(13,2)は、有効デバイス「1」「3」「4」は与えられている(または導出可能である)が、無効デバイス「2」には与えられていない(かつ導出不可能である)。なお、リーフ「5」〜「8」にも、もともとデバイス鍵k(13,2)は与えられていない(かつ導出不可能である)。また、S(14,11)のuノードおよびvノードの組み合わせに対応するデバイス鍵k(14,11)は、リーフ「7」「8」には与えられているが、リーフ「5」「6」には与えられていない(かつ導出不可能である)。なお、リーフ「1」〜「4」にも、もともとデバイス鍵k(14,11)は与えられていない(かつ導出不可能である)。
従って、図14の場合には、無効デバイスのリーフ「2」には与えられていないデバイス鍵k(13、2)から導出可能な復号鍵Kd(13,2)に対応する暗号化鍵(暗号化に共通鍵暗号方式を用いる場合、対応する暗号化鍵もKd(13,2)である)と、無効デバイスのリーフ「5」「6」には与えられていないデバイス鍵k(14、11)から導出可能な復号鍵Kd(14,11)に対応する暗号化鍵(暗号化に共通鍵暗号方式を用いる場合、対応する暗号化鍵もKd(14,11)である)とが取得される(ステップS3)。デバイス鍵から復号鍵(暗号化鍵)を導出する方法については後述する。そして、得られた暗号化鍵を用いて、入力された平文(第1の実施形態ではKMに相当する)をそれぞれ暗号化する(ステップS4)。
なお、図14に示すような木構造の場合、平文を暗号化鍵Kd(13,2)と暗号化鍵Kd(14,11)のそれぞれを用いて暗号化して、2つの暗号文を生成すると、この暗号文を受け取ったデバイス「1」〜「8」のうち、有効デバイス「1」「3」「4」「7」「8」のみが、当該暗号文を復号することができる。
次に、暗号化デバイスは、生成された暗号文を復号するための各復号鍵に対応するuノードおよびvノードの組み合わせを表すインデックス情報を生成する(ステップS5)。そして、それぞれの暗号文に、当該暗号文を復号するための復号鍵に対応するuノードおよびvノードの組み合わせを表すインデックス情報を付加し、その結果得られるデータを暗号文データとして出力する(ステップS6)。本実施形態では、特に断りのない限り、暗号文とは平文を暗号化したものであり、暗号文データは、暗号文と当該暗号文に対応するインデックス情報とを含むものである。
図15は、暗号文データのデータ構造の一例を示す図である。図15に示すように、暗号文データは、ステップS3で得られた暗号化鍵を用いて生成された暗号文と、当該暗号文を復号するための復号鍵に対応するuノードおよびvノードの組み合わせを表すインデックス情報(暗号文インテックス情報)とが含まれている。例えば、暗号化鍵Kd(13、2)を用いて生成された暗号文[1]には、「13、2」というインデックス情報が付加されている。また、暗号化鍵Kd(14、11)を用いて生成された暗号文[2]には、「14、11」というインデックス情報が付加されている。
復号を行うデバイス(以下、復号デバイスという)は、図16に示すように、当該復号デバイスに与えられたデバイス鍵と当該デバイス鍵に対応するuノードおよびvノードの組み合わせを表すインデックス情報(鍵インデックス情報)とをそれぞれ保持している。また、復号デバイスは当該デバイスのデバイス番号を保持している。
図17は、暗号文(第1の実施形態ではKMをデバイス鍵で暗号化したデータに相当する)の復号処理の概略を示したフローチャートである。始めに、復号デバイスは、取得された暗号文データの中から暗号文のインデックス情報を取得する(ステップS21)。次に、取得された暗号文のインデックス情報に対応する暗号文を、当該復号デバイスが復号可能であるか否かを判定し、当該復号デバイスが復号可能な暗号文を探索する(ステップS22)。その後、復号デバイスは、自身が保持するデバイス鍵の中から、復号可能と判定された暗号文を復号するための復号鍵を導出可能なデバイス鍵を選択する(ステップS23)。そして、復号デバイスは、選択されたデバイス鍵を用いて、復号可能と判定された暗号文を復号するための復号鍵を導出し(ステップS24)、導出された復号鍵を用いて、復号可能と判定された暗号文を復号する(ステップS25)。
図18は、図17のステップS22の暗号文判定処理を説明するためのフローチャートである。始めに、復号デバイスは、当該復号デバイスのデバイス番号dを取得し(ステップS31)、変数iを「1」に設定する(ステップS32)。次に、復号デバイスは、取得した暗号文データの中から、i番目の暗号文データに含まれる暗号文のインデックス情報[i]を取得し(ステップS33)、当該インデックス情報[i]が示すuノードおよびvノードを抽出する。そして、復号デバイスは、デバイス番号dが示すリーフが、予め与えられた木構造でuノードを祖先に持ちかつvノードは祖先に持たないリーフであるか否かを判定する(ステップS34)。当該復号デバイスのデバイス番号dが示すリーフが、予め与えられた木構造でuノードを祖先に持ちかつvノードは祖先に持たないリーフである場合(ステップS34:Yes)、復号デバイスは、当該インデックス情報[i]に対応する暗号文[i]は復号可能であると判定し(ステップS35)、終了する。デバイス番号dが示すリーフが、予め与えられた木構造でuノードを祖先に持ちかつvノードは祖先に持たないリーフではない場合(ステップS34:No)、ステップS36へ進む。
ステップS36では、復号デバイスは、取得した暗号文データの中のすべての暗号文のインデックス情報に対し、ステップS33およびステップS34での検査が行われたか否かを判定する(ステップS36)。未検査の暗号文のインデックス情報があれば(ステップS36:No)、復号デバイスは、iを「1」だけインクリメント(ステップS37)し、ステップS33へ戻る。すべての暗号文のインデックス情報について検査した場合(ステップS36:Yes)、復号デバイスは、当該復号デバイスは無効デバイスであると判定し(ステップS38)、必要に応じてその旨を通知して、終了する。
ここで、ステップS34における具体的な処理を説明する。木構造の中のノードは以下の要領で符号化されている。図19(a)に示すように、木構造の中で、ある親ノードから左の子ノードへ下がる経路に「0」を、右の子ノードへ下がる経路に「1」を割り当て、ルートから対象のノード(リーフを含む)までの経路を上記のように「0」「1」で表した後、その最後に1つの「1」と必要に応じた数の「0」とを付加する。すなわち、「10・・・0」を付加する。また、各ノード(リーフを含む)を示す符号のビット長Lは、当該システムへ適用する木構造の高さに応じて予め定められている。
各ノード(リーフを含む)を表す符号のビット長の規定値Lは、例えば、図19(b)に示すように、木構造の高さが3である場合には4ビットであり、図10に示したように、木構造の高さが31である場合には32ビットである。
そこで、ルートから対象のノード(リーフを含む)までの経路を上記のように「0」「1」で表した後、その最後に「1」を付加し、さらに、ビット長を上記規定値Lに揃えるために、(ビット数が規定値L未満の場合には)パディングビット「0」を付加して、対象のノード(リーフを含む)の符号が得られる。
例えば、図19(b)に示すようなルートが「15」であるような木構造では、ノードの符号のビット長は4ビットであるから、図19(c)に示すように、リーフ「1」は「0001」、リーフ「3」は「0101」、ルート「15」は「1000」という符号で表すことができる。各符号の最下位ビットからみて、最初に出現する「1」までは、ビット長をLに揃えるための冗長ビットともいえる。例えば、リーフ「3」やリーフ「1」の符号では、最後の1ビットの「1」が冗長ビットで、ルート「15」の符号では、「1000」が冗長ビットである。なお、本実施形態では、最下位ビットとは符号の一番右のビットを意味し、最上位ビットとは符号の一番左のビットを意味する。
図19(b)に示す木構造上のリーフ「1」に対応するデバイスは、デバイス番号dとして「0001」が格納されている。また、暗号文のインデックス情報に含まれるuノードおよびvノードも、上記のような符号で表されている。
図18のステップS33で取得した暗号文のインデックス情報[i]に含まれるuノード(例えば図19(b)のノード「15」)、および、vノード(例えば図19(b)のリーフ「3」)の符号を、図20に示すように、それぞれU、Vとする。すなわち、U=「1000」、V=「0101」である。
Vの冗長ビットのビット長(パディング長)をMv、Uの冗長ビットのビット長(パディング長)をMuとする。この場合、Mv=1、Mu=4である。
当該デバイスのデバイス番号dが示すリーフが木構造でuノードを祖先に持つとは、以下の(32)式が成立することを意味する。
(d(+)U)>>Mu==0 ・・・(32)
ここで、(+)はビットごとの排他的論理和、>>は右シフト、==は等価を表す。例えば、図20に示すような長さLのdとUとの排他的論理和をとった後の各ビットを右にMuビット(ここでは4ビット)ずらして、空いた部分に「0」を詰めた結果「0000」を(2進数表現から10進数表現へ)数値化したものは「0」である。このため、デバイス番号dが示すリーフは、uノードを祖先に持つといえる。
また、vノードは祖先に持たないとは、以下の(33)式が成立することを意味する。
(d(+)V)>>Mv!=0 ・・・(33)
ここで、!=は非等価を表す。例えば、図20に示すような長さLのdとVとの排他的論理和をとった後の各ビットを右にMvビット(ここでは1ビット)ずらして、空いた部分に「0」を詰めた結果「0010」を数値化したものは「0」でない。このため、デバイス番号dが示すリーフは、vノードを祖先に持たないといえる。
図18のステップS34では、各暗号文[i]について、当該暗号文のインデックス情報[i]に含まれているuノードとvノードを表す符号に対し、上記(32)式と(33)式を適用して、当該暗号文[i]がデバイス番号dを持つデバイスで復号可能か否かを判定する。
図17のステップS23のデバイス鍵選択処理を説明する。復号デバイスは、当該復号デバイスが保持するデバイス鍵のインデックス情報と暗号文のインデックス情報とを用いて、以下に述べる判定を行う。暗号文のインデックス情報[i]に含まれるuノードを示す符号化データ(U)の冗長ビットのビット長(パディング長)をMuとする。また、暗号文のインデックス情報[i]に含まれるvノードを示す符号化データ(V)の冗長ビットのビット長(パディング長)をMvとする。また、当該復号デバイスが保持するデバイス鍵のインデックス情報[j]に含まれるuノードを示す符号化データ(U’とする)の冗長ビットのビット長(パディング長)をMu’とする。さらに、復号デバイス内に格納されたデバイス鍵のインデックス情報[j]に含まれるvノードを示す符号化データ(V’とする)の冗長ビットのビット長(パディング長)をMv’とする。復号デバイスは、ステップS34で、以下の2つの式((34)式、(35)式)を適用して、当該暗号文[i]がデバイス番号dを持つデバイスで復号可能か否かを判定する。
Mu==Mu’ ・・・(34)
(V&Mv’)==(V’&Mv’) ・・・(35)
ここで、&はビットごとの論理積を表す。図12に例示したように、デバイス番号dを持つデバイスに与えられるデバイス鍵に対応するuノードおよびvノードのすべての組について、当該デバイスのデバイス番号dが示すリーフがuノードを祖先に持ちかつvノードは祖先に持たないことが成立する。従って、上記(34)式および(35)式が成立するならば、暗号文[i]に対応するuノードとデバイス鍵[j]に対応するuノードとは同一ノードであり、かつ暗号文[i]に対応するvノードはデバイス鍵[j]に対応するvノードの祖先(または同一ノード)である。このため、暗号文[i]に対応するuノードおよびvノードについて、当該デバイスのデバイス番号dが示すリーフがuノードを祖先に持ちかつvノードは祖先に持たないことが成立する。このようなデバイス鍵[j]を用いることにより、以下に述べる復号鍵の導出が可能となる。
図19に示した木構造で、デバイス番号dがリーフ「1」に対応する「0001」、Vがリーフ「3」に対応する「0101」、Uがルートノード「15」に対応する「1000」、である場合を例にとり説明する。上述したように、リーフ「1」に相当するデバイスに与えられるデバイス鍵は、k(15,14)、k(15,10)、k(15,2)、k(13,10)、k(13,2)、k(9,2)の6つである。このため、図17のステップS23で、上記(34)式および(35)式を満たすk(15,10)が選択される。
図17のステップS24の復号鍵導出処理を説明する。ステップS22で選択された暗号文とステップS23で選択されたデバイス鍵(Kとする)について、暗号文に対応するuノードとデバイス鍵Kに対応するuノードとは同一ノードであり、かつ暗号文に対応するvノードはデバイス鍵Kに対応するvノードの祖先(または同一ノード)であることがわかっている。デバイス鍵Kに対応するvノードが暗号文に対応するvノードへ至る経路について考える。図19(a)に示したように、経路上で、左の子ノードを経る場合は「0」、右の子ノードを経る場合は「1」と表現し、デバイス鍵Kに対応するvノードが暗号文に対応するvノードへ至る経路を符号化する。例えば、ノード「14」からノード「6」に至る経路は「01」と符号化される。デバイス鍵Kに対応するvノードが暗号文に対応するvノードへ至る経路が「b1 b2・・・bn」と符号化される場合、デバイスは、以下に説明する方法によりデバイス鍵Kから復号鍵を導出する。
図21は、デバイス鍵Kから復号鍵を導出する処理の一例を示すフローチャートである。始めに、iが初期化(i=0)される(ステップS301)。次に、iが1ずつインクリメント(i=i+1)され(ステップS302)、以下の(36)式を算出し、算出結果をKとする処理が繰り返される(ステップS303)。
g’(K,bi)=H(K||s0)(bi=0の場合)
=H(K||s2)(bi=1の場合)・・・(36)
iがnと一致するか否かが判定される(ステップS304)。i=nでない場合(ステップS304:No)、i=nとなるまで(36)式によるKの算出がn回繰り返される。すなわち、b1 b2・・・bnについて関数g’の演算が行われる。i=nとなった場合(ステップS304:Yes)、H(K||s1)が算出され、その算出結果が復号鍵とされる(ステップS305)。
上述した通り、復号鍵の導出に用いる関数として、この他にAES−G3関数を始めとする種々の関数が適用可能である。
デバイス番号dがリーフ「1」に対応する「0001」、Vがリーフ「3」に対応する「0101」であり、Uがルートノード「15」に対応する「1000」、である場合を例にとり説明する。上述したように、図17のステップS23で、k(15,10)が選択される。ノード「10」からノード「3」に至る経路は「0」と符号化される。従って、デバイスは、g’(k(15,10),0)を算出し(その算出結果をKとする)、Kを用いて復号鍵H(K||s1)を導出する。
暗号化に共通鍵暗号方式を用いる場合、上述の方法と同じ方法により、デバイス鍵から暗号化鍵を導出できる。
最後に、デバイスは、ステップS24で導出された復号鍵を用いて、ステップS22で選択された暗号文を復号する(ステップS25)。
次に、第1の実施形態のMKB方式の代わりに、これまで説明したSD方式をMKB方式として用いた第3の実施形態について説明する。図22は、第3の実施形態にかかる記憶装置100−3の構成の一例を示すブロック図である。図22に示すように、記憶装置100−3は、デバイス鍵記憶部1101−3と、取得部1102と、受信部1103と、メディア鍵記憶部1104と、鍵生成部1105−3と、乱数生成部1106と、鍵暗号化部1107と、データ暗号化部1108と、データ記憶部1109と、を備えている。
第3の実施形態では、デバイス鍵記憶部1101−3および鍵生成部1105−3の機能が第1の実施形態と異なっている。その他の構成および機能は、第1の実施形態にかかる記憶装置100のブロック図である図3と同様であるので、同一符号を付し、ここでの説明は省略する。
デバイス鍵記憶部1101−3は、図12等で説明したような、SD方式の木構造に含まれるノードの組み合わせに対応づけられるデバイス鍵を記憶する。また、デバイス鍵記憶部1101−3は、全デバイス(アクセス装置200−3)のデバイス鍵を保持している。なお、デバイス鍵記憶部1101−3は、全デバイスのデバイス鍵を保持する代わりに、全デバイスのデバイス鍵を算出可能となる情報のみを保持しておき、必要に応じて所望のデバイス鍵を算出する構成としてもよい。
鍵生成部1105−3は、デバイス鍵記憶部1101−3に記憶されたSD方式で用いられるデバイス鍵、復号鍵の鍵インデックスi(m)(以下、復号鍵インデックスという)、メディア鍵インデックス、および、デバイス番号mから、アクセス装置200−3との間で共有する認証鍵KAを生成する。メディア鍵インデックスは、メディア鍵KMを暗号化したメディア鍵KM’のインデックスを表す。
鍵生成部1105−3は、第1算出部1105a−3と、第2算出部1105b−3とを備えている。
第1算出部1105a−3は、図17と同様の手順により、メディア鍵インデックス(図17では暗号文のインデックス情報に相当)、復号鍵インデックス(図17ではデバイス鍵のインデックス情報に相当)、および、デバイス鍵を用いて、復号鍵Kdを算出する。本実施形態では、第1算出部1105a−3は、デバイス番号mで変換したデバイス鍵を用いて復号鍵Kdを算出する。
第2算出部1105b−3は、復号鍵Kdによりメディア鍵を復号することにより認証鍵KAを算出する。本実施形態では、第2算出部1105b−3は、メディア鍵KMを暗号化鍵で暗号化したメディア鍵KM’を復号鍵Kdで復号することにより認証鍵KAを算出する。第2算出部1105b−3は、デバイス鍵ki、デバイス鍵kiのインデックス情報(復号鍵インデックス)、およびメディア鍵KM’のインデックス情報(メディア鍵インデックス)を用いて、メディア鍵KMを暗号化するための暗号化鍵を算出する。この算出方法は、図17のステップS24の復号鍵導出方法と同様である。
図23は、第3の実施形態にかかるアクセス装置200−3の構成の一例を示すブロック図である。図23に示すように、アクセス装置200−3は、読取部2101と、変換デバイス鍵記憶部2102−3と、鍵選択部2103−3と、送信部2104と、番号記憶部2105と、鍵復号部2106と、データ復号部2107と、データ利用部2108と、を備えている。
第3の実施形態では、変換デバイス鍵記憶部2102−3および鍵選択部2103−3の機能が第1の実施形態と異なっている。その他の構成および機能は、第1の実施形態にかかるアクセス装置200のブロック図である図4と同様であるので、同一符号を付し、ここでの説明は省略する。
変換デバイス鍵記憶部2102−3は、従来のSD方式でデバイス番号がmであるアクセス装置200−3に割り当てられるデバイス鍵を変換した変換デバイス鍵を記憶する。従来のSD方式でデバイス番号がmであるアクセス装置200−3に割り当てられるデバイス鍵をk1,・・・,knとする。このデバイス鍵k1,・・・,knは、実際にはアクセス装置200−3には与えられない。信頼できる第三者(または記憶装置100−3)は、以下の(37)式により変換デバイス鍵(k’1,・・・,k’n)を算出し、デバイス番号がmであるアクセス装置200−3に与える。
k’i=I(m,ki) (37)
ここで、Iは一方向性関数である。アクセス装置200−3の変換デバイス鍵記憶部2102−3は、変換デバイス鍵と、デバイス鍵k1,・・・,knに対応するインデックス情報(復号鍵インデックス)とを保持する。変換デバイス鍵について、特許文献2で開示されている方法で定めた順番に変換デバイス鍵を並べて変換デバイス鍵記憶部2102−3に格納してもよい。
鍵選択部2103−3は、図17のステップS22と同様の方法を用いて、複数の変換デバイス鍵の中から、変換MKBに応じた変換デバイス鍵を選択する。そして、鍵選択部2103−3は、選択した変換デバイス鍵から認証鍵KAを算出する。
次に、このように構成された第3の実施形態にかかる記憶装置100−3およびアクセス装置200−3によるアクセス処理について図24を用いて説明する。図24は、第3の実施形態におけるアクセス処理の全体の流れを示すシーケンス図である。
ステップS501〜ステップS502までは、図5のステップS101〜ステップS102までと同様であるため説明を省略する。
アクセス装置200−3の鍵選択部2103−3は、図17のステップS22と同様の方法を用いて、変換MKBに含まれる(当該アクセス装置200−3が用いるべき)メディア鍵KM’のインデックス情報(メディア鍵インデックス)を取得する。また、鍵選択部2103−3は、図17のステップS23と同様の方法を用いて、復号鍵インデックスを計算する(ステップS503)。復号鍵インデックスを計算する方法として、特許文献2で開示されている方法を用いてもよい。
鍵選択部2103−3は、図17のステップS24と同様の方法を用いて、認証鍵KAを導出するための復号鍵Kdを算出する(ステップS504)。この算出で、図17のステップS24におけるデバイス鍵に代えて、上記復号鍵インデックスに対応する変換デバイス鍵を用いる。
アクセス装置200−3は、当該アクセス装置200−3のデバイス番号m、復号鍵インデックス、および、メディア鍵インデックスを記憶装置100−3に送信する(ステップS505)。
記憶装置100−3では、鍵生成部1105−3の第1算出部1105a−3が、受信した復号鍵インデックスに対応するデバイス鍵kiをデバイス鍵記憶部1101−3より取得する。次に、第1算出部1105a−3は、受信したデバイス番号mを用いて、上記(37)式によりデバイス鍵kiを変換した変換デバイス鍵k’iを算出する。第1算出部1105a−3は、図17のステップS24と同様の方法を用いて、認証鍵KAを導出するための復号鍵Kdを算出する(ステップS506)。この算出処理で、第1算出部1105a−3は、図17のステップS24におけるデバイス鍵に代えて、変換デバイス鍵k’iを用いる。
第2算出部1105b−3は、デバイス鍵ki、復号鍵インデックス、およびメディア鍵インデックスを用いて、メディア鍵KMを暗号化するための暗号化鍵を算出する(ステップS507)。この算出方法は、図17のステップS24の復号鍵導出方法と同様である。第2算出部1105b−3は、算出された暗号化鍵を用いてメディア鍵KMを暗号化し、メディア鍵KM’を得る(ステップS508)。
メディア鍵KM’は、上述した方法で算出してもよいし、メディア鍵KM’の算出処理を行わずに、変換MKBに含まれる暗号文の中で、デバイス番号mに対応する暗号文をメディア鍵KM’としてもよい。
ステップS509〜ステップS517までは、図5のステップS108〜ステップS116までと同様であるため説明を省略する。
(変形例1)
本実施形態では、アクセス装置200−3が当該アクセス装置200−3のデバイス番号、復号鍵インデックス、およびメディア鍵インデックスを記憶装置100−3に送信する例を説明した。これに代えて、アクセス装置200−3が当該アクセス装置200−3のデバイス番号と復号鍵インデックスを記憶装置100−3に送信するように構成してもよい。この場合、記憶装置100−3は、図17のステップS22と同様の方法を用いて、一般領域1111に格納されている変換MKBに含まれる(アクセス装置200−3が用いるべき)KM’のインデックス情報(メディア鍵インデックス)を取得する。
(変形例2)
記憶装置100−3が認証鍵KAを算出した後に、アクセス装置200−3が認証鍵KAを保持しているか否かを記憶装置100−3が検証してもよい。図25は、本変形例におけるアクセス処理の全体の流れを示すシーケンス図である。図25は、ステップS612〜ステップS616の処理が追加された点が、図24と異なっている。
すなわち、記憶装置100−3は、認証鍵KAを算出した後に、乱数Sを生成し(ステップS612)、アクセス装置200−3へ乱数Sを送信する(ステップS613)。アクセス装置200−3は、受信した乱数Sと算出した認証鍵KAとを用いてT=H(KA||S)を算出し(ステップS614)、算出結果Tを記憶装置100−3に送信する(ステップS615)。記憶装置100−3は、自装置内で算出したH(KA||S)と、アクセス装置200−3から受信したTとが一致しているか否かを検証する(ステップS616)。一致している場合、記憶装置100−3は処理を続行する。一致していない場合、記憶装置100−3はその旨をアクセス装置200−3に通知し、処理を終了する。
(変形例3)
第1の実施形態から第2の実施形態に変形したのと同様に、第3の実施形態を変形させてもよい。すなわち、MKB方式としてSD方式を用い、さらに第3の実施形態とは異なり、記憶装置100−3がアクセス装置200−3のデバイス番号だけを受け取り、記憶装置100−3が当該デバイス番号に基づいて暗号鍵を算出してもよい。記憶装置100−3は、変換MKBに含まれる暗号文の中で、デバイス番号mに対応する暗号文をKM’としてアクセス装置200−3に送信してもよいし、第1の実施形態と同様に、変換MKB全体をアクセス装置200−3に送信してもよい。また、アクセス装置200−3は、記憶装置100−3以外の第三者から変換MKBを取得してもよい。アクセス装置200−3が変換MKBを取得する場合は、アクセス装置200−3が変換MKBと当該アクセス装置200−3のデバイス番号を用いて復号鍵インデックスを算出する。
(変形例4)
第3の実施形態では、MKB方式としてSD方式を用いる例を挙げたが、これに代えて、非特許文献1にて開示されているMKB方式の1つである、CS(Complete Subtree)方式を用いてもよい。
(第4の実施形態)
第4の実施形態では、サーバが記憶装置を認証する例を説明する。サーバが記憶装置を認証した上でデータを暗号化して送る。図26は、第4の実施形態のサーバ100−4の構成例を示すブロック図である。図27は、第4の実施形態の記憶装置200−4の構成例を示すブロック図である。第4の実施形態は、例えばサーバ100−4から記憶装置200−4にデータをダウンロードするソフトウェアを含むシステムの構成例を示している。
なお、図26および図27では、第1〜第3の実施形態で説明した構成部と同一の機能を備える構成部には同一の符号を付し、説明を省略する。第4の実施形態では、サーバ100−4のデータ記憶部1109−4が秘匿領域を含む必要がない点が、上述のデータ記憶部1109と異なっている。また、認証される側である記憶装置200−4(上述の各実施形態ではアクセス装置が認証される)が、秘匿領域を含むデータ記憶部2110を備えている。
記憶装置200−4の秘匿領域に格納するデータをサーバ100−4から読み取る際は、まず読取部2101が、サーバ100−4のデータ記憶部1109−4から変換MKBを読み取る。読取部2101は、鍵選択部2103に読み取った変換MKBのMKBインデックスを送る。鍵選択部2103は、変換デバイス鍵記憶部2102から変換デバイス鍵を読み取り、復号鍵の選択を行う。この選択方法は、第1の実施形態と同様である。鍵選択部2103は次に、読取部2101が読取った変換MKBから、復号鍵Kdの添字に対応するベース鍵である鍵KM’を読み取る。復号鍵Kdの添字が(1,0,2,0)である場合、鍵選択部2103は、対応する鍵KM’=E(PF(1,0,2,0),KM)を変換MKBから読み取る。鍵選択部2103は、復号鍵Kdによって鍵KM’を復号して、認証鍵KAを得る(KA=D(Kd,KM’))。
一方、サーバ100−4では、受信部1103が記憶装置200−4の番号記憶部2105から読取られたデバイス番号mを受信する。本実施形態では、第1の実施形態と同様に、デバイス番号の3進表現は当該デバイスに割り当てられた経路の表現になっている。取得部1102−2は、受信部1103からデバイス番号mを受け取り、対応するデバイス鍵(の経路)を得る。その後は、取得部1102−2は、第2の実施形態と同様にして、復号鍵のインデックスを求め、復号鍵のインデックスに対応するベース鍵の値をデータ記憶部1109−4の変換MKBの中から読み取る。取得部1102−2は、復号鍵のインデックス、ベース鍵の値、および、デバイス番号を鍵生成部1105−2に送る。
鍵生成部1105−2は、デバイス鍵記憶部1101から生成行列Mを読み出して、復号鍵インデックスに対応する鍵を生成する。鍵生成部1105−2は、第2の実施形態と同様の手続きによって認証鍵KAを得る。
鍵生成部1105−2は、算出した認証鍵KAを鍵暗号化部1107に送る。鍵暗号化部1107は、乱数生成部1106に乱数発生要求を出し、乱数生成部1106が発生した乱数Rを受け取る。鍵暗号化部1107は、乱数Rを認証鍵KAで暗号化し、その結果である暗号化乱数R’=E(KA,R)を記憶装置200−4に送る。一方、乱数生成部1106は、乱数Rをデータ暗号化部1108にも送る。データ暗号化部1108は、取得した乱数Rを保持する。
記憶装置200−4は、取得した暗号化乱数R’を鍵復号部2106に入力する。鍵復号部2106は、鍵選択部2103から認証鍵KAを受け取り、当該認証鍵KAを用いて暗号化乱数R’を復号する。その結果平文の乱数R=D(KA,R’)が得られる。鍵復号部2106は、乱数Rを保持する。記憶装置200−4は、サーバ100−4にデータDの読み出し要求を出す。サーバ100−4はデータ記憶部1109−4からデータDを読み出し、データ暗号化部1108に入力する。データ暗号化部1108は、保持している乱数Rを用いてデータDを暗号化し、暗号化データD’=E(R,D)を得る。データ暗号化部1108は、記憶装置200−4に暗号化データD’を送る。
記憶装置200−4は、受信した暗号化データD’をデータ復号部2107に入力する。データ復号部2107は、鍵復号部2106が保持する乱数Rを受け取り、当該乱数Rによって暗号化データD’をデータD=D(R,D’)に復号する。データ復号部2107は、得られたデータDをデータ記憶部2110の秘匿領域に記録する。
以上説明したとおり、第1から第4の実施形態によれば、不正にアクセスする装置(ソフトウェア)等が配布された場合であっても、不正に解析された装置を特定できるため、データの不正流出を回避可能となる。
上述の各実施形態にかかる装置(アクセス装置、サーバ、第4の実施形態の記憶装置)は、CPU(Central Processing Unit)などの制御装置と、ROM(Read Only Memory)やRAM(Random Access Memory)などの記憶装置と、ネットワークに接続して通信を行う通信I/Fと、HDD(Hard Disk Drive)、CD(Compact Disc)ドライブ装置などの外部記憶装置と、ディスプレイ装置などの表示装置と、キーボードやマウスなどの入力装置と、各部を接続するバスを備えており、通常のコンピュータを利用したハードウェア構成となっている。
各実施形態にかかる装置で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供される。
また、各実施形態にかかる装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第1または第2の実施形態にかかる記憶装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
また、各実施形態のプログラムを、ROM等に予め組み込んで提供するように構成してもよい。
各実施形態にかかる装置で実行されるプログラムは、上述した各部を含むモジュール構成とすることができ、実際のハードウェアとしてはCPU(プロセッサ)が上記記録媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。
なお、本実施形態は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。