(57)【特許請求の範囲】
【請求項１】
外部装置と接続される通信装置であって、
複数のデバイス鍵それぞれを、前記通信装置を識別する第１識別情報で変換した複数の第１情報を記憶する鍵記憶部と、
前記外部装置を識別する第２識別情報を取得する取得部と、
複数の前記第１情報から、無効化するデバイス鍵を特定する特定情報に応じた１の前記第１情報を選択する鍵選択部と、
選択された前記第１情報を前記第２識別情報で変換した第２情報を用いて、前記外部装置と共有する共有鍵を算出する算出部と、
を備えることを特徴とする通信装置。
【請求項２】
前記算出部は、選択された前記第１情報と前記第２識別情報とを一方向性関数に入力して得られる前記第２情報を用いて、前記特定情報とベース鍵とを含むメディアキーブロックに含まれる前記ベース鍵を復号することにより前記共有鍵を算出すること、
を特徴とする請求項１に記載の通信装置。
【請求項３】
共有鍵を算出する鍵算出装置と、外部装置とに接続される通信装置であって、
前記鍵算出装置は、複数のデバイス鍵のうち前記外部装置を識別する第１識別情報に対応するデバイス鍵を、前記通信装置を識別する第２識別情報で変換した情報を用いて共有鍵を算出する算出部を備え、
前記第１識別情報と前記第２識別情報とを前記鍵算出装置に送信する送信部と、
送信した前記第１識別情報と前記第２識別情報とに基づいて前記鍵算出装置が算出した前記共有鍵を受信する鍵受信部と、
を備えることを特徴とする通信装置。
【請求項４】
前記鍵受信部は、暗号化された前記共有鍵を受信し、
暗号化された前記共有鍵を復号する鍵復号部をさらに備えること、
を特徴とする請求項３に記載の通信装置。
【請求項５】
第１通信装置との間で共有鍵を共有する第２通信装置に接続され、前記共有鍵を算出する鍵算出装置であって、
複数のデバイス鍵を記憶する鍵記憶部と、
前記第１通信装置を識別する第１識別情報と、前記第２通信装置を識別する第２識別情報とを前記第２通信装置から受信する受信部と、
複数の前記デバイス鍵のうち前記第１識別情報に対応する前記デバイス鍵を、前記第２識別情報で変換した情報を用いて共有鍵を算出する算出部と、
を備えることを特徴とする鍵算出装置。
【請求項６】
前記算出部は、複数の前記デバイス鍵のうち前記第１識別情報に対応する前記デバイス鍵と前記第２識別情報とを一方向性関数に入力して得られる情報を用いて、無効化するデバイス鍵を特定する特定情報とベース鍵とを含むメディアキーブロックに含まれる前記ベース鍵を復号することにより前記共有鍵を算出すること、
を特徴とする請求項５に記載の鍵算出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、通信装置および鍵算出装置に関する。
【背景技術】
【０００２】
原子力や火力など従来の発電に加えて太陽光や風力などの再生可能エネルギーを併用する際、電力品質の安定化を図るために次世代電力網（スマートグリッド）が構築されている。
【０００３】
ここで、通信可能な装置・機器を「デバイス」と呼ぶことにする。スマートグリッドでは、メーターデータ管理システム（Metering  Data  Management  System（ＭＤＭＳ））、分散電源、蓄電装置、送配電制御装置、エネルギー管理システム（Energy  Management  System（ＥＭＳ））、ＢＥＭＳ（Building  Energy  Management  System）、ＨＥＭＳ（Home  Energy  Management  System）、および、スマートメーター（ＳＭ）がデバイスである。
【０００４】
スマートグリッドなどのシステムでは、２つ以上のデバイスが暗号通信を行う必要がある場合が存在する。デバイスが暗号通信を行うには、事前に鍵を共有している必要がある。この共有鍵は、対称鍵のペアであっても、公開鍵と秘密鍵とのペアであってもよい。共有鍵は、デバイス間の通信セキュリティの基礎である。このため、秘密の保持が重要であり、デバイスへの共有鍵のインストールはデバイスの管理者が責任を持って安全に行う必要がある。デバイスへの共有鍵のインストールは、例えば、デバイスをネットワークに接続する前に人手によって行うことができる。通信相手のデバイスは、一般に複数存在する。デバイスが３つ以上のデバイスとグループを作り、グループ内で鍵を共有する場合もある。そのため、デバイスの管理者は多数の鍵を管理してインストールする必要がある。さらに、ネットワークに新たに追加されたデバイスと通信する場合、既存デバイスに対して、新たに追加されたデバイスとの共有鍵をインストールしなければならない。
【０００５】
一方、ＭＫＢ（Media  Key  Block）と呼ばれる技術が知られている。多数のデバイスに、それぞれ固有の鍵束（デバイス鍵）を割り当てる。各デバイスに、ＭＫＢと呼ばれる共通のデータが配布される。各デバイスは、当該デバイスに割り当てられたデバイス鍵を用いてＭＫＢを処理する。ＭＫＢ処理の結果、各デバイスはメディア鍵と呼ばれるデータを得る。ＭＫＢを用いて指定された任意の個数のデバイスを無効化することができる。例えば、デバイス８とデバイス２１を無効化するようにＭＫＢを構成することができる。この場合、デバイス８が保持するデバイス鍵を用いてＭＫＢを処理してもメディア鍵は得られない。デバイス２１についても同様である。
【０００６】
ＭＫＢの技術を用いることにより、それぞれのデバイスに割り当てられたデバイス鍵を個別に無効化することができる。さらに、無効化されるデバイス鍵の組み合わせによって、効率的に無効化することができる。この性質を活用して、ＭＫＢは著作権保護技術に応用されている。例えば、一連のデバイス鍵を持つデバイスが不正に解析されるなどして、暗号化コンテンツが不正に復号され、平文化されたコンテンツが流出するようになったと仮定する。例えば、あるメーカーの製造した一連のデバイスは堅牢性（robustness）が不足しており、外部からメディア鍵を容易に読むことができるような場合に、上述のようなコンテンツの不正流出が発生する。
【０００７】
コンテンツの著作権者、または、その代理者が、不正流出の事実を知ったと仮定する。著作権者、または、その代理者は、一連のデバイス鍵を持つデバイスを無効化するＭＫＢを配布する。これにより、一連のデバイスは無効化され、無効化されたデバイスでは、メディア鍵の導出が不可能になる。ＭＫＢより導出されるメディア鍵を暗号化コンテンツの復号に利用するようにしている場合、無効化されたデバイスは、暗号化コンテンツの復号ができない。このように、ＭＫＢを更新することによって、一連の堅牢性に問題点を有するデバイスからのコンテンツ流出を、以後、食い止めることができる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特許第３９５７９７８号公報
【特許文献２】特開２００６−２５３８２２号公報
【非特許文献】
【０００９】
【非特許文献１】D.  Naor,M.  Naor,and  J.  Lotspiech:  "Revocation  and  Tracing  Schemes  for  Stateless  Receivers,"  In  Proc.  of  CRYPTO  '01,LNCS  2139,Springer-Verlag,pp.  41-62,2001
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述のスマートグリッドなどのように共有鍵を用いる場合、共有鍵の管理と各デバイスへのインストールは手間がかかるという問題があった。例えば、ネットワークにデバイスが追加されたり、ネットワークからデバイスが削除されたりするたびに、共有鍵のインストールまたはアンインストール作業が発生する可能性がある。
【課題を解決するための手段】
【００１１】
実施形態の通信装置は、鍵記憶部と取得部と鍵選択部と算出部とを備える。鍵記憶部は、複数のデバイス鍵それぞれを、通信装置を識別する第１識別情報で変換した複数の第１情報を記憶する。取得部は、外部装置を識別する第２識別情報を取得する。鍵選択部は、メディアキーブロック処理により複数の第１情報から１の第１情報を選択する。算出部は、選択した第１情報を、第２識別情報で変換した第２情報を用いて共有鍵を算出する。
【図面の簡単な説明】
【００１２】
【図１】ＭＫＢを用いた認証鍵共有を実現する記憶装置およびアクセス装置のブロック図。
【図２】生成行列の一例を示す図。
【図３】記憶装置のブロック図。
【図４】アクセス装置のブロック図。
【図５】アクセス処理のシーケンス図。
【図６】スマートグリッドシステムの構成例を示す図。
【図７】クライアントのブロック図。
【図８】サーバのブロック図。
【図９】鍵算出装置のブロック図。
【図１０】鍵センタのブロック図。
【図１１】クライアントによる共有鍵算出処理のフローチャート。
【図１２】サーバによる共有鍵算出処理のフローチャート。
【図１３】鍵算出制御処理のフローチャート。
【図１４】鍵算出装置による共有鍵算出処理フローチャート。
【図１５】暗号化共有鍵算出処理のフローチャート。
【図１６】変換ＭＫＢのフォーマットの一例を示す図。
【図１７】鍵センタのＭＫＢ送信部のブロック図。
【図１８】サーバのＭＫＢ送信部のブロック図。
【図１９】ＭＫＢ送信処理のフローチャート。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、この発明にかかる通信装置および鍵算出装置の好適な実施形態を詳細に説明する。
【００１４】
まず、データを記憶する記憶装置と、当該記憶装置に記憶されたデータにアクセスするアクセス装置を例にとって、本実施形態で用いるＭＫＢの技術について説明する。
【００１５】
図１は、ＭＫＢを用いた認証鍵共有を実現する記憶装置１０およびアクセス装置２０の構成例を示すブロック図である。
【００１６】
図１に示すように、記憶装置１０は、ＭＫＢ１１と、メディア鍵（ＫＭ）１２と、乱数発生部１と、演算部２と、データ記憶部３と、暗号化部４とを備えている。乱数発生部１は、乱数（Ｒ）１３を発生する。演算部２は、予め定められた一方向性関数にＫＭ１２とＲ１３とを入力し、アクセス装置２０と共有する認証鍵であるＫＴ１４を算出する。データ記憶部３は、データを記憶する記憶部であり、秘匿領域を含む。暗号化部４は、ＫＴ１４を用いてデータ記憶部３から読み出されたデータを暗号化する。
【００１７】
アクセス装置２０は、デバイス鍵（ＫＤ）３１と、ＭＫＢ処理部２１と、演算部２２と、復号部２３と、データ利用部２４とを備えている。ＭＫＢ処理部２１は、ＫＤ３１を用いてＭＫＢ１１を処理することによりメディア鍵（ＫＭ）３２を導出するＭＫＢ処理を実行する。演算部２２は、演算部２と同じ一方向性関数にＫＭ１２とＲ１３とを入力して認証鍵であるＫＴ３３を算出する。正常に処理された場合は、ＫＴ１４とＫＴ３３とは一致する。復号部２３は、ＫＴ３３を用いて、暗号化部４により暗号化されたデータを復号する。データ利用部２４は、復号されたデータを利用する。
【００１８】
ＭＫＢを用いた認証鍵共有は、図１のように構成された記憶装置１０およびアクセス装置２０により、例えば、以下のように実現される。図１に示すように、記憶装置１０のデータ記憶部３から読み出すデータはＫＴ１４によって暗号化される。アクセス装置２０がＫＴ１４と同一のＫＴ３３を導出できない限り、読出しデータを正しく復号することはできない。アクセス装置２０がＫＴ１４と同一のＫＴ３３を導出するためには、アクセス装置２０が、当該アクセス装置２０が保持するＫＤ３１を用いて、ＭＫＢを処理して正しいＫＭ３２が取得できることが必要である。ＫＤ３１がＭＫＢ１１によって無効化されていた場合、アクセス装置２０のＭＫＢ処理部２１によるＭＫＢ処理によって正しくＫＭ３２を取得することができない。従って、その場合、アクセス装置２０は記憶装置１０から読み出したデータを正しく復号することができない。このようにして、記憶装置１０のデータ記憶部３のデータの秘匿が実現される。
【００１９】
ＭＫＢとデバイス鍵の具体的な構成方法の一例は、例えば特許文献１に記載されている。以下、ＭＫＢとデバイス鍵の構成方法の一例について簡単に説明する。
【００２０】
まず、図２のような生成行列を用意する。当該生成行列の各成分ｋ（０，０）〜ｋ（４，２）は１６バイトのデータである。数０、数１または数２を５個並べた順列の全体をＤとおく（Ｄ＝｛０，１，２｝＾５）。Ｄの要素を経路という。また、経路の先頭を含む部分順列を、当該経路に随伴する経路（随伴経路）と呼ぶ。例えば、ｘ＝（２，０，２，２，１）は経路であり、経路ｘの随伴経路は、（２）、（２，０）、（２，０，２）、（２，０，２，２）および（２，０，２，２，１）である。各デバイスにはＤの要素である１つの経路が割り当てられる。さらに、各デバイスは、当該デバイスに割り当てられている経路の随伴経路と生成行列とによって定まる鍵束を格納している。例えば、デバイスｘ（上記経路ｘが割り当てられているデバイス）は、以下の（１）式に示す鍵束を格納している。
｛ＰＦ（２），ＰＦ（２，０），ＰＦ（２，０，２），ＰＦ（２，０，２，２），ＰＦ（２，０，２，２，１）｝・・・（１）
【００２１】
関数ＰＦは、例えば、以下の（２）式のように定義されている。
ＰＦ（ｎ）＝ｋ（０，ｎ），
ＰＦ（ｎ０，ｎ１）＝Ｇ（ｋ（１，ｎ１），ＰＦ（ｎ０）），
ＰＦ（ｎ０，ｎ１，ｎ２）＝Ｇ（ｋ（２，ｎ２），ＰＦ（ｎ０，ｎ１）），
ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３）
＝Ｇ（ｋ（３，ｎ３），ＰＦ（ｎ０，ｎ１，ｎ２）），
ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）
＝Ｇ（ｋ（４，ｎ４），ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３））・・・（２）
【００２２】
Ｇは一方向性関数を表す。このような鍵束が、デバイスｘに割り当てられたデバイス鍵である。
【００２３】
さて、１６バイトのメディア鍵をＫＭとする。リボーク（無効化）する端末が存在しない場合、以下の（３）式に示すデータの集合Ｍ１をＭＫＢとして配布する。
Ｍ１＝｛Ｅ（ｋ（０，０），ＫＭ），Ｅ（ｋ（０，１），ＫＭ），Ｅ（ｋ（０，２），ＫＭ）｝・・・（３）
【００２４】
Ｅ（ｋ，Ｘ）は、データＸを鍵ｋで暗号化した結果として得られる暗号化データである。
【００２５】
デバイスｘ＝（２，０，２，２，１）をリボークするＭＫＢは次のように構成する。ｘの境界集合は以下の（４）式で表される集合である。
｛（０）、（１）、（２，１）、（２，２）、（２，０，０）、（２，０，１）、（２，０，２，０）、（２，０，２，１）、（２，０，２，２，０）、（２，０，２，２，２）｝・・・（４）
【００２６】
Ｍ２を以下の（５）式で表されるデータ集合として定める。
Ｍ２＝｛
Ｅ（ＰＦ（０），ＫＭ），
Ｅ（ＰＦ（１），ＫＭ），
Ｅ（ＰＦ（２，１），ＫＭ），
Ｅ（ＰＦ（２，２），ＫＭ），
Ｅ（ＰＦ（２，０，０），ＫＭ），
Ｅ（ＰＦ（２，０，１），ＫＭ），
Ｅ（ＰＦ（２，０，２，０），ＫＭ），
Ｅ（ＰＦ（２，０，２，１），ＫＭ），
Ｅ（ＰＦ（２，０，２，２，０），ＫＭ），
Ｅ（ＰＦ（２，０，２，２，２），ＫＭ）｝・・・（５）
【００２７】
デバイスｘは、上述のように（１）式の鍵束｛ＰＦ（２），ＰＦ（２，０），ＰＦ（２，０，２），ＰＦ（２，０，２，２），ＰＦ（２，０，２，２，１）｝を格納している。しかし、デバイスｘは、この鍵束の中のいずれの鍵によってＭ２のいずれの要素を復号しても正しくＫＭを得ることはできない。従って、デバイスｘはリボークされている。
【００２８】
しかも、デバイスｘ以外のデバイスは、Ｍ２の適当な要素を復号して正しくＫＭを得ることができる。実際、経路ｘと異なる経路ｙを考える。経路ｙの第１の要素が０または１であれば、デバイスｙ（経路ｙが割り当てられているデバイス）はＰＦ（０）またはＰＦ（１）を格納している。従って、Ｍ２の要素である、Ｅ（ＰＦ（０），ＫＭ）またはＥ（ＰＦ（１），ＫＭ）を復号してＫＭが得られる。経路ｙの第１の要素が２で第２の要素が１または２であれば、ｙはＰＦ（２，１）またはＰＦ（２，２）を格納している。従って、Ｍ２の要素であるＥ（ＰＦ（２，１），ＫＭ）またはＥ（ＰＦ（２，２），ＫＭ）を復号してＫＭが得られる。このように、デバイスｘと異なる任意のデバイスｙについて、デバイスｙが格納する鍵束に含まれるいずれかの鍵を用いて、Ｍ２のいずれかの要素を復号してＫＭを得ることができる。
【００２９】
次に、上記ｘ＝（２，０，２，２，１）に加えてｘ２＝（１，１，０，０，２）を無効化するＭＫＢの構成方法を示す。ｘとｘ２の境界集合は以下の（６）式のようになる。
｛（０）、（１）、（２，１）、（２，２）、（１，０）、（１，２）、（２，０，０）、（２，０，１）、（１，１，１）、（１，１，２）、（２，０，２，０）、（２，０，２，１）、（１，１，０，１）、（１，１，０，２）、（２，０，２，２，０）、（２，０，２，２，２）、（１，１，０，０，０）、（１，１，０，０，１）｝・・・（６）
【００３０】
従って、ｘとｘ２とを無効化するＭＫＢであるＭ３は以下の（７）式で与えられる。
Ｍ３＝｛
Ｅ（ＰＦ（０），ＫＭ），
Ｅ（ＰＦ（１），ＫＭ），
Ｅ（ＰＦ（２，１），ＫＭ），
Ｅ（ＰＦ（２，２），ＫＭ），
Ｅ（ＰＦ（１，０），ＫＭ），
Ｅ（ＰＦ（１，２），ＫＭ），
Ｅ（ＰＦ（２，０，０），ＫＭ），
Ｅ（ＰＦ（２，０，１），ＫＭ），
Ｅ（ＰＦ（１，１，１），ＫＭ），
Ｅ（ＰＦ（１，１，２），ＫＭ），
Ｅ（ＰＦ（２，０，２，０），ＫＭ），
Ｅ（ＰＦ（２，０，２，１），ＫＭ），
Ｅ（ＰＦ（１，１，０，１），ＫＭ），
Ｅ（ＰＦ（１，１，０，２），ＫＭ），
Ｅ（ＰＦ（２，０，２，２，０），ＫＭ），
Ｅ（ＰＦ（２，０，２，２，２），ＫＭ），
Ｅ（ＰＦ（１，１，０，０，０），ＫＭ），
Ｅ（ＰＦ（１，１，０，０，１），ＫＭ）｝・・・（７）
【００３１】
無効化対象のデバイス鍵が特別な組み合わせである場合は、ＭＫＢのサイズを節約して効率的に無効化することが可能である。例えば、（２，０，？，？，？）という一群のデバイス鍵を無効化する場合を考える。ただし、「？」には０、１または２の数値が入る。これら３＾３＝２７個のデバイスを無効化するＭＫＢは以下の（８）式で示すＭ４で与えられる。
Ｍ４＝｛Ｅ（ＰＦ（０），ＫＭ），Ｅ（ＰＦ（１），ＫＭ），Ｅ（ＰＦ（２，１），ＫＭ），Ｅ（ＰＦ（２，２），ＫＭ）｝・・・（８）
【００３２】
図１のような認証鍵共有の方法では、ＭＫＢから導出されるメディア鍵（ＫＭ）は同一である。従って、上述のようにアクセス装置が不正に解析されてＫＭが取得され、かつ、不正に解析されたアクセス装置を特定できない場合には、データの不正流出を防止することができない。
【００３３】
そこで、本実施形態にかかる記憶装置は、ＭＫＢによるデバイスの無効化を可能としつつ、アクセス装置を識別する識別情報（デバイス番号）を用いてアクセス装置ごとに異なる認証鍵を生成する。これにより、不正にアクセスするアクセス装置（ソフトウェア）等が配布された場合であっても、不正に解析されたアクセス装置を特定できるため、データの不正流出を回避可能となる。
【００３４】
図３は、本実施形態にかかる記憶装置１００の構成の一例を示すブロック図である。図３に示すように、記憶装置１００は、デバイス鍵記憶部１１０１と、取得部１１０２と、受信部１１０３と、ベース鍵記憶部１１０４と、鍵生成部１１０５と、乱数生成部１１０６と、鍵暗号化部１１０７と、データ暗号化部１１０８と、データ記憶部１１０９と、を備えている。
【００３５】
デバイス鍵記憶部１１０１は、図２に示す生成行列Ｍのような行列形式で複数のデバイス鍵を格納する。取得部１１０２は、デバイス鍵記憶部１１０１に記憶されたデバイス鍵のうち、いずれかのデバイス鍵を特定するインデックス（鍵インデックスｉ（ｍ））をアクセス装置２００から取得（受信）する。受信部１１０３は、アクセス装置２００の送信部２１０４（後述）から、アクセス装置２００に割り当てられたデバイス番号ｍを受信する。ベース鍵記憶部１１０４は、ベース鍵ＫＢ（詳細は後述）を記憶する。
【００３６】
鍵生成部１１０５は、生成行列Ｍ、鍵インデックスｉ（ｍ）、および、デバイス番号ｍから、アクセス装置２００との間で共有する認証鍵（以下、認証鍵ＫＡという）を生成する。鍵生成部１１０５は、第１算出部１１０５ａと、第２算出部１１０５ｂとを備えている。
【００３７】
第１算出部１１０５ａは、鍵インデックスｉ（ｍ）で特定されるデバイス鍵から関数ＰＦによる経路関数値（後述）を算出し、算出した値（算出値）をデバイス番号ｍで変換した復号鍵Ｋｄを算出する。
【００３８】
第２算出部１１０５ｂは、認証鍵ＫＡを暗号化した鍵情報を復号鍵Ｋｄにより復号することにより認証鍵ＫＡを算出する。本実施形態では、第２算出部１１０５ｂは、ベース鍵ＫＢを復号鍵Ｋｄで復号することにより認証鍵ＫＡを算出する。
【００３９】
なお、認証鍵（第１鍵）を算出する方法は、復号鍵を用いた復号演算に限られるものではない。認証鍵に演算を施して得られる鍵情報に対して、当該演算に対応する演算を施すための鍵（第２鍵）を用いて認証鍵を算出する方法であれば、あらゆる方法を適用できる。
【００４０】
乱数生成部１１０６は、乱数Ｒを生成する。鍵暗号化部１１０７は、乱数Ｒを認証鍵ＫＡで暗号化する。
【００４１】
データ記憶部１１０９は、アクセス装置２００からアクセス可能なデータを記憶する。データ記憶部１１０９は、秘匿領域１１１０と、一般領域１１１１と、を含む。秘匿領域１１１０は、無効化されておらず、認証鍵ＫＡを生成できるアクセス装置２００のみがデータを読み出し可能なデータ領域である。一般領域１１１１は、認証鍵ＫＡによる認証を行わずにデータを読み出し可能なデータ領域である。
【００４２】
本実施形態では、一般領域１１１１は、図１で説明したようなＭＫＢを変換したＭＫＢ（Twisted  ＭＫＢ（以下、変換ＭＫＢという））を記憶する。変換ＭＫＢのデータ構造の詳細については後述する。
【００４３】
データ暗号化部１１０８は、乱数Ｒを用いて秘匿領域１１１０に格納されている読み出し対象データ（データＤ）を暗号化し、暗号化データＤ’＝Ｅ（Ｒ，Ｄ）を算出する。
【００４４】
図４は、本実施形態にかかるアクセス装置２００の構成の一例を示すブロック図である。図４に示すように、アクセス装置２００は、読取部２１０１と、変換デバイス鍵記憶部２１０２と、鍵選択部２１０３と、送信部２１０４と、番号記憶部２１０５と、鍵復号部２１０６と、データ復号部２１０７と、データ利用部２１０８と、を備えている。
【００４５】
読取部２１０１は、記憶装置１００の一般領域１１１１から変換ＭＫＢを読み取る。なお、記憶装置１００から変換ＭＫＢをアクセス装置２００に送信する代わりに、アクセス装置２００が、記憶装置１００以外の第三者から変換ＭＫＢを取得するように構成してもよい。
【００４６】
変換デバイス鍵記憶部２１０２は、記憶装置１００のデバイス鍵記憶部１１０１に記憶された複数のデバイス鍵を変換した複数の変換デバイス鍵（Twisted  Device  Key）を記憶する。変換デバイス鍵のデータ構造の詳細については後述する。
【００４７】
鍵選択部２１０３は、複数の変換デバイス鍵の中から、変換ＭＫＢに応じた変換デバイス鍵を選択し、選択した変換デバイス鍵から認証鍵ＫＡを算出する。
【００４８】
送信部２１０４は、選択された復号鍵Ｋｄを特定する鍵インデックスｉ（ｍ）を記憶装置１００に送信する。番号記憶部２１０５は、アクセス装置２００のデバイス番号ｍを記憶する。
【００４９】
鍵復号部２１０６は、鍵選択部２１０３により算出された認証鍵ＫＡを用いて暗号化乱数Ｒ’から乱数Ｒを復号する。データ復号部２１０７は、乱数Ｒを用いて暗号化データＤ’からデータＤを復号する。データ利用部２１０８は、データＤを利用する処理部である。例えば、データ利用部２１０８は、データＤをディスプレイなどに表示する処理を行う。
【００５０】
次に、このように構成された本実施形態にかかる記憶装置１００およびアクセス装置２００によるアクセス処理について図５を用いて説明する。図５は、本実施形態におけるアクセス処理の全体の流れを示すシーケンス図である。
【００５１】
まず、アクセス装置２００の読取部２１０１が、記憶装置１００に対して変換ＭＫＢの送信を要求する（ステップＳ１０１）。記憶装置１００は、要求に応じて一般領域１１１１から変換ＭＫＢを読み出し、アクセス装置２００に送信する（ステップＳ１０２）。
【００５２】
アクセス装置２００の鍵選択部２１０３は、変換デバイス鍵記憶部２１０２に記憶された複数の変換デバイス鍵から、変換ＭＫＢに対応する変換デバイス鍵を復号鍵Ｋｄとして選択する（ステップＳ１０３）。鍵選択部２１０３は、選択した復号鍵Ｋｄを特定する情報である鍵インデックスｉ（ｍ）を算出する（ステップＳ１０４）。送信部２１０４は、算出された鍵インデックスｉ（ｍ）と、番号記憶部２１０５に記憶されたデバイス番号ｍとを記憶装置１００に送信する（ステップＳ１０５）。
【００５３】
記憶装置１００の取得部１１０２は、アクセス装置２００から送信された鍵インデックスｉ（ｍ）を受信する。鍵生成部１１０５の第１算出部１１０５ａは、受信された鍵インデックスｉ（ｍ）で特定されるデバイス鍵から関数ＰＦによる経路関数値を算出する。そして、第１算出部１１０５ａは、経路関数値をデバイス番号ｍで変換した復号鍵Ｋｄを算出する（ステップＳ１０６）。
【００５４】
また、鍵生成部１１０５は、ベース鍵記憶部１１０４からベース鍵ＫＢを取得する（ステップＳ１０７）。第２算出部１１０５ｂは、復号鍵Ｋｄによりベース鍵ＫＢを復号することにより認証鍵ＫＡを算出する（ステップＳ１０８）。
【００５５】
一方、アクセス装置２００では、鍵選択部２１０３が、ベース鍵ＫＢを、読取部２１０１により読み取られた変換ＭＫＢから取得する（ステップＳ１０９）。鍵選択部２１０３は、取得したベース鍵ＫＢを、ステップＳ１０３で選択した復号鍵Ｋｄにより復号した認証鍵ＫＡを算出する（ステップＳ１１０）。
【００５６】
ここまでの処理により、記憶装置１００およびアクセス装置２００のそれぞれが同一の認証鍵ＫＡを得ることができる（ステップＳ１０８、ステップＳ１１０）。これ以降、共有する認証鍵ＫＡを用いた各種処理を実行可能となる。以下では、認証鍵ＫＡを用いて秘匿領域１１１０からのデータを読み出す処理を例に説明するが、適用可能な処理はこれに限られるものではない。例えば、アクセス装置２００が記憶装置１００の秘匿領域１１１０にデータを書き込む場合についても、認証鍵ＫＡを共有するまでの処理は図５と同様の処理が適用できる。
【００５７】
記憶装置１００で認証鍵ＫＡが算出されると、乱数生成部１１０６が、乱数Ｒを生成する（ステップＳ１１１）。鍵暗号化部１１０７は、乱数Ｒを認証鍵ＫＡで暗号化した乱数である暗号化乱数Ｒ’を算出する（ステップＳ１１２）。データ暗号化部１１０８は、秘匿領域１１１０に記憶されたデータＤを乱数Ｒで暗号化したデータである暗号化データＤ’を算出する（ステップＳ１１３）。記憶装置１００は、暗号化乱数Ｒ’と暗号化データＤ’とをアクセス装置２００に送信する（ステップＳ１１４）。
【００５８】
アクセス装置２００の鍵復号部２１０６は、受信した暗号化乱数Ｒ’を認証鍵ＫＡで復号した乱数Ｒを算出する（ステップＳ１１５）。データ復号部２１０７は、受信した暗号化データＤ’を乱数Ｒで復号したデータＤを算出する（ステップＳ１１６）。
【００５９】
このような処理により、ＭＫＢ技術を用いた認証鍵共有による秘匿領域へのアクセス処理を実現できる。
【００６０】
次に、上記のようなアクセス処理の具体例についてさらに説明する。以下では、アクセス装置２００に経路ｘ＝（２，０，２，２，１）が割り当てられているものとする。
【００６１】
番号記憶部２１０５が格納するデバイス番号は、アクセス装置２００に割り当てられている数値である。この数値は通常アクセス装置１台ごとに異なっているが、一群のアクセス装置２００に共通であってもよい。本実施形態では、デバイス番号は、アクセス装置２００に割り当てられた経路を表現する数値とする。すなわち、番号記憶部２１０５は、経路ｘ＝（２，０，２，２，１）を３進表現した数値であるデバイス番号ｍ＝２０２２１＿３＝１８７を格納している。なお、＊＿３は、「＊」が３進数であることを表す。
【００６２】
経路を３進表現するとは、経路に含まれる数値を順列の順に左から右に並べて３進数とみなすことをいう。なお、経路に含まれる数値は０、１、２に限られるものではない。また、経路に含まれる数値の個数の最大値は５に限られるものではない。すなわち、ａ個の数値をｂ個並べた順列全体の集合の要素を経路とするように構成できる（ａおよびｂは２以上の整数）。この場合、生成行列は、ａ行ｂ列の行列となる。また、デバイス番号ｍは、例えば経路をａ進表現した数値とすればよい。例えばａ＝２の場合、経路が数値０または１を含むように構成し、経路を２進表現した数値をデバイス番号ｍとするように構成する。
【００６３】
変換デバイス鍵記憶部２１０２は以下の（９）式に示す鍵束を格納しているものとする。
｛Ｇ（ｍ，ＰＦ（２）），Ｇ（ｍ，ＰＦ（２，０）），Ｇ（ｍ，ＰＦ（２，０，２）），Ｇ（ｍ，ＰＦ（２，０，２，２）），Ｇ（ｍ，ＰＦ（２，０，２，２，１））｝・・・（９）
【００６４】
関数ＰＦは以下の（１０）式のように定義される。なお（＋）はビットごとの排他的論理和を表す。
ＰＦ（ｎ０）＝ｋ（０，ｎ０），
ＰＦ（ｎ０，ｎ１）＝ＰＦ（ｎ０）（＋）ｋ（１，ｎ１），
ＰＦ（ｎ０，ｎ１，ｎ２）＝ＰＦ（ｎ０，ｎ１）（＋）ｋ（２，ｎ２），
ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３）＝ＰＦ（ｎ０，ｎ１，ｎ２）（＋）ｋ（３，ｎ３），
ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）＝ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３）（＋）ｋ（４，ｎ４）・・・（１０）
【００６５】
（１０）式は、上述の（２）式の一方向性関数Ｇとしてビットごとの排他的論理和を適用した例を表している。すなわち、関数ＰＦは、生成行列Ｍの任意の経路に対して、生成行列Ｍの要素を用いて定義される関数（経路関数）である。
【００６６】
（９）式のＧは一方向性関数であり、Ｇ（ｍ，Ｘ）は数値Ｘにデータを利用するデバイス（アクセス装置２００）のデバイス番号ｍを用いて一方向性関数を適用した結果を表す。一方向性関数としては、（１０）式と同様のビットごとの排他的論理和を用いてもよい。
【００６７】
さらに、変換デバイス鍵記憶部２１０２は、以下の（１１）式で示すような、格納している鍵束の添字の集合を格納している。
｛（２）、（２，０）、（２，０，２）、（２，０，２，２）、（２，０，２，２，１）｝・・・（１１）
【００６８】
ここで、変換ＭＫＢのデータ構造の一例について説明する。変換ＭＫＢは、ＭＫＢインデックス（ＭＫＢ  indices）と、ＭＫＢインデックスに対応するベース鍵（ＭＫＢａｓｅ（Media  Key  Base））を含んでいる。
【００６９】
ＭＫＢインデックスとは、デバイス鍵を無効化するための生成行列Ｍの経路の集合である。先に述べた通り、デバイス鍵と生成行列Ｍの経路とは一対一に対応している。無効化するデバイス（＝経路）が存在しないとき、ＭＫＢインデックスは以下の（１２）式のようになっている。
｛０，１，２｝・・・（１２）
【００７０】
また、例えば、経路ｙ０＝（１，０，２，１，１）を無効化するＭＫＢインデックスは以下の（１３）式のようになる。
｛（０）、（２）、（１，１）、（１，２）、（１，０，０）、（１，０，１）、（１，０，２，０）、（１，０，２，２）、（１，０，２，１，０）、（１，０，２，１，２）｝・・・（１３）
【００７１】
以下に、ＭＫＢインデックスの構成方法の一例を説明する。本実施形態では、生成行列Ｍが３×５行例（３行５列）である場合に即して説明を行うが、生成行列Ｍが一般のａ×ｂ行列である場合も同様である。
【００７２】
経路ｘ＝（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）に対して、生成行列Ｍ上の経路の集合｛（ｎ０）、（ｎ０，ｎ１）、（ｎ０，ｎ１，ｎ２）、（ｎ０，ｎ１，ｎ２，ｎ３）、（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）｝を、経路ｘの随伴経路集合と呼ぶ。また、随伴経路集合の要素である各経路を随伴経路と呼ぶ。経路ｘの随伴経路集合をＡＰ（Ｘ）で表す。また、各随伴経路に対して、経路の最後の数値が異なる経路を境界経路と呼び、境界経路の集合を境界経路集合と呼ぶ。経路ｘ＝（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）の境界経路集合ＢＰ（Ｘ）は以下の（１４）式で与えられる。
ＢＰ（Ｘ）＝｛（ｎ）｜ｎ≠ｎ０｝∪｛（ｎ０，ｎ）｜ｎ≠ｎ１｝∪｛（ｎ０，ｎ１，ｎ）｜ｎ≠ｎ２｝∪｛（ｎ０，ｎ１，ｎ２，ｎ）｜ｎ≠ｎ３｝∪｛（ｎ０，ｎ１，ｎ２，ｎ３，ｎ）｜ｎ≠ｎ４｝・・・（１４）
【００７３】
例えば、経路ｙ０の境界経路集合は以下の（１５）式のようになる。
｛（０）、（２）、（１，１）、（１，２）、（１，０，０）、（１，０，１）、（１，０，２，０）、（１，０，２，２）、（１，０，２，１，０）、（１，０，２，１，２）｝・・・（１５）
【００７４】
経路ｙ０を無効化するＭＫＢインデックスはｙ０の境界経路集合である。
【００７５】
さらに、２つ以上の経路を無効化する場合を考える。
（定義）
（１）経路ｘ１，ｘ２，・・・，ｘＮの随伴経路集合ＡＰ（ｘ１，ｘ２，・・・，ｘＮ）とは、各経路ｘ１，ｘ２，・・・，ｘＮの随伴経路集合の和集合である：
ＡＰ（ｘ１，ｘ２，・・・，ｘＮ）＝ＡＰ（ｘ１）∪ＡＰ（ｘ２）∪・・・∪ＡＰ（ｘＮ）。
（２）経路ｘ１，ｘ２，・・・，ｘＮの境界経路集合ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）とは、各経路ｘ１，ｘ２，・・・，ｘＮの境界経路集合の和集合から、経路ｘ１，ｘ２，・・・，ｘＮの随伴経路集合を除いた差集合である：
ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）＝ＢＰ（ｘ１）∪ＢＰ（ｘ２）∪・・・∪ＢＰ（ｘＮ）−ＡＰ（ｘ１，ｘ２，・・・，ｘＮ）。
（３）経路ｘ１，ｘ２，・・・，ｘＮを無効化するＭＫＢインデックスは、経路ｘ１，ｘ２，・・・，ｘＮの境界経路集合ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）である。
【００７６】
例えば、経路ｙ１＝（０，０，１，１，２）として、経路ｙ０と経路ｙ１の境界経路集合を求める。経路ｙ０と経路ｙ１の境界経路集合は、それぞれ上記（１５）式および以下の（１６）式のようになる。
｛（１）、（２）、（０，１）、（０，２）、（０，０，０）、（０，０，２）、（０，０，１，０）、（０，０，１，２）、（０，０，１，１，０）、（０，０，１，１，１）｝・・・（１６）
【００７７】
従って、上記２つの境界経路集合の和集合は以下の（１７）式のようになる。
｛（０）、（１）、（２）、（１，１）、（１，２）、（０，１）、（０，２）、（１，０，０）、（１，０，１）、（０，０，０）、（０，０，２）、（１，０，２，０）、（１，０，２，２）、（０，０，１，０）、（０，０，１，２）、（１，０，２，１，０）、（１，０，２，１，２）、（０，０，１，１，０）、（０，０，１，１，１）｝・・・（１７）
【００７８】
従って、ｙ０とｙ１の境界経路集合は以下の（１８）式のようになる。
｛（２）、（１，１）、（１，２）、（０，１）、（０，２）、（１，０，０）、（１，０，１）、（０，０，０）、（０，０，２）、（１，０，２，０）、（１，０，２，２）、（０，０，１，０）、（０，０，１，２）、（１，０，２，１，０）、（１，０，２，１，２）、（０，０，１，１，０）、（０，０，１，１，１）｝・・・（１８）
【００７９】
上記境界経路集合ＢＰ（ｙ０，ｙ１）が、経路ｙ０と経路ｙ１とを無効化するＭＫＢインデックスである。
【００８０】
経路の集合Ｓが経路ｘ１，ｘ２，・・・，ｘＮを無効化するとは、次の２つの条件が成立することをいう。
ｉ）ＡＰ（ｘ１，ｘ２，・・・，ｘＮ）∩Ｓ＝φ
ｉｉ）｛ｘ１，ｘ２，・・・，ｘＮ｝に含まれない任意の経路ｙについてＡＰ（ｙ）∩Ｓ≠φ
【００８１】
以下に、ＭＫＢインデックス、すなわち、境界経路集合ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）が、経路ｘ１，ｘ２，・・・，ｘＮを無効化する集合であることを証明する。
【００８２】
ＡＰ（ｘ１，ｘ２，・・・，ｘＮ）∩ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）＝φは、ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）の定義より自明である。
【００８３】
｛ｘ１，ｘ２，・・・，ｘＮ｝に含まれない任意の経路を経路ｙとする。ＡＰ（ｙ）は長さ１から５までの５つの経路からなる。ただし、経路（順列）の長さとは要素数である。例えば、（１，０，２）の長さは３である。ＡＰ（ｙ）＝｛（ｎ０）、（ｎ０，ｎ１）、（ｎ０，ｎ１，ｎ２）、（ｎ０，ｎ１，ｎ２，ｎ３）、（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）｝とする。また、ＡＰ（ｙ）∩ＢＰ（ｘ１，・・・，ｘＮ）＝φであると仮定する。ｎ０はｘ１，・・・，ｘＮのいずれかの最初の要素である。さもなければ、（ｎ０）∈ＢＰ（ｘ１，・・・，ｘＮ）となって仮定に矛盾する。次に、（ｎ０，ｎ１）は、ｘ１，・・・，ｘＮのいずれかの最初の２つの要素からなる順列に一致する。さもなければ、（ｎ０，ｎ１）∈ＢＰ（ｘ１，・・・，ｘＮ）となって仮定に矛盾する。同様の推論を繰り返すことにより、結局、ｙ＝（ｎ０，・・・，ｎ４）は、ｘ１，・・・，ｘＮのいずれかに一致しなければならない。これは経路ｙが｛ｘ１，ｘ２，・・・，ｘＮ｝に含まれない経路であるとした仮定に反する。すなわち、経路ｙが｛ｘ１，ｘ２，・・・，ｘＮ｝に含まれない経路であれば、ＡＰ（ｙ）∩ＢＰ（ｘ１，・・・，ｘＮ）≠φ。以上により、ＭＫＢインデックスが経路ｘ１，・・・，ｘＮを無効化することが証明された。
【００８４】
次に、ＭＫＢインデックスＢＰ（ｘ１，・・・，ｘＮ）が、経路ｘ１，・・・，ｘＮを無効化する最小の集合であることを示す。
【００８５】
ρ∈ＢＰ（ｘ１，・・・，ｘＮ）とする。経路ρを適当に長さ５まで伸ばして経路ｙを作る。ここで、経路ｕ∈ＡＰ（ｙ）∩（ＢＰ（ｘ１，・・・，ｘＮ）−｛ρ｝）とする。ｌ（ｐ）を経路ｐの長さとして、ｌ（ｕ）＜ｌ（ρ）であるとすると、ρ∈ＢＰ（ｘ１，・・・，ｘＮ）であったから、ある番号ｉに対してｕ∈ＡＰ（ｘｉ）でなければならない。これは仮定に反する。また、ｌ（ｕ）＝ｌ（ρ）であるとするとｕ＝ρとなり、仮定に矛盾する。ｌ（ｕ）＞ｌ（ρ）であると仮定する。経路ｕの最後の要素を取り除いた経路をｕ’とおくと、ＢＰ（ｘ１，・・・，ｘＮ）の定義より、ある番号ｊが存在してｕ’∈ＡＰ（ｘｊ）でなければならない。従ってρ∈ＡＰ（ｘｊ）となり、仮定に矛盾する。結局、ＡＰ（ｙ）∩（ＢＰ（ｘ１，・・・，ｘＮ）−｛ρ｝）＝φとなる。以上で、ＢＰ（ｘ１，・・・，ｘＮ）が経路ｘ１，・・・，ｘＮを無効化する最小の集合であることが証明された。
【００８６】
次に、ベース鍵について説明する。ベース鍵は、１６バイトのデータＫＢである（以下、ベース鍵ＫＢという。）。ベース鍵ＫＢは、後述するように、記憶装置とアクセス装置とが共有鍵（上述の認証鍵ＫＡに対応）を算出する際のベースとなる。
【００８７】
本実施形態では、変換ＭＫＢは１つの記憶装置１００に対して１つ存在する。アクセス装置２００が記憶装置１００の秘匿領域１１１０からデータを読み取る際は、まず、読取部２１０１が記憶装置１００の一般領域１１１１から変換ＭＫＢを読み取る（図５のステップＳ１０１、ステップＳ１０２）。読取部２１０１は、読み取った変換ＭＫＢのＭＫＢインデックスを鍵選択部２１０３に送る。鍵選択部２１０３は、変換デバイス鍵記憶部２１０２から変換デバイス鍵を読み取り、復号鍵Ｋｄを選択する（ステップＳ１０３）。以下に、ステップＳ１０３の鍵選択部２１０３による復号鍵Ｋｄの選択処理の詳細について説明する。
【００８８】
ＭＫＢインデックスをＩ＿ＭＫＢとし、変換デバイス鍵記憶部２１０２が格納する添字の集合をＩ＿Ｄとする。鍵選択部２１０３は、Ｉ＿ＭＫＢ∩Ｉ＿Ｄ≠φであるか否かを調べる。Ｉ＿ＭＫＢ∩Ｉ＿Ｄ＝φであれば、デバイス鍵は無効化されている。この場合、鍵選択部２１０３は処理を停止する。一方、Ｉ＿ＭＫＢ∩Ｉ＿Ｄ≠φであれば、鍵選択部２１０３は、ｕ∈Ｉ＿ＭＫＢ∩Ｉ＿Ｄである経路ｕを１つ見出す。鍵選択部２１０３は、この経路ｕに対応する（変換デバイス鍵中の）鍵を復号鍵Ｋｄとして選択する。より具体的には、鍵選択部２１０３は次の動作を行う。なお、ＭＫＢインデックス（Ｉ＿ＭＫＢ）が以下の（２０）式のようになっているとする。
Ｉ＿ＭＫＢ＝｛（０）、（２）、（１，１）、（１，２）、（１，０，０）、（１，０，１）、（１，０，２，０）、（１，０，２，１，０）、（１，０，２，１，２）、（１，０，２，２，０）、（１，０，２，２，２）｝・・・（２０）
【００８９】
このＭＫＢインデックスは、以下の（２１）式の２つの経路ｙ０とｙ２とを無効化するものである。
ｙ０＝（１，０，２，１，１）、ｙ２＝（１，０，２，２，１）・・・（２１）
【００９０】
アクセス装置２００に割り当てられている経路をｘ０＝（１，０，２，０，１）とする。このとき、アクセス装置２００の変換デバイス鍵記憶部２１０２は、以下の（２２）式の添字を格納している。
Ｉ＿Ｄ＝｛（１）、（１，０）、（１，０，２）、（１，０，２，０）、（１，０，２，０，１）｝・・・（２２）
【００９１】
さらに、変換デバイス鍵記憶部２１０２は、以下の（２３）式のデバイス鍵（束）を格納している。
Ｄ０＝｛
Ｇ（１００，ＰＦ（１）），
Ｇ（１００，ＰＦ（１，０）），
Ｇ（１００，ＰＦ（１，０，２）），
Ｇ（１００，ＰＦ（１，０，２，０）），
Ｇ（１００，ＰＦ（１，０，２，０，１））｝・・・（２３）
【００９２】
なお、アクセス装置２００のデバイス番号ｍは、経路ｘ０の３進表現１０２０１＿３から得られる１００である。鍵選択部２１０３は、Ｉ＿Ｄの添字（経路）を１つずつ順に選び、Ｉ＿ＭＫＢに含まれているか否かを調べる。鍵選択部２１０３は、例えば以下に示すような関数ｋｅｙ＿ｃｈｏｉｃｅ（）により、復号鍵Ｋｄを選択する。
ｋｅｙ＿ｃｈｏｉｃｅ（Ｉ＿Ｄ，Ｉ＿ＭＫＢ）｛
ｉｎｔ  ｉ，ｊ；
ｆｏｒ（ｊ＝０；ｊ＜５；ｊ＋＋）
ｆｏｒ（ｉ＝０；ｉ＜１１；ｉ＋＋）
ｉｆ（Ｉ＿Ｄ［ｊ］＝＝Ｉ＿ＭＫＢ［ｉ］）｛
復号鍵Ｋｄとして、Ｄ０［ｊ］を選択；
ｒｅｔｕｒｎ  ｊ；
｝
ｒｅｔｕｒｎ  −１；
｝
【００９３】
この結果、（２０）式のＩ＿ＭＫＢと（２２）式のＩ＿Ｄに対しては、復号鍵ＫｄとしてＤ０［３］＝Ｇ（１００，ＰＦ（１，０，２，０））が選択される。
【００９４】
他方、アクセス装置２００に割り当てられている経路がｙ０である場合は、アクセス装置２００に割り当てられている鍵束（変換デバイス鍵）および添字は以下の（２４）式のようになる。
鍵束：｛
Ｇ（１０３，ＰＦ（１）），
Ｇ（１０３，ＰＦ（１，０）），
Ｇ（１０３，ＰＦ（１，０，２）），
Ｇ（１０３，ＰＦ（１，０，２，１）），
Ｇ（１０３，ＰＦ（１，０，２，１，１））｝、
添字：｛（１）、（１，０）、（１，０，２）、（１，０，２，１）、（１，０，２，１，１）｝・・・（２４）
【００９５】
このアクセス装置２００のデバイス番号ｍは１０２１１＿３＝１０３である。このアクセス装置２００の場合、関数ｋｅｙ＿ｃｈｏｉｃｅ（）は復号鍵Ｋｄを見出すことができず、数値−１を返して停止する。
【００９６】
鍵選択部２１０３が復号鍵Ｋｄを見出すことができた場合、鍵選択部２１０３は、見出した復号鍵Ｋｄの添字を送信部２１０４に送る。送信部２１０４は、添字を鍵インデックスｉ（ｍ）として、記憶装置１００に送る。上記の例では、（１，０，２，０）が復号鍵Ｋｄの添字であるから、送信部２１０４は、鍵インデックスｉ（ｍ）として添字（１，０，２，０）を記憶装置１００に送る（ステップＳ１０５）。なお、鍵インデックスは、アクセス装置２００のデバイス番号ｍに依存する。従って、鍵インデックスをｉ（ｍ）と表記する。鍵インデックスは、ａ行ｂ列の生成行列の１列からｃ列（ｃは１≦ｃ≦ｂを満たす整数）までの行のいずれかを特定する情報となる。
【００９７】
なお、鍵インデックスｉ（ｍ）を送信する代わりに、鍵選択部２１０３が、見出した復号鍵Ｋｄの添字の長さを送信部２１０４に送ってもよい。上記の例では、復号鍵Ｋｄの添字（１，０，２，０）の長さは４であるから、送信部２１０４は、鍵インデックスとして数４を記憶装置１００に送る。記憶装置１００では、別途アクセス装置２００から取得するデバイス番号ｍと合わせて、復号鍵Ｋｄの添字を取得することができる。具体的には、添字を取得する処理は例えば次のように行われる。
【００９８】
アクセス装置２００には経路ｘ０＝（１，０，２，０，１）が割り当てられているものとする。このとき、当該アクセス装置２００の番号記憶部２１０５はデバイス番号１０２０１＿３＝１００を格納している。記憶装置１００がアクセス装置２００からデバイス番号＝１０２０１＿３と鍵インデックス＝４を受け取ると、３進表記のデバイス番号から４つの添字を切りだして、復号鍵Ｋｄの添字（１，０，２，０）を得ることができる。すなわち、記憶装置１００が、鍵インデックスとアクセス装置２００のデバイス番号と組み合わせて、復号鍵Ｋｄの添字が得られるように、鍵インデックスを定義すればよい。
【００９９】
鍵選択部２１０３は次に、読取部２１０１から、ベース鍵ＫＢを読み取る（ステップＳ１０９）。鍵選択部２１０３は、以下の（２５）式に示すように、復号鍵Ｋｄによってベース鍵ＫＢを復号して認証鍵ＫＡを得る（ステップＳ１１０）。Ｄ（Ｘ，Ｙ）は、ＹをＸで復号する復号演算を表す。
ＫＡ＝Ｄ（Ｋｄ，ＫＢ）・・・（２５）
【０１００】
一方、記憶装置１００では、取得部１１０２が鍵インデックスｉ（ｍ）をアクセス装置２００から受け取る。取得部１１０２は、鍵インデックスｉ（ｍ）を鍵生成部１１０５に送る。鍵生成部１１０５は、受信部１１０３にアクセス装置２００のデバイス番号ｍを読み出すよう指示する。受信部１１０３は、アクセス装置２００の番号記憶部２１０５から読み出されたデバイス番号ｍを受信し、受信したデバイス番号ｍを鍵生成部１１０５に送る。鍵生成部１１０５は、デバイス鍵記憶部１１０１から生成行列Ｍによって定められるデバイス鍵を読み出して、鍵インデックスｉ（ｍ）に対応する認証鍵ＫＡを生成する。
【０１０１】
例えば、生成行列Ｍが図２で与えられ、ｍ＝１００＝１０２０１＿３、ｉ（ｍ）＝４であるとき、鍵生成部１１０５は、以下のｉ）〜ｖｉ）の手続きによって認証鍵ＫＡを得る。
ｉ）復号鍵Ｋｄの添字（１，０，２，０）を取得する。
ｉｉ）添字が定める経路に対する経路関数値ＰＦ（１，０，２，０）＝ｋ（０，１）（＋）ｋ（１，０）（＋）ｋ（２，２）（＋）ｋ（３，０）を算出する。
ｉｉｉ）復号鍵Ｋｄ＝Ｇ（ｍ，ＰＦ（１，０，２，０））＝Ｇ（１００，ＰＦ（１，０，２，０））を算出する（ステップＳ１０６）。
ｉｖ）ベース鍵記憶部１１０４からベース鍵ＫＢを取得する（ステップＳ１０７）。
ｖｉ）ｉｉｉ）で取得した復号鍵Ｋｄによってベース鍵ＫＢを復号して認証鍵ＫＡを得る（ステップＳ１０８）：ＫＡ＝Ｄ（Ｋｄ，ＫＢ）。
【０１０２】
鍵生成部１１０５は、算出した認証鍵ＫＡを鍵暗号化部１１０７に送る。鍵暗号化部１１０７は、乱数生成部１１０６に乱数発生要求を出し、乱数発生部１１０６が発生した乱数Ｒ（ステップＳ１１１）を受け取る。鍵暗号化部１１０７は、乱数Ｒを認証鍵ＫＡで暗号化し（ステップＳ１１２）、その結果である暗号化乱数Ｒ’＝Ｅ（ＫＡ，Ｒ）をアクセス装置２００に送る（ステップＳ１１４）。Ｅ（ＫＡ，Ｒ）は、Ｒを認証鍵ＫＡで暗号化した結果を表す。一方、乱数Ｒは乱数発生部１１０６からデータ暗号化部１１０８にも送られる。アクセス装置２００からの読み出し要求を受け、データ暗号化部１１０８は乱数Ｒを用いて、秘匿領域１１１０に格納されている読み出し対象のデータＤを暗号化し、暗号化データＤ’＝Ｅ（Ｒ，Ｄ）を得る（ステップＳ１１３）。データ暗号化部１１０８は暗号化データＤ’をアクセス装置２００に送る（ステップＳ１１４）。
【０１０３】
アクセス装置２００は、暗号化乱数Ｒ’を受け取ると、暗号化乱数Ｒ’を鍵復号部２１０６に入力する。鍵復号部２１０６は、鍵選択部２１０３から、鍵選択部２１０３が先に算出した認証鍵ＫＡを取得する。鍵復号部２１０６は、認証鍵ＫＡを用いて暗号化乱数Ｒ’を復号し、乱数Ｒを得る（ステップＳ１１５）：Ｒ＝Ｄ（ＫＡ，Ｒ’）。鍵復号部２１０６は、得られた乱数Ｒをデータ復号部２１０７に送る。
【０１０４】
データ復号部２１０７は、記憶装置１００に読み出し要求を出す。上述のように、記憶装置１００のデータ暗号化部１１０８は、読み出し要求を受け、暗号化データＤ’を出力する。データ復号部２１０７は、暗号化データＤ’を取得する。データ復号部２１０７は、暗号化データＤ’を乱数Ｒによって復号し、読み出し対象のデータＤを得る（ステップＳ１１６）。データ復号部２１０７は、データＤをデータ利用部２１０８に送る。データ利用部２１０８は、データＤを画面表示するなどして利用する。
【０１０５】
以上のように、本実施形態では、以下のような機能が実現される。
ｉ）変換ＭＫＢは、ＭＫＢインデックスとベース鍵を含んでいる。特定の生成行列と、当該生成行列上の経路を想定した上で、ＭＫＢインデックスは無効化対象の経路の境界経路集合を用いて構成される。
ｉｉ）アクセス装置２００は、アクセス装置２００に割り当てられている識別情報（本実施形態ではデバイス番号）を格納しており、記憶装置１００の秘匿領域１１１０のデータの読み出しまたは秘匿領域１１１０へのデータの書き込みの際に、当該識別情報を記憶装置１００に送る。
ｉｉｉ）記憶装置１００は、生成行列を格納している。記憶装置１００は、生成行列、アクセス装置２００から取得した識別情報、および、記憶装置１００が格納するベース鍵を用いて、認証鍵を生成する。
ｉｖ）アクセス装置２００は、アクセス装置２００に割り当てられている（生成行列上の）経路によって定められる、経路関数値を用いて算出されるデバイス鍵を格納しているが、当該デバイス鍵は、当該アクセス装置２００が格納する識別情報を用いて変換されている（変換デバイス鍵）。
ｖ）アクセス装置２００は、変換デバイス鍵と、ベース鍵とから認証鍵を算出する。
ｖｉ）記憶装置１００とアクセス装置２００とは、それぞれが導出した（共通の）認証鍵を共有し、共有する認証鍵を乱数の暗号化やデータの暗号化に用いる。
【０１０６】
本実施形態では、ＭＫＢインデックスによって、通常のＭＫＢと同様の効率的なアクセス装置２００の無効化が行われる。しかも、本実施形態では通常のＭＫＢの場合とは異なり、アクセス装置２００と記憶装置１００の間で共有される認証鍵（上記の例ではＫＡ＝Ｄ（Ｇ（１００，ＰＦ（１，０，２，０）），Ｅ（ＰＦ（１，０，２，０），ＫＭ）））は、アクセス装置２００ごとに異なる。各アクセス装置２００は互いに異なるデバイス番号を有しているので、認証鍵ＫＡはアクセス装置２００ごとに異なる。その結果、万一、あるアクセス装置２００が不正に解析されて、記憶装置１００との間で共有される認証鍵ＫＡが暴露されたとしても、認証鍵ＫＡを、異なるデバイス鍵を持つ、別のアクセス装置２００でそのまま利用することはできない。
【０１０７】
通常のＭＫＢでは、あるＭＫＢについてメディア鍵を知れば、記憶装置１００によるアクセス装置２００の認証が完了する。例えば図１の例では、メディア鍵ＫＭを有していれば、記憶装置１０の秘匿領域（データ記憶部３）からデータを読み出すことができることになる。このように、通常のＭＫＢによる認証の場合、デバイス鍵は不要である。従って、次のようなシステムに対する攻撃のシナリオが成立する。
ｉ）攻撃者は特定の（脆弱性を有する）アクセス装置２００を分析してデバイス鍵を得る。
ｉｉ）攻撃者は不正取得したデバイス鍵を用いて、記憶装置１００が格納するＭＫＢのメディア鍵を取得する。
ｉｉｉ）攻撃者は不正に取得したメディア鍵を含む不正なアクセス装置２００（ソフトウェア）を配布する。不正なアクセス装置２００は記憶装置１００の秘匿領域１１１０から自由にデータを読み出すことができる。不正なアクセス装置２００自身はデバイス鍵を持っていないため、不正なアクセス装置２００を解析して、不正に解析されたアクセス装置２００のデバイス鍵を特定することはできない。従って、この方法では、不正に解析されたアクセス装置２００を無効化することができない。
ｉｖ）不正に解析されたアクセス装置２００のデバイス鍵を特定して無効化しない限り、ＭＫＢ（とメディア鍵と）を更新しても、アクセス装置２００を用いたメディア鍵の流出が続く。
【０１０８】
一方、変換ＭＫＢを用いる本実施形態では、アクセス装置２００が記憶装置１００の秘匿領域１１１０にアクセスするためには、特定のアクセス装置２００が算出した認証鍵ＫＡとアクセス装置２００の識別情報とが必要である。これらの情報を含み、記憶装置１００に不正にアクセスするソフトウェア等が配布されれば、識別情報を特定できるため、当該識別情報で指定されるデータ利用機器（アクセス装置２００）を、新しい変換ＭＫＢを配布することにより無効化できる。これにより、不正な解析を受けたと思われる当該データ利用機器からの認証鍵の流出を阻止することができる。
【０１０９】
このように、本実施形態では、認証と暗号化によって保護された秘匿領域からのデータ不正流出を回避することができる。
【０１１０】
次に、これまで説明した変換ＭＫＢを用いて、スマートグリッドなどのシステムでの共有鍵の管理を実現する方法について説明する。
【０１１１】
スマートグリッドに接続されるデバイスは一般に長期に渡って製造され、長期に渡って使用される。従って、共有鍵管理機能は製造時期の異なる多数のデバイスを管理することができなければならない。また、デバイスが悪意の第三者によってハッキングされる可能性も想定しておく必要がある。ハッキングされたデバイスはＤｏＳ（Denial  of  Service）攻撃の踏み台になる。また、他のデバイスから暗号通信によって取得した情報が、当該ハッキングされたデバイスから漏えいされる。従って、共有鍵更新のタイミングで、ハッキングされたデバイスの鍵更新を禁止することにより、当該ハッキングされたデバイスを暗号通信から排除する機能を共有鍵管理機能に含むことが望まれる。デバイスのハッキングは組織的に行われる可能性がある。デバイスのハッキングによって当該デバイスは不正な機器になり得るが、ハッキングの影響は当該デバイスに限定的となるべきであり、システム全体に波及してはならない。これらの技術要求を満たしつつ、できるだけシンプルにスマートグリッドにおける共有鍵を管理できることが望ましい。
【０１１２】
図６は、本実施形態の通信装置および鍵算出装置を含むスマートグリッドのシステム３０の構成例を示す図である。図６に示すように、システム３０は、ＭＤＭＳ３１と、分散電源３２と、蓄電装置３３と、送配電制御装置３４と、遠隔端末ユニット（Remote  Terminal  Unit，ＲＴＵ）３５ａ〜３５ｃと、ＥＭＳ３６と、ＢＥＭＳ３７と、ＳＭ３８ａ〜３８ｅと、ＨＥＭＳ３９と、コンセントレータ４１と、ネットワーク４２と、鍵算出装置３００と、鍵センタ４００と、を備えている。
【０１１３】
なお、ＲＴＵ３５ａ〜３５ｃは同様の機能を備えるため、以下では単にＲＴＵ３５という場合がある。同様に、ＳＭ３８ａ〜３８ｅは同様の機能を備えるため、以下では単にＳＭ３８という場合がある。また、図６では、鍵算出装置３００と、鍵センタ４００とを分けて記載しているが、１つの装置内に鍵算出装置３００および鍵センタ４００の機能を備えるように構成してもよい。
【０１１４】
図６に示すように、スマートグリッドでは、電力使用量を集計するＳＭ３８ｂと、家電機器を管理するホームサーバであるＨＥＭＳ３９とが各家庭に設置される。また、商業ビルを対象として、ビル内の電気機器を管理するサーバであるＢＥＭＳ３７が、ビルごとに設置される。ＳＭ３８は、中継器であるコンセントレータ４１によって数台ごとにまとめられ、ネットワーク４２を介してＭＤＭＳ３１と通信する。ＭＤＭＳ３１は、各ＳＭ３８から、一定の間隔で電力使用量を受信して記憶する。ＥＭＳ３６は、ＭＤＭＳ３１に集められた複数の家庭（および商業ビル）の電力使用量、または、電力系統に設置されたセンサからの情報に基づいて、各ＳＭ３８、ＨＥＭＳ３９、および、ＢＥＭＳ３７に対して電力使用を抑制するよう要求するなどの電力制御を行う。また、ＥＭＳ３６は、ＲＴＵ３５ａに接続された太陽光発電や風力発電などの分散電源３２、ＲＴＵ３５ｂに接続された蓄電装置３３、および、ＲＴＵ３５ｃに接続された、発電側との間の送配電を制御する送配電制御装置を制御することにより、スマートグリッド全体の電圧および周波数を安定化するための制御を行う。
【０１１５】
鍵算出装置３００は、ネットワーク４２に接続するデバイスが格納すべきデバイス鍵を生成する。また、鍵算出装置３００は、共有鍵生成の元となる変換ＭＫＢを生成する。デバイス鍵は、各デバイスがネットワーク４２に接続される際に、各デバイスにインストールされる。鍵算出装置３００が生成した変換ＭＫＢは、鍵センタ４００に送られる。鍵センタ４００は、ネットワークを通じて、変換ＭＫＢを各デバイスに配布する。
【０１１６】
各デバイスが最初にネットワークに接続される時点では、各デバイスは、デバイス鍵と、その時点での最新のＭＫＢを有している。これは、例えば、サービスマンが各デバイスにＭＫＢをインストールすることで実現される。
【０１１７】
複数のデバイスが通信する場合、複数のデバイスは、それぞれ、サーバデバイス（以下単にサーバという）とクライアントデバイス（以下単にサーバという）とに分かれる。これらは役割であり、固定したものではない。例えば、あるデバイスが、通信相手によってサーバになったりクライアントになったりしてもよい。クライアントがサーバに接続して通信が開始される。通常は１つのサーバが複数のクライアントと通信する。
【０１１８】
図６の例では、例えばＭＤＭＳ３１がサーバとなり、スマートメータ３８がクライアントとなることができる。以下、サーバとなるデバイス、および、クライアントとなるデバイスが備える機能の詳細について説明する。
【０１１９】
図７は、クライアント５００の構成例を示すブロック図である。図８は、サーバ６００の構成例を示すブロック図である。なお、図７および図８は、クライアント５００およびサーバ６００間で共有する共有鍵を生成するために用いる構成の一例を示している。
【０１２０】
図７に示すように、クライアント５００は、ＭＫＢ取得部５０１と、変換デバイス鍵記憶部５０２と、鍵選択部５０３と、番号取得部５０４と、算出部５０５と、を備えている。
【０１２１】
ＭＫＢ取得部５０１は、変換ＭＫＢを取得する。ＭＫＢ取得部５０１は、例えば、サーバ６００が送信した変換ＭＫＢをサーバ６００から取得する。
【０１２２】
変換デバイス鍵記憶部５０２は、図４の変換デバイス鍵記憶部２１０２と同様に、デバイス番号（以下、デバイス番号ｎとする）で変換されたデバイス鍵（以下、デバイス鍵ＫＤ（ｎ）という）を記憶する。デバイス鍵ＫＤ（ｎ）は、クライアント５００に固有のデバイス番号ｎと一方向性関数Ｇで変換したデバイス鍵である。
【０１２３】
鍵選択部５０３は、図４の鍵選択部２１０３と同様に、変換デバイス鍵記憶部５０２に記憶されたデバイス鍵ＫＤ（ｎ）の中から、変換ＭＫＢに応じた復号鍵Ｋｄを選択する。
【０１２４】
番号取得部５０４は、サーバ６００のデバイス番号（以下、デバイス番号ｍとする）を取得する。番号取得部５０４は、例えば、デバイス番号ｍをサーバ６００から受け取る。
【０１２５】
算出部５０５は、変換ＭＫＢに含まれるベース鍵ＫＢ、選択された復号鍵Ｋｄ、および、デバイス番号ｍを用いて、サーバ６００と共有する共有鍵を算出する。例えば、算出部５０５は、まず復号鍵Ｋｄとデバイス番号ｍとを一方向性関数Ｇに入力して得られる情報（第２情報）であるＧ（ｍ、Ｋｄ）を算出する。そして、算出部５０５は、算出した情報Ｇ（ｍ、Ｋｄ）でベース鍵ＫＢを復号した共有鍵Ｋｍｎ＝Ｄ（Ｇ（ｍ、Ｋｄ）、ＫＢ）を算出する。
【０１２６】
次に、サーバ６００の構成例について説明する。図８に示すように、サーバ６００は、ＭＫＢ取得部６０１と、変換デバイス鍵記憶部６０２と、鍵選択部６０３と、サーバ鍵生成部６０４と、鍵受信部６０５と、鍵復号部６０６と、番号記憶部６０７と、番号送信部６０８と、ＭＫＢ送信部６２０と、を備えている。
【０１２７】
ＭＫＢ取得部６０１は、変換ＭＫＢを取得する。ＭＫＢ取得部６０１は、例えば、鍵センタ４００が送信した変換ＭＫＢを鍵センタ４００から取得する。
【０１２８】
変換デバイス鍵記憶部６０２は、図４の変換デバイス鍵記憶部２１０２と同様に、デバイス番号ｍで変換されたデバイス鍵（以下、デバイス鍵ＫＤ（ｍ）という）を記憶する。デバイス鍵ＫＤ（ｍ）は、サーバ６００に固有のデバイス番号ｍと一方向性関数Ｇで変換したデバイス鍵である。
【０１２９】
鍵選択部６０３は、図４の鍵選択部２１０３と同様に、変換デバイス鍵記憶部６０２に記憶された変換デバイス鍵の中から、変換ＭＫＢに応じたデバイス鍵ＫＤ（ｍ）を選択する。
【０１３０】
サーバ鍵生成部６０４は、変換ＭＫＢに含まれるベース鍵ＫＢ、および、選択されたデバイス鍵ＫＤ（ｍ）を用いてサーバ鍵Ｋｍを算出する。
【０１３１】
鍵受信部６０５は、鍵センタ４００から、クライアント５００との間で共有する共有鍵Ｋｍｎを暗号化した暗号化共有鍵であるＥ（Ｋｍ，Ｋｍｎ｜｜Ｒ）を取得する。Ｒは乱数である。記号「｜｜」は、ＫｍｎとＲとを結合することを意味する。
【０１３２】
鍵復号部６０６は、サーバ鍵Ｋｍを用いて暗号化共有鍵を復号したデータＫｍｎ｜｜Ｒ＝Ｄ（Ｋｍ、Ｅ（Ｋｍ，Ｋｍｎ｜｜Ｒ））を得る。
【０１３３】
番号記憶部６０７は、サーバ６００のデバイス番号m、および、クライアント５００から予め取得したクライアントのデバイス番号ｎを記憶する。番号送信部６０８は、デバイス番号ｍおよびデバイス番号ｎを、鍵センタ４００に送信する。
【０１３４】
ＭＫＢ送信部６２０は、変換ＭＫＢをクライアント５００に送信する。ＭＫＢ送信部６２０の構成の詳細は後述する。
【０１３５】
次に、鍵算出装置３００の構成例について説明する。図９は、鍵算出装置３００の構成例を示すブロック図である。図９に示すように、鍵算出装置３００は、デバイス鍵記憶部３０１と、変換ＭＫＢ記憶部３０２と、受信部３０３と、算出部３０４と、を備えている。
【０１３６】
デバイス鍵記憶部３０１は、図３のデバイス鍵記憶部１１０１と同様に、図２に示す生成行列Ｍのような行列形式で複数のデバイス鍵を格納する。
【０１３７】
変換ＭＫＢ記憶部３０２は、図３のデータ記憶部１１０９の一般領域１１１１と同様に、変換ＭＫＢを記憶する。
【０１３８】
受信部３０３は、鍵センタ４００を介して、クライアント５００のデバイス番号ｎと、サーバ６００のデバイス番号ｍとを、サーバ６００から受信する。
【０１３９】
算出部３０４は、デバイス番号ｍおよびデバイス番号ｎとから、サーバ６００とクライアント５００の共有鍵Ｋｍｎを算出し、算出した共有鍵Ｋｍｎを出力する。算出部３０４は、サーバ６００のデバイス番号mのみの入力を受けた場合は、サーバ鍵Ｋｍを算出して出力する。
【０１４０】
算出部３０４は、例えば、クライアント５００の算出部５０５と同様の方法により復号鍵Ｋｄ、ベース鍵ＫＢ、および、デバイス番号ｍを用いて、共有鍵Ｋｍｎ＝Ｄ（Ｇ（ｍ、Ｋｄ）、ＫＢ）を算出する。なお、復号鍵Ｋｄは、クライアント５００のデバイス番号ｎを用いて、上述の第１算出部１１０５ａ（図３）と同様の方法により算出される。すなわち、算出部３０４は、例えば、鍵インデックスｉ（ｎ）で特定されるデバイス鍵から算出した経路関数値をデバイス番号ｎで変換した復号鍵Ｋｄを算出する。
【０１４１】
また、算出部３０４は、例えば、変換ＭＫＢ記憶部３０２に記憶された変換ＭＫＢに含まれるベース鍵ＫＢ、および、デバイス番号ｍに対応するデバイス鍵ＫＤ（ｍ）を用いて、サーバ６００のサーバ鍵生成部６０４と同様の方法によりサーバ鍵Ｋｍを算出する。
【０１４２】
次に、鍵センタ４００の構成例について説明する。図１０は、鍵センタ４００の構成例を示すブロック図である。図１０に示すように、鍵センタ４００は、サーバ鍵記憶部４１１と、乱数発生部４１２と、暗号化部４１３と、鍵送信部４１４と、ＭＫＢ送信部４２０と、を備えている。
【０１４３】
サーバ鍵記憶部４１１は、鍵算出装置３００が算出したサーバ鍵Ｋｍを記憶する。乱数発生部４１２は、乱数Ｒを発生する。暗号化部４１３は、鍵算出装置３００が算出した共有鍵Ｋｍｎに乱数Ｒを結合したデータ（Ｋｍｎ｜｜Ｒ）をサーバ鍵Ｋｍで暗号化した暗号化共有鍵であるＥ（Ｋｍ，Ｋｍｎ｜｜Ｒ）を算出する。鍵送信部４１４は、暗号化共有鍵をサーバ６００に送信する。ＭＫＢ送信部４２０は、変換ＭＫＢをサーバ６００に送信する。ＭＫＢ送信部４２０の構成の詳細は後述する。
【０１４４】
次に、このように構成された本実施形態にかかるクライアント５００による共有鍵算出処理について図１１を用いて説明する。図１１は、本実施形態におけるクライアント５００による共有鍵算出処理の全体の流れを示すフローチャートである。
【０１４５】
まず、ＭＫＢ取得部５０１が変換ＭＫＢを取得する（ステップＳ２０１）。ＭＫＢ取得部５０１は、変換ＭＫＢを鍵選択部５０３に送信する。鍵選択部５０３は、変換デバイス鍵記憶部５０２からデバイス鍵ＫＤ（ｎ）を取得する（ステップＳ２０２）。鍵選択部５０３は、変換ＭＫＢに含まれるＭＫＢインデックスと、デバイス鍵の添字とに基づいて、取得したデバイス鍵ＫＤ（ｎ）の中から適切な復号鍵Ｋｄを選択する（ステップＳ２０３）。
【０１４６】
鍵選択部５０３は、適切な復号鍵Ｋｄが選択できたか否かを判断する（ステップＳ２０４）。選択できなかった場合（ステップＳ２０４：Ｎｏ）、共有鍵算出処理を終了する。この場合、クライアント５００は変換ＭＫＢによって無効化されていることを意味する。
【０１４７】
復号鍵Ｋｄが選択できた場合（ステップＳ２０４：Ｙｅｓ）、鍵選択部５０３は、ＭＫＢ取得部５０１により取得された変換ＭＫＢからベース鍵ＫＢを取得する（ステップＳ２０５）。鍵選択部５０３は、復号鍵Ｋｄとベース鍵ＫＢとを算出部５０５に送る。
【０１４８】
番号取得部５０４は、通信相手となるサーバ６００のデバイス番号ｍを取得する（ステップＳ２０６）。番号取得部５０４は、取得したデバイス番号ｍを算出部５０５に送る。
【０１４９】
算出部５０５は、復号鍵Ｋｄ、ベース鍵ＫＢ、および、デバイス番号ｍを用いて、共有鍵Ｋｍｎ＝Ｄ（Ｇ（ｍ、Ｋｄ）、ＫＢ）を算出する（ステップＳ２０７）。
【０１５０】
次に、このように構成された本実施形態にかかるサーバ６００による共有鍵算出処理について図１２を用いて説明する。図１２は、本実施形態におけるサーバ６００による共有鍵算出処理の全体の流れを示すフローチャートである。
【０１５１】
ステップＳ３０１からステップＳ３０５までは、図１１のステップＳ２０１からステップＳ２０５と同様の処理のため説明を省略する。なお、図１２では、鍵選択部６０３は、復号鍵Ｋｄとベース鍵ＫＢとをサーバ鍵生成部６０４に送る。
【０１５２】
サーバ鍵生成部６０４は、復号鍵Ｋｄとベース鍵ＫＢとを用いて、サーバ鍵Ｋｍ＝Ｄ（Ｋｄ、ＫＢ）を算出する（ステップＳ３０６）。サーバ鍵生成部６０４は、算出したサーバ鍵Ｋｍを鍵復号部６０６に送る。
【０１５３】
番号送信部６０８は、番号記憶部６０７に記憶されているサーバ６００のデバイス番号ｍと、クライアント５００のデバイス番号ｎとを鍵センタ４００に送信する（ステップＳ３０７）。
【０１５４】
鍵受信部６０５は、鍵センタ４００から暗号化共有鍵であるＥ（Ｋｍ，Ｋｍｎ｜｜Ｒ）を取得する（ステップＳ３０８）。鍵受信部６０５は、取得した暗号化共有鍵を鍵復号部６０６に送る。
【０１５５】
鍵復号部６０６は、サーバ鍵Ｋｍを用いて暗号化共有鍵を復号したデータＫｍｎ｜｜Ｒ＝Ｄ（Ｋｍ、Ｅ（Ｋｍ，Ｋｍｎ｜｜Ｒ））を算出する（ステップＳ３０９）。算出されたデータから乱数Ｒを除いたデータである共有鍵Ｋｍｎが、クライアント５００と共有する鍵として用いられる。また、算出されたデータに含まれる乱数Ｒは、例えば鍵センタ４００と共有する乱数としてサーバ６００内で利用される。なお、乱数Ｒを結合せずに共有鍵Ｋｍｎのみを暗号化した暗号化共有鍵を用いるように構成してもよい。
【０１５６】
次に、このように構成された本実施形態にかかる鍵センタ４００による鍵算出制御処理について図１３を用いて説明する。図１３は、本実施形態における鍵算出制御処理の全体の流れを示すフローチャートである。
【０１５７】
鍵センタ４００は、サーバ６００からサーバ６００のデバイス番号ｍとクライアント５００のデバイス番号ｎとを受信し、受信したデバイス番号ｍとデバイス番号ｎとを鍵算出装置３００に送信する（ステップＳ４０１）。
【０１５８】
鍵算出装置３００は、送信されたデバイス番号ｍおよびデバイス番号ｎを用いて共有鍵Ｋｍｎを算出する共有鍵算出処理を実行する（ステップＳ４０２）。鍵算出装置３００による共有鍵算出処理の詳細については後述する。
【０１５９】
鍵センタ４００は、共有鍵算出処理で算出されたサーバ鍵Ｋｍと、共有鍵Ｋｍｎとを受信する（ステップＳ４０３）。鍵センタ４００は、受信したサーバ鍵Ｋｍで共有鍵Ｋｍｎを暗号化して暗号化共有鍵を算出する暗号化共有鍵算出処理を実行する（ステップＳ４０４）。暗号化共有鍵算出処理の詳細については後述する。鍵送信部４１４は、暗号化共有鍵をサーバ６００に送信する（ステップＳ４０５）。
【０１６０】
次に、ステップＳ４０２の鍵算出装置３００による共有鍵算出処理の詳細について説明する。図１４は、本実施形態における鍵算出装置３００による共有鍵算出処理の全体の流れを示すフローチャートである。
【０１６１】
鍵算出装置３００の受信部３０３は、送信されたデバイス番号ｍとデバイス番号ｎとを受信する（ステップＳ５０１）。算出部３０４は、デバイス鍵記憶部３０１から、デバイス番号ｎに対応した行列の要素を選択することにより、デバイス鍵ＫＤ（ｎ）を取得する（ステップＳ５０２）。算出部３０４は、変換ＭＫＢ記憶部３０２から変換ＭＫＢを読み出す（ステップＳ５０３）。
【０１６２】
算出部３０４は、変換ＭＫＢに含まれるＭＫＢインデックスとデバイス鍵ＫＤ（ｎ）の添字に基づいて、デバイス鍵ＫＤ（ｎ）の中から復号鍵Ｋｄを選択する（ステップＳ５０４）。
【０１６３】
算出部３０４は、適切な復号鍵Ｋｄが選択できたか否かを判断する（ステップＳ５０５）。選択できなかった場合（ステップＳ５０５：Ｎｏ）、共有鍵算出処理を終了する。この場合、クライアント５００は変換ＭＫＢによって無効化されている。
【０１６４】
復号鍵Ｋｄが選択できた場合（ステップＳ５０５：Ｙｅｓ）、算出部３０４は、変換ＭＫＢからベース鍵ＫＢを取得する（ステップＳ５０６）。算出部３０４は、復号鍵Ｋｄ、ベース鍵ＫＢ、および、デバイス番号ｍを用いて、共有鍵Ｋｍｎ＝Ｄ（Ｇ（ｍ、Ｋｄ）、ＫＢ）を算出する（ステップＳ５０７）。
【０１６５】
また、算出部３０４は、サーバ６００のサーバ鍵生成部６０４と同様の方法により、ベース鍵ＫＢ、および、デバイス鍵ＫＤ（ｍ）を用いてサーバ鍵Ｋｍを算出する（ステップＳ５０８）。算出された共有鍵Ｋｍｎおよびサーバ鍵Ｋｍは、鍵センタ４００に出力される。
【０１６６】
次に、ステップＳ４０４の暗号化共有鍵算出処理の詳細について説明する。
図１５は、本実施形態における暗号化共有鍵算出処理の全体の流れを示すフローチャートである。
【０１６７】
鍵センタ４００は、鍵算出装置３００が算出したサーバ鍵Ｋｍと共有鍵Ｋｍｎとを鍵算出装置３００から受信する（ステップＳ６０１）。サーバ鍵Ｋｍは、サーバ鍵記憶部４１１に記憶される。共有鍵Ｋｍｎは、暗号化部４１３に入力される。
【０１６８】
暗号化部４１３は、サーバ鍵記憶部４１１からサーバ鍵Ｋｍを読み出す（ステップＳ６０２）。乱数発生部４１２は、乱数Ｒを発生する（ステップＳ６０３）。暗号化部４１３は、サーバ鍵Ｋｍを用いて、共有鍵Ｋｍｎと乱数Ｒとを結合したデータを暗号化した暗号化共有鍵Ｅ（Ｋｍ、Ｋｍｎ｜｜Ｒ）を算出する（ステップＳ６０４）。
【０１６９】
次に、変換ＭＫＢの送信処理について説明する。変換ＭＫＢは、ＭＡＣ（Message  Authentication  Code）を付与してサーバ６００やクライアント５００に渡される。ＭＡＣを生成するためにサーバ鍵Ｋｍや共有鍵Ｋｍｎが用いられる。上述のように、変換ＭＫＢを処理することでサーバ鍵Ｋｍや共有鍵Ｋｍｎは更新される。変換ＭＫＢには、現在のサーバ鍵Ｋｍ（共有鍵）によるＭＡＣに加えて、以前の変換ＭＫＢから生成されるサーバ鍵Ｋｍ（共有鍵）によるＭＡＣを付与してもよい。
【０１７０】
図１６は、このように構成した変換ＭＫＢのフォーマットの一例を示す図である。図１６に示すように変換ＭＫＢは、ＭＫＢインデックスと、ベース鍵と、ＭＡＣの数と、鍵バージョンと、ＭＡＣとを含んでいる。
【０１７１】
鍵バージョンには、鍵の種類と変換ＭＫＢのバージョンが記録される。例えば、バージョン１２３２の変換ＭＫＢから生成された、デバイス番号＝１００のサーバ６００のサーバ鍵Ｋｍの鍵バージョンは（１２３２、１００0）という数の組である。また、バージョン１２１０の変換ＭＫＢから生成された、デバイス番号＝１０のサーバ６００とデバイス番号１００３のクライアント５００の共有鍵Ｋｍｎの鍵バージョンは（１２１０、１０、１００３）という数の組である。
【０１７２】
複数のＭＡＣが存在する場合は、それぞれのＭＡＣに対応する鍵バージョンが記録される。図１６では、２つのＭＡＣ（ＭＡＣ１、ＭＡＣ２）が存在し、それぞれに対して鍵バージョン１および鍵バージョン２が記録された例が示されている。
【０１７３】
ＭＡＣを付与して、鍵センタ４００からサーバに対して変換ＭＫＢを送出するのは、鍵センタ４００のＭＫＢ送信部４２０である。図１７は、ＭＫＢ送信部４２０の構成例を示すブロック図である。図１７に示すように、ＭＫＢ送信部４２０は、サーバ鍵記憶部４２１と、ＭＡＣ算出部４２２と、送信部４２３とを備えている。
【０１７４】
サーバ鍵記憶部４２１は、各サーバ６００について、最新バージョンのサーバ鍵に加えて、１つ前のバージョンのサーバ鍵を記憶する。また、サーバ鍵記憶部４２１は、それぞれのサーバ鍵に関連づけて、対応する変換ＭＫＢのバージョンも格納する。ＭＡＣ算出部４２２は、サーバ鍵記憶部４２１に記憶されたサーバ鍵それぞれについて、サーバ鍵を用いてＭＡＣを算出する。また、ＭＡＣ算出部４２２は、変換ＭＫＢに対して、鍵バージョンおよび算出したＭＡＣを付加する。送信部４２３は、鍵バージョンおよびＭＡＣが付加された図１６のような変換ＭＫＢをサーバ６００に送信する。
【０１７５】
このように、ＭＫＢ送信部４２０に入力される変換ＭＫＢは、ＭＫＢインデックスとベース鍵のみからなるが、出力される変換ＭＫＢは図１６に示すようなフォーマットを有している。
【０１７６】
一方、サーバ６００からクライアント５００に対して、ＭＡＣを付与して変換ＭＫＢを送出するのは、サーバのＭＫＢ送信部６２０である。図１８は、ＭＫＢ送信部６２０の構成例を示すブロック図である。図１８に示すように、ＭＫＢ送信部６２０は、サーバ鍵記憶部６２１と、ＭＡＣ算出部６２２と、送信部６２３とを備えている。
【０１７７】
サーバ鍵記憶部６２１、ＭＡＣ算出部６２２、および、送信部６２３の機能は、それぞれ図１７のサーバ鍵記憶部４２１、ＭＡＣ算出部４２２、および、送信部４２３と同様であるため説明を省略する。
【０１７８】
次に、鍵センタ４００によるＭＫＢ送信処理について図１９を用いて説明する。図１９は、本実施形態におけるＭＫＢ送信処理の全体の流れを示すフローチャートである。
【０１７９】
ＭＡＣ算出部４２２は、変換ＭＫＢを入力する（ステップＳ７０１）。ＭＡＣ算出部４２２は、サーバ鍵記憶部４２１からサーバ鍵を読み出す（ステップＳ７０２）。例えば２つのサーバ鍵が記憶されている場合は、ＭＡＣ算出部４２２は、記憶されている２つのサーバ鍵をそれぞれ読み出す。
【０１８０】
ＭＡＣ算出部４２２は、読み出したサーバ鍵を用いて、変換ＭＫＢのＭＡＣを算出する（ステップＳ７０３）。２つのサーバ鍵を読み出した場合は、２つのサーバ鍵それぞれに対してＭＡＣを算出する。ＭＡＣ算出部４２２は、鍵バージョンを変換ＭＫＢに付加する（ステップＳ７０４）。ＭＡＣ算出部４２２は、算出したＭＡＣを、鍵バージョンの順に変換ＭＫＢに付加する（ステップＳ７０５）。送信部４２３は、鍵バージョンおよびＭＡＣが付加された変換ＭＫＢをサーバ６００に送信する（ステップＳ７０６）。
【０１８１】
なお、図１８のサーバ６００のＭＫＢ送信部６２０でも同様の処理が行われ、クライアント５００に対して変換ＭＫＢが送信される。
【０１８２】
以上のように、変換ＭＫＢを用いることによって、本実施形態のスマートグリッドシステムは、製造時期の異なる多数のデバイスを管理することが可能となる。膨大な数の組み合わせを有するデバイス鍵によってシステムを管理するからである。また、本実施形態のスマートグリッドシステムは、暗号通信からハッキングされたデバイスを排除する仕組みを有している。変換ＭＫＢによって無効化されたデバイスは、サーバであれクライアントであれ、共有鍵を取得することができないからである。本実施形態のスマートグリッドシステムでは、デバイスのハッキングの影響は限定的である。デバイス鍵が個別化されているため、個々のデバイスのデバイス鍵を知っても、鍵算出装置が保有する生成行列を知ることはできないからである。さらに、本実施形態のスマートグリッドシステムでは、各バージョンにただ１つの変換ＭＫＢから、全ての共有鍵が生成される。従って、共有鍵管理をシンプルに行うことができる。
【０１８３】
上述の実施形態にかかる装置（通信装置、鍵算出装置、アクセス装置、サーバ、記憶装置）は、ＣＰＵ（Central  Processing  Unit）などの制御装置と、ＲＯＭ（Read  Only  Memory）やＲＡＭ（Random  Access  Memory）などの記憶装置と、ネットワークに接続して通信を行う通信Ｉ／Ｆと、ＨＤＤ（Hard  Disk  Drive）、ＣＤ（Compact  Disc）ドライブ装置などの外部記憶装置と、ディスプレイ装置などの表示装置と、キーボードやマウスなどの入力装置と、各部を接続するバスを備えるように構成できる。
【０１８４】
実施形態にかかる装置で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Compact  Disk  Recordable）、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供される。
【０１８５】
また、実施形態にかかる装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第１または第２の実施形態にかかる記憶装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【０１８６】
また、実施形態のプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０１８７】
実施形態にかかる装置で実行されるプログラムは、上述した各部を含むモジュール構成とすることができ、実際のハードウェアとしてはＣＰＵ（プロセッサ）が上記記録媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。
【０１８８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１８９】
３００  鍵算出装置
３０１  デバイス鍵記憶部
３０２  変換ＭＫＢ記憶部
３０３  受信部
３０４  算出部
４００  鍵センタ
４１１  サーバ鍵記憶部
４１２  乱数発生部
４１３  暗号化部
４１４  鍵送信部
４２０  ＭＫＢ送信部
５００  クライアント
５０１  ＭＫＢ取得部
５０２  変換デバイス鍵記憶部
５０３  鍵選択部
５０４  番号取得部
５０５  算出部
６００  サーバ
６０１  ＭＫＢ取得部
６０２  変換デバイス鍵記憶部
６０３  鍵選択部
６０４  サーバ鍵生成部
６０５  鍵受信部
６０６  鍵復号部
６０７  番号記憶部
６０８  番号送信部
６２０  ＭＫＢ送信部
【図１】
0005289476.tif 000002
【図２】
0005289476.tif 000003
【図３】
0005289476.tif 000004
【図４】
0005289476.tif 000005
【図５】
0005289476.tif 000006
【図６】
0005289476.tif 000007
【図７】
0005289476.tif 000008
【図８】
0005289476.tif 000009
【図９】
0005289476.tif 000010
【図１０】
0005289476.tif 000011
【図１１】
0005289476.tif 000012
【図１２】
0005289476.tif 000013
【図１３】
0005289476.tif 000014
【図１４】
0005289476.tif 000015
【図１５】
0005289476.tif 000016
【図１６】
0005289476.tif 000017
【図１７】
0005289476.tif 000018
【図１８】
0005289476.tif 000019
【図１９】
0005289476.tif 000020