"外部装置と接続される通信装置であって、複数のデバイス鍵それぞれを、前記通信装置を識別する第1識別情報で変換した複数の第1情報を記憶する鍵記憶部と、前記外部装置を識別する第2識別情報を取得する取得部と、メディアキーブロック処理により複数の前記第1情報から1の前記第1情報を選択する鍵選択部と、選択された前記第1情報を前記第2識別情報で変換した第2情報を用いて、前記外部装置と共有する共有鍵を算出する算出部と、を備えることを特徴とする通信装置。前記算出部は、選択された前記第1情報と前記第2識別情報とを一方向性関数に入力して得られる前記第2情報を用いて、前記共有鍵を暗号化した暗号鍵を復号することにより前記共有鍵を算出すること、を特徴とする請求項1に記載の通信装置。共有鍵を算出する鍵算出装置と、外部装置とに接続される通信装置であって、前記鍵算出装置は、複数のデバイス鍵のうち前記外部装置を識別する第1識別情報に対応するデバイス鍵を、前記通信装置を識別する第2識別情報で変換した共有鍵を算出する算出部を備え、前記第1識別情報と前記第2識別情報とを前記鍵算出装置に送信する送信部と、送信した前記第1識別情報と前記第2識別情報とに基づいて前記鍵算出装置が算出した前記共有鍵を受信する鍵受信部と、を備えることを特徴とする通信装置。前記鍵受信部は、暗号化された前記共有鍵を受信し、暗号化された前記共有鍵を復号する鍵復号部をさらに備えること、を特徴とする請求項3に記載の通信装置。第1通信装置との間で共有鍵を共有する第2通信装置に接続され、前記共有鍵を算出する鍵算出装置であって、複数のデバイス鍵を記憶する鍵記憶部と、前記第1通信装置を識別する第1識別情報と、前記第2通信装置を識別する第2識別情報とを前記第2通信装置から受信する受信部と、複数の前記デバイス鍵のうち前記第1識別情報に対応する前記デバイス鍵を、前記第2識別情報で変換した共有鍵を算出する算出部と、を備えることを特徴とする鍵算出装置。前記算出部は、複数の前記デバイス鍵のうち前記第1識別情報に対応する前記デバイス鍵と前記第2識別情報とを一方向性関数に入力して得られる情報を用いて、前記共有鍵を暗号化した暗号鍵を復号することにより前記共有鍵を算出すること、を特徴とする請求項5に記載の鍵算出装置。しかしながら、上述のスマートグリッドなどのように共有鍵を用いる場合、共有鍵の管理と各デバイスへのインストールは手間がかかるという問題があった。例えば、ネットワークにデバイスが追加されたり、ネットワークからデバイスが削除されたりするたびに、共有鍵のインストールまたはアンインストール作業が発生する可能性がある。実施形態の通信装置は、鍵記憶部と取得部と鍵選択部と算出部とを備える。鍵記憶部は、複数のデバイス鍵それぞれを、通信装置を識別する第1識別情報で変換した複数の第1情報を記憶する。取得部は、外部装置を識別する第2識別情報を取得する。鍵選択部は、メディアキーブロック処理により複数の第1情報から1の第1情報を選択する。算出部は、選択した第1情報を、第2識別情報で変換した第2情報を用いて共有鍵を算出する。以下に添付図面を参照して、この発明にかかる通信装置および鍵算出装置の好適な実施形態を詳細に説明する。まず、データを記憶する記憶装置と、当該記憶装置に記憶されたデータにアクセスするアクセス装置を例にとって、本実施形態で用いるMKBの技術について説明する。図1は、MKBを用いた認証鍵共有を実現する記憶装置10およびアクセス装置20の構成例を示すブロック図である。図1に示すように、記憶装置10は、MKB11と、メディア鍵KM12と、乱数発生部1と、演算部2と、データ記憶部3と、暗号化部4とを備えている。乱数発生部1は、乱数R13を発生する。演算部2は、予め定められた一方向性関数にKM12とR13とを入力し、アクセス装置20と共有する認証鍵であるKT14を算出する。データ記憶部3は、データを記憶する記憶部であり、秘匿領域を含む。暗号化部4は、KT14を用いてデータ記憶部3から読み出されたデータを暗号化する。アクセス装置20は、デバイス鍵KD31と、MKB処理部21と、演算部22と、復号部23と、データ利用部24とを備えている。MKB処理部21は、KD31を用いてMKB11を処理することによりメディア鍵KM32を導出する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のような生成行列を用意する。当該生成行列の各成分k0,0~k4,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式に示す鍵束を格納している。{PF2,PF2,0,PF2,0,2,PF2,0,2,2,PF2,0,2,2,1}1関数PFは、例えば、以下の2式のように定義されている。PFn=k0,n,PFn0,n1=Gk1,n1,PFn0,PFn0,n1,n2=Gk2,n2,PFn0,n1,PFn0,n1,n2,n3=Gk3,n3,PFn0,n1,n2,PFn0,n1,n2,n3,n4=Gk4,n4,PFn0,n1,n2,n32Gは一方向性関数を表す。このような鍵束が、デバイスxに割り当てられたデバイス鍵である。さて、16バイトのメディア鍵をKMとする。リボーク無効化する端末が存在しない場合、以下の3式に示すデータの集合M1をMKBとして配布する。M1={Ek0,0,KM,Ek0,1,KM,Ek0,2,KM}3Ek,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}4M2を以下の5式で表されるデータ集合として定める。M2={EPF0,KM,EPF1,KM,EPF2,1,KM,EPF2,2,KM,EPF2,0,0,KM,EPF2,0,1,KM,EPF2,0,2,0,KM,EPF2,0,2,1,KM,EPF2,0,2,2,0,KM,EPF2,0,2,2,2,KM}5デバイスxは、上述のように1式の鍵束{PF2,PF2,0,PF2,0,2,PF2,0,2,2,PF2,0,2,2,1}を格納している。しかし、デバイスxは、この鍵束の中のいずれの鍵によってM2のいずれの要素を復号しても正しくKMを得ることはできない。従って、デバイスxはリボークされている。しかも、デバイスx以外のデバイスは、M2の適当な要素を復号して正しくKMを得ることができる。実際、経路xと異なる経路yを考える。経路yの第1の要素が0または1であれば、デバイスy経路yが割り当てられているデバイスはPF0またはPF1を格納している。従って、M2の要素である、EPF0,KMまたはEPF1,KMを復号してKMが得られる。経路yの第1の要素が2で第2の要素が1または2であれば、yはPF2,1またはPF2,2を格納している。従って、M2の要素であるEPF2,1,KMまたはEPF2,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={EPF0,KM,EPF1,KM,EPF2,1,KM,EPF2,2,KM,EPF1,0,KM,EPF1,2,KM,EPF2,0,0,KM,EPF2,0,1,KM,EPF1,1,1,KM,EPF1,1,2,KM,EPF2,0,2,0,KM,EPF2,0,2,1,KM,EPF1,1,0,1,KM,EPF1,1,0,2,KM,EPF2,0,2,2,0,KM,EPF2,0,2,2,2,KM,EPF1,1,0,0,0,KM,EPF1,1,0,0,1,KM}7無効化対象のデバイス鍵が特別な組み合わせである場合は、MKBのサイズを節約して効率的に無効化することが可能である。例えば、2,0,,,という一群のデバイス鍵を無効化する場合を考える。ただし、には0、1または2の数値が入る。これら3^3=27個のデバイスを無効化するMKBは以下の8式で示すM4で与えられる。M4={EPF0,KM,EPF1,KM,EPF2,1,KM,EPF2,2,KM}8図1のような認証鍵共有の方法では、MKBから導出されるメディア鍵KMは同一である。従って、上述のようにアクセス装置が不正に解析されてKMが取得され、かつ、不正に解析されたアクセス装置を特定できない場合には、データの不正流出を防止することができない。そこで、本実施形態にかかる記憶装置は、MKBによるデバイスの無効化を可能としつつ、アクセス装置を識別する識別情報デバイス番号を用いてアクセス装置ごとに異なる認証鍵を生成する。これにより、不正にアクセスするアクセス装置ソフトウェア等が配布された場合であっても、不正に解析されたアクセス装置を特定できるため、データの不正流出を回避可能となる。図3は、本実施形態にかかる記憶装置100の構成の一例を示すブロック図である。図3に示すように、記憶装置100は、デバイス鍵記憶部1101と、取得部1102と、受信部1103と、ベース鍵記憶部1104と、鍵生成部1105と、乱数生成部1106と、鍵暗号化部1107と、データ暗号化部1108と、データ記憶部1109と、を備えている。デバイス鍵記憶部1101は、図2に示す生成行列Mのような行列形式で複数のデバイス鍵を格納する。取得部1102は、デバイス鍵記憶部1101に記憶されたデバイス鍵のうち、いずれかのデバイス鍵を特定するインデックス鍵インデックスimをアクセス装置200から取得受信する。受信部1103は、アクセス装置200の送信部2104後述から、アクセス装置200に割り当てられたデバイス番号mを受信する。ベース鍵記憶部1104は、ベース鍵KB詳細は後述を記憶する。鍵生成部1105は、生成行列M、鍵インデックスim、および、デバイス番号mから、アクセス装置200との間で共有する認証鍵以下、認証鍵KAというを生成する。鍵生成部1105は、第1算出部1105aと、第2算出部1105bとを備えている。第1算出部1105aは、鍵インデックスimで特定されるデバイス鍵から関数PFによる経路関数値後述を算出し、算出した値算出値をデバイス番号mで変換した復号鍵Kdを算出する。第2算出部1105bは、認証鍵KAを暗号化した鍵情報を復号鍵Kdにより復号することにより認証鍵KAを算出する。本実施形態では、第2算出部1105bは、ベース鍵KBを復号鍵Kdで復号することにより認証鍵KAを算出する。なお、認証鍵第1鍵を算出する方法は、復号鍵を用いた復号演算に限られるものではない。認証鍵に演算を施して得られる鍵情報に対して、当該演算に対応する演算を施すための鍵第2鍵を用いて認証鍵を算出する方法であれば、あらゆる方法を適用できる。乱数生成部1106は、乱数Rを生成する。鍵暗号化部1107は、乱数Rを認証鍵KAで暗号化する。データ記憶部1109は、アクセス装置200からアクセス可能なデータを記憶する。データ記憶部1109は、秘匿領域1110と、一般領域1111と、を含む。秘匿領域1110は、無効化されておらず、認証鍵KAを生成できるアクセス装置200のみがデータを読み出し可能なデータ領域である。一般領域1111は、認証鍵KAによる認証を行わずにデータを読み出し可能なデータ領域である。本実施形態では、一般領域1111は、図1で説明したようなMKBを変換したMKBTwistedMKB以下、変換MKBというを記憶する。変換MKBのデータ構造の詳細については後述する。データ暗号化部1108は、乱数Rを用いて秘匿領域1110に格納されている読み出し対象データデータDを暗号化し、暗号化データD’=ER,Dを算出する。図4は、本実施形態にかかるアクセス装置200の構成の一例を示すブロック図である。図4に示すように、アクセス装置200は、読取部2101と、変換デバイス鍵記憶部2102と、鍵選択部2103と、送信部2104と、番号記憶部2105と、鍵復号部2106と、データ復号部2107と、データ利用部2108と、を備えている。読取部2101は、記憶装置100の一般領域1111から変換MKBを読み取る。なお、記憶装置100から変換MKBをアクセス装置200に送信する代わりに、アクセス装置200が、記憶装置100以外の第三者から変換MKBを取得するように構成してもよい。変換デバイス鍵記憶部2102は、記憶装置100のデバイス鍵記憶部1101に記憶された複数のデバイス鍵を変換した複数の変換デバイス鍵TwistedDeviceKeyを記憶する。変換デバイス鍵のデータ構造の詳細については後述する。鍵選択部2103は、複数の変換デバイス鍵の中から、変換MKBに応じた変換デバイス鍵を選択し、選択した変換デバイス鍵から認証鍵KAを算出する。送信部2104は、選択された復号鍵Kdを特定する鍵インデックスimを記憶装置100に送信する。番号記憶部2105は、アクセス装置200のデバイス番号mを記憶する。鍵復号部2106は、鍵選択部2103により算出された認証鍵KAを用いて暗号化乱数R’から乱数Rを復号する。データ復号部2107は、乱数Rを用いて暗号化データD’からデータDを復号する。データ利用部2108は、データDを利用する処理部である。例えば、データ利用部2108は、データDをディスプレイなどに表示する処理を行う。次に、このように構成された本実施形態にかかる記憶装置100およびアクセス装置200によるアクセス処理について図5を用いて説明する。図5は、本実施形態におけるアクセス処理の全体の流れを示すシーケンス図である。まず、アクセス装置200の読取部2101が、記憶装置100に対して変換MKBの送信を要求するステップS101。記憶装置100は、要求に応じて一般領域1111から変換MKBを読み出し、アクセス装置200に送信するステップS102。アクセス装置200の鍵選択部2103は、変換デバイス鍵記憶部2102に記憶された複数の変換デバイス鍵から、変換MKBに対応する変換デバイス鍵を復号鍵Kdとして選択するステップS103。鍵選択部2103は、選択した復号鍵Kdを特定する情報である鍵インデックスimを算出するステップS104。送信部2104は、算出された鍵インデックスimと、番号記憶部2105に記憶されたデバイス番号mとを記憶装置100に送信するステップS105。記憶装置100の取得部1102は、アクセス装置200から送信された鍵インデックスimを受信する。鍵生成部1105の第1算出部1105aは、受信された鍵インデックスimで特定されるデバイス鍵から関数PFによる経路関数値を算出する。そして、第1算出部1105aは、経路関数値をデバイス番号mで変換した復号鍵Kdを算出するステップS106。また、鍵生成部1105は、ベース鍵記憶部1104からベース鍵KBを取得するステップS107。第2算出部1105bは、復号鍵Kdによりベース鍵KBを復号することにより認証鍵KAを算出するステップS108。一方、アクセス装置200では、鍵選択部2103が、ベース鍵KBを、読取部2101により読み取られた変換MKBから取得するステップS109。鍵選択部2103は、取得したベース鍵KBを、ステップ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式に示す鍵束を格納しているものとする。{Gm,PF2,Gm,PF2,0,Gm,PF2,0,2,Gm,PF2,0,2,2,Gm,PF2,0,2,2,1}9関数PFは以下の10式のように定義される。なおはビットごとの排他的論理和を表す。PFn0=k0,n0,PFn0,n1=PFn0k1,n1,PFn0,n1,n2=PFn0,n1k2,n2,PFn0,n1,n2,n3=PFn0,n1,n2k3,n3,PFn0,n1,n2,n3,n4=PFn0,n1,n2,n3k4,n41010式は、上述の2式の一方向性関数Gとしてビットごとの排他的論理和を適用した例を表している。すなわち、関数PFは、生成行列Mの任意の経路に対して、生成行列Mの要素を用いて定義される関数経路関数である。9式のGは一方向性関数であり、Gm,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インデックスMKBindicesと、MKBインデックスに対応するベース鍵MKBaseMediaKeyBaseを含んでいる。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の随伴経路集合をAPXで表す。また、各随伴経路に対して、経路の最後の数値が異なる経路を境界経路と呼び、境界経路の集合を境界経路集合と呼ぶ。経路x=n0,n1,n2,n3,n4の境界経路集合BPXは以下の14式で与えられる。BPX={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の随伴経路集合APx1,x2,,xNとは、各経路x1,x2,,xNの随伴経路集合の和集合である:APx1,x2,,xN=APx1∪APx2∪∪APxN。2経路x1,x2,,xNの境界経路集合BPx1,x2,,xNとは、各経路x1,x2,,xNの境界経路集合の和集合から、経路x1,x2,,xNの随伴経路集合を除いた差集合である:BPx1,x2,,xN=BPx1∪BPx2∪∪BPxN-APx1,x2,,xN。3経路x1,x2,,xNを無効化するMKBインデックスは、経路x1,x2,,xNの境界経路集合BPx1,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上記境界経路集合BPy0,y1が、経路y0と経路y1とを無効化するMKBインデックスである。経路の集合Sが経路x1,x2,,xNを無効化するとは、次の2つの条件が成立することをいう。iAPx1,x2,,xN∩S=φii{x1,x2,,xN}に含まれない任意の経路yについてAPy∩S≠φ以下に、MKBインデックス、すなわち、境界経路集合BPx1,x2,,xNが、経路x1,x2,,xNを無効化する集合であることを証明する。APx1,x2,,xN∩BPx1,x2,,xN=φは、BPx1,x2,,xNの定義より自明である。{x1,x2,,xN}に含まれない任意の経路を経路yとする。APyは長さ1から5までの5つの経路からなる。ただし、経路順列の長さとは要素数である。例えば、1,0,2の長さは3である。APy={n0、n0,n1、n0,n1,n2、n0,n1,n2,n3、n0,n1,n2,n3,n4}とする。また、APy∩BPx1,,xN=φであると仮定する。n0はx1,,xNのいずれかの最初の要素である。さもなければ、n0∈BPx1,,xNとなって仮定に矛盾する。次に、n0,n1は、x1,,xNのいずれかの最初の2つの要素からなる順列に一致する。さもなければ、n0,n1∈BPx1,,xNとなって仮定に矛盾する。同様の推論を繰り返すことにより、結局、y=n0,,n4は、x1,,xNのいずれかに一致しなければならない。これは経路yが{x1,x2,,xN}に含まれない経路であるとした仮定に反する。すなわち、経路yが{x1,x2,,xN}に含まれない経路であれば、APy∩BPx1,,xN≠φ。以上により、MKBインデックスが経路x1,,xNを無効化することが証明された。次に、MKBインデックスBPx1,,xNが、経路x1,,xNを無効化する最小の集合であることを示す。ρ∈BPx1,,xNとする。経路ρを適当に長さ5まで伸ばして経路yを作る。ここで、経路u∈APy∩BPx1,,xN-{ρ}とする。lpを経路pの長さとして、lu<lρであるとすると、ρ∈BPx1,,xNであったから、ある番号iに対してu∈APxiでなければならない。これは仮定に反する。また、lu=lρであるとするとu=ρとなり、仮定に矛盾する。lu>lρであると仮定する。経路uの最後の要素を取り除いた経路をu’とおくと、BPx1,,xNの定義より、ある番号jが存在してu’∈APxjでなければならない。従ってρ∈APxjとなり、仮定に矛盾する。結局、APy∩BPx1,,xN-{ρ}=φとなる。以上で、BPx1,,xNが経路x1,,xNを無効化する最小の集合であることが証明された。次に、ベース鍵について説明する。ベース鍵は、16バイトのデータKBである以下、ベース鍵KBという。。ベース鍵KBは、後述するように、記憶装置とアクセス装置とが共有鍵上述の認証鍵KAに対応を算出する際のベースとなる。本実施形態では、変換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,121アクセス装置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={G100,PF1,G100,PF1,0,G100,PF1,0,2,G100,PF1,0,2,0,G100,PF1,0,2,0,1}23なお、アクセス装置200のデバイス番号mは、経路x0の3進表現10201_3から得られる100である。鍵選択部2103は、I_Dの添字経路を1つずつ順に選び、I_MKBに含まれているか否かを調べる。鍵選択部2103は、例えば以下に示すような関数key_choiceにより、復号鍵Kdを選択する。key_choiceI_D,I_MKB{inti,j;forj=0;j<5;jfori=0;i<11;iifI_D[j]==I_MKB[i]{復号鍵Kdとして、D0[j]を選択;returnj;}return-1;}この結果、20式のI_MKBと22式のI_Dに対しては、復号鍵KdとしてD0[3]=G100,PF1,0,2,0が選択される。他方、アクセス装置200に割り当てられている経路がy0である場合は、アクセス装置200に割り当てられている鍵束変換デバイス鍵および添字は以下の24式のようになる。鍵束:{G103,PF1,G103,PF1,0,G103,PF1,0,2,G103,PF1,0,2,1,G103,PF1,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は、添字を鍵インデックスimとして、記憶装置100に送る。上記の例では、1,0,2,0が復号鍵Kdの添字であるから、送信部2104は、鍵インデックスimとして添字1,0,2,0を記憶装置100に送るステップS105。なお、鍵インデックスは、アクセス装置200のデバイス番号mに依存する。従って、鍵インデックスをimと表記する。鍵インデックスは、a行b列の生成行列の1列からc列cは1≦c≦bを満たす整数までの行のいずれかを特定する情報となる。なお、鍵インデックスimを送信する代わりに、鍵選択部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から、ベース鍵KBを読み取るステップS109。鍵選択部2103は、以下の25式に示すように、復号鍵Kdによってベース鍵KBを復号して認証鍵KAを得るステップS110。DX,Yは、YをXで復号する復号演算を表す。KA=DKd,KB25一方、記憶装置100では、取得部1102が鍵インデックスimをアクセス装置200から受け取る。取得部1102は、鍵インデックスimを鍵生成部1105に送る。鍵生成部1105は、受信部1103にアクセス装置200のデバイス番号mを読み出すよう指示する。受信部1103は、アクセス装置200の番号記憶部2105から読み出されたデバイス番号mを受信し、受信したデバイス番号mを鍵生成部1105に送る。鍵生成部1105は、デバイス鍵記憶部1101から生成行列Mによって定められるデバイス鍵を読み出して、鍵インデックスimに対応する認証鍵KAを生成する。例えば、生成行列Mが図2で与えられ、m=100=10201_3、im=4であるとき、鍵生成部1105は、以下のi~viの手続きによって認証鍵KAを得る。i復号鍵Kdの添字1,0,2,0を取得する。ii添字が定める経路に対する経路関数値PF1,0,2,0=k0,1k1,0k2,2k3,0を算出する。iii復号鍵Kd=Gm,PF1,0,2,0=G100,PF1,0,2,0を算出するステップS106。ivベース鍵記憶部1104からベース鍵KBを取得するステップS107。viiiiで取得した復号鍵Kdによってベース鍵KBを復号して認証鍵KAを得るステップS108:KA=DKd,KB。鍵生成部1105は、算出した認証鍵KAを鍵暗号化部1107に送る。鍵暗号化部1107は、乱数生成部1106に乱数発生要求を出し、乱数発生部1106が発生した乱数RステップS111を受け取る。鍵暗号化部1107は、乱数Rを認証鍵KAで暗号化しステップS112、その結果である暗号化乱数R’=EKA,Rをアクセス装置200に送るステップS114。EKA,Rは、Rを認証鍵KAで暗号化した結果を表す。一方、乱数Rは乱数発生部1106からデータ暗号化部1108にも送られる。アクセス装置200からの読み出し要求を受け、データ暗号化部1108は乱数Rを用いて、秘匿領域1110に格納されている読み出し対象のデータDを暗号化し、暗号化データD’=ER,Dを得るステップS113。データ暗号化部1108は暗号化データD’をアクセス装置200に送るステップS114。アクセス装置200は、暗号化乱数R’を受け取ると、暗号化乱数R’を鍵復号部2106に入力する。鍵復号部2106は、鍵選択部2103から、鍵選択部2103が先に算出した認証鍵KAを取得する。鍵復号部2106は、認証鍵KAを用いて暗号化乱数R’を復号し、乱数Rを得るステップS115:R=DKA,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インデックスは無効化対象の経路の境界経路集合を用いて構成される。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=DG100,PF1,0,2,0,EPF1,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を配布することにより無効化できる。これにより、不正な解析を受けたと思われる当該データ利用機器からの認証鍵の流出を阻止することができる。このように、本実施形態では、認証と暗号化によって保護された秘匿領域からのデータ不正流出を回避することができる。次に、これまで説明した変換MKBを用いて、スマートグリッドなどのシステムでの共有鍵の管理を実現する方法について説明する。スマートグリッドに接続されるデバイスは一般に長期に渡って製造され、長期に渡って使用される。従って、共有鍵管理機能は製造時期の異なる多数のデバイスを管理することができなければならない。また、デバイスが悪意の第三者によってハッキングされる可能性も想定しておく必要がある。ハッキングされたデバイスはDoSDenialofService攻撃の踏み台になる。また、他のデバイスから暗号通信によって取得した情報が、当該ハッキングされたデバイスから漏えいされる。従って、共有鍵更新のタイミングで、ハッキングされたデバイスの鍵更新を禁止することにより、当該ハッキングされたデバイスを暗号通信から排除する機能を共有鍵管理機能に含むことが望まれる。デバイスのハッキングは組織的に行われる可能性がある。デバイスのハッキングによって当該デバイスは不正な機器になり得るが、ハッキングの影響は当該デバイスに限定的となるべきであり、システム全体に波及してはならない。これらの技術要求を満たしつつ、できるだけシンプルにスマートグリッドにおける共有鍵を管理できることが望ましい。図6は、本実施形態の通信装置および鍵算出装置を含むスマートグリッドのシステム30の構成例を示す図である。図6に示すように、システム30は、MDMS31と、分散電源32と、蓄電装置33と、送配電制御装置34と、遠隔端末ユニットRemoteTerminalUnit,RTU35a~35cと、EMS36と、BEMS37と、SM38a~38eと、HEMS39と、コンセントレータ41と、ネットワーク42と、鍵算出装置300と、鍵センタ400と、を備えている。なお、RTU35a~35cは同様の機能を備えるため、以下では単にRTU35という場合がある。同様に、SM38a~38eは同様の機能を備えるため、以下では単にSM38という場合がある。また、図6では、鍵算出装置300と、鍵センタ400とを分けて記載しているが、1つの装置内に鍵算出装置300および鍵センタ400の機能を備えるように構成してもよい。図6に示すように、スマートグリッドでは、電力使用量を集計するSM38bと、家電機器を管理するホームサーバであるHEMS39とが各家庭に設置される。また、商業ビルを対象として、ビル内の電気機器を管理するサーバであるBEMS37が、ビルごとに設置される。SM38は、中継器であるコンセントレータ41によって数台ごとにまとめられ、ネットワーク42を介してMDMS31と通信する。MDMS31は、各SM38から、一定の間隔で電力使用量を受信して記憶する。EMS36は、MDMS31に集められた複数の家庭および商業ビルの電力使用量、または、電力系統に設置されたセンサからの情報に基づいて、各SM38、HEMS39、および、BEMS37に対して電力使用を抑制するよう要求するなどの電力制御を行う。また、EMS36は、RTU35aに接続された太陽光発電や風力発電などの分散電源32、RTU35bに接続された蓄電装置33、および、RTU35cに接続された、発電側との間の送配電を制御する送配電制御装置を制御することにより、スマートグリッド全体の電圧および周波数を安定化するための制御を行う。鍵算出装置300は、ネットワーク42に接続するデバイスが格納すべきデバイス鍵を生成する。また、鍵算出装置300は、共有鍵生成の元となる変換MKBを生成する。デバイス鍵は、各デバイスがネットワーク42に接続される際に、各デバイスにインストールされる。鍵算出装置300が生成した変換MKBは、鍵センタ400に送られる。鍵センタ400は、ネットワークを通じて、変換MKBを各デバイスに配布する。各デバイスが最初にネットワークに接続される時点では、各デバイスは、デバイス鍵と、その時点での最新のMKBを有している。これは、例えば、サービスマンが各デバイスにMKBをインストールすることで実現される。複数のデバイスが通信する場合、複数のデバイスは、それぞれ、サーバデバイス以下単にサーバというとクライアントデバイス以下単にサーバというとに分かれる。これらは役割であり、固定したものではない。例えば、あるデバイスが、通信相手によってサーバになったりクライアントになったりしてもよい。クライアントがサーバに接続して通信が開始される。通常は1つのサーバが複数のクライアントと通信する。図6の例では、例えばMDMS31がサーバとなり、スマートメータ38がクライアントとなることができる。以下、サーバとなるデバイス、および、クライアントとなるデバイスが備える機能の詳細について説明する。図7は、クライアント500の構成例を示すブロック図である。図8は、サーバ600の構成例を示すブロック図である。なお、図7および図8は、クライアント500およびサーバ600間で共有する共有鍵を生成するために用いる構成の一例を示している。図7に示すように、クライアント500は、MKB取得部501と、変換デバイス鍵記憶部502と、鍵選択部503と、番号取得部504と、算出部505と、を備えている。MKB取得部501は、変換MKBを取得する。MKB取得部501は、例えば、サーバ600が送信した変換MKBをサーバ600から取得する。変換デバイス鍵記憶部502は、図4の変換デバイス鍵記憶部2102と同様に、デバイス番号以下、デバイス番号nとするで変換されたデバイス鍵以下、デバイス鍵KDnというを記憶する。デバイス鍵KDnは、クライアント500に固有のデバイス番号nと一方向性関数Gで変換したデバイス鍵である。鍵選択部503は、図4の鍵選択部2103と同様に、変換デバイス鍵記憶部502に記憶されたデバイス鍵KDnの中から、変換MKBに応じた復号鍵Kdを選択する。番号取得部504は、サーバ600のデバイス番号以下、デバイス番号mとするを取得する。番号取得部504は、例えば、デバイス番号mをサーバ600から受け取る。算出部505は、変換MKBに含まれるベース鍵KB、選択された復号鍵Kd、および、デバイス番号mを用いて、サーバ600と共有する共有鍵を算出する。例えば、算出部505は、まず復号鍵Kdとデバイス番号mとを一方向性関数Gに入力して得られる情報第2情報であるGm、Kdを算出する。そして、算出部505は、算出した情報Gm、Kdでベース鍵KBを復号した共有鍵Kmn=DGm、Kd、KBを算出する。次に、サーバ600の構成例について説明する。図8に示すように、サーバ600は、MKB取得部601と、変換デバイス鍵記憶部602と、鍵選択部603と、サーバ鍵生成部604と、鍵受信部605と、鍵復号部606と、番号記憶部607と、番号送信部608と、MKB送信部620と、を備えている。MKB取得部601は、変換MKBを取得する。MKB取得部601は、例えば、鍵センタ400が送信した変換MKBを鍵センタ400から取得する。変換デバイス鍵記憶部602は、図4の変換デバイス鍵記憶部2102と同様に、デバイス番号mで変換されたデバイス鍵以下、デバイス鍵KDmというを記憶する。デバイス鍵KDmは、サーバ600に固有のデバイス番号mと一方向性関数Gで変換したデバイス鍵である。鍵選択部603は、図4の鍵選択部2103と同様に、変換デバイス鍵記憶部602に記憶された変換デバイス鍵の中から、変換MKBに応じたデバイス鍵KDmを選択する。サーバ鍵生成部604は、変換MKBに含まれるベース鍵KB、および、選択されたデバイス鍵KDmを用いてサーバ鍵Kmを算出する。鍵受信部605は、鍵センタ400から、クライアント500との間で共有する共有鍵Kmnを暗号化した暗号化共有鍵であるEKm,Kmn||Rを取得する。Rは乱数である。記号||は、KmnとRとを結合することを意味する。鍵復号部606は、サーバ鍵Kmを用いて暗号化共有鍵を復号したデータKmn||R=DKm、EKm,Kmn||Rを得る。番号記憶部607は、サーバ600のデバイス番号m、および、クライアント500から予め取得したクライアントのデバイス番号nを記憶する。番号送信部608は、デバイス番号mおよびデバイス番号nを、鍵センタ400に送信する。MKB送信部620は、変換MKBをクライアント500に送信する。MKB送信部620の構成の詳細は後述する。次に、鍵算出装置300の構成例について説明する。図9は、鍵算出装置300の構成例を示すブロック図である。図9に示すように、鍵算出装置300は、デバイス鍵記憶部301と、変換MKB記憶部302と、受信部303と、算出部304と、を備えている。デバイス鍵記憶部301は、図3のデバイス鍵記憶部1101と同様に、図2に示す生成行列Mのような行列形式で複数のデバイス鍵を格納する。変換MKB記憶部302は、図3のデータ記憶部1109の一般領域1111と同様に、変換MKBを記憶する。受信部303は、鍵センタ400を介して、クライアント500のデバイス番号nと、サーバ600のデバイス番号mとを、サーバ600から受信する。算出部304は、デバイス番号mおよびデバイス番号nとから、サーバ600とクライアント500の共有鍵Kmnを算出し、算出した共有鍵Kmnを出力する。算出部304は、サーバ600のデバイス番号mのみの入力を受けた場合は、サーバ鍵Kmを算出して出力する。算出部304は、例えば、クライアント500の算出部505と同様の方法により復号鍵Kd、ベース鍵KB、および、デバイス番号mを用いて、共有鍵Kmn=DGm、Kd、KBを算出する。なお、復号鍵Kdは、クライアント500のデバイス番号nを用いて、上述の第1算出部1105a図3と同様の方法により算出される。すなわち、算出部304は、例えば、鍵インデックスinで特定されるデバイス鍵から算出した経路関数値をデバイス番号nで変換した復号鍵Kdを算出する。また、算出部304は、例えば、変換MKB記憶部302に記憶された変換MKBに含まれるベース鍵KB、および、デバイス番号mに対応するデバイス鍵KDmを用いて、サーバ600のサーバ鍵生成部604と同様の方法によりサーバ鍵Kmを算出する。次に、鍵センタ400の構成例について説明する。図10は、鍵センタ400の構成例を示すブロック図である。図10に示すように、鍵センタ400は、サーバ鍵記憶部411と、乱数発生部412と、暗号化部413と、鍵送信部414と、MKB送信部420と、を備えている。サーバ鍵記憶部411は、鍵算出装置300が算出したサーバ鍵Kmを記憶する。乱数発生部412は、乱数Rを発生する。暗号化部413は、鍵算出装置300が算出した共有鍵Kmnに乱数Rを結合したデータKmn||Rをサーバ鍵Kmで暗号化した暗号化共有鍵であるEKm,Kmn||Rを算出する。鍵送信部414は、暗号化共有鍵をサーバ600に送信する。MKB送信部420は、変換MKBをサーバ600に送信する。MKB送信部420の構成の詳細は後述する。次に、このように構成された本実施形態にかかるクライアント500による共有鍵算出処理について図11を用いて説明する。図11は、本実施形態におけるクライアント500による共有鍵算出処理の全体の流れを示すフローチャートである。まず、MKB取得部501が変換MKBを取得するステップS201。MKB取得部501は、変換MKBを鍵選択部503に送信する。鍵選択部503は、変換デバイス鍵記憶部502からデバイス鍵KDnを取得するステップS202。鍵選択部503は、変換MKBに含まれるMKBインデックスと、デバイス鍵の添字とに基づいて、取得したデバイス鍵KDnの中から適切な復号鍵Kdを選択するステップS203。鍵選択部503は、適切な復号鍵Kdが選択できたか否かを判断するステップS204。選択できなかった場合ステップS204:No、共有鍵算出処理を終了する。この場合、クライアント500は変換MKBによって無効化されていることを意味する。復号鍵Kdが選択できた場合ステップS204:Yes、鍵選択部503は、MKB取得部501により取得された変換MKBからベース鍵KBを取得するステップS205。鍵選択部503は、復号鍵Kdとベース鍵KBとを算出部505に送る。番号取得部504は、通信相手となるサーバ600のデバイス番号mを取得するステップS206。番号取得部504は、取得したデバイス番号mを算出部505に送る。算出部505は、復号鍵Kd、ベース鍵KB、および、デバイス番号mを用いて、共有鍵Kmn=DGm、Kd、KBを算出するステップS207。次に、このように構成された本実施形態にかかるサーバ600による共有鍵算出処理について図12を用いて説明する。図12は、本実施形態におけるサーバ600による共有鍵算出処理の全体の流れを示すフローチャートである。ステップS301からステップS305までは、図11のステップS201からステップS205と同様の処理のため説明を省略する。なお、図12では、鍵選択部603は、復号鍵Kdとベース鍵KBとをサーバ鍵生成部604に送る。サーバ鍵生成部604は、復号鍵Kdとベース鍵KBとを用いて、サーバ鍵Km=DKd、KBを算出するステップS306。サーバ鍵生成部604は、算出したサーバ鍵Kmを鍵復号部606に送る。番号送信部608は、番号記憶部607に記憶されているサーバ600のデバイス番号mと、クライアント500のデバイス番号nとを鍵センタ400に送信するステップS307。鍵受信部605は、鍵センタ400から暗号化共有鍵であるEKm,Kmn||Rを取得するステップS308。鍵受信部605は、取得した暗号化共有鍵を鍵復号部606に送る。鍵復号部606は、サーバ鍵Kmを用いて暗号化共有鍵を復号したデータKmn||R=DKm、EKm,Kmn||Rを算出するステップS309。算出されたデータから乱数Rを除いたデータである共有鍵Kmnが、クライアント500と共有する鍵として用いられる。また、算出されたデータに含まれる乱数Rは、例えば鍵センタ400と共有する乱数としてサーバ600内で利用される。なお、乱数Rを結合せずに共有鍵Kmnのみを暗号化した暗号化共有鍵を用いるように構成してもよい。次に、このように構成された本実施形態にかかる鍵センタ400による鍵算出制御処理について図13を用いて説明する。図13は、本実施形態における鍵算出制御処理の全体の流れを示すフローチャートである。鍵センタ400は、サーバ600からサーバ600のデバイス番号mとクライアント500のデバイス番号nとを受信し、受信したデバイス番号mとデバイス番号nとを鍵算出装置300に送信するステップS401。鍵算出装置300は、送信されたデバイス番号mおよびデバイス番号nを用いて共有鍵Kmnを算出する共有鍵算出処理を実行するステップS402。鍵算出装置300による共有鍵算出処理の詳細については後述する。鍵センタ400は、共有鍵算出処理で算出されたサーバ鍵Kmと、共有鍵Kmnとを受信するステップS403。鍵センタ400は、受信したサーバ鍵Kmで共有鍵Kmnを暗号化して暗号化共有鍵を算出する暗号化共有鍵算出処理を実行するステップS404。暗号化共有鍵算出処理の詳細については後述する。鍵送信部414は、暗号化共有鍵をサーバ600に送信するステップS405。次に、ステップS402の鍵算出装置300による共有鍵算出処理の詳細について説明する。図14は、本実施形態における鍵算出装置300による共有鍵算出処理の全体の流れを示すフローチャートである。鍵算出装置300の受信部303は、送信されたデバイス番号mとデバイス番号nとを受信するステップS501。算出部304は、デバイス鍵記憶部301から、デバイス番号nに対応した行列の要素を選択することにより、デバイス鍵KDnを取得するステップS502。算出部304は、変換MKB記憶部302から変換MKBを読み出すステップS503。算出部304は、変換MKBに含まれるMKBインデックスとデバイス鍵KDnの添字に基づいて、デバイス鍵KDnの中から復号鍵Kdを選択するステップS504。算出部304は、適切な復号鍵Kdが選択できたか否かを判断するステップS505。選択できなかった場合ステップS505:No、共有鍵算出処理を終了する。この場合、クライアント500は変換MKBによって無効化されている。復号鍵Kdが選択できた場合ステップS505:Yes、算出部304は、変換MKBからベース鍵KBを取得するステップS506。算出部304は、復号鍵Kd、ベース鍵KB、および、デバイス番号mを用いて、共有鍵Kmn=DGm、Kd、KBを算出するステップS507。また、算出部304は、サーバ600のサーバ鍵生成部604と同様の方法により、ベース鍵KB、および、デバイス鍵KDmを用いてサーバ鍵Kmを算出するステップS508。算出された共有鍵Kmnおよびサーバ鍵Kmは、鍵センタ400に出力される。次に、ステップS404の暗号化共有鍵算出処理の詳細について説明する。図15は、本実施形態における暗号化共有鍵算出処理の全体の流れを示すフローチャートである。鍵センタ400は、鍵算出装置300が算出したサーバ鍵Kmと共有鍵Kmnとを鍵算出装置300から受信するステップS601。サーバ鍵Kmは、サーバ鍵記憶部411に記憶される。共有鍵Kmnは、暗号化部413に入力される。暗号化部413は、サーバ鍵記憶部411からサーバ鍵Kmを読み出すステップS602。乱数発生部412は、乱数Rを発生するステップS603。暗号化部413は、サーバ鍵Kmを用いて、共有鍵Kmnと乱数Rとを結合したデータを暗号化した暗号化共有鍵EKm、Kmn||Rを算出するステップS604。次に、変換MKBの送信処理について説明する。変換MKBは、MACMessageAuthenticationCodeを付与してサーバ600やクライアント500に渡される。MACを生成するためにサーバ鍵Kmや共有鍵Kmnが用いられる。上述のように、変換MKBを処理することでサーバ鍵Kmや共有鍵Kmnは更新される。変換MKBには、現在のサーバ鍵Km共有鍵によるMACに加えて、以前の変換MKBから生成されるサーバ鍵Km共有鍵によるMACを付与してもよい。図16は、このように構成した変換MKBのフォーマットの一例を示す図である。図16に示すように変換MKBは、MKBインデックスと、ベース鍵と、MACの数と、鍵バージョンと、MACとを含んでいる。鍵バージョンには、鍵の種類と変換MKBのバージョンが記録される。例えば、バージョン1232の変換MKBから生成された、デバイス番号=100のサーバ600のサーバ鍵Kmの鍵バージョンは1232、1000という数の組である。また、バージョン1210の変換MKBから生成された、デバイス番号=10のサーバ600とデバイス番号1003のクライアント500の共有鍵Kmnの鍵バージョンは1210、10、1003という数の組である。複数のMACが存在する場合は、それぞれのMACに対応する鍵バージョンが記録される。図16では、2つのMACMAC1、MAC2が存在し、それぞれに対して鍵バージョン1および鍵バージョン2が記録された例が示されている。MACを付与して、鍵センタ400からサーバに対して変換MKBを送出するのは、鍵センタ400のMKB送信部420である。図17は、MKB送信部420の構成例を示すブロック図である。図17に示すように、MKB送信部420は、サーバ鍵記憶部421と、MAC算出部422と、送信部423とを備えている。サーバ鍵記憶部421は、各サーバ600について、最新バージョンのサーバ鍵に加えて、1つ前のバージョンのサーバ鍵を記憶する。また、サーバ鍵記憶部421は、それぞれのサーバ鍵に関連づけて、対応する変換MKBのバージョンも格納する。MAC算出部422は、サーバ鍵記憶部421に記憶されたサーバ鍵それぞれについて、サーバ鍵を用いてMACを算出する。また、MAC算出部422は、変換MKBに対して、鍵バージョンおよび算出したMACを付加する。送信部423は、鍵バージョンおよびMACが付加された図16のような変換MKBをサーバ600に送信する。このように、MKB送信部420に入力される変換MKBは、MKBインデックスとベース鍵のみからなるが、出力される変換MKBは図16に示すようなフォーマットを有している。一方、サーバ600からクライアント500に対して、MACを付与して変換MKBを送出するのは、サーバのMKB送信部620である。図18は、MKB送信部620の構成例を示すブロック図である。図18に示すように、MKB送信部620は、サーバ鍵記憶部621と、MAC算出部622と、送信部623とを備えている。サーバ鍵記憶部621、MAC算出部622、および、送信部623の機能は、それぞれ図17のサーバ鍵記憶部421、MAC算出部422、および、送信部423と同様であるため説明を省略する。次に、鍵センタ400によるMKB送信処理について図19を用いて説明する。図19は、本実施形態におけるMKB送信処理の全体の流れを示すフローチャートである。MAC算出部422は、変換MKBを入力するステップS701。MAC算出部422は、サーバ鍵記憶部421からサーバ鍵を読み出すステップS702。例えば2つのサーバ鍵が記憶されている場合は、MAC算出部422は、記憶されている2つのサーバ鍵をそれぞれ読み出す。MAC算出部422は、読み出したサーバ鍵を用いて、変換MKBのMACを算出するステップS703。2つのサーバ鍵を読み出した場合は、2つのサーバ鍵それぞれに対してMACを算出する。MAC算出部422は、鍵バージョンを変換MKBに付加するステップS704。MAC算出部422は、算出したMACを、鍵バージョンの順に変換MKBに付加するステップS705。送信部423は、鍵バージョンおよびMACが付加された変換MKBをサーバ600に送信するステップS706。なお、図18のサーバ600のMKB送信部620でも同様の処理が行われ、クライアント500に対して変換MKBが送信される。以上のように、変換MKBを用いることによって、本実施形態のスマートグリッドシステムは、製造時期の異なる多数のデバイスを管理することが可能となる。膨大な数の組み合わせを有するデバイス鍵によってシステムを管理するからである。また、本実施形態のスマートグリッドシステムは、暗号通信からハッキングされたデバイスを排除する仕組みを有している。変換MKBによって無効化されたデバイスは、サーバであれクライアントであれ、共有鍵を取得することができないからである。本実施形態のスマートグリッドシステムでは、デバイスのハッキングの影響は限定的である。デバイス鍵が個別化されているため、個々のデバイスのデバイス鍵を知っても、鍵算出装置が保有する生成行列を知ることはできないからである。さらに、本実施形態のスマートグリッドシステムでは、各バージョンにただ1つの変換MKBから、全ての共有鍵が生成される。従って、共有鍵管理をシンプルに行うことができる。上述の実施形態にかかる装置通信装置、鍵算出装置、アクセス装置、サーバ、記憶装置は、CPUCentralProcessingUnitなどの制御装置と、ROMReadOnlyMemoryやRAMRandomAccessMemoryなどの記憶装置と、ネットワークに接続して通信を行う通信I/Fと、HDDHardDiskDrive、CDCompactDiscドライブ装置などの外部記憶装置と、ディスプレイ装置などの表示装置と、キーボードやマウスなどの入力装置と、各部を接続するバスを備えるように構成できる。実施形態にかかる装置で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD-ROMCompactDiskReadOnlyMemory、フレキシブルディスクFD、CD-RCompactDiskRecordable、DVDDigitalVersatileDisk等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供される。また、実施形態にかかる装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第1または第2の実施形態にかかる記憶装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。また、実施形態のプログラムを、ROM等に予め組み込んで提供するように構成してもよい。実施形態にかかる装置で実行されるプログラムは、上述した各部を含むモジュール構成とすることができ、実際のハードウェアとしてはCPUプロセッサが上記記録媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"