(57)【特許請求の範囲】
【請求項１】
データを記憶するデータ記憶部と、
複数のデバイス鍵を記憶する鍵記憶部と、
メディア鍵を記憶するメディア鍵記憶部と、
前記データにアクセスするアクセス装置の識別情報を受信する受信部と、
前記鍵記憶部に記憶された前記デバイス鍵のいずれかを特定するインデックスを取得する取得部と、
前記インデックスで特定される前記デバイス鍵と前記識別情報とに基づいて、前記識別情報ごとに異なる第１鍵を算出する第１算出部と、
前記第１鍵を用いて、前記メディア鍵に基づいて算出される鍵情報に演算を施すことにより、前記アクセス装置と共有すべき第２鍵、を算出する第２算出部と、
を備えることを特徴とする記憶装置。
【請求項２】
前記鍵記憶部は、ａ行ｂ列（ａおよびｂは２以上の整数）の行列形式でａ×ｂ個の前記デバイス鍵を記憶し、
前記取得部は、１列からｃ列（ｃは１≦ｃ≦ｂを満たす整数）までの前記デバイス鍵それぞれの行を特定する前記インデックスを取得し、
前記第１算出部は、１列からｃ列までの各列の前記インデックスで特定される行の前記デバイス鍵から算出される算出値を、前記識別情報を用いて変換した前記第１鍵を算出すること、
を特徴とする請求項１に記載の記憶装置。
【請求項３】
前記第１算出部は、１列からｃ列までの各列の前記インデックスで特定される行の前記デバイス鍵から算出される前記算出値と前記識別情報とを一方向性関数に入力して得られる前記第１鍵を算出すること、
を特徴とする請求項２に記載の記憶装置。
【請求項４】
前記鍵記憶部は、ＳＤ（Ｓｕｂｓｅｔ  Ｄｉｆｆｅｒｅｎｃｅ）方式の木構造に含まれるノードの組み合わせに対応づけられる前記デバイス鍵を記憶し、
前記取得部は、前記ノードの組み合わせを特定する前記インデックスを取得し、
前記第１算出部は、前記インデックスで特定される前記ノードの組み合わせに対応づけられる前記デバイス鍵を前記識別情報で変換した変換デバイス鍵を用いて前記ＳＤ方式により前記第１鍵を算出すること、
を特徴とする請求項１に記載の記憶装置。
【請求項５】
前記第１算出部は、前記インデックスで特定される前記ノードの組み合わせに対応づけられる前記デバイス鍵と前記識別情報とを一方向性関数に入力して得られる前記変換デバイス鍵を用いて前記ＳＤ方式により前記第１鍵を算出すること、
を特徴とする請求項４に記載の記憶装置。
【請求項６】
前記取得部は、複数の前記アクセス装置の識別情報と前記インデックスとを対応づけて記憶するテーブルから、受信された前記識別情報に対応する前記インデックスを取得すること、
を特徴とする請求項１に記載の記憶装置。
【請求項７】
前記取得部は、前記アクセス装置から送信された前記インデックスを取得すること、
を特徴とする請求項１に記載の記憶装置。
【請求項８】
データを記憶するデータ記憶部と、複数のデバイス鍵を記憶する鍵記憶部と、メディア鍵を記憶するメディア鍵記憶部と、を備えるコンピュータを、
前記データにアクセスするアクセス装置の識別情報を受信する受信部と、
前記鍵記憶部に記憶された前記デバイス鍵のいずれかを特定するインデックスを取得する取得部と、
前記インデックスで特定される前記デバイス鍵と前記識別情報とに基づいて、前記識別情報ごとに異なる第１鍵を算出する第１算出部と、
前記第１鍵を用いて、前記メディア鍵に基づいて算出される鍵情報に演算を施すことにより、前記アクセス装置と共有すべき第２鍵、を算出する第２算出部と、
として機能させるためのプログラム。
【請求項９】
データと複数のデバイス鍵とを記憶する記憶装置にアクセスするアクセス装置であって、
複数の前記デバイス鍵それぞれを前記アクセス装置の識別情報で変換した複数の変換デバイス鍵を記憶する鍵記憶部と、
メディアキーブロック処理により複数の前記変換デバイス鍵から１の前記変換デバイス鍵を選択し、選択した前記変換デバイス鍵に基づいて前記記憶装置と共有すべき第１鍵、を算出する鍵選択部と、
前記識別情報を前記記憶装置に送信する送信部と、
を備えることを特徴とするアクセス装置。
【請求項１０】
データと複数のデバイス鍵とを記憶する記憶装置にアクセスするコンピュータであって、前記コンピュータの識別情報を用いて複数の前記デバイス鍵それぞれを変換した複数の変換デバイス鍵を記憶する鍵記憶部を備える前記コンピュータを、
メディアキーブロック処理により複数の前記変換デバイス鍵から１の前記変換デバイス鍵を選択し、選択した前記変換デバイス鍵に基づいて前記記憶装置と共有すべき第１鍵、を算出する鍵選択部と、
前記識別情報を前記記憶装置に送信する送信部と、
として機能させるためのプログラム。
【請求項１１】
データを記憶するデータ記憶部と、
複数のデバイス鍵を記憶する鍵記憶部と、
メディア鍵を記憶するメディア鍵記憶部と、
前記データにアクセスするアクセス装置の識別情報を受信する受信部と、
前記鍵記憶部に記憶された前記デバイス鍵のいずれかを特定するインデックスを取得する取得部と、
前記インデックスで特定される前記デバイス鍵と前記識別情報とに基づいて、前記識別情報ごとに異なる第１鍵を算出する第１算出部と、
前記第１鍵を用いて、前記メディア鍵に基づいて算出される鍵情報に演算を施すことにより、前記アクセス装置を認証するための第２鍵、を算出する第２算出部と、
を備えることを特徴とする記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、記憶装置、アクセス装置およびプログラムに関する。
【背景技術】
【０００２】
ＭＫＢ（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
【非特許文献２】"3.2.2 Calculation of Subsidiary Device Keys and Processing Keys"，Advanced Access Content System （AACS），Introduction and Common Cryptographic Elements Book，Revisioｎ０.951 Final，pp.13，September 28，2009
【発明の概要】
【発明が解決しようとする課題】
【０００７】
このように、ＭＫＢの技術を用いて、それぞれのデバイスに割り当てられたデバイス鍵を個別にかつ効率的に無効化することができる。しかし、従来の方法では、各デバイスによってＭＫＢから導出されるメディア鍵は同一である。これはＭＫＢ技術の特徴の１つであるが、この特徴が、例えばＭＫＢを用いた認証鍵共有で問題を惹き起す。認証鍵共有とは、無効化されていないデバイス鍵を備えるデバイスだけが読み出し可能なデータ領域である秘匿領域を実現する手法の１つである。秘匿領域への攻撃を考えた場合、メディア鍵が共通であることがシステムの脆弱性を惹き起す。
【０００８】
例えば、データにアクセスして利用するデータ利用装置（以下、アクセス装置という）の１つがソフトウェアで構成されているとする。データを格納（記憶）する記憶装置は一般にＳＳＤ（Solid  State  Drive）やＨＤＤ（Hard  Disk  Drive）などのハードウェアであり、内部に格納されているメディア鍵が不正に盗まれる可能性は高くない。一方、ＰＣ（パーソナルコンピュータ）でデータを利用する場合、アクセス装置はソフトウェアで構成される。一般に、ソフトウェアで構成されたアクセス装置は、不正な解析者による攻撃を受ける危険性が高い。
【０００９】
ソフトウェアで構成されたアクセス装置（そのデバイス鍵をＫＤ（ｎ）とする）が、不正な解析による攻撃を受け、攻撃者が、記憶装置が保持しているＭＫＢのメディア鍵を取得したと仮定する。このメディア鍵は、当該ＭＫＢを用いるすべての記憶装置に共通である。従って、当該攻撃者からメディア鍵の配布を受けた者は誰でも、当該ＭＫＢを利用する任意の記憶装置の秘匿領域からデータを読み出すことができるようになる。
【００１０】
無論、不正に解析されたアクセス装置が特定された場合、可及的速やかにＭＫＢが更新され、アクセス装置は無効化される。この無効化以後は、アクセス装置は更新されたＭＫＢからメディア鍵を導出することができないため、アクセス装置からのメディア鍵の流出は発生しない。
【００１１】
しかしながら、ＭＫＢを用いる従来の方法には、大きな問題点がある。不正に解析されたアクセス装置を特定することが一般には極めて困難なのである。不正に解析されたアクセス装置が特定されなければ、新しいＭＫＢによって、当該アクセス装置を無効化することはできない。従って、ＭＫＢを更新しても、不正に解析されたアクセス装置を利用して、攻撃者は、新たなＭＫＢのメディア鍵を取得し続けることが可能である。
【課題を解決するための手段】
【００１２】
実施形態の記憶装置は、データ記憶部と鍵記憶部と受信部と取得部と第１算出部と第２算出部とを備える。データ記憶部はデータを記憶する。鍵記憶部は複数のデバイス鍵を記憶する。受信部はアクセス装置の識別情報を受信する。取得部はデバイス鍵のいずれかを特定するインデックスを取得する。第１算出部はインデックスで特定されるデバイス鍵と識別情報とに基づいてアクセス装置と共有する第１鍵を暗号化した鍵情報を演算する第２鍵を算出する。第２算出部は第２鍵により鍵情報を演算復号して第１鍵を算出する。
【図面の簡単な説明】
【００１３】
【図１】ＭＫＢを用いた認証鍵共有を実現する記憶装置およびアクセス装置のブロック図。
【図２】生成行列の一例を示す図。
【図３】第１の実施形態にかかる記憶装置のブロック図。
【図４】第１の実施形態にかかるアクセス装置のブロック図。
【図５】第１の実施形態におけるアクセス処理のシーケンス図。
【図６】第２の実施形態にかかる記憶装置のブロック図。
【図７】デバイス番号テーブルのデータ構造例を示す図。
【図８】第２の実施形態にかかるアクセス装置のブロック図。
【図９】第２の実施形態におけるアクセス処理のシーケンス図。
【図１０】デバイス番号をリーフに割り当てた木構造の模式図。
【図１１】図１０に示した木構造を具体的に示す図。
【図１２】ノード「１５」をルートとする図１１と同様の木構造の例を示す図。
【図１３】暗号化処理動作を説明するためのフローチャート。
【図１４】ＳＤ方式におけるリーフの集合の選択方法を説明する図。
【図１５】暗号文データのデータ構造例を示す図。
【図１６】デバイス鍵のデータ構造の一例を示す図。
【図１７】暗号文の復号処理の概略を示したフローチャート。
【図１８】暗号文判定処理を説明するためのフローチャート。
【図１９】暗号文判定処理を説明するための図。
【図２０】暗号文が復号可能かを判定する手法を説明するための図。
【図２１】デバイス鍵から復号鍵を導出する処理のフローチャート。
【図２２】第３の実施形態にかかる記憶装置のブロック図。
【図２３】第３の実施形態にかかるアクセス装置のブロック図。
【図２４】第３の実施形態におけるアクセス処理のシーケンス図。
【図２５】変形例におけるアクセス処理のシーケンス図。
【図２６】第４の実施形態のサーバのブロック図。
【図２７】第４の実施形態の記憶装置のブロック図。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、この発明にかかる記憶装置の好適な実施形態を詳細に説明する。
【００１５】
（第１の実施形態）
図１は、ＭＫＢを用いた認証鍵共有を実現する記憶装置１０およびアクセス装置２０の構成例を示すブロック図である。
【００１６】
図１に示すように、記憶装置１０は、ＭＫＢ１１と、メディア鍵（ＫＭ）１２と、乱数発生部１と、演算部２と、データ記憶部３と、暗号化部４とを備えている。乱数発生部１は、乱数（Ｒ）１３を発生する。演算部２は、予め定められた一方向性関数にＫＭ１２とＲ１３とを入力し、アクセス装置２０と共有する認証鍵であるＫＴ１４を算出する。データ記憶部３は、データを記憶する記憶部であり、秘匿領域を含む。暗号化部４は、ＫＴ１４を用いてデータ記憶部３から読み出されたデータを暗号化する。
【００１７】
アクセス装置２０は、デバイス鍵（ＫＤ）３１と、ＭＫＢ処理部２１と、演算部２２と、復号部２３と、データ利用部２４とを備えている。ＭＫＢ処理部２１は、ＫＤ３１を用いてＭＫＢ１１を処理することによりメディア鍵（ＫＭ）３２を導出するＭＫＢ処理を実行する。演算部２２は、演算部２と同じ一方向性関数にＫＭ１２とＲ１３とを入力して認証鍵であるＫＴ３３を算出する。正常に処理された場合は、ＫＴ１４とＫＴ３３とは一致する。復号部２３は、ＫＴ３３を用いて、暗号化部４により暗号化されたデータを復号する。データ利用部２４は、復号されたデータを利用する。
【００１８】
ＭＫＢを用いた認証鍵共有は、図１のように構成された記憶装置１０およびアクセス装置２０により、例えば、以下のように実現される。図１に示すように、記憶装置１０のデータ記憶部３から読み出すデータはＫＴ１４によって暗号化される。アクセス装置２０がＫＴ１４と同一のＫＴ３３を導出できない限り、読出しデータを正しく復号することはできない。アクセス装置２０がＫＴ１４と同一のＫＴ３３を導出するためには、アクセス装置２０が、当該アクセス装置２０が保持するＫＤ３１を用いて、ＭＫＢを処理して正しいＫＭ３２が取得できることが必要である。ＫＤ３１がＭＫＢ１１によって無効化されていた場合、アクセス装置２０のＭＫＢ処理部２１によるＭＫＢ処理によって正しくＫＭ３２を取得することができない。従って、その場合、アクセス装置２０は記憶装置１０から読み出したデータを正しく復号することができない。このようにして、記憶装置１０のデータ記憶部３のデータの秘匿が実現される。
【００１９】
ＭＫＢとデバイス鍵の具体的な構成方法の一例は、例えば特許文献１に記載されている。以下、ＭＫＢとデバイス鍵の構成方法の一例について簡単に説明する。
【００２０】
まず、図２のような生成行列を用意する。当該生成行列の各成分ｋ（０，０）〜ｋ（４，２）は１６バイトのデータである。数０、数１または数２を５個並べた順列の全体をＤとおく（Ｄ＝｛０，１，２｝＾５）。Ｄの要素を経路という。また、経路の先頭を含む部分順列を、当該経路に随伴する経路（随伴経路）と呼ぶ。例えば、ｘ＝（２，０，２，２，１）は経路であり、経路ｘの随伴経路は、（２）、（２，０）、（２，０，２）、（２，０，２，２）および（２，０，２，２，１）である。各デバイスにはＤの要素である１つの経路が割り当てられる。さらに、各デバイスは、当該デバイスに割り当てられている経路の随伴経路と生成行列とによって定まる鍵束を格納している。例えば、デバイスｘ（上記経路ｘが割り当てられているデバイス）は、以下の（１）式に示す鍵束を格納している。
｛ＰＦ（２），ＰＦ（２，０），ＰＦ（２，０，２），ＰＦ（２，０，２，２），ＰＦ（２，０，２，２，１）｝・・・（１）
【００２１】
関数ＰＦは、例えば、以下の（２）式のように定義されている。
ＰＦ（ｎ）＝ｋ（０，ｎ），
ＰＦ（ｎ０，ｎ１）＝Ｇ（ｋ（１，ｎ１），ＰＦ（ｎ０）），
ＰＦ（ｎ０，ｎ１，ｎ２）＝Ｇ（ｋ（２，ｎ２），ＰＦ（ｎ０，ｎ１）），
ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３）
＝Ｇ（ｋ（３，ｎ３），ＰＦ（ｎ０，ｎ１，ｎ２）），
ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）
＝Ｇ（ｋ（４，ｎ４），ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３））・・・（２）
【００２２】
Ｇは一方向性関数を表す。このような鍵束が、デバイスｘに割り当てられたデバイス鍵である。
【００２３】
さて、１６バイトのメディア鍵をＫＭとする。リボーク（無効化）する端末が存在しない場合、以下の（３）式に示すデータの集合Ｍ１をＭＫＢとして配布する。
Ｍ１＝｛Ｅ（ｋ（０，０），ＫＭ），Ｅ（ｋ（０，１），ＫＭ），Ｅ（ｋ（０，２），ＫＭ）｝・・・（３）
【００２４】
Ｅ（ｋ，Ｘ）は、データＸを鍵ｋで暗号化した結果として得られる暗号化データである。
【００２５】
デバイスｘ＝（２，０，２，２，１）をリボークするＭＫＢは次のように構成する。ｘの境界集合は以下の（４）式で表される集合である。
｛（０）、（１）、（２，１）、（２，２）、（２，０，０）、（２，０，１）、（２，０，２，０）、（２，０，２，１）、（２，０，２，２，０）、（２，０，２，２，２）｝・・・（４）
【００２６】
Ｍ２を以下の（５）式で表されるデータ集合として定める。
Ｍ２＝｛
Ｅ（ＰＦ（０），ＫＭ），
Ｅ（ＰＦ（１），ＫＭ），
Ｅ（ＰＦ（２，１），ＫＭ），
Ｅ（ＰＦ（２，２），ＫＭ），
Ｅ（ＰＦ（２，０，０），ＫＭ），
Ｅ（ＰＦ（２，０，１），ＫＭ），
Ｅ（ＰＦ（２，０，２，０），ＫＭ），
Ｅ（ＰＦ（２，０，２，１），ＫＭ），
Ｅ（ＰＦ（２，０，２，２，０），ＫＭ），
Ｅ（ＰＦ（２，０，２，２，２），ＫＭ）｝・・・（５）
【００２７】
デバイスｘは、上述のように（１）式の鍵束｛ＰＦ（２），ＰＦ（２，０），ＰＦ（２，０，２），ＰＦ（２，０，２，２），ＰＦ（２，０，２，２，１）｝を格納している。しかし、デバイスｘは、この鍵束の中のいずれの鍵によってＭ２のいずれの要素を復号しても正しくＫＭを得ることはできない。従って、デバイスｘはリボークされている。
【００２８】
しかも、デバイスｘ以外のデバイスは、Ｍ２の適当な要素を復号して正しくＫＭを得ることができる。実際、経路ｘと異なる経路ｙを考える。経路ｙの第１の要素が０または１であれば、デバイスｙ（経路ｙが割り当てられているデバイス）はＰＦ（０）またはＰＦ（１）を格納している。従って、Ｍ２の要素である、Ｅ（ＰＦ（０），ＫＭ）またはＥ（ＰＦ（１），ＫＭ）を復号してＫＭが得られる。経路ｙの第１の要素が２で第２の要素が１または２であれば、ｙはＰＦ（２，１）またはＰＦ（２，２）を格納している。従って、Ｍ２の要素であるＥ（ＰＦ（２，１），ＫＭ）またはＥ（ＰＦ（２，２），ＫＭ）を復号してＫＭが得られる。このように、デバイスｘと異なる任意のデバイスｙについて、デバイスｙが格納する鍵束に含まれるいずれかの鍵を用いて、Ｍ２のいずれかの要素を復号してＫＭを得ることができる。
【００２９】
次に、上記ｘ＝（２，０，２，２，１）に加えてｘ２＝（１，１，０，０，２）を無効化するＭＫＢの構成方法を示す。ｘとｘ２の境界集合は以下の（６）式のようになる。
｛（０）、（１）、（２，１）、（２，２）、（１，０）、（１，２）、（２，０，０）、（２，０，１）、（１，１，１）、（１，１，２）、（２，０，２，０）、（２，０，２，１）、（１，１，０，１）、（１，１，０，２）、（２，０，２，２，０）、（２，０，２，２，２）、（１，１，０，０，０）、（１，１，０，０，１）｝・・・（６）
【００３０】
従って、ｘとｘ２とを無効化するＭＫＢであるＭ３は以下の（７）式で与えられる。
Ｍ３＝｛
Ｅ（ＰＦ（０），ＫＭ），
Ｅ（ＰＦ（１），ＫＭ），
Ｅ（ＰＦ（２，１），ＫＭ），
Ｅ（ＰＦ（２，２），ＫＭ），
Ｅ（ＰＦ（１，０），ＫＭ），
Ｅ（ＰＦ（１，２），ＫＭ），
Ｅ（ＰＦ（２，０，０），ＫＭ），
Ｅ（ＰＦ（２，０，１），ＫＭ），
Ｅ（ＰＦ（１，１，１），ＫＭ），
Ｅ（ＰＦ（１，１，２），ＫＭ），
Ｅ（ＰＦ（２，０，２，０），ＫＭ），
Ｅ（ＰＦ（２，０，２，１），ＫＭ），
Ｅ（ＰＦ（１，１，０，１），ＫＭ），
Ｅ（ＰＦ（１，１，０，２），ＫＭ），
Ｅ（ＰＦ（２，０，２，２，０），ＫＭ），
Ｅ（ＰＦ（２，０，２，２，２），ＫＭ），
Ｅ（ＰＦ（１，１，０，０，０），ＫＭ），
Ｅ（ＰＦ（１，１，０，０，１），ＫＭ）｝・・・（７）
【００３１】
無効化対象のデバイス鍵が特別な組み合わせである場合は、ＭＫＢのサイズを節約して効率的に無効化することが可能である。例えば、（２，０，？，？，？）という一群のデバイス鍵を無効化する場合を考える。ただし、「？」には０、１または２の数値が入る。これら３＾３＝２７個のデバイスを無効化するＭＫＢは以下の（８）式で示すＭ４で与えられる。
Ｍ４＝｛Ｅ（ＰＦ（２，１），ＫＭ），Ｅ（ＰＦ（２，２），ＫＭ）｝・・・（８）
【００３２】
図１のような認証鍵共有の方法では、ＭＫＢから導出されるメディア鍵（ＫＭ）は同一である。従って、上述のようにアクセス装置が不正に解析されてＫＭが取得され、かつ、不正に解析されたアクセス装置を特定できない場合には、データの不正流出を防止することができない。
【００３３】
そこで、第１の実施形態にかかる記憶装置は、ＭＫＢによるデバイスの無効化を可能としつつ、アクセス装置を識別する識別情報（デバイス番号）を用いてアクセス装置ごとに異なる認証鍵を生成する。これにより、不正にアクセスするアクセス装置（ソフトウェア）等が配布された場合であっても、不正に解析されたアクセス装置を特定できるため、データの不正流出を回避可能となる。
【００３４】
図３は、第１の実施形態にかかる記憶装置１００の構成の一例を示すブロック図である。図３に示すように、記憶装置１００は、デバイス鍵記憶部１１０１と、取得部１１０２と、受信部１１０３と、メディア鍵記憶部１１０４と、鍵生成部１１０５と、乱数生成部１１０６と、鍵暗号化部１１０７と、データ暗号化部１１０８と、データ記憶部１１０９と、を備えている。
【００３５】
デバイス鍵記憶部１１０１は、図２に示す生成行列Ｍのような行列形式で複数のデバイス鍵を格納する。取得部１１０２は、デバイス鍵記憶部１１０１に記憶されたデバイス鍵のうち、いずれかのデバイス鍵を特定するインデックス（鍵インデックスｉ（ｍ））をアクセス装置２００から取得（受信）する。受信部１１０３は、アクセス装置２００の送信部２１０４（後述）から、アクセス装置２００に割り当てられたデバイス番号ｍを受信する。メディア鍵記憶部１１０４は、メディア鍵ＫＭを記憶する。
【００３６】
鍵生成部１１０５は、生成行列Ｍ、鍵インデックスｉ（ｍ）、および、デバイス番号ｍから、アクセス装置２００との間で共有する認証鍵（以下、認証鍵ＫＡという）を生成する。鍵生成部１１０５は、第１算出部１１０５ａと、第２算出部１１０５ｂとを備えている。
【００３７】
第１算出部１１０５ａは、鍵インデックスｉ（ｍ）で特定されるデバイス鍵から関数ＰＦによる経路関数値（後述）を算出し、算出した値（算出値）をデバイス番号ｍで変換した復号鍵Ｋｄを算出する。
【００３８】
第２算出部１１０５ｂは、認証鍵ＫＡを暗号化した鍵情報を復号鍵Ｋｄにより復号することにより認証鍵ＫＡを算出する。本実施形態では、第２算出部１１０５ｂは、メディア鍵ＫＭを経路関数値で暗号化したメディア鍵ＫＭ’を復号鍵Ｋｄで復号することにより認証鍵ＫＡを算出する。
【００３９】
なお、認証鍵を算出する方法は、復号鍵を用いた復号演算に限られるものではない。認証鍵に演算を施して得られる鍵情報に対して、当該演算に対応する演算を施すための鍵を用いて認証鍵を算出する方法であれば、あらゆる方法を適用できる。
【００４０】
乱数生成部１１０６は、乱数Ｒを生成する。鍵暗号化部１１０７は、乱数Ｒを認証鍵ＫＡで暗号化する。
【００４１】
データ記憶部１１０９は、アクセス装置２００からアクセス可能なデータを記憶する。データ記憶部１１０９は、秘匿領域１１１０と、一般領域１１１１と、を含む。秘匿領域１１１０は、無効化されておらず、認証鍵ＫＡを生成できるアクセス装置２００のみがデータを読み出し可能なデータ領域である。一般領域１１１１は、認証鍵ＫＡによる認証を行わずにデータを読み出し可能なデータ領域である。
【００４２】
本実施形態では、一般領域１１１１は、図１で説明したようなＭＫＢを変換したＭＫＢ（Twisted  MKB（以下、変換ＭＫＢという））を記憶する。変換ＭＫＢのデータ構造の詳細については後述する。
【００４３】
データ暗号化部１１０８は、乱数Ｒを用いて秘匿領域１１１０に格納されている読み出し対象データ（データＤ）を暗号化し、暗号化データＤ’＝Ｅ（Ｒ，Ｄ）を算出する。
【００４４】
図４は、第１の実施形態にかかるアクセス装置２００の構成の一例を示すブロック図である。図４に示すように、アクセス装置２００は、読取部２１０１と、変換デバイス鍵記憶部２１０２と、鍵選択部２１０３と、送信部２１０４と、番号記憶部２１０５と、鍵復号部２１０６と、データ復号部２１０７と、データ利用部２１０８と、を備えている。
【００４５】
読取部２１０１は、記憶装置１００の一般領域１１１１から変換ＭＫＢを読み取る。なお、記憶装置１００から変換ＭＫＢをアクセス装置２００に送信する代わりに、アクセス装置２００が、記憶装置１００以外の第三者から変換ＭＫＢを取得するように構成してもよい。
【００４６】
変換デバイス鍵記憶部２１０２は、記憶装置１００のデバイス鍵記憶部１１０１に記憶された複数のデバイス鍵を変換した複数の変換デバイス鍵（Twisted  Device  Key）を記憶する。変換デバイス鍵のデータ構造の詳細については後述する。
【００４７】
鍵選択部２１０３は、複数の変換デバイス鍵の中から、変換ＭＫＢに応じた変換デバイス鍵を選択し、選択した変換デバイス鍵から認証鍵ＫＡを算出する。
【００４８】
送信部２１０４は、選択された復号鍵Ｋｄを特定する鍵インデックスｉ（ｍ）を記憶装置１００に送信する。番号記憶部２１０５は、アクセス装置２００のデバイス番号ｍを記憶する。
【００４９】
鍵復号部２１０６は、鍵選択部２１０３により算出された認証鍵ＫＡを用いて暗号化乱数Ｒ’から乱数Ｒを復号する。データ復号部２１０７は、乱数Ｒを用いて暗号化データＤ’からデータＤを復号する。データ利用部２１０８は、データＤを利用する処理部である。例えば、データ利用部２１０８は、データＤをディスプレイなどに表示する処理を行う。
【００５０】
次に、このように構成された第１の実施形態にかかる記憶装置１００およびアクセス装置２００によるアクセス処理について図５を用いて説明する。図５は、第１の実施形態におけるアクセス処理の全体の流れを示すシーケンス図である。
【００５１】
まず、アクセス装置２００の読取部２１０１が、記憶装置１００に対して変換ＭＫＢの送信を要求する（ステップＳ１０１）。記憶装置１００は、要求に応じて一般領域１１１１から変換ＭＫＢを読み出し、アクセス装置２００に送信する（ステップＳ１０２）。
【００５２】
アクセス装置２００の鍵選択部２１０３は、変換デバイス鍵記憶部２１０２に記憶された複数の変換デバイス鍵から、変換ＭＫＢに対応する変換デバイス鍵を復号鍵Ｋｄとして選択する（ステップＳ１０３）。鍵選択部２１０３は、選択した復号鍵Ｋｄを特定する情報である鍵インデックスｉ（ｍ）を算出する（ステップＳ１０４）。送信部２１０４は、算出された鍵インデックスｉ（ｍ）と、番号記憶部２１０５に記憶されたデバイス番号ｍとを記憶装置１００に送信する（ステップＳ１０５）。
【００５３】
記憶装置１００の取得部１１０２は、アクセス装置２００から送信された鍵インデックスｉ（ｍ）を受信する。鍵生成部１１０５の第１算出部１１０５ａは、受信された鍵インデックスｉ（ｍ）で特定されるデバイス鍵から関数ＰＦによる経路関数値を算出する。そして、第１算出部１１０５ａは、経路関数値をデバイス番号ｍで変換した復号鍵Ｋｄを算出する（ステップＳ１０６）。
【００５４】
また、鍵生成部１１０５は、メディア鍵ＫＭを経路関数値で暗号化したメディア鍵ＫＭ’を算出する（ステップＳ１０７）。第２算出部１１０５ｂは、復号鍵Ｋｄによりメディア鍵ＫＭ’を復号することにより認証鍵ＫＡを算出する（ステップＳ１０８）。
【００５５】
一方、アクセス装置２００では、鍵選択部２１０３が、鍵インデックスｉ（ｍ）に対応するメディア鍵ＫＭ’を、読取部２１０１により読み取られた変換ＭＫＢから取得する（ステップＳ１０９）。鍵選択部２１０３は、取得したメディア鍵ＫＭ’を、ステップＳ１０３で選択した復号鍵Ｋｄにより復号した認証鍵ＫＡを算出する（ステップＳ１１０）。
【００５６】
ここまでの処理により、記憶装置１００およびアクセス装置２００のそれぞれが同一の認証鍵ＫＡを得ることができる（ステップＳ１０８、ステップＳ１１０）。これ以降、共有する認証鍵ＫＡを用いた各種処理を実行可能となる。以下では、認証鍵ＫＡを用いて秘匿領域１１１０からのデータを読み出す処理を例に説明するが、適用可能な処理はこれに限られるものではない。例えば、アクセス装置２００が記憶装置１００の秘匿領域１１１０にデータを書き込む場合についても、認証鍵ＫＡを共有するまでの処理は図５と同様の処理が適用できる。
【００５７】
記憶装置１００で認証鍵ＫＡが算出されると、乱数生成部１１０６が、乱数Ｒを生成する（ステップＳ１１１）。鍵暗号化部１１０７は、乱数Ｒを認証鍵ＫＡで暗号化した乱数である暗号化乱数Ｒ’を算出する（ステップＳ１１２）。データ暗号化部１１０８は、秘匿領域１１１０に記憶されたデータＤを乱数Ｒで暗号化したデータである暗号化データＤ’を算出する（ステップＳ１１３）。記憶装置１００は、暗号化乱数Ｒ’と暗号化データＤ’とをアクセス装置２００に送信する（ステップＳ１１４）。
【００５８】
アクセス装置２００の鍵復号部２１０６は、受信した暗号化乱数Ｒ’を認証鍵ＫＡで復号した乱数Ｒを算出する（ステップＳ１１５）。データ復号部２１０７は、受信した暗号化データＤ’を乱数Ｒで復号したデータＤを算出する（ステップＳ１１６）。
【００５９】
このような処理により、ＭＫＢ技術を用いた認証鍵共有による秘匿領域へのアクセス処理を実現できる。
【００６０】
次に、上記のようなアクセス処理の具体例についてさらに説明する。以下では、アクセス装置２００に経路ｘ＝（２，０，２，２，１）が割り当てられているものとする。
【００６１】
番号記憶部２１０５が格納するデバイス番号は、アクセス装置２００に割り当てられている数値である。この数値は通常アクセス装置１台ごとに異なっているが、一群のアクセス装置２００に共通であってもよい。本実施形態では、デバイス番号は、アクセス装置２００に割り当てられた経路を表現する数値とする。すなわち、番号記憶部２１０５は、経路ｘ＝（２，０，２，２，１）を３進表現した数値であるデバイス番号ｍ＝２０２２１＿３＝１８７を格納している。なお、＊＿３は、「＊」が３進数であることを表す。
【００６２】
経路を３進表現するとは、経路に含まれる数値を順列の順に左から右に並べて３進数とみなすことをいう。なお、経路に含まれる数値は０、１、２に限られるものではない。また、経路に含まれる数値の個数の最大値は５に限られるものではない。すなわち、ａ個の数値をｂ個並べた順列全体の集合の要素を経路とするように構成できる（ａおよびｂは２以上の整数）。この場合、生成行列は、ａ行ｂ列の行列となる。また、デバイス番号ｍは、例えば経路をａ進表現した数値とすればよい。例えばａ＝２の場合、経路が数値０または１を含むように構成し、経路を２進表現した数値をデバイス番号ｍとするように構成する。
【００６３】
変換デバイス鍵記憶部２１０２は以下の（９）式に示す鍵束を格納しているものとする。
｛Ｇ（ｍ，ＰＦ（２）），Ｇ（ｍ，ＰＦ（２，０）），Ｇ（ｍ，ＰＦ（２，０，２）），Ｇ（ｍ，ＰＦ（２，０，２，２）），Ｇ（ｍ，ＰＦ（２，０，２，２，１））｝・・・（９）
【００６４】
関数ＰＦは以下の（１０）式のように定義される。なお（＋）はビットごとの排他的論理和を表す。
ＰＦ（ｎ０）＝ｋ（０，ｎ０），
ＰＦ（ｎ０，ｎ１）＝ＰＦ（ｎ０）（＋）ｋ（１，ｎ１），
ＰＦ（ｎ０，ｎ１，ｎ２）＝ＰＦ（ｎ０，ｎ１）（＋）ｋ（２，ｎ２），
ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３）＝ＰＦ（ｎ０，ｎ１，ｎ２）（＋）ｋ（３，ｎ３），
ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）＝ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３）（＋）ｋ（４，ｎ４）・・・（１０）
【００６５】
（１０）式は、上述の（２）式の一方向性関数Ｇとしてビットごとの排他的論理和を適用した例を表している。すなわち、関数ＰＦは、生成行列Mの任意の経路に対して、生成行列Ｍの要素を用いて定義される関数（経路関数）である。
【００６６】
（９）式のＧは一方向性関数であり、Ｇ（ｍ，Ｘ）は数値Ｘにデータを利用するデバイス（アクセス装置２００）のデバイス番号ｍを用いて一方向性関数を適用した結果を表す。一方向性関数としては、（１０）式と同様のビットごとの排他的論理和を用いてもよい。
【００６７】
さらに、変換デバイス鍵記憶部２１０２は、以下の（１１）式で示すような、格納している鍵束の添字の集合を格納している。
｛（２）、（２，０）、（２，０，２）、（２，０，２，２）、（２，０，２，２，１）｝・・・（１１）
【００６８】
ここで、変換ＭＫＢのデータ構造の一例について説明する。変換ＭＫＢは、ＭＫＢインデックス（MKB  indices）と、ＭＫＢインデックスに対応するベース鍵（ＭＫＢａｓｅ（Media  Key  Base））を含んでいる。
【００６９】
ＭＫＢインデックスとは、デバイス鍵を無効化するための生成行列Ｍの経路の集合である。先に述べた通り、デバイス鍵と生成行列Ｍの経路とは一対一に対応している。無効化するデバイス（＝経路）が存在しないとき、ＭＫＢインデックスは以下の（１２）式のようになっている。
｛０，１，２｝・・・（１２）
【００７０】
また、例えば、経路ｙ０＝（１，０，２，１，１）を無効化するＭＫＢインデックスは以下の（１３）式のようになる。
｛（０）、（２）、（１，１）、（１，２）、（１，０，０）、（１，０，１）、（１，０，２，０）、（１，０，２，２）、（１，０，２，１，０）、（１，０，２，１，２）｝・・・（１３）
【００７１】
以下に、ＭＫＢインデックスの構成方法の一例を説明する。本実施形態では、生成行列Ｍが３×５行例（３行５列）である場合に即して説明を行うが、生成行列Ｍが一般のａ×ｂ行列である場合も同様である。
【００７２】
経路ｘ＝（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）に対して、生成行列Ｍ上の経路の集合｛（ｎ０）、（ｎ０，ｎ１）、（ｎ０，ｎ１，ｎ２）、（ｎ０，ｎ１，ｎ２，ｎ３）、（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）｝を、経路ｘの随伴経路集合と呼ぶ。また、随伴経路集合の要素である各経路を随伴経路と呼ぶ。経路ｘの随伴経路集合をＡＰ（Ｘ）で表す。また、各随伴経路に対して、経路の最後の数値が異なる経路を境界経路と呼び、境界経路の集合を境界経路集合と呼ぶ。経路ｘ＝（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）の境界経路集合ＢＰ（Ｘ）は以下の（１４）式で与えられる。
ＢＰ（Ｘ）＝｛（ｎ）｜ｎ≠ｎ０｝∪｛（ｎ０，ｎ）｜ｎ≠ｎ１｝∪｛（ｎ０，ｎ１，ｎ）｜ｎ≠ｎ２｝∪｛（ｎ０，ｎ１，ｎ２，ｎ）｜ｎ≠ｎ３｝∪｛（ｎ０，ｎ１，ｎ２，ｎ３，ｎ）｜ｎ≠ｎ４｝・・・（１４）
【００７３】
例えば、経路ｙ０の境界経路集合は以下の（１５）式のようになる。
｛（０）、（２）、（１，１）、（１，２）、（１，０，０）、（１，０，１）、（１，０，２，０）、（１，０，２，２）、（１，０，２，１，０）、（１，０，２，１，２）｝・・・（１５）
【００７４】
経路ｙ０を無効化するＭＫＢインデックスはｙ０の境界経路集合である。
【００７５】
さらに、２つ以上の経路を無効化する場合を考える。
（定義）
（１）経路ｘ１，ｘ２，・・・，ｘＮの随伴経路集合ＡＰ（ｘ１，ｘ２，・・・，ｘＮ）とは、各経路ｘ１，ｘ２，・・・，ｘＮの随伴経路集合の和集合である：
ＡＰ（ｘ１，ｘ２，・・・，ｘＮ）＝ＡＰ（ｘ１）∪ＡＰ（ｘ２）∪・・・∪ＡＰ（ｘＮ）。
（２）経路ｘ１，ｘ２，・・・，ｘＮの境界経路集合ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）とは、各経路ｘ１，ｘ２，・・・，ｘＮの境界経路集合の和集合から、経路ｘ１，ｘ２，・・・，ｘＮの随伴経路集合を除いた差集合である：
ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）＝ＢＰ（ｘ１）∪ＢＰ（ｘ２）∪・・・∪ＢＰ（ｘＮ）−ＡＰ（ｘ１，ｘ２，・・・，ｘＮ）。
（３）経路ｘ１，ｘ２，・・・，ｘＮを無効化するＭＫＢインデックスは、経路ｘ１，ｘ２，・・・，ｘＮの境界経路集合ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）である。
【００７６】
例えば、経路ｙ１＝（０，０，１，１，２）として、経路ｙ０と経路ｙ１の境界経路集合を求める。経路ｙ０と経路ｙ１の境界経路集合は、それぞれ上記（１５）式および以下の（１６）式のようになる。
｛（１）、（２）、（０，１）、（０，２）、（０，０，０）、（０，０，２）、（０，０，１，０）、（０，０，１，２）、（０，０，１，１，０）、（０，０，１，１，１）｝・・・（１６）
【００７７】
従って、上記２つの境界経路集合の和集合は以下の（１７）式のようになる。
｛（０）、（１）、（２）、（１，１）、（１，２）、（０，１）、（０，２）、（１，０，０）、（１，０，１）、（０，０，０）、（０，０，２）、（１，０，２，０）、（１，０，２，２）、（０，０，１，０）、（０，０，１，２）、（１，０，２，１，０）、（１，０，２，１，２）、（０，０，１，１，０）、（０，０，１，１，１）｝・・・（１７）
【００７８】
従って、ｙ０とｙ１の境界経路集合は以下の（１８）式のようになる。
｛（２）、（１，１）、（１，２）、（０，１）、（０，２）、（１，０，０）、（１，０，１）、（０，０，０）、（０，０，２）、（１，０，２，０）、（１，０，２，２）、（０，０，１，０）、（０，０，１，２）、（１，０，２，１，０）、（１，０，２，１，２）、（０，０，１，１，０）、（０，０，１，１，１）｝・・・（１８）
【００７９】
上記境界経路集合ＢＰ（ｙ０，ｙ１）が、経路ｙ０と経路ｙ１とを無効化するＭＫＢインデックスである。
【００８０】
経路の集合Ｓが経路ｘ１，ｘ２，・・・，ｘＮを無効化するとは、次の２つの条件が成立することをいう。
ｉ）ＡＰ（ｘ１，ｘ２，・・・，ｘＮ）∩Ｓ＝φ
ｉｉ）｛ｘ１，ｘ２，・・・，ｘＮ｝に含まれない任意の経路ｙについてＡＰ（ｙ）∩Ｓ≠φ
【００８１】
以下に、ＭＫＢインデックス、すなわち、境界経路集合ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）が、経路ｘ１，ｘ２，・・・，ｘＮを無効化する集合であることを証明する。
【００８２】
ＡＰ（ｘ１，ｘ２，・・・，ｘＮ）∩ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）＝φは、ＢＰ（ｘ１，ｘ２，・・・，ｘＮ）の定義より自明である。
【００８３】
｛ｘ１，ｘ２，・・・，ｘＮ｝に含まれない任意の経路を経路ｙとする。ＡＰ（ｙ）は長さ１から５までの５つの経路からなる。ただし、経路（順列）の長さとは要素数である。例えば、（１，０，２）の長さは３である。ＡＰ（ｙ）＝｛（ｎ０）、（ｎ０，ｎ１）、（ｎ０，ｎ１，ｎ２）、（ｎ０，ｎ１，ｎ２，ｎ３）、（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）｝とする。また、ＡＰ（ｙ）∩ＢＰ（ｘ１，・・・，ｘＮ）＝φであると仮定する。ｎ０はｘ１，・・・，ｘＮのいずれかの最初の要素である。さもなければ、（ｎ０）∈ＢＰ（ｘ１，・・・，ｘＮ）となって仮定に矛盾する。次に、（ｎ０，ｎ１）は、ｘ１，・・・，ｘＮのいずれかの最初の２つの要素からなる順列に一致する。さもなければ、（ｎ０，ｎ１）∈ＢＰ（ｘ１，・・・，ｘＮ）となって仮定に矛盾する。同様の推論を繰り返すことにより、結局、ｙ＝（ｎ０，・・・，ｎ４）は、ｘ１，・・・，ｘＮのいずれかに一致しなければならない。これは経路ｙが｛ｘ１，ｘ２，・・・，ｘＮ｝に含まれない経路であるとした仮定に反する。すなわち、経路ｙが｛ｘ１，ｘ２，・・・，ｘＮ｝に含まれない経路であれば、ＡＰ（ｙ）∩ＢＰ（ｘ１，・・・，ｘＮ）≠φ。以上により、ＭＫＢインデックスが経路ｘ１，・・・，ｘＮを無効化することが証明された。
【００８４】
次に、ＭＫＢインデックスＢＰ（ｘ１，・・・，ｘＮ）が、経路ｘ１，・・・，ｘＮを無効化する最小の集合であることを示す。
【００８５】
ρ∈ＢＰ（ｘ１，・・・，ｘＮ）とする。経路ρを適当に長さ５まで伸ばして経路ｙを作る。ここで、経路ｕ∈ＡＰ（ｙ）∩（ＢＰ（ｘ１，・・・，ｘＮ）−｛ρ｝）とする。ｌ（ｐ）を経路ｐの長さとして、ｌ（ｕ）＜ｌ（ρ）であるとすると、ρ∈ＢＰ（ｘ１，・・・，ｘＮ）であったから、ある番号ｉに対してｕ∈ＡＰ（ｘｉ）でなければならない。これは仮定に反する。また、ｌ（ｕ）＝ｌ（ρ）であるとするとｕ＝ρとなり、仮定に矛盾する。ｌ（ｕ）＞ｌ（ρ）であると仮定する。経路ｕの最後の要素を取り除いた経路をｕ’とおくと、ＢＰ（ｘ１，・・・，ｘＮ）の定義より、ある番号ｊが存在してｕ’∈ＡＰ（ｘｊ）でなければならない。従ってρ∈ＡＰ（ｘｊ）となり、仮定に矛盾する。結局、ＡＰ（ｙ）∩（ＢＰ（ｘ１，・・・，ｘＮ）−｛ρ｝）＝φとなる。以上で、ＢＰ（ｘ１，・・・，ｘＮ）が経路ｘ１，・・・，ｘＮを無効化する最小の集合であることが証明された。
【００８６】
次に、ベース鍵について説明する。ベース鍵は、次のように定義されるデータの集合である。すなわち、ＭＫＢインデックスは生成行列Ｍの経路の集合であるが、ＭＫＢインデックスに属する各経路に対して、経路関数ＰＦとメディア鍵ＫＭとを用いて定義されるデータの集合をベース鍵という。
【００８７】
例えば、（１８）式のＭＫＢインデックスを考える。このＭＫＢインデックスに対して、以下の（１９）式はベース鍵の一例である。
｛Ｅ（ＰＦ（２），ＫＭ），
Ｅ（ＰＦ（１，１），ＫＭ），
Ｅ（ＰＦ（１，２），ＫＭ），
Ｅ（ＰＦ（０，１），ＫＭ），
Ｅ（ＰＦ（０，２），ＫＭ），
Ｅ（ＰＦ（１，０，０），ＫＭ），
Ｅ（ＰＦ（１，０，１），ＫＭ），
Ｅ（ＰＦ（０，０，０），ＫＭ），
Ｅ（ＰＦ（０，０，２），ＫＭ），
Ｅ（ＰＦ（１，０，２，０），ＫＭ），
Ｅ（ＰＦ（１，０，２，２），ＫＭ），
Ｅ（ＰＦ（０，０，１，０），ＫＭ），
Ｅ（ＰＦ（０，０，１，２），ＫＭ），
Ｅ（ＰＦ（１，０，２，１，０），ＫＭ），
Ｅ（ＰＦ（１，０，２，１，２），ＫＭ），
Ｅ（ＰＦ（０，０，１，１，０），ＫＭ），
Ｅ（ＰＦ（０，０，１，１，１），ＫＭ）｝・・・（１９）
【００８８】
この例は、上記（５）式および（６）式で述べたＭＫＢと同様のデータ構成になる。
【００８９】
本実施形態では、変換ＭＫＢは１つの記憶装置１００に対して１つ存在する。アクセス装置２００が記憶装置１００の秘匿領域１１１０からデータを読み取る際は、まず、読取部２１０１が記憶装置１００の一般領域１１１１から変換ＭＫＢを読み取る（図５のステップＳ１０１、ステップＳ１０２）。読取部２１０１は、読み取った変換ＭＫＢのＭＫＢインデックスを鍵選択部２１０３に送る。鍵選択部２１０３は、変換デバイス鍵記憶部２１０２から変換デバイス鍵を読み取り、復号鍵Ｋｄを選択する（ステップＳ１０３）。以下に、ステップＳ１０３の鍵選択部２１０３による復号鍵Ｋｄの選択処理の詳細について説明する。
【００９０】
ＭＫＢインデックスをＩ＿ＭＫＢとし、変換デバイス鍵記憶部２１０２が格納する添字の集合をＩ＿Ｄとする。鍵選択部２１０３は、Ｉ＿ＭＫＢ∩Ｉ＿Ｄ≠φであるか否かを調べる。Ｉ＿ＭＫＢ∩Ｉ＿Ｄ＝φであれば、デバイス鍵は無効化されている。この場合、鍵選択部２１０３は処理を停止する。一方、Ｉ＿ＭＫＢ∩Ｉ＿Ｄ≠φであれば、鍵選択部２１０３は、ｕ∈Ｉ＿ＭＫＢ∩Ｉ＿Ｄである経路ｕを１つ見出す。鍵選択部２１０３は、この経路ｕに対応する（変換デバイス鍵中の）鍵を復号鍵Ｋｄとして選択する。より具体的には、鍵選択部２１０３は次の動作を行う。なお、ＭＫＢインデックス（Ｉ＿ＭＫＢ）が以下の（２０）式のようになっているとする。
Ｉ＿ＭＫＢ＝｛（０）、（２）、（１，１）、（１，２）、（１，０，０）、（１，０，１）、（１，０，２，０）、（１，０，２，１，０）、（１，０，２，１，２）、（１，０，２，２，０）、（１，０，２，２，２）｝・・・（２０）
【００９１】
このＭＫＢインデックスは、以下の（２１）式の２つの経路ｙ０とｙ２とを無効化するものである。
ｙ０＝（１，０，２，１，１）、ｙ２＝（１，０，２，２，１）・・・（２１）
【００９２】
アクセス装置２００に割り当てられている経路をｘ０＝（１，０，２，０，１）とする。このとき、アクセス装置２００の変換デバイス鍵記憶部２１０２は、以下の（２２）式の添字を格納している。
Ｉ＿Ｄ＝｛（１）、（１，０）、（１，０，２）、（１，０，２，０）、（１，０，２，０，１）｝・・・（２２）
【００９３】
さらに、変換デバイス鍵記憶部２１０２は、以下の（２３）式のデバイス鍵（束）を格納している。
Ｄ０＝｛
Ｇ（１００，ＰＦ（１）），
Ｇ（１００，ＰＦ（１，０）），
Ｇ（１００，ＰＦ（１，０，２）），
Ｇ（１００，ＰＦ（１，０，２，０）），
Ｇ（１００，ＰＦ（１，０，２，０，１））｝・・・（２３）
【００９４】
なお、アクセス装置２００のデバイス番号ｍは、経路ｘ０の３進表現１０２０１＿３から得られる１００である。鍵選択部２１０３は、Ｉ＿Ｄの添字（経路）を１つずつ順に選び、Ｉ＿ＭＫＢに含まれているか否かを調べる。鍵選択部２１０３は、例えば以下に示すような関数ｋｅｙ＿ｃｈｏｉｃｅ（）により、復号鍵Ｋｄを選択する。
ｋｅｙ＿ｃｈｏｉｃｅ（Ｉ＿Ｄ，Ｉ＿ＭＫＢ）｛
ｉｎｔ  ｉ，ｊ；
ｆｏｒ（ｊ＝０；ｊ＜５；ｊ＋＋）
ｆｏｒ（ｉ＝０；ｉ＜１１；ｉ＋＋）
ｉｆ（Ｉ＿Ｄ［ｊ］＝＝Ｉ＿ＭＫＢ［ｉ］）｛
復号鍵Ｋｄとして、Ｄ０［ｊ］を選択；
ｒｅｔｕｒｎ  ｊ；
｝
ｒｅｔｕｒｎ  −１；
｝
【００９５】
この結果、（２０）式のＩ＿ＭＫＢと（２２）式のＩ＿Ｄに対しては、復号鍵ＫｄとしてＤ０［３］＝Ｇ（１００，ＰＦ（１，０，２，０））が選択される。
【００９６】
他方、アクセス装置２００に割り当てられている経路がｙ０である場合は、アクセス装置２００に割り当てられている鍵束（変換デバイス鍵）および添字は以下の（２４）式のようになる。
鍵束：｛
Ｇ（１０３，ＰＦ（１）），
Ｇ（１０３，ＰＦ（１，０）），
Ｇ（１０３，ＰＦ（１，０，２）），
Ｇ（１０３，ＰＦ（１，０，２，１）），
Ｇ（１０３，ＰＦ（１，０，２，１，１））｝、
添字：｛（１）、（１，０）、（１，０，２）、（１，０，２，１）、（１，０，２，１，１）｝・・・（２４）
【００９７】
このアクセス装置２００のデバイス番号ｍは１０２１１＿３＝１０３である。このアクセス装置２００の場合、関数ｋｅｙ＿ｃｈｏｉｃｅ（）は復号鍵Ｋｄを見出すことができず、数値−１を返して停止する。
【００９８】
鍵選択部２１０３が復号鍵Ｋｄを見出すことができた場合、鍵選択部２１０３は、見出した復号鍵Ｋｄの添字を送信部２１０４に送る。送信部２１０４は、添字を鍵インデックスｉ（ｍ）として、記憶装置１００に送る。上記の例では、（１，０，２，０）が復号鍵Ｋｄの添字であるから、送信部２１０４は、鍵インデックスｉ（ｍ）として添字（１，０，２，０）を記憶装置１００に送る（ステップＳ１０５）。なお、鍵インデックスは、アクセス装置２００のデバイス番号ｍに依存する。従って、鍵インデックスをｉ（ｍ）と表記する。鍵インデックスは、ａ行ｂ列の生成行列の１列からｃ列（ｃは１≦ｃ≦ｂを満たす整数）までの行のいずれかを特定する情報となる。
【００９９】
なお、鍵インデックスｉ（ｍ）を送信する代わりに、鍵選択部２１０３が、見出した復号鍵Ｋｄの添字の長さを送信部２１０４に送ってもよい。上記の例では、復号鍵Ｋｄの添字（１，０，２，０）の長さは４であるから、送信部２１０４は、鍵インデックスとして数４を記憶装置１００に送る。記憶装置１００では、別途アクセス装置２００から取得するデバイス番号ｍと合わせて、復号鍵Ｋｄの添字を取得することができる。具体的には、添字を取得する処理は例えば次のように行われる。
【０１００】
アクセス装置２００には経路ｘ０＝（１，０，２，０，１）が割り当てられているものとする。このとき、当該アクセス装置２００の番号記憶部２１０５はデバイス番号１０２０１＿３＝１００を格納している。記憶装置１００がアクセス装置２００からデバイス番号＝１０２０１＿３と鍵インデックス＝４を受け取ると、３進表記のデバイス番号から４つの添字を切りだして、復号鍵Ｋｄの添字（１，０，２，０）を得ることができる。すなわち、記憶装置１００が、鍵インデックスとアクセス装置２００のデバイス番号と組み合わせて、復号鍵Ｋｄの添字が得られるように、鍵インデックスを定義すればよい。
【０１０１】
鍵選択部２１０３は次に、読取部２１０１から復号鍵Ｋｄの添字に対応するベース鍵を読み取る。復号鍵Ｋｄの添字が（１，０，２，０）である場合、鍵選択部２１０３は、対応するベース鍵である鍵ＫＭ’＝Ｅ（ＰＦ（１，０，２，０），ＫＭ）を、読取部２１０１が読取った変換ＭＫＢから取得する（ステップＳ１０９）。鍵選択部２１０３は、以下の（２５）式に示すように、復号鍵Ｋｄによって取得した鍵ＫＭ’を復号して認証鍵ＫＡを得る（ステップＳ１１０）。Ｄ（Ｘ，Ｙ）は、ＹをＸで復号する復号演算を表す。
ＫＡ＝Ｄ（Ｋｄ，ＫＭ’）・・・（２５）
【０１０２】
一方、記憶装置１００では、取得部１１０２が鍵インデックスｉ（ｍ）をアクセス装置２００から受け取る。取得部１１０２は、鍵インデックスｉ（ｍ）を鍵生成部１１０５に送る。鍵生成部１１０５は、受信部１１０３にアクセス装置２００のデバイス番号ｍを読み出すよう指示する。受信部１１０３は、アクセス装置２００の番号記憶部２１０５から読み出されたデバイス番号ｍを受信し、受信したデバイス番号ｍを鍵生成部１１０５に送る。鍵生成部１１０５は、デバイス鍵記憶部１１０１から生成行列Ｍによって定められるデバイス鍵を読み出して、鍵インデックスｉ（ｍ）に対応する認証鍵ＫＡを生成する。
【０１０３】
例えば、生成行列Ｍが図２で与えられ、ｍ＝１００＝１０２０１＿３、ｉ（ｍ）＝４であるとき、鍵生成部１１０５は、以下のｉ）〜ｖｉ）の手続きによって認証鍵ＫＡを得る。
ｉ）復号鍵Ｋｄの添字（１，０，２，０）を取得する。
ｉｉ）添字が定める経路に対する経路関数値ＰＦ（１，０，２，０）＝ｋ（０，１）（＋）ｋ（１，０）（＋）ｋ（２，２）（＋）ｋ（３，０）を算出する。
ｉｉｉ）復号鍵Ｋｄ＝Ｇ（ｍ，ＰＦ（１，０，２，０））＝Ｇ（１００，ＰＦ（１，０，２，０））を算出する（ステップＳ１０６）。
ｉｖ）メディア鍵記憶部１１０４からメディア鍵ＫＭを取得する。
ｖ）ｉｉ）で算出した経路関数値ＰＦ（１，０，２，０）によってメディア鍵ＫＭを暗号化することにより、鍵ＫＭ’を取得する（ステップＳ１０７）：ＫＭ’＝Ｅ（ＰＦ（１，０，２，０），ＫＭ）。
ｖｉ）ｉｉｉ）で取得した復号鍵Ｋｄによって鍵ＫＭ’を復号して認証鍵ＫＡを得る（ステップＳ１０８）：ＫＡ＝Ｄ（Ｋｄ，ＫＭ’）。
【０１０４】
鍵生成部１１０５は、算出した認証鍵ＫＡを鍵暗号化部１１０７に送る。鍵暗号化部１１０７は、乱数生成部１１０６に乱数発生要求を出し、乱数発生部１１０６が発生した乱数Ｒ（ステップＳ１１１）を受け取る。鍵暗号化部１１０７は、乱数Ｒを認証鍵ＫＡで暗号化し（ステップＳ１１２）、その結果である暗号化乱数Ｒ’＝Ｅ（ＫＡ，Ｒ）をアクセス装置２００に送る（ステップＳ１１４）。Ｅ（ＫＡ，Ｒ）は、Ｒを認証鍵ＫＡで暗号化した結果を表す。一方、乱数Ｒは乱数発生部１１０６からデータ暗号化部１１０８にも送られる。アクセス装置２００からの読み出し要求を受け、データ暗号化部１１０８は乱数Ｒを用いて、秘匿領域１１１０に格納されている読み出し対象のデータＤを暗号化し、暗号化データＤ’＝Ｅ（Ｒ，Ｄ）を得る（ステップＳ１１３）。データ暗号化部１１０８は暗号化データＤ’をアクセス装置２００に送る（ステップＳ１１４）。
【０１０５】
アクセス装置２００は、暗号化乱数Ｒ’を受け取ると、暗号化乱数Ｒ’を鍵復号部２１０６に入力する。鍵復号部２１０６は、鍵選択部２１０３から、鍵選択部２１０３が先に算出した認証鍵ＫＡを取得する。鍵復号部２１０６は、認証鍵ＫＡを用いて暗号化乱数Ｒ’を復号し、乱数Ｒを得る（ステップＳ１１５）：Ｒ＝Ｄ（ＫＡ，Ｒ’）。鍵復号部２１０６は、得られた乱数Ｒをデータ復号部２１０７に送る。
【０１０６】
データ復号部２１０７は、記憶装置１００に読み出し要求を出す。上述のように、記憶装置１００のデータ暗号化部１１０８は、読み出し要求を受け、暗号化データＤ’を出力する。データ復号部２１０７は、暗号化データＤ’を取得する。データ復号部２１０７は、暗号化データＤ’を乱数Ｒによって復号し、読み出し対象のデータＤを得る（ステップＳ１１６）。データ復号部２１０７は、データＤをデータ利用部２１０８に送る。データ利用部２１０８は、データＤを画面表示するなどして利用する。
【０１０７】
以上のように、本実施形態では、以下のような機能が実現される。
ｉ）変換ＭＫＢは、ＭＫＢインデックスとベース鍵を含んでいる。特定の生成行列と、当該生成行列上の経路を想定した上で、ＭＫＢインデックスは無効化対象の経路の境界経路集合を用いて構成される。ベース鍵は、ＭＫＢインデックスに属する各経路の経路関数値と記憶装置１００が格納する１つまたは複数のメディア鍵と呼ばれる情報から作られる。
ｉｉ）アクセス装置２００は、アクセス装置２００に割り当てられている識別情報（本実施形態ではデバイス番号）を格納しており、記憶装置１００の秘匿領域１１１０のデータの読み出しまたは秘匿領域１１１０へのデータの書き込みの際に、当該識別情報を記憶装置１００に送る。
ｉｉｉ）記憶装置１００は、生成行列を格納している。記憶装置１００は、生成行列、アクセス装置２００から取得した識別情報、および、記憶装置１００が格納するメディア鍵を用いて、認証鍵を生成する。
ｉｖ）アクセス装置２００は、アクセス装置２００に割り当てられている（生成行列上の）経路によって定められる、経路関数値を用いて算出されるデバイス鍵を格納しているが、当該デバイス鍵は、当該アクセス装置２００が格納する識別情報を用いて変換されている（変換デバイス鍵）。
ｖ）アクセス装置２００は、変換デバイス鍵と、ベース鍵とから認証鍵を算出する。
ｖｉ）記憶装置１００とアクセス装置２００とは、それぞれが導出した（共通の）認証鍵を共有し、共有する認証鍵を乱数の暗号化やデータの暗号化に用いる。
【０１０８】
本実施形態では、ＭＫＢインデックスによって、通常のＭＫＢと同様の効率的なアクセス装置２００の無効化が行われる。しかも、本実施形態では通常のＭＫＢの場合とは異なり、アクセス装置２００と記憶装置１００の間で共有される認証鍵（上記の例ではＫＡ＝Ｄ（Ｇ（１００，ＰＦ（１，０，２，０）），Ｅ（ＰＦ（１，０，２，０），ＫＭ）））は、アクセス装置２００ごとに異なる。各アクセス装置２００は互いに異なるデバイス番号を有しているので、認証鍵ＫＡはアクセス装置２００ごとに異なる。その結果、万一、あるアクセス装置２００が不正に解析されて、記憶装置１００との間で共有される認証鍵ＫＡが暴露されたとしても、認証鍵ＫＡを、異なるデバイス鍵を持つ、別のアクセス装置２００でそのまま利用することはできない。
【０１０９】
通常のＭＫＢでは、あるＭＫＢについてメディア鍵を知れば、記憶装置１００によるアクセス装置２００の認証が完了する。例えば図１の例では、メディア鍵ＫＭを有していれば、記憶装置１０の秘匿領域（データ記憶部３）からデータを読み出すことができることになる。このように、通常のＭＫＢによる認証の場合、デバイス鍵は不要である。従って、次のようなシステムに対する攻撃のシナリオが成立する。
ｉ）攻撃者は特定の（脆弱性を有する）アクセス装置２００を分析してデバイス鍵を得る。
ｉｉ）攻撃者は不正取得したデバイス鍵を用いて、記憶装置１００が格納するＭＫＢのメディア鍵を取得する。
ｉｉｉ）攻撃者は不正に取得したメディア鍵を含む不正なアクセス装置２００（ソフトウェア）を配布する。不正なアクセス装置２００は記憶装置１００の秘匿領域１１１０から自由にデータを読み出すことができる。不正なアクセス装置２００自身はデバイス鍵を持っていないため、不正なアクセス装置２００を解析して、不正に解析されたアクセス装置２００のデバイス鍵を特定することはできない。従って、この方法では、不正に解析されたアクセス装置２００を無効化することができない。
ｉｖ）不正に解析されたアクセス装置２００のデバイス鍵を特定して無効化しない限り、ＭＫＢ（とメディア鍵と）を更新しても、アクセス装置２００を用いたメディア鍵の流出が続く。
【０１１０】
一方、変換ＭＫＢを用いる本実施形態では、アクセス装置２００が記憶装置１００の秘匿領域１１１０にアクセスするためには、特定のアクセス装置２００が算出した認証鍵ＫＡとアクセス装置２００の識別情報とが必要である。これらの情報を含み、記憶装置１００に不正にアクセスするソフトウェア等が配布されれば、識別情報を特定できるため、当該識別情報で指定されるデータ利用機器（アクセス装置２００）を、新しい変換ＭＫＢを配布することにより無効化できる。これにより、不正な解析を受けたと思われる当該データ利用機器からの認証鍵の流出を阻止することができる。
【０１１１】
このように、第１の実施形態では、認証と暗号化によって保護された秘匿領域からのデータ不正流出を回避することができる。
【０１１２】
（第２の実施形態）
第１の実施形態では、アクセス装置で算出した復号鍵のインデックス（鍵インデックス）を記憶装置が受け取り、鍵インデックスに基づいて記憶装置が認証鍵を算出した。第２の実施形態では、記憶装置はアクセス装置のデバイス番号だけを受け取り、記憶装置の側が当該デバイス番号に基づいて認証鍵を算出する。
【０１１３】
図６は、第２の実施形態にかかる記憶装置１００−２の構成の一例を示すブロック図である。図６に示すように、記憶装置１００−２は、デバイス鍵記憶部１１０１と、取得部１１０２−２と、受信部１１０３と、メディア鍵記憶部１１０４−２と、鍵生成部１１０５−２と、乱数生成部１１０６と、鍵暗号化部１１０７と、データ記憶部１１０９と、データ復号部１１１２と、を備えている。
【０１１４】
第２の実施形態では、取得部１１０２−２、メディア鍵記憶部１１０４−２および鍵生成部１１０５−２の機能と、データ復号部１１１２を追加した点と、データ暗号化部１１０８を削除した点と、が第１の実施形態と異なっている。その他の構成および機能は、第１の実施形態にかかる記憶装置１００のブロック図である図３と同様であるので、同一符号を付し、ここでの説明は省略する。
【０１１５】
なお、データ暗号化部１１０８は説明の便宜上削除したものであり、記憶装置１００−２がデータ暗号化部１１０８を備えるように構成してもよい。また、第１の実施形態の記憶装置１００が、本実施形態と同様のデータ復号部１１１２を備えるように構成してもよい。
【０１１６】
取得部１１０２−２は、一般領域１１１１に記憶された変換ＭＫＢと、受信部１１０３により受信されたデバイス番号とを参照して、鍵インデックスｉ（ｍ）を取得する点が、第１の実施形態の取得部１１０２と異なっている。なお、本実施形態では、第１の実施形態と異なるデータ構造の変換ＭＫＢを用いる。本実施形態の変換ＭＫＢのデータ構造の詳細については後述する。
【０１１７】
取得部１１０２−２は、デバイス番号テーブルを用いて鍵インデックスを取得する。図７は、デバイス番号テーブルのデータ構造の一例を示す図である。図７に示すように、デバイス番号テーブルは、デバイス番号と変換デバイス鍵の経路（インデックス）とを対応づけて記憶している。なお、デバイス番号テーブルは、取得部１１０２−２が保持するように構成してもよいし、データ記憶部１１０９などの他の記憶部に保持するように構成してもよい。デバイス番号テーブルを用いた処理の詳細は後述する。
【０１１８】
メディア鍵記憶部１１０４−２は、複数のメディア鍵（以下の例では、｛ＫＭ０，ＫＭ１，ＫＭ２，ＫＭ３，ＫＭ４｝）を記憶する点が、１つのメディア鍵を記憶する第１の実施形態のメディア鍵記憶部１１０４と異なっている。
【０１１９】
鍵生成部１１０５−２は、複数のメディア鍵から認証鍵ＫＡを生成する点が、第１の実施形態と異なる。なお、第１の実施形態と同様にメディア鍵記憶部１１０４−２に１つのメディア鍵を記憶するように構成してもよい。この場合は、鍵生成部１１０５−２は、第１の実施形態の鍵生成部１１０５と同様の方法により認証鍵ＫＡを生成すればよい。
【０１２０】
鍵生成部１１０５−２は、第１算出部１１０５ａと、第２算出部１１０５ｂ−２とを備えている。第１算出部１１０５ａの機能は第１の実施形態と同様である。
【０１２１】
第２算出部１１０５ｂ−２は、復号鍵Ｋｄによりメディア鍵を復号することにより認証鍵ＫＡを算出する。本実施形態では、第２算出部１１０５ｂ−２は、複数のメディア鍵から算出され、変換ＭＫＢのベース鍵として記憶されている鍵情報のうち、鍵インデックスに対応する鍵情報を復号鍵Ｋｄで復号することにより認証鍵ＫＡを算出する。
【０１２２】
データ復号部１１１２は、乱数Ｒを用いて暗号化データＤ’からデータＤを復号する。
【０１２３】
図８は、第２の実施形態にかかるアクセス装置２００−２の構成の一例を示すブロック図である。図８に示すように、アクセス装置２００−２は、読取部２１０１と、変換デバイス鍵記憶部２１０２と、鍵選択部２１０３−２と、送信部２１０４−２と、番号記憶部２１０５と、鍵復号部２１０６と、データ暗号化部２１０９と、を備えている。
【０１２４】
第２の実施形態では、鍵選択部２１０３−２の機能、送信部２１０４−２の機能、データ復号部２１０７およびデータ利用部２１０８を削除したこと、および、データ暗号化部２１０９を追加したことが第１の実施形態と異なっている。その他の構成および機能は、第１の実施形態にかかるアクセス装置２００のブロック図である図４と同様であるので、同一符号を付し、ここでの説明は省略する。
【０１２５】
なお、データ復号部２１０７は説明の便宜上削除したものであり、アクセス装置２００−２がデータ復号部２１０７を備えるように構成してもよい。また、第１の実施形態のアクセス装置２００が、本実施形態と同様のデータ暗号化部２１０９を備えるように構成してもよい。
【０１２６】
鍵選択部２１０３−２は、複数の変換デバイス鍵の中から、変換ＭＫＢに応じた変換デバイス鍵を選択し、選択した変換デバイス鍵から認証鍵ＫＡを算出する。本実施形態では、変換ＭＫＢのデータ構造が第１の実施形態と異なるため、鍵選択部２１０３−２は、それに応じた処理により変換デバイス鍵を選択する。
【０１２７】
送信部２１０４−２は、鍵インデックスｉ（ｍ）を送信しない点が、第１の実施形態の送信部２１０４と異なっている。データ暗号化部２１０９は、乱数Ｒを用いて秘匿領域１１１０に書き込むデータＤを暗号化し、暗号化データＤ’＝Ｅ（Ｒ，Ｄ）を算出する。
【０１２８】
次に、このように構成された第２の実施形態にかかる記憶装置１００−２およびアクセス装置２００−２によるアクセス処理について図９を用いて説明する。図９は、第２の実施形態におけるアクセス処理の全体の流れを示すシーケンス図である。
【０１２９】
ステップＳ２０１〜ステップＳ２０４までは、図５のステップＳ１０１〜ステップＳ１０４までと同様であるため説明を省略する。
【０１３０】
第２の実施形態では、送信部２１０４−２が、番号記憶部２１０５に記憶されたデバイス番号ｍを記憶装置１００−２に送信する（ステップＳ２０５）。
【０１３１】
記憶装置１００−２の取得部１１０２−２は、図７のようなデバイス番号テーブルを参照し、受信されたデバイス番号に対応する経路（インデックス）を取得する（ステップＳ２０６）。取得部１１０２−２は、取得したインデックスから、復号鍵Ｋｄの鍵インデックスを算出する（ステップＳ２０７）。この処理の詳細は後述する。
【０１３２】
ステップＳ２０８〜ステップＳ２１４までは、図５のステップＳ１０６〜ステップＳ１１２までと同様であるため説明を省略する。
【０１３３】
以下、図９では、認証鍵ＫＡを用いて、アクセス装置２００−２が記憶装置１００−２の秘匿領域１１１０にデータを書き込む処理を例に説明する。
【０１３４】
記憶装置１００−１は、算出された暗号化乱数Ｒ’をアクセス装置２００−２に送信する（ステップＳ２１５）。アクセス装置２００−２の鍵復号部２１０６は、受信した暗号化乱数Ｒ’を認証鍵ＫＡで復号した乱数Ｒを算出する（ステップＳ２１６）。データ暗号化部２１０９は、秘匿領域１１１０に書き込むべきデータＤを乱数Ｒで暗号化した暗号化データＤ’を算出する（ステップＳ２１７）。アクセス装置２００−２は、暗号化データＤ’を記憶装置１００−２に送信する（ステップＳ２１８）。
【０１３５】
記憶装置１００−２のデータ復号部１１１２は、受信した暗号化データＤ’を乱数Ｒで復号したデータＤを算出する（ステップＳ２１９）。
【０１３６】
このような処理により、ＭＫＢ技術を用いた認証鍵共有による秘匿領域へのアクセス処理を実現できる。
【０１３７】
次に、上記のようなアクセス処理の具体例についてさらに説明する。以下では、アクセス装置２００−２に経路ｘ＝（２，０，２，２，１）が割り当てられているものとする。従って、アクセス装置２００−２の番号記憶部２１０５は、デバイス番号ｍ＝２０２２１＿３＝１８７を格納している。また、変換デバイス鍵記憶部２１０２は、上述の（９）式と同様の鍵束、および、（１１）式と同様の添字の集合を格納している。
【０１３８】
記憶装置１００−２の一般領域１１１１が格納する変換ＭＫＢはＭＫＢインデックスと、ベース鍵とを含んでいる。ＭＫＢインデックスの構成は第１の実施形態に述べた通りである。本実施形態では、第１の実施形態とは若干異なるベース鍵を採用する。ＭＫＢインデックス（Ｉ＿ＭＫＢと表記）は、上述の（２０）式で与えられるとする。
【０１３９】
これは、それぞれ経路ｙ０＝（１，０，２，１，１）と経路ｙ２＝（１，０，２，２，１）とを割り当てられたアクセス装置２００−２を無効化するＭＫＢインデックスである。このとき、本実施形態のベース鍵（Ｂ＿ＭＫＢと表記）を、以下の（２６）式のように定める。
Ｂ＿ＭＫＢ＝｛
ＫＭ（０），
ＫＭ（２），
ＫＭ（１，１），
ＫＭ（１，２），
ＫＭ（１，０，０），
ＫＭ（１，０，１），
ＫＭ（１，０，２，０），
ＫＭ（１，０，２，１，０），
ＫＭ（１，０，２，１，２），
ＫＭ（１，０，２，２，０），
ＫＭ（１，０，２，２，２）｝・・・（２６）
【０１４０】
なお、関数ＫＭは、以下の（２７）式で表される。
ＫＭ（ｎ０）＝Ｅ（ＰＦ（ｎ０），ＫＭ０），
ＫＭ（ｎ０，ｎ１）＝Ｅ（ＰＦ（ｎ０，ｎ１），ＫＭ１），
ＫＭ（ｎ０，ｎ１，ｎ２）＝Ｅ（ＰＦ（ｎ０，ｎ１，ｎ２），ＫＭ２），
ＫＭ（ｎ０，ｎ１，ｎ２，ｎ３）＝
Ｅ（ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３），ＫＭ３），
ＫＭ（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４）＝
Ｅ（ＰＦ（ｎ０，ｎ１，ｎ２，ｎ３，ｎ４），ＫＭ４）・・・（２７）
【０１４１】
経路関数ＰＦは第１の実施形態の通りである。｛ＫＭ０，ＫＭ１，ＫＭ２，ＫＭ３，ＫＭ４｝はメディア鍵であり、記憶装置１００−２のメディア鍵記憶部１１０４−２に格納されている。第１の実施形態ではメディア鍵は１つであった。本実施形態は複数のメディア鍵を持つ例になっている。
【０１４２】
本実施形態では、変換ＭＫＢは１つの記憶装置１００−２に対して１つ存在する。アクセス装置２００−２が記憶装置１００−２の秘匿領域１１１０にデータを書き込む際は、まず、読取部２１０１が記憶装置１００−２の一般領域１１１１から変換ＭＫＢを読み取る。読取部２１０１は、鍵選択部２１０３−２に読み取った変換ＭＫＢのＭＫＢインデックスを送る。鍵選択部２１０３−２は、変換デバイス鍵記憶部２１０２から変換デバイス鍵を読み取り、復号鍵Ｋｄを選択する。この復号鍵Ｋｄの選択方法は第１の実施形態に述べた通りである。
【０１４３】
鍵選択部２１０３−２が復号鍵Ｋｄを見出すことができた場合、鍵選択部２１０３−２は読取部２１０１が読取った変換ＭＫＢから、復号鍵Ｋｄの添字に対応するベース鍵を読み取る。例えば、復号鍵Ｋｄの添字が（１，０，２，０）である場合、鍵選択部２１０３−２は、対応するベース鍵である鍵ＫＭ（１，０，２，０）を、変換ＭＫＢから読み取る。鍵選択部２１０３−２は、復号鍵Ｋｄによって鍵ＫＭ（１，０，２，０）を復号して、認証鍵ＫＡを得る（ＫＡ＝Ｄ（Ｋｄ，ＫＭ（１，０，２，０）））。
【０１４４】
一方、記憶装置１００−２では、受信部１１０３がアクセス装置２００−２の送信部２１０４−２から送信されたデバイス番号ｍを受信する。第１の実施形態とは異なり、本実施形態では、デバイス番号ｍは必ずしもデバイス鍵と数学的な関係を持たない。
【０１４５】
すなわち、デバイス番号と変換デバイス鍵（の経路）とは図７のようなデバイス番号テーブルによって関連付けられている。デバイス番号テーブルでは、１つのデバイス番号に対して、ただ１つの変換デバイス鍵が対応している。一方、１つの変換デバイス鍵に対して複数のデバイス番号が対応するように構成してもよい。
【０１４６】
受信部１１０３は、受信したデバイス番号ｍを取得部１１０２−２に送る。取得部１１０２−２は、図７のようなデバイス番号テーブルを参照し、デバイス番号ｍに対応する経路を見出す。例えば、ｍ＝１０００であったとする。取得部１１０２−２は、デバイス番号テーブルを参照して、対応する変換デバイス鍵（の経路）（１，０，２，０，１）を得る。
【０１４７】
次に、取得部１１０２−２は、復号鍵Ｋｄを見出す。そのために、取得部１１０２−２は、取得した変換デバイス鍵の経路の随伴経路集合Ｉ＿Ｄを作成する。以下の（２８）式は、作成される随伴経路集合Ｉ＿Ｄの一例を示す。
Ｉ＿Ｄ＝｛（１）、（１，０）、（１，０，２）、（１，０，２，０）、（１，０，２，０，１）｝・・・（２８）
【０１４８】
取得部１１０２−２は、一般領域１１１１から変換ＭＫＢのＭＫＢインデックス（Ｉ＿ＭＫＢ）を読み取り、アクセス装置２００−２が生成する復号鍵Ｋｄの鍵インデックスを算出する。この処理は、アクセス装置２００−２で行われる処理と同様である。すなわち、取得部１１０２−２は、以下に示すような関数ｋｅｙ＿ｉｎｄｅｘ（Ｉ＿Ｄ，Ｉ＿ＭＫＢ）により、鍵インデックスを算出する。
ｋｅｙ＿ｉｎｄｅｘ（Ｉ＿Ｄ，Ｉ＿ＭＫＢ）｛
ｉｎｔ  ｉ，ｊ；
ｆｏｒ（ｊ＝０；ｊ＜５；ｊ＋＋）
ｆｏｒ（ｉ＝０；ｉ＜１１；ｉ＋＋）
ｉｆ（Ｉ＿Ｄ［ｊ］＝＝Ｉ＿ＭＫＢ［ｉ］）
ｒｅｔｕｒｎ  ｊ；
ｒｅｔｕｒｎ  −１；
｝
【０１４９】
Ｉ＿Ｄは（２２）式の通りであり、Ｉ＿ＭＫＢは（２０）式の通りであるとする。この場合、ｋｅｙ＿ｉｎｄｅｘ（Ｉ＿Ｄ，Ｉ＿ＭＫＢ）は３を返す。従って、取得部１１０２−２は、Ｉ＿Ｄ［３］＝（１，０，２，０）を選択する。取得部１１０２−２はさらに、一般領域１１１１から、復号鍵Ｋｄの鍵インデックス（１，０，２，０）に対応するベース鍵である鍵ＫＭ（１，０，２，０）＝Ｅ（ＰＦ（１，０，２，０），ＫＭ３）を読み取る。そして、取得部１１０２−２は、復号鍵Ｋｄの鍵インデックス（１，０，２，０）、鍵ＫＭ（１，０，２，０）、および、デバイス番号ｍを鍵生成部１１０５−２に送る。
【０１５０】
鍵生成部１１０５−２は、デバイス鍵記憶部１１０１から生成行列Ｍを読み出して、鍵インデックスｉ（ｍ）に対応する認証鍵ＫＡを生成する。例えば、鍵生成部１１０５−２は、以下の手続きによって認証鍵ＫＡを得る。
ｉ）鍵インデックスｉ（ｍ）が定める経路に関する経路関数値ＰＦ（１，０，２，０）＝ｋ（０，１）（＋）ｋ（１，０）（＋）ｋ（２，２）（＋）ｋ（３，０）を算出する。
ｉｉ）復号鍵Ｋｄ＝Ｇ（ｍ，ＰＦ（１，０，２，０））＝Ｇ（１００，ＰＦ（１，０，２，０））を算出する。
ｉｉｉ）復号鍵Ｋｄによって鍵ＫＭ（１，０，２，０）を復号して認証鍵ＫＡを得る（ＫＡ＝Ｄ（Ｋｄ，ＫＭ（１，０，２，０）））。
【０１５１】
鍵生成部１１０５−２は、算出した認証鍵ＫＡを鍵暗号化部１１０７に送る。鍵暗号化部１１０７は、乱数生成部１１０６に乱数発生要求を出し、乱数生成部１１０６が発生した乱数Ｒを受け取る。鍵暗号化部１１０７は、乱数Ｒを認証鍵ＫＡで暗号化し、その結果である暗号化乱数Ｒ’＝Ｅ（ＫＡ，Ｒ）をアクセス装置２００−２に送る。一方、乱数生成部１１０６は、乱数Ｒをデータ復号部１１１２にも送る。データ復号部１１１２は、取得した乱数Ｒを保持する。
【０１５２】
アクセス装置２００−２は、取得した暗号化乱数Ｒ’を鍵復号部２１０６に入力する。鍵復号部２１０６は、鍵選択部２１０３−２から認証鍵ＫＡを受け取り、当該認証鍵ＫＡを用いて暗号化乱数Ｒ’を復号する。その結果平文の乱数Ｒを得る（Ｒ＝Ｄ（ＫＡ，Ｒ’））。鍵復号部２１０６は、乱数Ｒをデータ暗号化部２１０９に送る。秘匿領域１１１０に書き込むデータＤを受け取ると、データ暗号化部２１０９は、乱数Ｒを用いてデータＤを暗号化し、暗号化データＤ’を得る（Ｄ’＝Ｅ（Ｒ，Ｄ））。データ暗号化部２１０９は、暗号化データＤ’を記憶装置１００−２に送る。
【０１５３】
記憶装置１００−２は、取得した暗号化データＤ’をデータ復号部１１１２に入力する。データ復号部１１１２は、先に取得して保持している乱数Ｒを用いて、暗号化データＤ’を復号し平文データＤを得る（Ｄ＝Ｄ（Ｒ，Ｄ’））。データ復号部１１１２はデータＤを秘匿領域１１１０に記録する。
【０１５４】
このように、第２の実施形態では、鍵インデックスを記憶装置から受信する代わりに、アクセス装置で算出して処理を行うことができる。
【０１５５】
（第３の実施形態）
第１の実施形態では、ＭＫＢ方式として特許文献１と同様の方式を用いる例を挙げたが、これに代えて、非特許文献１に開示されているＭＫＢ方式を用いてもよい。第３の実施形態では、非特許文献１に開示されているＭＫＢ方式の１つである、ＳＤ（Subset  Difference）方式を用いる例を説明する。なお、第３の実施形態では、第１の実施形態における変換ＭＫＢとして、以下に説明するＳＤ方式におけるＭＫＢを用いる。
【０１５６】
最初に、ＳＤ方式について図１０〜図２１を用いて説明する。
【０１５７】
まず、デバイス番号をリーフに割り当てた木構造と、デバイスへ与えられる秘密鍵（デバイス鍵）について説明する。ここで、暗号化には共通鍵暗号方式、公開鍵暗号方式のいずれを用いてもよいが、説明を簡単にするため、以下、暗号化に共通鍵暗号方式を用いる場合を考える。この場合、あるｕノードおよびｖノードに対応する暗号化鍵と復号鍵は同一である。ＳＤ方式で、各デバイスは固有のデバイス番号を持ち、各デバイス番号は、図１０のように木構造上の任意の１つのリーフに対応する。図１０は、デバイス番号をリーフに割り当てた木構造を模式的に示す図である。
【０１５８】
図１０で、各デバイス番号は木構造の各リーフにそれぞれ割り当てられる。木構造中の最上位ノードをルートと呼ぶ。この木構造のリーフノードの高さ（Ｈｅｉｇｈｔ）を「０」、ルートノードの高さ（Ｈｅｉｇｈｔ）を「３１」とすると、リーフの数、すなわち、デバイスの数は全部で２３１個となる。デバイス鍵は、木構造中の２つのノードに対して１つ割り当てられる。以下、２つのノードをｕノードおよびｖノードと表記したとき、特に断りのない限り、ｕノードはより上位に位置するノードであるとする。ある２つのノードであるｕノードおよびｖノードに対して割り当てられるデバイス鍵をｋｕｖと表記する。また、ｕノードを祖先に持ち、かつｖノードを祖先に持たないリーフの集合をＳｕｖと表記する。このとき、デバイス番号ｄに割り当てられたリーフがＳｕｖに属している場合、デバイス鍵としてｋｕｖを与える（または後述のように導出可能とする）。後述のように、デバイスは、デバイス鍵を用いて暗号文を復号するための復号鍵を導出する。
【０１５９】
図１１は、図１０に示した木構造をより具体的に示す図である。図１１は、ルートノード「１５」の高さ（Ｈｅｉｇｈｔ）が「３」である場合の木構造を示す図である。この場合、リーフの数、すなわち、デバイスの数は全部で２３＝８個となる。ｕノードを図１１のノード「１３」、ｖノードを図１１のノード「１０」とする。この場合、ｕノードを祖先に持ち、かつｖノードを祖先に持たないリーフの集合であるＳｕｖ＝Ｓ（１３，１０）は、｛ノード「１」、ノード「２」｝＝｛１，２｝となる。従って、Ｓ（１３，１０）に属するリーフ（デバイス）には、ｋｕｖ＝ｋ（１３，１０）が割り当てられる。
【０１６０】
あり得るすべてのｕノードおよびｖノードの組み合わせに対してデバイス鍵ｋｕｖを生成すれば、すべてのデバイスに与えるデバイス鍵が生成されることになる。ここで、あり得るすべてのｕノードおよびｖノードの組み合わせに対してデバイス鍵ｋｕｖを独立に生成する場合、各デバイスが保持するデバイス鍵数が非常に大きくなる。このため、図１２に示した要領でデバイス鍵を与える。
【０１６１】
図１２は、ノード「１５」をルートとする図１１と同様の木構造の例を示す図である。すべてのデバイス鍵を独立に生成する場合、リーフ「１」に相当するデバイスに与えられるデバイス鍵は、ｋ（１５，１４）、ｋ（１５，１１）、ｋ（１５，１２）、ｋ（１５，５）、ｋ（１５，６）、ｋ（１５，７）、ｋ（１５，８）、ｋ（１５，１０）、ｋ（１５，３）、ｋ（１５，４）、ｋ（１５，２）、ｋ（１３，１０）、ｋ（１３，３）、ｋ（１３，４）、ｋ（１３，２）、ｋ（９，２）となる。これに対し、以下の（２９）式で定義される一方向性関数Ｇを導入し、デバイス鍵の個数を削減する。
Ｇ：｛０，１｝ｘ→｛０，１｝３ｘ・・・（２９）
【０１６２】
例えば、以下の（３０）式のように、デバイス鍵ｋ（１５，１４）を用いてデバイス鍵ｋ（１５，１１）、ｋ（１５，１２）を導出可能にする。
Ｇ（ｋ（１５，１４））＝ｋ（１５，１１）｜｜Ｋｄ（１５，１４）｜｜ｋ（１５，１２）・・・（３０）
【０１６３】
ここで、｜｜はデータの連結を表し、Ｋｄ（１５，１４）は、ｕノードが「１５」、ｖノードが「１４」を表すインデックス情報が付加されている暗号文を復号するための復号鍵である。また、関数Ｇの構成方法は、例えば、出力長ｘのハッシュ関数Ｈを用いて以下の（３１）式のように構成する方法がある。
Ｇ（ｋ（１５，１４））
＝Ｈ（ｋ（１５，１４）｜｜ｓ０）
｜｜Ｈ（ｋ（１５，１４）｜｜ｓ１）
｜｜Ｈ（ｋ（１５，１４）｜｜ｓ２）
＝ｋ（１５，１１）｜｜Ｋｄ（１５，１４）｜｜ｋ（１５，１２）
・・・（３１）
【０１６４】
ここで、ｓ０、ｓ１、ｓ２は定数である。そして、上記例の場合、ｓ０は、デバイス鍵ｋ（１５，１４）から、ｕノードがノード「１５」であり、ｖノードがノード「１４」の左の子ノード「１１」とするデバイス鍵ｋ（１５，１１）を求めるための値である。ｓ１は、デバイス鍵ｋ（１５，１４）から、ｕノードがノード「１５」、ｖノードがノード「１４」を表すインデックス情報が付加されている暗号文を復号するための復号鍵Ｋｄ（１５，１４）を求めるための値である。ｓ２は、デバイス鍵ｋ（１５，１４）から、ｕノードがノード「１５」であり、ｖノードがノード「１４」の右の子ノード「１２」とするデバイス鍵ｋ（１５，１２）を求めるための値である。また、関数Ｇとして非特許文献２で開示されているＡＥＳ−Ｇ３関数を用いてもよい。
【０１６５】
このような一方向性関数Ｇを導入すれば、リーフ「１」に相当するデバイスに与えられるデバイス鍵として、ｋ（１５，１４）、ｋ（１５，１０）、ｋ（１５，２）、ｋ（１３，１０）、ｋ（１３，２）、ｋ（９，２）の６つを与えておけば、それ以外のデバイス鍵は一方向性関数Ｇを用いることにより導出可能である。例えば、デバイス鍵ｋ（１５，１４）に、上記一方向性関数Ｇを適用することで、デバイス鍵ｋ（１５，１１）、ｋ（１５，１２）が得られる。また、ｋ（１５，１１）に上記一方向性関数Ｇを適用することでｋ（１５，５）、ｋ（１５，６）が得られる。また、ｋ（１５，１２）に上記一方向性関数Ｇを適用することでｋ（１５，７）、ｋ（１５，８）が得られる。同様にして、ｋ（１３，１０）からはｋ（１３，３）、ｋ（１３，４）が得られる。なお、上述のデバイス鍵に加え、すべてのデバイスに共通のデバイス鍵（ｒｏｏｔ  ｋｅｙ）を与えてもよい。
【０１６６】
図１３は、暗号化処理動作を説明するためのフローチャートである。暗号化を行うデバイス（以下、暗号化デバイスという）は、無効デバイスのデバイス番号を（例えば信頼できる第三者から）受け取り、また、木構造の規模に関する情報を受け取る（ステップＳ１）。暗号化デバイスは、非特許文献１に記載された手法を用いて、暗号文の復号が可能な有効デバイスのデバイス番号が示すリーフの集合をＳｕｖの和集合として表したときの各Ｓｕｖにおけるｕノードとｖノードの組み合わせを求める（ステップＳ２）。
【０１６７】
例えば、図１４に示すように、リーフ「１」〜「８」がデバイス「１」〜「８」にそれぞれ対応し、デバイス「２」「５」「６」が無効デバイスであるとする。この場合、無効デバイスを除く有効デバイス「１」「３」「４」「７」「８」に対応するリーフの集合｛１，３，４，７，８｝は、ノード「１３」を祖先に持ちかつノード「２」を祖先に持たないリーフの集合Ｓ（１３，２）＝｛１，３、４｝と、ノード「１４」を祖先に持ちかつノード「１１」を祖先に持たないリーフの集合Ｓ（１４，１１）＝｛７，８｝の和集合Ｓ（１３，２）＋Ｓ（１４、１１）、すなわち、
｛１，３，４，７，８｝＝Ｓ（１３，２）＋Ｓ（１４、１１）
と表すことができる。
【０１６８】
このとき、Ｓ（１３，２）のｕノードおよびｖノードの組み合わせに対応するデバイス鍵ｋ（１３，２）は、有効デバイス「１」「３」「４」は与えられている（または導出可能である）が、無効デバイス「２」には与えられていない（かつ導出不可能である）。なお、リーフ「５」〜「８」にも、もともとデバイス鍵ｋ（１３，２）は与えられていない（かつ導出不可能である）。また、Ｓ（１４，１１）のｕノードおよびｖノードの組み合わせに対応するデバイス鍵ｋ（１４，１１）は、リーフ「７」「８」には与えられているが、リーフ「５」「６」には与えられていない（かつ導出不可能である）。なお、リーフ「１」〜「４」にも、もともとデバイス鍵ｋ（１４，１１）は与えられていない（かつ導出不可能である）。
【０１６９】
従って、図１４の場合には、無効デバイスのリーフ「２」には与えられていないデバイス鍵ｋ（１３、２）から導出可能な復号鍵Ｋｄ（１３，２）に対応する暗号化鍵（暗号化に共通鍵暗号方式を用いる場合、対応する暗号化鍵もＫｄ（１３，２）である）と、無効デバイスのリーフ「５」「６」には与えられていないデバイス鍵ｋ（１４、１１）から導出可能な復号鍵Ｋｄ（１４，１１）に対応する暗号化鍵（暗号化に共通鍵暗号方式を用いる場合、対応する暗号化鍵もＫｄ（１４，１１）である）とが取得される（ステップＳ３）。デバイス鍵から復号鍵（暗号化鍵）を導出する方法については後述する。そして、得られた暗号化鍵を用いて、入力された平文（第１の実施形態ではＫＭに相当する）をそれぞれ暗号化する（ステップＳ４）。
【０１７０】
なお、図１４に示すような木構造の場合、平文を暗号化鍵Ｋｄ（１３，２）と暗号化鍵Ｋｄ（１４，１１）のそれぞれを用いて暗号化して、２つの暗号文を生成すると、この暗号文を受け取ったデバイス「１」〜「８」のうち、有効デバイス「１」「３」「４」「７」「８」のみが、当該暗号文を復号することができる。
【０１７１】
次に、暗号化デバイスは、生成された暗号文を復号するための各復号鍵に対応するｕノードおよびｖノードの組み合わせを表すインデックス情報を生成する（ステップＳ５）。そして、それぞれの暗号文に、当該暗号文を復号するための復号鍵に対応するｕノードおよびｖノードの組み合わせを表すインデックス情報を付加し、その結果得られるデータを暗号文データとして出力する（ステップＳ６）。本実施形態では、特に断りのない限り、暗号文とは平文を暗号化したものであり、暗号文データは、暗号文と当該暗号文に対応するインデックス情報とを含むものである。
【０１７２】
図１５は、暗号文データのデータ構造の一例を示す図である。図１５に示すように、暗号文データは、ステップＳ３で得られた暗号化鍵を用いて生成された暗号文と、当該暗号文を復号するための復号鍵に対応するｕノードおよびｖノードの組み合わせを表すインデックス情報（暗号文インテックス情報）とが含まれている。例えば、暗号化鍵Ｋｄ（１３、２）を用いて生成された暗号文［１］には、「１３、２」というインデックス情報が付加されている。また、暗号化鍵Ｋｄ（１４、１１）を用いて生成された暗号文［２］には、「１４、１１」というインデックス情報が付加されている。
【０１７３】
復号を行うデバイス（以下、復号デバイスという）は、図１６に示すように、当該復号デバイスに与えられたデバイス鍵と当該デバイス鍵に対応するｕノードおよびｖノードの組み合わせを表すインデックス情報（鍵インデックス情報）とをそれぞれ保持している。また、復号デバイスは当該デバイスのデバイス番号を保持している。
【０１７４】
図１７は、暗号文（第１の実施形態ではＫＭをデバイス鍵で暗号化したデータに相当する）の復号処理の概略を示したフローチャートである。始めに、復号デバイスは、取得された暗号文データの中から暗号文のインデックス情報を取得する（ステップＳ２１）。次に、取得された暗号文のインデックス情報に対応する暗号文を、当該復号デバイスが復号可能であるか否かを判定し、当該復号デバイスが復号可能な暗号文を探索する（ステップＳ２２）。その後、復号デバイスは、自身が保持するデバイス鍵の中から、復号可能と判定された暗号文を復号するための復号鍵を導出可能なデバイス鍵を選択する（ステップＳ２３）。そして、復号デバイスは、選択されたデバイス鍵を用いて、復号可能と判定された暗号文を復号するための復号鍵を導出し（ステップＳ２４）、導出された復号鍵を用いて、復号可能と判定された暗号文を復号する（ステップＳ２５）。
【０１７５】
図１８は、図１７のステップＳ２２の暗号文判定処理を説明するためのフローチャートである。始めに、復号デバイスは、当該復号デバイスのデバイス番号ｄを取得し（ステップＳ３１）、変数ｉを「１」に設定する（ステップＳ３２）。次に、復号デバイスは、取得した暗号文データの中から、ｉ番目の暗号文データに含まれる暗号文のインデックス情報［ｉ］を取得し（ステップＳ３３）、当該インデックス情報［ｉ］が示すｕノードおよびｖノードを抽出する。そして、復号デバイスは、デバイス番号ｄが示すリーフが、予め与えられた木構造でｕノードを祖先に持ちかつｖノードは祖先に持たないリーフであるか否かを判定する（ステップＳ３４）。当該復号デバイスのデバイス番号ｄが示すリーフが、予め与えられた木構造でｕノードを祖先に持ちかつｖノードは祖先に持たないリーフである場合（ステップＳ３４：Ｙｅｓ）、復号デバイスは、当該インデックス情報［ｉ］に対応する暗号文［ｉ］は復号可能であると判定し（ステップＳ３５）、終了する。デバイス番号ｄが示すリーフが、予め与えられた木構造でｕノードを祖先に持ちかつｖノードは祖先に持たないリーフではない場合（ステップＳ３４：Ｎｏ）、ステップＳ３６へ進む。
【０１７６】
ステップＳ３６では、復号デバイスは、取得した暗号文データの中のすべての暗号文のインデックス情報に対し、ステップＳ３３およびステップＳ３４での検査が行われたか否かを判定する（ステップＳ３６）。未検査の暗号文のインデックス情報があれば（ステップＳ３６：Ｎｏ）、復号デバイスは、ｉを「１」だけインクリメント（ステップＳ３７）し、ステップＳ３３へ戻る。すべての暗号文のインデックス情報について検査した場合（ステップＳ３６：Ｙｅｓ）、復号デバイスは、当該復号デバイスは無効デバイスであると判定し（ステップＳ３８）、必要に応じてその旨を通知して、終了する。
【０１７７】
ここで、ステップＳ３４における具体的な処理を説明する。木構造の中のノードは以下の要領で符号化されている。図１９（ａ）に示すように、木構造の中で、ある親ノードから左の子ノードへ下がる経路に「０」を、右の子ノードへ下がる経路に「１」を割り当て、ルートから対象のノード（リーフを含む）までの経路を上記のように「０」「１」で表した後、その最後に１つの「１」と必要に応じた数の「０」とを付加する。すなわち、「１０・・・０」を付加する。また、各ノード（リーフを含む）を示す符号のビット長Ｌは、当該システムへ適用する木構造の高さに応じて予め定められている。
【０１７８】
各ノード（リーフを含む）を表す符号のビット長の規定値Ｌは、例えば、図１９（ｂ）に示すように、木構造の高さが３である場合には４ビットであり、図１０に示したように、木構造の高さが３１である場合には３２ビットである。
【０１７９】
そこで、ルートから対象のノード（リーフを含む）までの経路を上記のように「０」「１」で表した後、その最後に「１」を付加し、さらに、ビット長を上記規定値Ｌに揃えるために、（ビット数が規定値Ｌ未満の場合には）パディングビット「０」を付加して、対象のノード（リーフを含む）の符号が得られる。
【０１８０】
例えば、図１９（ｂ）に示すようなルートが「１５」であるような木構造では、ノードの符号のビット長は４ビットであるから、図１９（ｃ）に示すように、リーフ「１」は「０００１」、リーフ「３」は「０１０１」、ルート「１５」は「１０００」という符号で表すことができる。各符号の最下位ビットからみて、最初に出現する「１」までは、ビット長をＬに揃えるための冗長ビットともいえる。例えば、リーフ「３」やリーフ「１」の符号では、最後の１ビットの「１」が冗長ビットで、ルート「１５」の符号では、「１０００」が冗長ビットである。なお、本実施形態では、最下位ビットとは符号の一番右のビットを意味し、最上位ビットとは符号の一番左のビットを意味する。
【０１８１】
図１９（ｂ）に示す木構造上のリーフ「１」に対応するデバイスは、デバイス番号ｄとして「０００１」が格納されている。また、暗号文のインデックス情報に含まれるｕノードおよびｖノードも、上記のような符号で表されている。
【０１８２】
図１８のステップＳ３３で取得した暗号文のインデックス情報［ｉ］に含まれるｕノード（例えば図１９（ｂ）のノード「１５」）、および、ｖノード（例えば図１９（ｂ）のリーフ「３」）の符号を、図２０に示すように、それぞれＵ、Ｖとする。すなわち、Ｕ＝「１０００」、Ｖ＝「０１０１」である。
【０１８３】
Ｖの冗長ビットのビット長（パディング長）をＭｖ、Ｕの冗長ビットのビット長（パディング長）をＭｕとする。この場合、Ｍｖ＝１、Ｍｕ＝４である。
【０１８４】
当該デバイスのデバイス番号ｄが示すリーフが木構造でｕノードを祖先に持つとは、以下の（３２）式が成立することを意味する。
（ｄ（＋）Ｕ）＞＞Ｍｕ＝＝０                ・・・（３２）
【０１８５】
ここで、（＋）はビットごとの排他的論理和、＞＞は右シフト、＝＝は等価を表す。例えば、図２０に示すような長さＬのｄとＵとの排他的論理和をとった後の各ビットを右にＭｕビット（ここでは４ビット）ずらして、空いた部分に「０」を詰めた結果「００００」を（２進数表現から１０進数表現へ）数値化したものは「０」である。このため、デバイス番号ｄが示すリーフは、ｕノードを祖先に持つといえる。
【０１８６】
また、ｖノードは祖先に持たないとは、以下の（３３）式が成立することを意味する。
（ｄ（＋）Ｖ）＞＞Ｍｖ！＝０                  ・・・（３３）
【０１８７】
ここで、！＝は非等価を表す。例えば、図２０に示すような長さＬのｄとＶとの排他的論理和をとった後の各ビットを右にＭｖビット（ここでは１ビット）ずらして、空いた部分に「０」を詰めた結果「００１０」を数値化したものは「０」でない。このため、デバイス番号ｄが示すリーフは、ｖノードを祖先に持たないといえる。
【０１８８】
図１８のステップＳ３４では、各暗号文［ｉ］について、当該暗号文のインデックス情報［ｉ］に含まれているｕノードとｖノードを表す符号に対し、上記（３２）式と（３３）式を適用して、当該暗号文［ｉ］がデバイス番号ｄを持つデバイスで復号可能か否かを判定する。
【０１８９】
図１７のステップＳ２３のデバイス鍵選択処理を説明する。復号デバイスは、当該復号デバイスが保持するデバイス鍵のインデックス情報と暗号文のインデックス情報とを用いて、以下に述べる判定を行う。暗号文のインデックス情報［ｉ］に含まれるｕノードを示す符号化データ（Ｕ）の冗長ビットのビット長（パディング長）をＭｕとする。また、暗号文のインデックス情報［ｉ］に含まれるｖノードを示す符号化データ（Ｖ）の冗長ビットのビット長（パディング長）をＭｖとする。また、当該復号デバイスが保持するデバイス鍵のインデックス情報［ｊ］に含まれるｕノードを示す符号化データ（Ｕ’とする）の冗長ビットのビット長（パディング長）をＭｕ’とする。さらに、復号デバイス内に格納されたデバイス鍵のインデックス情報［ｊ］に含まれるｖノードを示す符号化データ（Ｖ’とする）の冗長ビットのビット長（パディング長）をＭｖ’とする。復号デバイスは、ステップＳ３４で、以下の２つの式（（３４）式、（３５）式）を適用して、当該暗号文［ｉ］がデバイス番号ｄを持つデバイスで復号可能か否かを判定する。
Ｍｕ＝＝Ｍｕ’                  ・・・（３４）
（Ｖ＆Ｍｖ’）＝＝（Ｖ’＆Ｍｖ’）                ・・・（３５）
【０１９０】
ここで、＆はビットごとの論理積を表す。図１２に例示したように、デバイス番号ｄを持つデバイスに与えられるデバイス鍵に対応するｕノードおよびｖノードのすべての組について、当該デバイスのデバイス番号ｄが示すリーフがｕノードを祖先に持ちかつｖノードは祖先に持たないことが成立する。従って、上記（３４）式および（３５）式が成立するならば、暗号文［ｉ］に対応するｕノードとデバイス鍵［ｊ］に対応するｕノードとは同一ノードであり、かつ暗号文［ｉ］に対応するｖノードはデバイス鍵［ｊ］に対応するｖノードの祖先（または同一ノード）である。このため、暗号文［ｉ］に対応するｕノードおよびｖノードについて、当該デバイスのデバイス番号ｄが示すリーフがｕノードを祖先に持ちかつｖノードは祖先に持たないことが成立する。このようなデバイス鍵［ｊ］を用いることにより、以下に述べる復号鍵の導出が可能となる。
【０１９１】
図１９に示した木構造で、デバイス番号ｄがリーフ「１」に対応する「０００１」、Ｖがリーフ「３」に対応する「０１０１」、Ｕがルートノード「１５」に対応する「１０００」、である場合を例にとり説明する。上述したように、リーフ「１」に相当するデバイスに与えられるデバイス鍵は、ｋ（１５，１４）、ｋ（１５，１０）、ｋ（１５，２）、ｋ（１３，１０）、ｋ（１３，２）、ｋ（９，２）の６つである。このため、図１７のステップＳ２３で、上記（３４）式および（３５）式を満たすｋ（１５，１０）が選択される。
【０１９２】
図１７のステップＳ２４の復号鍵導出処理を説明する。ステップＳ２２で選択された暗号文とステップＳ２３で選択されたデバイス鍵（Ｋとする）について、暗号文に対応するｕノードとデバイス鍵Ｋに対応するｕノードとは同一ノードであり、かつ暗号文に対応するｖノードはデバイス鍵Ｋに対応するｖノードの祖先（または同一ノード）であることがわかっている。デバイス鍵Ｋに対応するｖノードが暗号文に対応するｖノードへ至る経路について考える。図１９（ａ）に示したように、経路上で、左の子ノードを経る場合は「０」、右の子ノードを経る場合は「１」と表現し、デバイス鍵Ｋに対応するｖノードが暗号文に対応するｖノードへ至る経路を符号化する。例えば、ノード「１４」からノード「６」に至る経路は「０１」と符号化される。デバイス鍵Ｋに対応するｖノードが暗号文に対応するｖノードへ至る経路が「ｂ１  ｂ２・・・ｂｎ」と符号化される場合、デバイスは、以下に説明する方法によりデバイス鍵Ｋから復号鍵を導出する。
【０１９３】
図２１は、デバイス鍵Ｋから復号鍵を導出する処理の一例を示すフローチャートである。始めに、ｉが初期化（ｉ＝０）される（ステップＳ３０１）。次に、ｉが１ずつインクリメント（ｉ＝ｉ＋１）され（ステップＳ３０２）、以下の（３６）式を算出し、算出結果をＫとする処理が繰り返される（ステップＳ３０３）。
ｇ’（Ｋ，ｂｉ）＝Ｈ（Ｋ｜｜ｓ０）（ｂｉ＝０の場合）
＝Ｈ（Ｋ｜｜ｓ２）（ｂｉ＝１の場合）・・・（３６）
【０１９４】
ｉがｎと一致するか否かが判定される（ステップＳ３０４）。ｉ＝ｎでない場合（ステップＳ３０４：Ｎｏ）、ｉ＝ｎとなるまで（３６）式によるＫの算出がｎ回繰り返される。すなわち、ｂ１  ｂ２・・・ｂｎについて関数ｇ’の演算が行われる。ｉ＝ｎとなった場合（ステップＳ３０４：Ｙｅｓ）、Ｈ（Ｋ｜｜ｓ１）が算出され、その算出結果が復号鍵とされる（ステップＳ３０５）。
【０１９５】
上述した通り、復号鍵の導出に用いる関数として、この他にＡＥＳ−Ｇ３関数を始めとする種々の関数が適用可能である。
【０１９６】
デバイス番号ｄがリーフ「１」に対応する「０００１」、Ｖがリーフ「３」に対応する「０１０１」であり、Ｕがルートノード「１５」に対応する「１０００」、である場合を例にとり説明する。上述したように、図１７のステップＳ２３で、ｋ（１５，１０）が選択される。ノード「１０」からノード「３」に至る経路は「０」と符号化される。従って、デバイスは、ｇ’（ｋ（１５，１０），０）を算出し（その算出結果をＫとする）、Ｋを用いて復号鍵Ｈ（Ｋ｜｜ｓ１）を導出する。
【０１９７】
暗号化に共通鍵暗号方式を用いる場合、上述の方法と同じ方法により、デバイス鍵から暗号化鍵を導出できる。
【０１９８】
最後に、デバイスは、ステップＳ２４で導出された復号鍵を用いて、ステップＳ２２で選択された暗号文を復号する（ステップＳ２５）。
【０１９９】
次に、第１の実施形態のＭＫＢ方式の代わりに、これまで説明したＳＤ方式をＭＫＢ方式として用いた第３の実施形態について説明する。図２２は、第３の実施形態にかかる記憶装置１００−３の構成の一例を示すブロック図である。図２２に示すように、記憶装置１００−３は、デバイス鍵記憶部１１０１−３と、取得部１１０２と、受信部１１０３と、メディア鍵記憶部１１０４と、鍵生成部１１０５−３と、乱数生成部１１０６と、鍵暗号化部１１０７と、データ暗号化部１１０８と、データ記憶部１１０９と、を備えている。
【０２００】
第３の実施形態では、デバイス鍵記憶部１１０１−３および鍵生成部１１０５−３の機能が第１の実施形態と異なっている。その他の構成および機能は、第１の実施形態にかかる記憶装置１００のブロック図である図３と同様であるので、同一符号を付し、ここでの説明は省略する。
【０２０１】
デバイス鍵記憶部１１０１−３は、図１２等で説明したような、ＳＤ方式の木構造に含まれるノードの組み合わせに対応づけられるデバイス鍵を記憶する。また、デバイス鍵記憶部１１０１−３は、全デバイス（アクセス装置２００−３）のデバイス鍵を保持している。なお、デバイス鍵記憶部１１０１−３は、全デバイスのデバイス鍵を保持する代わりに、全デバイスのデバイス鍵を算出可能となる情報のみを保持しておき、必要に応じて所望のデバイス鍵を算出する構成としてもよい。
【０２０２】
鍵生成部１１０５−３は、デバイス鍵記憶部１１０１−３に記憶されたＳＤ方式で用いられるデバイス鍵、復号鍵の鍵インデックスｉ（ｍ）（以下、復号鍵インデックスという）、メディア鍵インデックス、および、デバイス番号ｍから、アクセス装置２００−３との間で共有する認証鍵ＫＡを生成する。メディア鍵インデックスは、メディア鍵ＫＭを暗号化したメディア鍵ＫＭ’のインデックスを表す。
【０２０３】
鍵生成部１１０５−３は、第１算出部１１０５ａ−３と、第２算出部１１０５ｂ−３とを備えている。
【０２０４】
第１算出部１１０５ａ−３は、図１７と同様の手順により、メディア鍵インデックス（図１７では暗号文のインデックス情報に相当）、復号鍵インデックス（図１７ではデバイス鍵のインデックス情報に相当）、および、デバイス鍵を用いて、復号鍵Ｋｄを算出する。本実施形態では、第１算出部１１０５ａ−３は、デバイス番号ｍで変換したデバイス鍵を用いて復号鍵Ｋｄを算出する。
【０２０５】
第２算出部１１０５ｂ−３は、復号鍵Ｋｄによりメディア鍵を復号することにより認証鍵ＫＡを算出する。本実施形態では、第２算出部１１０５ｂ−３は、メディア鍵ＫＭを暗号化鍵で暗号化したメディア鍵ＫＭ’を復号鍵Ｋｄで復号することにより認証鍵ＫＡを算出する。第２算出部１１０５ｂ−３は、デバイス鍵ｋｉ、デバイス鍵ｋｉのインデックス情報（復号鍵インデックス）、およびメディア鍵ＫＭ’のインデックス情報（メディア鍵インデックス）を用いて、メディア鍵ＫＭを暗号化するための暗号化鍵を算出する。この算出方法は、図１７のステップＳ２４の復号鍵導出方法と同様である。
【０２０６】
図２３は、第３の実施形態にかかるアクセス装置２００−３の構成の一例を示すブロック図である。図２３に示すように、アクセス装置２００−３は、読取部２１０１と、変換デバイス鍵記憶部２１０２−３と、鍵選択部２１０３−３と、送信部２１０４と、番号記憶部２１０５と、鍵復号部２１０６と、データ復号部２１０７と、データ利用部２１０８と、を備えている。
【０２０７】
第３の実施形態では、変換デバイス鍵記憶部２１０２−３および鍵選択部２１０３−３の機能が第１の実施形態と異なっている。その他の構成および機能は、第１の実施形態にかかるアクセス装置２００のブロック図である図４と同様であるので、同一符号を付し、ここでの説明は省略する。
【０２０８】
変換デバイス鍵記憶部２１０２−３は、従来のＳＤ方式でデバイス番号がｍであるアクセス装置２００−３に割り当てられるデバイス鍵を変換した変換デバイス鍵を記憶する。従来のＳＤ方式でデバイス番号がｍであるアクセス装置２００−３に割り当てられるデバイス鍵をｋ１，・・・，ｋｎとする。このデバイス鍵ｋ１，・・・，ｋｎは、実際にはアクセス装置２００−３には与えられない。信頼できる第三者（または記憶装置１００−３）は、以下の（３７）式により変換デバイス鍵（ｋ’１，・・・，ｋ’ｎ）を算出し、デバイス番号がｍであるアクセス装置２００−３に与える。
ｋ’ｉ＝Ｉ（ｍ，ｋｉ）     （３７）
【０２０９】
ここで、Ｉは一方向性関数である。アクセス装置２００−３の変換デバイス鍵記憶部２１０２−３は、変換デバイス鍵と、デバイス鍵ｋ１，・・・，ｋｎに対応するインデックス情報（復号鍵インデックス）とを保持する。変換デバイス鍵について、特許文献２で開示されている方法で定めた順番に変換デバイス鍵を並べて変換デバイス鍵記憶部２１０２−３に格納してもよい。
【０２１０】
鍵選択部２１０３−３は、図１７のステップＳ２２と同様の方法を用いて、複数の変換デバイス鍵の中から、変換ＭＫＢに応じた変換デバイス鍵を選択する。そして、鍵選択部２１０３−３は、選択した変換デバイス鍵から認証鍵ＫＡを算出する。
【０２１１】
次に、このように構成された第３の実施形態にかかる記憶装置１００−３およびアクセス装置２００−３によるアクセス処理について図２４を用いて説明する。図２４は、第３の実施形態におけるアクセス処理の全体の流れを示すシーケンス図である。
【０２１２】
ステップＳ５０１〜ステップＳ５０２までは、図５のステップＳ１０１〜ステップＳ１０２までと同様であるため説明を省略する。
【０２１３】
アクセス装置２００−３の鍵選択部２１０３−３は、図１７のステップＳ２２と同様の方法を用いて、変換ＭＫＢに含まれる（当該アクセス装置２００−３が用いるべき）メディア鍵ＫＭ’のインデックス情報（メディア鍵インデックス）を取得する。また、鍵選択部２１０３−３は、図１７のステップＳ２３と同様の方法を用いて、復号鍵インデックスを計算する（ステップＳ５０３）。復号鍵インデックスを計算する方法として、特許文献２で開示されている方法を用いてもよい。
【０２１４】
鍵選択部２１０３−３は、図１７のステップＳ２４と同様の方法を用いて、認証鍵ＫＡを導出するための復号鍵Ｋｄを算出する（ステップＳ５０４）。この算出で、図１７のステップＳ２４におけるデバイス鍵に代えて、上記復号鍵インデックスに対応する変換デバイス鍵を用いる。
【０２１５】
アクセス装置２００−３は、当該アクセス装置２００−３のデバイス番号ｍ、復号鍵インデックス、および、メディア鍵インデックスを記憶装置１００−３に送信する（ステップＳ５０５）。
【０２１６】
記憶装置１００−３では、鍵生成部１１０５−３の第１算出部１１０５ａ−３が、受信した復号鍵インデックスに対応するデバイス鍵ｋｉをデバイス鍵記憶部１１０１−３より取得する。次に、第１算出部１１０５ａ−３は、受信したデバイス番号ｍを用いて、上記（３７）式によりデバイス鍵ｋｉを変換した変換デバイス鍵ｋ’ｉを算出する。第１算出部１１０５ａ−３は、図１７のステップＳ２４と同様の方法を用いて、認証鍵ＫＡを導出するための復号鍵Ｋｄを算出する（ステップＳ５０６）。この算出処理で、第１算出部１１０５ａ−３は、図１７のステップＳ２４におけるデバイス鍵に代えて、変換デバイス鍵ｋ’ｉを用いる。
【０２１７】
第２算出部１１０５ｂ−３は、デバイス鍵ｋｉ、復号鍵インデックス、およびメディア鍵インデックスを用いて、メディア鍵ＫＭを暗号化するための暗号化鍵を算出する（ステップＳ５０７）。この算出方法は、図１７のステップＳ２４の復号鍵導出方法と同様である。第２算出部１１０５ｂ−３は、算出された暗号化鍵を用いてメディア鍵ＫＭを暗号化し、メディア鍵ＫＭ’を得る（ステップＳ５０８）。
【０２１８】
メディア鍵ＫＭ’は、上述した方法で算出してもよいし、メディア鍵ＫＭ’の算出処理を行わずに、変換ＭＫＢに含まれる暗号文の中で、デバイス番号ｍに対応する暗号文をメディア鍵ＫＭ’としてもよい。
【０２１９】
ステップＳ５０９〜ステップＳ５１７までは、図５のステップＳ１０８〜ステップＳ１１６までと同様であるため説明を省略する。
【０２２０】
（変形例１）
本実施形態では、アクセス装置２００−３が当該アクセス装置２００−３のデバイス番号、復号鍵インデックス、およびメディア鍵インデックスを記憶装置１００−３に送信する例を説明した。これに代えて、アクセス装置２００−３が当該アクセス装置２００−３のデバイス番号と復号鍵インデックスを記憶装置１００−３に送信するように構成してもよい。この場合、記憶装置１００−３は、図１７のステップＳ２２と同様の方法を用いて、一般領域１１１１に格納されている変換ＭＫＢに含まれる（アクセス装置２００−３が用いるべき）ＫＭ’のインデックス情報（メディア鍵インデックス）を取得する。
【０２２１】
（変形例２）
記憶装置１００−３が認証鍵ＫＡを算出した後に、アクセス装置２００−３が認証鍵ＫＡを保持しているか否かを記憶装置１００−３が検証してもよい。図２５は、本変形例におけるアクセス処理の全体の流れを示すシーケンス図である。図２５は、ステップＳ６１２〜ステップＳ６１６の処理が追加された点が、図２４と異なっている。
【０２２２】
すなわち、記憶装置１００−３は、認証鍵ＫＡを算出した後に、乱数Ｓを生成し（ステップＳ６１２）、アクセス装置２００−３へ乱数Ｓを送信する（ステップＳ６１３）。アクセス装置２００−３は、受信した乱数Ｓと算出した認証鍵ＫＡとを用いてＴ＝Ｈ（ＫＡ｜｜Ｓ）を算出し（ステップＳ６１４）、算出結果Ｔを記憶装置１００−３に送信する（ステップＳ６１５）。記憶装置１００−３は、自装置内で算出したＨ（ＫＡ｜｜Ｓ）と、アクセス装置２００−３から受信したＴとが一致しているか否かを検証する（ステップＳ６１６）。一致している場合、記憶装置１００−３は処理を続行する。一致していない場合、記憶装置１００−３はその旨をアクセス装置２００−３に通知し、処理を終了する。
【０２２３】
（変形例３）
第１の実施形態から第２の実施形態に変形したのと同様に、第３の実施形態を変形させてもよい。すなわち、ＭＫＢ方式としてＳＤ方式を用い、さらに第３の実施形態とは異なり、記憶装置１００−３がアクセス装置２００−３のデバイス番号だけを受け取り、記憶装置１００−３が当該デバイス番号に基づいて暗号鍵を算出してもよい。記憶装置１００−３は、変換ＭＫＢに含まれる暗号文の中で、デバイス番号ｍに対応する暗号文をＫＭ’としてアクセス装置２００−３に送信してもよいし、第１の実施形態と同様に、変換ＭＫＢ全体をアクセス装置２００−３に送信してもよい。また、アクセス装置２００−３は、記憶装置１００−３以外の第三者から変換ＭＫＢを取得してもよい。アクセス装置２００−３が変換ＭＫＢを取得する場合は、アクセス装置２００−３が変換ＭＫＢと当該アクセス装置２００−３のデバイス番号を用いて復号鍵インデックスを算出する。
【０２２４】
（変形例４）
第３の実施形態では、ＭＫＢ方式としてＳＤ方式を用いる例を挙げたが、これに代えて、非特許文献１にて開示されているＭＫＢ方式の１つである、ＣＳ（Complete  Subtree）方式を用いてもよい。
【０２２５】
（第４の実施形態）
第４の実施形態では、サーバが記憶装置を認証する例を説明する。サーバが記憶装置を認証した上でデータを暗号化して送る。図２６は、第４の実施形態のサーバ１００−４の構成例を示すブロック図である。図２７は、第４の実施形態の記憶装置２００−４の構成例を示すブロック図である。第４の実施形態は、例えばサーバ１００−４から記憶装置２００−４にデータをダウンロードするソフトウェアを含むシステムの構成例を示している。
【０２２６】
なお、図２６および図２７では、第１〜第３の実施形態で説明した構成部と同一の機能を備える構成部には同一の符号を付し、説明を省略する。第４の実施形態では、サーバ１００−４のデータ記憶部１１０９−４が秘匿領域を含む必要がない点が、上述のデータ記憶部１１０９と異なっている。また、認証される側である記憶装置２００−４（上述の各実施形態ではアクセス装置が認証される）が、秘匿領域を含むデータ記憶部２１１０を備えている。
【０２２７】
記憶装置２００−４の秘匿領域に格納するデータをサーバ１００−４から読み取る際は、まず読取部２１０１が、サーバ１００−４のデータ記憶部１１０９−４から変換ＭＫＢを読み取る。読取部２１０１は、鍵選択部２１０３に読み取った変換ＭＫＢのＭＫＢインデックスを送る。鍵選択部２１０３は、変換デバイス鍵記憶部２１０２から変換デバイス鍵を読み取り、復号鍵の選択を行う。この選択方法は、第１の実施形態と同様である。鍵選択部２１０３は次に、読取部２１０１が読取った変換ＭＫＢから、復号鍵Ｋｄの添字に対応するベース鍵である鍵ＫＭ’を読み取る。復号鍵Ｋｄの添字が（１，０，２，０）である場合、鍵選択部２１０３は、対応する鍵ＫＭ’＝Ｅ（ＰＦ（１，０，２，０），ＫＭ）を変換ＭＫＢから読み取る。鍵選択部２１０３は、復号鍵Ｋｄによって鍵ＫＭ’を復号して、認証鍵ＫＡを得る（ＫＡ＝Ｄ（Ｋｄ，ＫＭ’））。
【０２２８】
一方、サーバ１００−４では、受信部１１０３が記憶装置２００−４の番号記憶部２１０５から読取られたデバイス番号ｍを受信する。本実施形態では、第１の実施形態と同様に、デバイス番号の３進表現は当該デバイスに割り当てられた経路の表現になっている。取得部１１０２−２は、受信部１１０３からデバイス番号ｍを受け取り、対応するデバイス鍵（の経路）を得る。その後は、取得部１１０２−２は、第２の実施形態と同様にして、復号鍵のインデックスを求め、復号鍵のインデックスに対応するベース鍵の値をデータ記憶部１１０９−４の変換ＭＫＢの中から読み取る。取得部１１０２−２は、復号鍵のインデックス、ベース鍵の値、および、デバイス番号を鍵生成部１１０５−２に送る。
【０２２９】
鍵生成部１１０５−２は、デバイス鍵記憶部１１０１から生成行列Ｍを読み出して、復号鍵インデックスに対応する鍵を生成する。鍵生成部１１０５−２は、第２の実施形態と同様の手続きによって認証鍵ＫＡを得る。
【０２３０】
鍵生成部１１０５−２は、算出した認証鍵ＫＡを鍵暗号化部１１０７に送る。鍵暗号化部１１０７は、乱数生成部１１０６に乱数発生要求を出し、乱数生成部１１０６が発生した乱数Ｒを受け取る。鍵暗号化部１１０７は、乱数Ｒを認証鍵ＫＡで暗号化し、その結果である暗号化乱数Ｒ’＝Ｅ（ＫＡ，Ｒ）を記憶装置２００−４に送る。一方、乱数生成部１１０６は、乱数Ｒをデータ暗号化部１１０８にも送る。データ暗号化部１１０８は、取得した乱数Ｒを保持する。
【０２３１】
記憶装置２００−４は、取得した暗号化乱数Ｒ’を鍵復号部２１０６に入力する。鍵復号部２１０６は、鍵選択部２１０３から認証鍵ＫＡを受け取り、当該認証鍵ＫＡを用いて暗号化乱数Ｒ’を復号する。その結果平文の乱数Ｒ＝Ｄ（ＫＡ，Ｒ’）が得られる。鍵復号部２１０６は、乱数Ｒを保持する。記憶装置２００−４は、サーバ１００−４にデータＤの読み出し要求を出す。サーバ１００−４はデータ記憶部１１０９−４からデータＤを読み出し、データ暗号化部１１０８に入力する。データ暗号化部１１０８は、保持している乱数Ｒを用いてデータＤを暗号化し、暗号化データＤ’＝Ｅ（Ｒ，Ｄ）を得る。データ暗号化部１１０８は、記憶装置２００−４に暗号化データＤ’を送る。
【０２３２】
記憶装置２００−４は、受信した暗号化データＤ’をデータ復号部２１０７に入力する。データ復号部２１０７は、鍵復号部２１０６が保持する乱数Ｒを受け取り、当該乱数Ｒによって暗号化データＤ’をデータＤ＝Ｄ（Ｒ，Ｄ’）に復号する。データ復号部２１０７は、得られたデータＤをデータ記憶部２１１０の秘匿領域に記録する。
【０２３３】
以上説明したとおり、第１から第４の実施形態によれば、不正にアクセスする装置（ソフトウェア）等が配布された場合であっても、不正に解析された装置を特定できるため、データの不正流出を回避可能となる。
【０２３４】
上述の各実施形態にかかる装置（アクセス装置、サーバ、第４の実施形態の記憶装置）は、ＣＰＵ（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）等のコンピュータで読み取り可能な記録媒体に記録されてコンピュータプログラムプロダクトとして提供される。
【０２３６】
また、各実施形態にかかる装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第１または第２の実施形態にかかる記憶装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【０２３７】
また、各実施形態のプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０２３８】
各実施形態にかかる装置で実行されるプログラムは、上述した各部を含むモジュール構成とすることができ、実際のハードウェアとしてはＣＰＵ（プロセッサ）が上記記録媒体からプログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。
【０２３９】
なお、本実施形態は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【０２４０】
１００  記憶装置
２００  アクセス装置
１１０１  デバイス鍵記憶部
１１０２  取得部
１１０３  受信部
１１０４  メディア鍵記憶部
１１０５  鍵生成部
１１０５ａ  第１算出部
１１０５ｂ  第２算出部
１１０６  乱数生成部
１１０７  鍵暗号化部
１１０８  データ暗号化部
１１０９  データ記憶部
１１１０  秘匿領域
１１１１  一般領域
１１１２  データ復号部
２１０１  読取部
２１０２  変換デバイス鍵記憶部
２１０３  鍵選択部
２１０４  送信部
２１０５  番号記憶部
２１０６  鍵復号部
２１０７  データ復号部
２１０８  データ利用部
２１０９  データ暗号化部
２１１０  データ記憶部
【図１】
0005198539.tif 000002
【図２】
0005198539.tif 000003
【図３】
0005198539.tif 000004
【図４】
0005198539.tif 000005
【図５】
0005198539.tif 000006
【図６】
0005198539.tif 000007
【図７】
0005198539.tif 000008
【図８】
0005198539.tif 000009
【図９】
0005198539.tif 000010
【図１０】
0005198539.tif 000011
【図１１】
0005198539.tif 000012
【図１２】
0005198539.tif 000013
【図１３】
0005198539.tif 000014
【図１４】
0005198539.tif 000015
【図１５】
0005198539.tif 000016
【図１６】
0005198539.tif 000017
【図１７】
0005198539.tif 000018
【図１８】
0005198539.tif 000019
【図１９】
0005198539.tif 000020
【図２０】
0005198539.tif 000021
【図２１】
0005198539.tif 000022
【図２２】
0005198539.tif 000023
【図２３】
0005198539.tif 000024
【図２４】
0005198539.tif 000025
【図２５】
0005198539.tif 000026
【図２６】
0005198539.tif 000027
【図２７】
0005198539.tif 000028