(第1実施形態)
図1は、第1実施形態に係る暗号処理システム10の構成を示す図である。暗号処理システム10は、生成装置20と、複数のクライアント端末30と、サーバ40とを備える。
生成装置20は、コンピュータ等の情報処理装置である。生成装置20は、サーバ鍵規則(第1鍵規則)に基づいて、乱数からサーバ鍵(第1鍵)KSを生成する。また、生成装置20は、クライアント鍵規則(第2鍵規則)に基づいて、サーバ鍵KSから、一部に互いに相関を有するビットの系列である複数個(本例ではn個)のクライアント鍵(第2鍵)Ki(=K1,K2,…,Kn)を生成する。
nは、1つのサーバ鍵KSから生成されるクライアント鍵Kiの数を表し、2以上の整数である。また、iは、それぞれのクライアント鍵Kiを識別する値であり、インデックスと呼ぶ。iは、複数のクライアント鍵Kiの全てに対応付けられており、本例では、1以上、n以下の整数である。
n個のクライアント鍵Kiのそれぞれは、平文を暗号化して暗号文を生成するため、および、その暗号文から平文を復号するためのビットの系列である。すなわち、クライアント鍵Kiは、暗号用および復号用が同一のデータ系列の暗号化鍵である。n個のクライアント鍵Kiのそれぞれは、秘匿して管理がされる秘密情報である。
なお、n個のクライアント鍵Kiのそれぞれは、暗号化鍵EKi(=EK1,EK2,…,EKn)の生成の種となるビットの系列であってもよい。暗号化鍵EKiのそれぞれは、平文を暗号化して暗号文を生成するため、および、その暗号文から平文を復号するためのビットの系列である。従って、クライアント鍵Kiが暗号化鍵EKiの生成の種となる場合には、クライアント鍵Ki自体は、鍵とはならない。
また、この場合、生成装置20は、複数のクライアント鍵Kiのそれぞれに対応して、変換関数Fδi(=Fδ1,Fδ2,…,Fδn)を生成する。変換関数Fδiは、コンピュータがビットの変換をするための関数またはプログラム等である。変換関数Fδiは、一例として、一対一関数または擬似ランダム関数等である。
サーバ鍵KSは、n個のクライアント鍵Kiの生成の種となるビットの系列である。なお、サーバ鍵KSは、そのデータ系列自体が、何からの平文の暗号化鍵となっていない。サーバ鍵KSは、秘匿して管理がされる秘密情報である。
サーバ鍵規則およびクライアント鍵規則は、コンピュータにより実行が可能な形式で記述されている電子データであって、例えば、コンピュータにより実行される関数またはプログラム等である。サーバ鍵規則は、乱数に基づきサーバ鍵KSを生成する規則(関数またはプログラム等)である。また、クライアント鍵規則は、サーバ鍵KSに基づきクライアント鍵Kiを生成する規則(関数またはプログラム等)である。
より詳細には、クライアント鍵規則とは、サーバ鍵KSの1つ以上の部分系列を抽出してクライアント鍵Kiを生成するための規則である。すなわち、クライアント鍵規則は、クライアント鍵Kiを定めるための規則である。クライアント鍵Kiは、1つ以上の部分系列を要素とする第1部分系列集合に基づいて定められる。複数のクライアント鍵Kiのうち、いずれか2つのクライアント鍵Kiの第1部分系列集合の少なくとも1つの部分系列が共通する。部分系列とは、サーバ鍵KSの部分情報である。なお、サーバ鍵規則およびクライアント鍵規則は、公開された情報(すなわち、秘匿されていない情報)であってもよいし、秘匿して管理される秘密情報であってもよい。
生成装置20は、複数のクライアント端末30のそれぞれとクライアント鍵Kiのインデックスiとの対応関係を示すインデックス情報を生成する。一つのクライアント端末30は、複数のインデックスiと対応してよい。生成装置20は、生成したn個のクライアント鍵Kiのそれぞれを、インデックスiに対応するクライアント端末30に送信する。また、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、生成装置20は、クライアント鍵Kiのそれぞれに対応して、対応する変換関数Fδiのそれぞれをクライアント端末30に送信する。
生成装置20は、生成したサーバ鍵KSおよびクライアント鍵規則をサーバ40に送信する。クライアント鍵規則が公開されている場合、生成装置20は、クライアント鍵規則をサーバ40に送信しなくてもよい。また、生成装置20は、インデックス情報もサーバ40に送信する。また、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、生成装置20は、インデックスiのそれぞれに対応した変換関数Fδiのそれぞれをサーバ40に送信する。
生成装置20は、サーバ鍵KSおよび複数のクライアント鍵Kiを生成してから所定回数の暗号通信後または所定期間を経過した後、複数のクライアント鍵Kiのうちのいずれかを更新するためのサーバ鍵更新情報sriおよびクライアント鍵更新情報criを生成する。生成装置20は、サーバ鍵更新情報sriをサーバ40に送信する。また、生成装置20は、クライアント鍵更新情報criを、更新対象のクライアント鍵Kiを保持するクライアント端末30に送信する。
サーバ40は、データ処理を実行する情報処理装置(第1情報処理装置)の一例である。サーバ40は、サーバ鍵KSおよびクライアント鍵規則を生成装置20から受信する。なお、クライアント鍵規則が公開されている場合、サーバ40は、公開元の情報処理装置等からクライアント鍵規則を取得する。また、サーバ40は、複数のクライアント端末30のそれぞれと、そのクライアント端末30が受信したクライアント鍵Kiのインデックスiとの対応関係を示すインデックス情報も、生成装置20から受信する。また、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、サーバ40は、インデックスiのそれぞれに対応した変換関数Fδiのそれぞれを生成装置20から受信する。
サーバ40は、サーバ鍵KSを受信してから所定回数の暗号通信後または所定期間を経過した後、サーバ鍵更新情報sriを生成装置20から受信する。サーバ40は、受信したサーバ鍵更新情報sriに基づき、保持しているサーバ鍵KSおよびクライアント鍵規則の少なくとも一方を更新する。また、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、サーバ40は、受信したサーバ鍵更新情報sriに基づき、更新対象のクライアント鍵Kiに対応する変換関数Fδiを更新してもよい。
複数のクライアント端末30のそれぞれは、データ処理を実行する情報処理装置(第2情報処理装置)の一例である。複数のクライアント端末30のそれぞれは、情報処理装置を内蔵した各種の医療機器または電子機器等であってもよい。複数のクライアント端末30のそれぞれは、生成装置20から対応するクライアント鍵Kiを受信する。また、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、複数のクライアント端末30のそれぞれは、クライアント鍵Kiに対応した変換関数Fδiを生成装置20から受信する。
更新対象のクライアント鍵Kiを保持するクライアント端末30は、クライアント鍵Kiを受信してから所定回数の暗号通信後または所定期間を経過した後、クライアント鍵更新情報criを生成装置20から受信する。クライアント端末30は、受信したクライアント鍵更新情報criに基づき、保持しているクライアント鍵Kiを更新する。また、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、クライアント端末30は、受信したクライアント鍵更新情報criに基づき、変換関数Fδiを更新してもよい。
このような構成の暗号処理システム10において、サーバ40と、複数のクライアント端末30のそれぞれとの間で、クライアント鍵Kiを用いた暗号通信がされる。クライアント端末30からサーバ40へと暗号文を伝達する場合、次のように処理がされる。
複数のクライアント端末30のそれぞれは、平文Mi(=M1,M2,…,Mn)を、対応するクライアント鍵Ki(=K1,K2,…,Kn)で暗号化して、暗号文Ci(=C1,C2,…,Cn)を生成する。複数のクライアント端末30のそれぞれは、一例として、互いに同一のビット長の、平文Miとクライアント鍵Kiとを排他的論理和演算して、暗号文Ciを生成する。そして、複数のクライアント端末30のそれぞれは、生成した暗号文Ciをサーバ40へと送信する。
なお、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、複数のクライアント端末30のそれぞれは、対応するクライアント鍵Ki(=K1,K2,…,Kn)と対応する変換関数Fδi(=Fδ1,Fδ2,…,Fδn)とから、暗号化鍵EKi(=EK1,EK2,…,EKn)を生成する。ここで、EKi=Fδi(Ki)である。そして、複数のクライアント端末30のそれぞれは、対応する暗号化鍵EKiで暗号化して、暗号文Ci(=C1,C2,…,Cn)を生成する。
サーバ40は、クライアント端末30から暗号文Ciを受信する。サーバ40は、インデックス情報を参照して、暗号文Ciを送信したクライアント端末30の端末情報から、暗号文Ciを暗号化したクライアント鍵Kiのインデックスiを検出する。サーバ40は、検出したインデックスiとサーバ鍵KSとをクライアント鍵規則に入力して、対応するクライアント鍵Kiを生成する。そして、サーバ40は、生成したクライアント鍵Kiにより暗号文Ciを復号して、平文Miを生成する。なお、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、サーバ40は、生成したクライアント鍵Kiと対応する変換関数Fδiとから暗号化鍵EKiを生成し、生成した暗号化鍵EKiにより平文Miを生成する。
また、サーバ40からクライアント端末30へと暗号文を伝達する場合、次のように処理がされる。サーバ40は、インデックス情報を参照して、送信先のクライアント端末30の端末情報から、送信先のクライアント端末30が保持しているクライアント鍵Kiのインデックスiを検出する。サーバ40は、検出したインデックスiとサーバ鍵KSとをクライアント鍵規則に入力して、対応するクライアント鍵Kiを生成する。サーバ40は、平文Miをクライアント鍵Kiで暗号化して、暗号文Ciを生成する。そして、サーバ40は、生成した暗号文Ciを対応するクライアント端末30へと送信する。暗号文Ciを受信したクライアント端末30は、保持しているクライアント鍵Kiにより暗号文Ciを復号して、平文Miを生成する。
なお、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、サーバ40は、生成したクライアント鍵Kiと対応する変換関数Fδiとから暗号化鍵EKiを生成し、生成した暗号化鍵EKiにより暗号文Ciを生成する。また、暗号文Ciを受信したクライアント端末30は、保持しているクライアント鍵Kiと対応する変換関数Fδiとから暗号化鍵EKiを生成し、生成した暗号化鍵EKiにより平文Miを生成する。
このような構成の暗号処理システム10は、例えば、多数のクライアント端末30が有するプライバシー情報等をサーバ40に収集させて、一括して管理することができる。例えば、暗号処理システム10は、患者の状態を検出するセンサ(体温計、血圧計、脈拍計)等をクライアント端末30として機能させることにより、複数のセンサから検出データをサーバ40が収集して一括して管理する医療システムに適用することができる。そして、サーバ40は、検出データの出力が必要な場合には、サーバ鍵KSおよびクライアント鍵規則から対応するクライアント鍵Kiを生成して、検出データを復号することができる。
また、暗号処理システム10は、一例として、所定のグループ毎(病院毎、病棟毎、診療科毎または担当医者毎)に、サーバ鍵KSおよびクライアント鍵Kiを変更して、グループ外に対する秘匿性を高めてもよい。
図2は、サーバ鍵KSと複数のクライアント鍵Kiとの関係を示す図である。
ここで、生成装置20は、一部に互いに相関を有するビットの系列である複数のクライアント鍵Kiを生成するためのクライアント鍵規則に基づいて、複数のクライアント鍵Kiを生成する。互いに相関を有するビットの系列とは、ビットパターンが完全に同一である関係、または、ビットパターンが完全に同一ではないが予め定められたデータ変換(例えばビット反転、一対一関数または線形変換等)をすれば同一となる関係等をいう。
暗号処理システム10は、n個のクライアント鍵Kiの間にこのような相関性をもたせることにより、サーバ鍵KSの同一の部分系列から、複数のクライアント鍵Kiの一部分を生成することができる。これにより、暗号処理システム10は、サーバ鍵KSのビット長を、n個のクライアント鍵Kiの合計のビット長よりも短くすることができる。この結果、暗号処理システム10によれば、サーバ40が、n個のクライアント鍵Kiの全てを保持したり、n個のクライアント鍵Kiの合計と同一のビット長のサーバ鍵KSを保持したりしなくてよいので、n個のクライアント鍵Kiの管理を容易にすることができる。
なお、1つのクライアント鍵Kiの系列の中には、異なる2以上のクライアント鍵Kiと相関を有する複数の部分系列を含んでいてもよい。例えば、第1のクライアント鍵K1の系列の中は、第2のクライアント鍵K2と相関を有する部分系列と、第3のクライアント鍵K3と相関を有する部分系列とを含んでもよい。これにより、生成装置20は、サーバ鍵KSを効率良く短くすることが可能なクライアント鍵Kiを生成することができる。
また、1つのクライアント鍵Kiの系列の中には、複数のクライアント鍵Kiと同時に相関を有する部分系列を含んでいてもよい。例えば、第1のクライアント鍵K1の系列の中には、第2のクライアント鍵K2および第3のクライアント鍵K3の両方に相関を有する部分系列を含んでもよい。これにより、生成装置20は、サーバ鍵KSを効率良く短くすることが可能なクライアント鍵Kiを生成することができる。
また、それぞれのクライアント鍵Kiの系列の中には、他のクライアント鍵Kiと相関の無い部分系列を含んでいてもよい。これにより、生成装置20は、攻撃者が他のクライアント鍵Kiを獲得した場合における、安全性を高くすることができる。
なお、クライアント鍵Kiの系列は、他のクライアント鍵Kiと相関の無い部分系列を長くすれば、他のクライアント鍵Kiを獲得した攻撃者による攻撃耐性が高まり安全性が高くなるが、サーバ鍵KSのビット長を長くしてしまう。反対に、クライアント鍵Kiの系列は、他のクライアント鍵Kiと相関を有する部分系列を長くすれば、サーバ鍵KSのビット長を短くすることができるが、他のクライアント鍵Kiを取得した攻撃者による攻撃耐性が低まり安全性が低くなる。
このため、暗号処理システム10は、それぞれのクライアント鍵Kiにおける他のクライアント鍵Kiに対する相関の強さ(例えば、相関の有る系列と無い系列との比率、および、同一の系列と相関がある他のクライアント鍵Kiの数等)を、使用する状況等に応じて調整してもよい。これにより、暗号処理システム10は、ユーザの意図した安全性を有するクライアント鍵Kiを生成することができる。
図3および図4は、サーバ鍵KSおよびクライアント鍵Kiのビットの更新位置を示す図である。
生成装置20は、サーバ鍵KSおよび複数のクライアント鍵Kiを生成した後に、複数のクライアント鍵Kiのうちの一部のクライアント鍵Kiを更新することができる。この場合、生成装置20は、更新対象のクライアント鍵Kiにおける、更新対象となっていない他のクライアント鍵Kiと相関の無い部分系列を更新する。
さらに、生成装置20は、サーバ鍵KSの系列の一部を更新する。具体的には、生成装置20は、サーバ鍵KSの系列中における、更新対象のクライアント鍵Kiの更新する部分系列に対応する部分を更新する。この場合、生成装置20は、更新後のサーバ鍵KSとクライアント鍵規則とから、更新後のクライアント鍵Kiの系列が生成されるように、サーバ鍵KSを更新する。
また、生成装置20は、クライアント鍵規則の一部を更新してもよい。例えば、生成装置20は、更新対象のクライアント鍵K1を構成する部分系列からクライアント鍵K1へ変換するための変換関数を更新する。この場合も、生成装置20は、サーバ鍵KSと更新後のクライアント鍵規則とから、更新後のクライアント鍵Kiの系列が生成されるように、クライアント鍵規則を更新する。
また、生成装置20は、サーバ鍵KSおよびクライアント鍵規則の両者を更新してもよい。
例えば、図3に示すように、1つのクライアント鍵K1を更新し、他のクライアント鍵K2,K3,K4を更新しない場合、生成装置20は、クライアント鍵K1の系列中おける、他のいずれのクライアント鍵K2,K3,K4とも相関の無い部分系列を変更する。また、生成装置20は、サーバ鍵KSの系列中における対応する部分、および、クライアント鍵規則の対応する部分の少なくとも一方も変更する。
また、例えば、図4に示すように、2つのクライアント鍵K1,K2を更新し、他のクライアント鍵K3,K4を更新しない場合、生成装置20は、クライアント鍵K1,K2の系列中おける、他のいずれのクライアント鍵K3,K4とも相関の無い部分系列を変更する。なお、この場合には、生成装置20は、クライアント鍵K1とクライアント鍵K2との間でのみ相関がある系列も変更してもよい。また、この場合も、生成装置20は、サーバ鍵KSの系列中における対応する部分、および、クライアント鍵規則の対応する部分の少なくとも一方も変更する。
このように暗号処理システム10は、複数のクライアント鍵Kiの間に相関性を持たせた場合であっても、複数のクライアント鍵Kiのうちの一部のクライアント鍵Kiを個別に更新することができる。これにより、暗号処理システム10は、複数のクライアント鍵Kiを効率良く更新することができる。
図5は、第1実施形態に係る生成装置20の構成を示す図である。生成装置20は、入力部51と、乱数発生部52と、サーバ鍵生成部(第1鍵生成部)53と、クライアント鍵生成部(第2鍵生成部)54と、出力部55と、更新部60とを有する。
入力部51は、ユーザから与えられた鍵生成のリクエストを入力する。また、入力部51は、サーバ鍵規則およびクライアント鍵規則を、外部の情報処理装置等から入力する。なお、入力部51は、サーバ鍵規則およびクライアント鍵規則を外部の情報処理装置等から入力するのではなく、内部に秘密に保持されているサーバ鍵規則およびクライアント鍵規則を取得してもよい。入力部51は、サーバ鍵規則をサーバ鍵生成部53に渡し、クライアント鍵規則をクライアント鍵生成部54および出力部55に渡す。
乱数発生部52は、乱数を発生し、発生した乱数をサーバ鍵生成部53に渡す。サーバ鍵生成部53は、入力部51から受け取ったサーバ鍵規則に基づいて、乱数発生部52により発生された乱数に基づきサーバ鍵KSを生成する。サーバ鍵生成部53は、生成したサーバ鍵KSをクライアント鍵生成部54および出力部55に渡す。
クライアント鍵生成部54は、入力部51から受け取ったクライアント鍵規則に基づいて、サーバ鍵生成部53から受け取ったサーバ鍵KSから、n個のクライアント鍵Kiを生成する。クライアント鍵生成部54は、生成したn個のクライアント鍵Kiを出力部55に渡す。また、クライアント鍵生成部54は、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合、n個の変換関数Fδiも生成して、出力部55に渡す。
出力部55は、サーバ鍵生成部53から受け取ったサーバ鍵KS、および、入力部51から受け取ったクライアント鍵規則をサーバ40に対して出力する。なお、出力部55は、サーバ40が外部の情報処理装置等からクライアント鍵規則を取得可能な場合には、クライアント鍵規則をサーバ40に対して出力しなくてもよい。
また、出力部55は、クライアント鍵生成部54から受け取ったn個のクライアント鍵Kiのそれぞれを、対応するクライアント端末30に対して出力する。さらに、出力部55は、クライアント端末30と、そのクライアント端末30に出力したクライアント鍵Kiのインデックスiとの対応関係を示すインデックス情報をサーバ40に出力する。また、出力部55は、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合、n個の変換関数Fδiのそれぞれを、対応するクライアント端末30に対して出力する。
更新部60は、ユーザから更新のリクエストを入力する。さらに、更新部60は、更新対象のクライアント鍵Kiのインデックスiの集合を入力する。更新部60は、入力部51が入力したサーバ鍵規則およびクライアント鍵規則を受け取る。更新部60は、サーバ鍵規則およびクライアント鍵規則に基づき、更新対象のクライアント鍵Kiを更新するためのサーバ鍵更新情報sriおよびクライアント鍵更新情報criを生成する。ここで、サーバ鍵更新情報sriおよびクライアント鍵更新情報criは、乱数、公開情報、システム管理番号および鍵のリビジョン番号等に基づいて生成される。
更新部60は、クライアント鍵更新情報criをクライアント端末30に出力する。また、更新部60は、サーバ鍵更新情報sriをサーバ40に出力する。なお、更新部60の構成の詳細については、図13以降でさらに説明する。
図6は、第1実施形態に係るクライアント端末30の構成を示す図である。クライアント端末30は、クライアント内保持部61と、クライアント内変換部62と、クライアント内暗号化部63と、クライアント内送信部64と、クライアント内受信部65と、クライアント内復号部66と、クライアント内更新部67とを有する。
クライアント内保持部61は、生成装置20から出力されたクライアント鍵Kiを受け取って保持する。また、クライアント内保持部61は、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合、生成装置20から出力された変換関数Fδiを受け取って保持する。
クライアント内変換部62は、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合、クライアント内保持部61に保持されているクライアント鍵Kiを、変換関数Fδiに基づき暗号化鍵EKiに変換する。なお、クライアント端末30は、クライアント鍵Kiがそのまま暗号化鍵となる場合には、クライアント内変換部62を備えなくてよい。
サーバ40へ暗号文Ciを送信する場合、クライアント内暗号化部63は、平文Miを例えば機器本体等から受け取る。クライアント内暗号化部63は、受け取った平文Miを、クライアント内保持部61に保持されているクライアント鍵Kiまたはクライアント内変換部62により変換された暗号化鍵EKiにより暗号化して、暗号文Ciを生成する。クライアント内暗号化部63は、生成した暗号文Ciをクライアント内送信部64に渡す。そして、クライアント内送信部64は、クライアント内暗号化部63から受け取った暗号文Ciを、サーバ40へと送信する。
暗号文Ciをサーバ40から受信する場合、クライアント内受信部65は、サーバ40から送信された暗号文Ciを受信し、受信した暗号文Ciをクライアント内復号部66に渡す。クライアント内復号部66は、クライアント内受信部65から受け取った暗号文Ciを、クライアント内保持部61に保持されているクライアント鍵Kiまたはクライアント内変換部62により変換された暗号化鍵EKiにより復号して、平文Miを生成する。そして、クライアント内復号部66は、生成した平文Miを例えば機器本体等に出力する。なお、暗号化および復号が同一処理により実行される場合には、クライアント内暗号化部63およびクライアント内復号部66は共通のモジュール等により実現されていてもよい。
クライアント内更新部67は、生成装置20から出力されたクライアント鍵更新情報criを受け取る。クライアント内更新部67は、受け取ったクライアント鍵更新情報criに応じて、クライアント内保持部61に保持されているクライアント鍵Kiまたは変換関数Fδiを更新する。
なお、クライアント内変換部62は、暗号文Ciの送信時および受信時毎に、クライアント鍵Kiを暗号化鍵EKiに変換するのではなく、生成装置20からクライアント鍵Kiおよび変換関数Fδiを最初に受け取ったとき、または、生成装置20により更新された時に、クライアント鍵Kiを暗号化鍵EKiに変換してもよい。この場合、クライアント内保持部61は、クライアント内変換部62により変換された暗号化鍵EKiを保持する。そして、クライアント内暗号化部63およびクライアント内復号部66は、暗号文Ciの送信時および受信時毎に、クライアント内保持部61から暗号化鍵EKiを取得する。
図7は、第1実施形態に係るサーバ40の構成を示す図である。サーバ40は、サーバ内保持部71と、サーバ内受信部72と、サーバ内クライアント鍵生成部73と、サーバ内変換部74と、サーバ内復号部75と、サーバ内暗号化部76と、サーバ内送信部77と、サーバ内更新部78とを有する。
サーバ内保持部71は、生成装置20から出力されたサーバ鍵KSおよびクライアント鍵規則を受け取って保持する。なお、サーバ内保持部71は、クライアント鍵規則が公開されている場合には、公開元の情報処理装置からクライアント鍵規則を受け取る。また、サーバ内保持部71は、それぞれのクライアント端末30とクライアント鍵Kiのインデックスiとの関係を示すインデックス情報を生成装置20から受け取って、保持する。また、サーバ内保持部71は、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合、生成装置20から出力されたn個の変換関数Fδiを受け取って保持する。
サーバ内受信部72は、クライアント端末30から送信された暗号文Ciを受信し、受信した暗号文Ciをサーバ内復号部75に渡す。サーバ内受信部72は、さらに暗号文Ciを送信したクライアント端末30を特定する端末情報を、サーバ内クライアント鍵生成部73に渡す。
暗号文Ciを受信した場合には、サーバ内クライアント鍵生成部73は、サーバ内受信部72から受け取った端末情報、および、サーバ内保持部71に保持されているインデックス情報に基づき、暗号文Ciを生成したクライアント鍵Kiのインデックスiを特定する。サーバ内クライアント鍵生成部73は、インデックスiを特定すると、サーバ内保持部71に保持されているクライアント鍵規則に基づいて、サーバ内保持部71に保持されているサーバ鍵KSから、インデックスiに対応するクライアント鍵Kiを生成する。
サーバ内変換部74は、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合、サーバ内クライアント鍵生成部73が生成したクライアント鍵Kiを受け取る。サーバ内変換部74は、受け取ったクライアント鍵Kiを、サーバ内保持部71に保持された対応する変換関数Fδiに基づき暗号化鍵EKiに変換する。なお、サーバ40は、クライアント鍵Kiがそのまま暗号化鍵となる場合には、サーバ内変換部74を備えなくてよい。また、サーバ40は、サーバ内クライアント鍵生成部73とサーバ内変換部74とを合成したブロックを有してもよい。この場合、この合成したブロックは、クライアント鍵規則および変換関数を合成した合成関数を実行して、インデックスiから暗号化鍵EKiを直接生成する。
サーバ内復号部75は、サーバ内受信部72から受け取った暗号文Ciを、サーバ内クライアント鍵生成部73により生成されたクライアント鍵Kiまたはサーバ内変換部74により変換された暗号化鍵EKiにより復号して、平文Miを生成する。そして、サーバ内復号部75は、生成した平文Miを出力する。
暗号文Ciを送信する場合には、サーバ内クライアント鍵生成部73は、暗号文の送信先のクライアント端末30を特定する端末情報を取得する。サーバ内クライアント鍵生成部73は、受け取った端末情報、および、サーバ内保持部71に保持されているインデックス情報に基づき、送信先のクライアント端末30が保持しているクライアント鍵Kiのインデックスiを特定する。サーバ内クライアント鍵生成部73は、インデックスiを特定すると、サーバ内保持部71に保持されているクライアント鍵規則に基づいて、サーバ内保持部71に保持されているサーバ鍵KSから、インデックスiに対応するクライアント鍵Kiを生成する。
サーバ内変換部74は、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合、サーバ内クライアント鍵生成部73が生成したクライアント鍵Kiを受け取る。サーバ内変換部74は、受け取ったクライアント鍵Kiを、サーバ内保持部71に保持された対応する変換関数Fδiに基づき暗号化鍵EKiに変換する。
サーバ内暗号化部76は、平文Miを外部から受け取る。サーバ内暗号化部76は、受け取った平文Miを、サーバ内クライアント鍵生成部73から受け取ったクライアント鍵Kiまたはサーバ内変換部74により変換された暗号化鍵EKiにより暗号化して、暗号文Ciを生成する。サーバ内暗号化部76は、生成した暗号文Ciをサーバ内送信部77に渡す。そして、サーバ内送信部77は、サーバ内暗号化部76から受け取った暗号文Ciを、送信先となるクライアント端末30へと送信する。なお、暗号化および復号が同一処理により実行される場合には、サーバ内復号部75およびサーバ内暗号化部76は共通のモジュール等により実現されていてもよい。
図8は、第1実施形態に係る生成装置20の処理フローを示す図である。まず、ステップS11において、生成装置20の入力部51は、鍵生成のリクエストを入力する。続いて、ステップS12において、入力部51は、サーバ鍵規則およびクライアント鍵規則を取得する。また、ステップS12において、入力部51は、クライアント鍵Kiのビット系列を暗号化鍵EKiのビット系列に変換するための変換関数Fδiを取得してもよい。
続いて、ステップS13において、生成装置20のサーバ鍵生成部53は、サーバ鍵規則を実行して、乱数に基づきサーバ鍵K
Sを生成する。ここで、本例において、サーバ鍵規則は、下記の式(1)に示されるような、乱数rを入力してサーバ鍵K
Sのビットの系列を出力するサーバ鍵関数である。なお、式(1)のサーバ鍵関数の内容については、図9を参照して詳細を後述する。
続いて、生成装置20のクライアント鍵生成部54は、インデックスi毎に、ステップS14からステップS17のループ処理を実行する。本例においては、クライアント鍵生成部54は、i=1からi=nまで、iを1ずつ増加させながら、ステップS15およびステップS16の処理を実行する。
クライアント鍵生成部54は、ステップS15において、クライアント鍵規則を実行して、サーバ鍵K
Sに基づき、インデックスiに対応するクライアント鍵K
iを生成する。ここで、本例において、クライアント鍵規則は、下記の式(2)に示されるような、サーバ鍵K
Sおよびインデックスiを入力してクライアント鍵K
iのビットの系列を出力するクライアント鍵関数である。なお、式(2)のクライアント鍵関数の内容については、図10等を参照して詳細を後述する。
続いて、クライアント鍵生成部54は、ステップS16において、クライアント鍵Kiのビット系列を暗号化鍵EKiのビット系列に変換するための変換関数Fδiを生成する。クライアント鍵生成部54は、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、ステップS16を実行し、クライアント鍵Kiのビット系列がそのまま暗号化鍵となる場合には、ステップS16を実行しない。また、クライアント鍵生成部54は、ステップS12で既に変換関数Fδiを取得している場合も、ステップS16を実行しない。
ステップS17において、クライアント鍵生成部54は、i=nとなるとループ処理を抜けて、処理をステップS18に進める。ステップS18において、生成装置20の出力部55は、サーバ鍵KSおよびクライアント鍵規則をサーバ40に対して出力する。なお、出力部55は、サーバ40が外部からクライアント鍵規則を取得可能な場合には、クライアント鍵規則をサーバ40に対して出力しなくてもよい。また、出力部55は、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、n個の変換関数Fδiもサーバ40に対して出力する。
また、出力部55は、n個のクライアント鍵Kiのそれぞれを、対応するクライアント端末30に対して出力する。また、出力部55は、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、n個の変換関数Fδiのそれぞれも対応するクライアント端末30に対して出力する。そして、生成装置20は、ステップS18の処理が完了すると、本フローを終了する。
図9は、サーバ鍵関数SKeyGen(r)の内容の一例を示す図である。サーバ鍵関数は、乱数rが入力される。
サーバ鍵関数は、入力された乱数rを、複数の部分系列に分割する。さらに、サーバ鍵関数は、複数の集合Dのそれぞれに対して、複数の部分系列のそれぞれを対応付ける。
ここで、集合Dは、インデックスを要素とする集合であって、1からnまでのインデックスの全ての組み合わせを表す。例えば、n=3である場合(すなわち、i=1,2,3である場合)、集合D={1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}となる。なお、{x,y,z}は、xとyとzとの組み合わせの集合を表す。
また、集合Dに対応付けた部分系列を、K
Dと表す。従って、乱数rは、一例として、下記の式(3)のように表される。なお、‖は、左右のビット列を結合する演算子である。また、部分系列K
Dは、集合Dの要素に対応するクライアント鍵K
iの生成に用いられる情報であることを意味する。例えば、K
{1,2}は、クライアント鍵K
1、K
2の生成に用いられる情報である。
また、それぞれの部分系列のビット長は、サーバ鍵関数により定められる。部分系列KDのビット長を、lDと表す。lDは0以上の整数である。
さらに、サーバ鍵関数は、複数の部分系列KDを一列に配列して、連結する。サーバ鍵関数は、一例として、対応付けられた集合Dに含まれているインデックス(要素)の数が少ないほど左側に配置し、インデックス(要素)の数が同一の場合にはより小さい値のインデックス(要素)を含むほど左側に配置する。
例えば、サーバ鍵関数は、K{1}とK{2,3}とであれば、インデックス(要素)の数が少ないK{1}を左側に配置する。また、例えば、サーバ鍵関数は、K{1,2}とK{2,3}とであればより小さい値のインデックス(要素)を含むK{1,2}を左側に配置する。また、例えば、サーバ鍵関数は、K{1,2}とK{1,3}とであればより小さい値のインデックス(要素)を含むK{1,2}を左側に配置する。
そして、サーバ鍵関数は、このように配置した複数の部分系列を連結して、下記の式(4)のように表されるサーバ鍵K
Sを出力する。なお、図9には、n=3の場合の配列例が示されている。
このようなサーバ鍵関数は、例えば、lrビットの乱数から、lSビットのサーバ鍵KSを生成することができる。この場合、lr=lSとなる。なお、配列の方法は、予め定められた方法であれば、どのような方法であってもよい。
図10は、クライアント鍵関数CKeyGen(KS,i)の内容の一例を示す図である。クライアント鍵関数は、サーバ鍵KSおよびインデックスの値iが入力される。
クライアント鍵関数は、入力されたサーバ鍵K
Sから、複数の部分系列K
Dを抽出する。すなわち、クライアント鍵関数は、下記式(5)に示されるように、部分系列を抽出する。なお、図10の(a)には、n=3の場合に抽出される部分系列が示されている。
続いて、クライアント鍵関数は、抽出された複数の部分系列の中から、入力されたインデックスの値iを要素に含む集合に対応する2以上の部分系列を選択する。例えば、クライアント鍵関数は、i=1の場合には、下記式(6)に示されるような部分系列を選択する。なお、図10の(b)には、n=3、i=1の場合に選択される部分系列が示されている。
また、例えば、クライアント鍵関数は、i=2の場合には、下記式(7)に示されるような部分系列を選択する。なお、図10の(c)には、n=3、i=2の場合に選択される部分系列が示されている。
また、例えば、クライアント鍵関数は、i=nの場合には、下記式(8)に示されるような部分系列を選択する。なお、図10の(d)には、n=3、i=3の場合に選択される部分系列が示されている。
続いて、クライアント鍵関数は、選択した2以上の部分系列KDを一列に配列して、連結する。クライアント鍵関数は、一例として、対応付けられた集合Dに含まれているインデックス(要素)の数が少ないほど左側に配置し、インデックス(要素)の数が同一の場合にはより小さい値の要素を含むほど左側に配置する。この配列方法は、サーバ鍵関数と同様である。
そして、クライアント鍵関数は、このように配置した複数の部分系列を連結してクライアント鍵K
iを出力する。例えば、クライアント鍵関数は、i=1の場合には、下記式(9)に示されるようなクライアント鍵K
1を出力する。なお、図10の(e)には、n=3、i=1の場合に出力されるクライアント鍵K
1が示されている。
例えば、クライアント鍵関数は、i=2の場合には、下記式(10)に示されるようなクライアント鍵K
2を出力する。なお、図10の(f)には、n=3、i=2の場合に出力されるクライアント鍵K
2が示されている。
例えば、クライアント鍵関数は、i=nの場合には、下記式(11)に示されるようなクライアント鍵K
nを出力する。なお、図10の(g)には、n=3、i=3の場合に出力されるクライアント鍵K
3が示されている。
なお、配列の方法は、予め定められた方法であれば、どのような方法であってもよい。
このように生成されたクライアント鍵Kiは、含まれているインデックス(要素)の数が2個以上の集合Dに対応する部分系列が、他のクライアント鍵Kiと相関が有る。これにより、第1実施形態に係る生成装置20によれば、このようなクライアント鍵関数をクライアント鍵規則とすることにより、n個のクライアント鍵Kiの合計のビット長を、サーバ鍵KSのビット長lSよりも短くすることができる。
図11は、サーバ鍵関数の内容を関数で表した図である。サーバ鍵関数は、図9で説明した内容の関数に限らず、乱数rに対してデータ変換(第1データ変換Fα)をしてサーバ鍵KSを生成する関数であってもよい。
例えば、第1データ変換Fαは、下記の式(21)に示されるように、乱数rをそのままサーバ鍵K
Sとして出力する関数であってもよい。
また、例えば、第1データ変換Fαは、下記の式(22)に示されるように、乱数rを関数F
1により変換した系列を出力してもよい。F
1は、一例として、一対一関数、擬似ランダム関数またはハッシュ関数等である。また、F
1は、l
rビットの入力に対して、l
Sビット(l
r≧l
S)を出力する。
また、例えば、第1データ変換Fαは、下記の式(23)に示されるように、乱数rと、乱数rを関数F
2により変換した系列との排他的論理和を出力してもよい。F
2は、一例として、一対一関数、擬似ランダム関数、ハッシュ関数または定数関数等である。また、F
2は、l
Sビットの入力に対して、l
Sビットを出力する。
また、例えば、第1データ変換Fαは、下記の式(24)に示されるように、乱数rを関数F
1により変換した系列と、乱数rを関数F
3により変換した系列との、排他的論理和を出力してもよい。F
3は、一例として、一対一関数、擬似ランダム関数、ハッシュ関数または定数関数等である。また、F
3は、l
rビットの入力に対して、l
Sビット(l
r≧l
S)を出力する。
図12は、クライアント鍵関数の内容を関数で表した図である。クライアント鍵関数は、サーバ鍵KSの系列に対してデータ変換(第2データ変換Fβ)をし、変換後のサーバ鍵KS´の系列に基づき複数のクライアント鍵Kiを生成する関数であってもよい。
例えば、第2データ変換Fβは、下記の式(31)に示されるように、サーバ鍵K
Sをそのまま変換後サーバ鍵K
S´として出力する関数であってもよい。
また、例えば、第2データ変換Fβは、下記の式(32)に示されるように、サーバ鍵K
Sを関数F
4により変換した系列を、変換後サーバ鍵K
S´として出力してもよい。F
4は、一例として、一対一関数、擬似ランダム関数またはハッシュ関数等である。また、F
4は、l
Sビットの入力に対して、l
Sビットを出力する。
また、例えば、第2データ変換Fβは、下記の式(33)に示されるように、サーバ鍵K
Sと、サーバ鍵K
Sを関数F
5により変換した系列との排他的論理和を、変換後サーバ鍵K
S´として出力してもよい。F
5は、一例として、一対一関数、擬似ランダム関数、ハッシュ関数または定数関数等である。また、F
5は、l
Sビットの入力に対して、l
Sビットを出力する。
また、例えば、第2データ変換Fβは、下記の式(34)に示されるように、サーバ鍵K
Sを関数F
4により変換した系列と、サーバ鍵K
Sを関数F
5により変換した系列との、排他的論理和を、変換後サーバ鍵K
S´として出力してもよい。
また、クライアント鍵関数は、変換後サーバ鍵KS´の系列から、部分系列KDを選択および配列した系列(変換前クライアント鍵Ki´)に対して、データ変換(第3データ変換Fγ)をしてクライアント鍵Kiを生成する関数であってもよい。
例えば、第3データ変換Fγは、下記の式(41)に示されるように、変換前クライアント鍵K
i´をそのままクライアント鍵K
iとして出力する関数であってもよい。
また、例えば、第3データ変換Fγは、下記の式(42)に示されるように、変換前クライアント鍵K
i´を関数F
6により変換した系列を、クライアント鍵K
iとして出力してもよい。F
6は、一例として、一対一関数、擬似ランダム関数またはハッシュ関数等である。また、F
6は、l
iビットの入力に対して、l
iビットを出力する。
F
6は、下記の式(43)に示されるように、K
i´を行ベクトルと考え右から正則行列Rをかけてもよい。例えば、K
i´の1ビットをベクトルの1要素とし、Rをl
i×l
iの正則行列として計算する。また、例えば、K
i´の複数ビットが示す数をベクトルの1つの要素としてもよい。ここで、Rは公開してもよい。変換前クライアント鍵K
i´に正則行列Rをかけることで、共通の部分系列を有する複数のクライアント鍵K
iで、共通の部分系列のビット位置を変えることができる。攻撃者がクライアント鍵K
iを持っていてもクライアント鍵K
jのビット系列の中でクライアント鍵K
iと共通の部分系列のビット位置を推測不能にする。
また、例えば、第3データ変換Fγは、下記の式(44)に示されるように、変換前クライアント鍵K
i´と、変換前クライアント鍵K
i´を関数F
7により変換した系列との排他的論理和を、クライアント鍵K
iとして出力してもよい。F
7は、一例として、一対一関数、擬似ランダム関数、ハッシュ関数または定数関数等である。また、F
7は、l
iビットの入力に対して、l
iビットを出力する。
また、例えば、第3データ変換Fγは、下記の式(45)に示されるように、変換前クライアント鍵K
i´を関数F
6により変換した系列と、変換前クライアント鍵K
i´を関数F
7により変換した系列との、排他的論理和を、クライアント鍵K
iとして出力してもよい。
また、例えば、第3データ変換Fγは、下記の式(46)に示されるように、変換前クライアント鍵K
i´と、集合Dとを関数F
8により変換した系列を、クライアント鍵K
iとして出力してもよい。F
8は、集合Dに対応する部分系列K
DをK
i´から削除する。
また、例えば、第3データ変換Fγは、下記の式(47)に示されるように、複数の変換前クライアント鍵K
i´を関数F
9により変換した系列を、複数のクライアント鍵K
i,K
jとして出力してもよい。なお、K
jは、K
iとは異なるクライアント鍵を表す。F
9は、一例として、一対一関数、擬似ランダム関数またはハッシュ関数等である。
また、F
9は、下記の式(48)に示されるように、複数のクライアント鍵K
i´を1つの行ベクトルと考え右から正則行列Rをかけてもよい。式(47)、(48)は、変換前クライアント鍵K
i´が2つの場合の例であるが、変換前クライアント鍵K
i´が3つ以上であってもよい。
また、クライアント鍵関数CKeyGen(r)は、第2データ変換Fβ、部分系列の選択,配列処理および第3データ変換Fγを一括して実行する関数であってもよい。
また、生成装置20は、クライアント鍵関数CKeyGen(KS,i)と変換関数Fδiとを合成した合成関数CEKGen(KS,i)を生成してもよい。この場合、生成装置20は、生成した合成関数CEKGen(KS,i)をサーバ40に送信して、サーバ40にサーバ鍵KSおよびインデックスiから、暗号化鍵EKiを直接生成させる。
図13は、第1例に係る更新部60の構成をクライアント端末30およびサーバ40とともに示す図である。
第1例において、クライアント鍵Kiは、暗号化鍵EKiを生成するための種情報である。従って、第1例においては、生成装置20は、複数のクライアント鍵Kiのそれぞれ毎に、対応するクライアント鍵Kiを暗号化鍵EKiに変換するための変換関数Fδiを生成する。第1例において、生成装置20は、それぞれのクライアント端末30に対して、対応する変換関数Fδiを出力する。そして、第1例において、更新部60は、変換関数Fδiを更新する。
第1例において、更新部60は、図13に示すように、入力部80と、乱数発生部81と、更新情報生成部82と、出力部83とを有する。
入力部80は、更新対象のクライアント鍵Kiを指定するためのインデックスiの集合を入力する。インデックスiの集合には、1つのインデックスiのみが含まれていてもよいし、複数のインデックスiが含まれていてもよい。乱数発生部81は、予め定められた桁数の乱数を発生する。
更新情報生成部82は、乱数発生部81により発生された乱数に基づき、入力部80が入力したそれぞれのインデックスiに対応してマスター鍵giを生成する。マスター鍵giは、インデックスiに対応する変換関数Fδiを生成するための種となる情報である。
出力部83は、インデックスiおよびマスター鍵giをサーバ鍵更新情報sriとしてサーバ40に出力する。また、出力部83は、更新対象のクライアント鍵Kiを保持するクライアント端末30のそれぞれに対して、対応するインデックスiおよびマスター鍵giをクライアント鍵更新情報criとして出力する。
なお、更新情報生成部82は、マスター鍵giに代えて、インデックスiに対応する変換関数Fδiを生成してもよい。この場合、出力部83は、マスター鍵giに代えて対応する変換関数Fδiを、サーバ鍵更新情報sriとしてサーバ40に出力する。また、この場合、出力部83は、マスター鍵giに代えて対応する変換関数Fδiをクライアント端末30にクライアント鍵更新情報criとして出力する。
ここで、変換関数Fδiとして、以下の例がある。なお、更新情報生成部82は、マスター鍵giに加えてシステム管理番号およびリビジョン番号等の情報に基づいて変換関数Fδiを生成してもよい。ここでは、マスター鍵gi以外の情報を管理情報wと表す。管理情報wは、秘匿情報であってもよいし、公開情報であってもよい。
例えば、変換関数Fδ
iは、下記の式(60)〜式(62)に示されるように、クライアント鍵K
iとマスター鍵g
iとの算術和、算術積または排他的論理和を出力する関数であってもよい。なお、式(62)は、K
iとg
iとのビット長が等しい場合の式である。
また、例えば、変換関数Fδ
iは、下記の式(63)に示されるように、クライアント鍵K
iとマスター鍵g
iと管理情報wとの演算結果を出力する関数であってもよい。なお、○は、算術加算、算術乗算、排他的論理和演算などの演算子であり、他の式でも同様である。
また、例えば、変換関数Fδ
iは、下記の式(64)に示されるように、クライアント鍵K
iとマスター鍵g
iと管理情報wとの和、積または排他的論理和を関数F
10により変換した系列を出力する関数であってもよい。F
10は、一例として、一対一関数、擬似ランダム関数またはハッシュ関数等である。また、F
10は、l
iビットの入力に対して、l
iビットを出力する。
また、例えば、変換関数Fδ
iは、下記の式(65)に示されるように、K
iを行ベクトルと考え右から正則行列g
iをかけてもよい。例えば、変換関数Fδ
zは、K
iの1ビットをベクトルの1要素とし1×l
iの行ベクトルとし、g
iをl
i×l
iの正則行列として計算する。また、例えば、変換関数Fδ
zは、K
iの複数ビットが示す数をベクトルの1つの要素として計算してもよい。
また、例えば、変換関数Fδ
iは、下記の式(66)に示されるように、K
iを列ベクトルと考え、行列wと列ベクトルg
iの積を加えてもよい。例えば、変換関数Fδ
zは、K
iの1ビットをベクトルの1要素とし、l
i×1の列ベクトルとし、wをl
i×l
g行列とし、g
iをl
g×1の列ベクトルとして計算する。また、例えば、変換関数Fδ
zは、K
i、g
i、wの複数ビットが示す数をベクトルの1つの要素として計算してもよい。
また、例えば、変換関数Fδ
iは、下記の式(67)に示されるように、クライアント鍵K
iを関数F
10により変換した系列と、マスター鍵g
iを関数F
11により変換した系列との、演算結果を出力してもよい。F
11は、一例として、一対一関数、擬似ランダム関数またはハッシュ関数等である。
なお、変換関数Fδiは、このような関数に限らず、クライアント鍵Kiを、マスター鍵giまたは管理情報w等によって変換する関数であればよい。
図14は、第1例に係る更新部60の処理フローを示す図である。まず、ステップS111において、更新部60の入力部80は、更新対象のクライアント鍵Kiを指定するためのインデックスiの集合を入力する。続いて、ステップS112において、更新情報生成部82は、乱数に基づき、入力部80が入力したそれぞれのインデックスiに対応してマスター鍵giを生成する。
そして、ステップS113において、出力部83は、インデックスiおよびマスター鍵giをサーバ40に出力する。さらに、出力部83は、更新対象のクライアント鍵Kiを保持するクライアント端末30に、対応するインデックスiおよびマスター鍵giを出力する。
図15は、第1例に係るクライアント端末30およびサーバ40の構成の一部を更新部60とともに示す図である。
第1例において、更新対象のクライアント端末30のクライアント内更新部67は、更新部60からインデックスiおよびマスター鍵giを取得する。クライアント内更新部67は、取得したインデックスiおよびマスター鍵giを、予め保持しているマスター関数Gf(gi,i)に入力して、変換関数Fδiを生成する。マスター関数Gf(gi,i)は、マスター鍵giおよびインデックスiから、変換関数Fδiを生成するための関数である。マスター関数Gf(gi,i)は、公開情報であってもよいし、生成装置20により生成された秘匿情報であってもよい。また、マスター関数は、管理情報wを引数にとるGf(gi,i,w)であってもよい。また、マスター関数が出力する変換関数Fδiは、例えば、式(60)〜(67)に示す関数である。
そして、クライアント内更新部67は、クライアント内保持部61に保持されている変換関数Fδiを、新たに生成した変換関数Fδiに置き換える。なお、クライアント内更新部67は、更新部60から、マスター鍵giに代えて変換関数Fδiを取得してもよい。この場合、クライアント内更新部67は、クライアント内保持部61に保持されている変換関数Fδiを、取得した変換関数Fδiに置き換える。
暗号化時または復号時において、クライアント内変換部62は、クライアント内保持部61に保持されている既存のクライアント鍵Kiと、新たな変換関数Fδiとに基づき、新たな暗号化鍵EKiを生成する。これにより、クライアント端末30は、新たな暗号化鍵EKiを用いてサーバ40との間で暗号通信をすることができる。
第1例において、サーバ40のサーバ内更新部78は、更新部60からインデックスiおよびマスター鍵giを取得する。サーバ内更新部78は、取得したインデックスiおよびマスター鍵giをマスター関数Gf(gi,i)に入力して、変換関数Fδiを生成する。マスター関数Gf(gi,i)は、対応するクライアント端末30が保持しているものと同一である。
そして、サーバ内更新部78は、サーバ内保持部71に保持されている変換関数Fδiを、新たに生成した変換関数Fδiに置き換える。なお、サーバ内更新部78は、更新部60から、マスター鍵giに代えて変換関数Fδiを取得してもよい。この場合、サーバ内更新部78は、サーバ内保持部71に保持されている変換関数Fδiを、取得した変換関数Fδiに置き換える。
暗号化時または復号時において、サーバ内クライアント鍵生成部73は、インデックスi、サーバ内保持部71に保持されている既存のクライアント鍵関数CKeyGen(KS,i)および既存のサーバ鍵KSに基づき、クライアント鍵Kiを生成する。サーバ内変換部74は、生成されたクライアント鍵Kiと、新たな変換関数Fδiとに基づき、新たな暗号化鍵EKiを生成する。これにより、サーバ40は、新たな暗号化鍵EKiを用いてクライアント端末30と暗号通信をすることができる。
第1例に係る更新部60によれば、変換関数Fδiを更新することにより、暗号化鍵EKiを更新することができる。
図16は、第2例に係る更新部60の構成をクライアント端末30およびサーバ40とともに示す図である。なお、第2例を説明するに当たり、第1例と略同一の構成および機能を有する部材には同一の符号を付けて、相違点を除き説明を省略する。
第2例において、生成装置20は、更新対象のクライアント鍵Kiを更新する。これとともに、生成装置20は、サーバ鍵KSにおける一部のビットを更新する。具体的には、生成装置20は、サーバ鍵KSにおける更新対象のクライアント鍵Kiの種となり且つ更新対象ではないクライアント鍵Kiの種となっていないビットを更新する。
第2例において、更新部60は、図16に示すように、入力部80と、乱数発生部81と、第1更新情報生成部84と、第2更新情報生成部85と、出力部83とを有する。
第1更新情報生成部84は、サーバ鍵更新情報sriを生成する。第1更新情報生成部84は、位置検出部91と、値生成部92とを含む。
位置検出部91は、入力部80が入力したそれぞれのインデックスiに基づき、サーバ鍵KSにおける、更新対象のクライアント鍵Kiの種となり且つ更新対象ではないクライアント鍵Kiの種となっていないビット位置(更新位置P)を検出する。すなわち、位置検出部91は、そのビットの値を変更すると、更新対象のクライアント鍵Kiは変更されるが、更新対象ではないクライアント鍵Kiは変更されないビット位置を検出する。
例えば、クライアント鍵関数CKeyGen(KS,i)が、図10に示した変換をする場合、サーバ鍵KSにおける、部分系列のビット位置は予め判明している。従って、図10に示した変換をする場合、位置検出部91は、予め判明している情報に基づき、更新対象のクライアント鍵Kiの種となり且つ更新対象ではないクライアント鍵Kiの種となっていないビット位置(更新位置P)を検出する。
また、例えば、クライアント鍵関数CKeyGen(KS,i)が、図12に示した変換をする場合、位置検出部91は、このようなビット位置を、クライアント鍵関数CKeyGen(KS,i)を逆に辿って検出する。以下逆に辿る場合の例について説明する。図12で、変換前クライアント鍵Ki’に対応する変換後サーバ鍵KS’は、部分系列の選択、配置方法が定まっているため分かっている。従って、位置検出部91は、変換後サーバ鍵KS’と変換前サーバ鍵KSとの対応に基づき、変換前サーバ鍵KSのうち更新できるビット位置を検出する。
第2例は、第2データ変換Fβが置換または線形変換の場合に適用できる。このため、KS’=Fβ(KS)=φ(KS)の場合を考える。φは、行列であり、置換または線形変換を表す。Bは、KS’の更新するビット位置集合を表す。b∈B行目が1であるような列の位置を更新位置Pとする。なお、bが含まれる行とbが含まれない行とが共に1である列が、行列φに含まれる場合は適用できない。
具体的に示すと以下の通りである。K
S’およびK
Sを以下の通りとする。x
i、y
iは、1ビットである。
KS’で更新する値をx1、y3とすると、更新するビット位置は1ビット目と3ビット目である。従って、KS’の更新するビット位置集合は、B={1,3}である。b=1行目が1である列は、2列目と5列目である。b=3行目が1である列は、1列目と5列目である。すなわち、この具体例の場合には、変換前サーバ鍵KSの更新位置は、P=1,2,5となる。
なお、逆に辿ってビット位置を検出するので、第2例においては、クライアント鍵関数CKeyGen(KS,i)は、ビット位置の配置変更または線形変換をする関数である必要がある。従って、第2例において、クライアント鍵関数CKeyGen(KS,i)は、ビット位置を逆に辿ることができない、擬似ランダム関数およびハッシュ関数等ではない。
また、位置検出部91は、さらに、検出したビット位置の合計のビット数lを示す情報を生成する。
値生成部92は、乱数発生部81により発生された乱数に基づき、位置検出部91が生成したビット数l分の更新値Vを生成する。
第2更新情報生成部85は、クライアント鍵更新情報criを生成する。第2更新情報生成部85は、サーバ鍵生成部93と、クライアント鍵生成部94とを含む。
サーバ鍵生成部93は、更新前のサーバ鍵KS、更新位置Pおよび更新値Vに基づき、更新後の新たなサーバ鍵KSを生成する。具体的には、サーバ鍵生成部93は、更新前のサーバ鍵KSにおける更新位置Pに示されたビット位置の値を、更新値Vに示された値に置き換える。クライアント鍵生成部94は、入力部80が入力したインデックスi、既存のクライアント鍵関数CKeyGen(KS,i)および更新後の新たなサーバ鍵KSに基づき、新たなクライアント鍵Kiを生成する。
出力部83は、第1更新情報生成部84が生成した更新位置Pおよび更新値Vをサーバ40に出力する。また、出力部83は、更新対象のクライアント鍵Kiを保持するクライアント端末30のそれぞれに、第2更新情報生成部85が生成した新たなクライアント鍵Kiを出力する。
図17は、第2例に係る更新部60の処理フローを示す図である。まず、ステップS121において、更新部60の入力部80は、更新対象のクライアント鍵Kiを指定するためのインデックスiの集合を入力する。
続いて、ステップS122において、第1更新情報生成部84は、入力部80が入力したそれぞれのインデックスiに基づき、サーバ鍵KSにおける、更新対象のクライアント鍵Kiの種となり且つ更新対象ではないクライアント鍵Kiの種となっていないビット位置(更新位置P)、および、ビット数lを検出する。続いて、ステップS123において、第1更新情報生成部84は、乱数に基づき、ビット数l分の更新値Vを生成する。
続いて、ステップS124において、第2更新情報生成部85は、更新位置P、更新値Vおよび更新前のサーバ鍵KSに基づき、更新後の新たなサーバ鍵KSを生成する。続いて、ステップS125において、第2更新情報生成部85は、入力部80が入力したインデックスi、更新後の新たなサーバ鍵KSおよび既存のクライアント鍵関数CKeyGen(KS,i)に基づき、新たなクライアント鍵Kiを生成する。
そして、ステップS126において、出力部83は、更新位置Pおよび更新値Vをサーバ40に出力する。また、出力部83は、更新対象のクライアント鍵Kiを保持するクライアント端末30のそれぞれに、新たなクライアント鍵Kiを出力する。
図18は、第2例に係るクライアント端末30およびサーバ40の構成の一部を更新部60とともに示す図である。第2例において、更新対象のクライアント端末30のクライアント内更新部67は、更新部60からクライアント鍵Kiを取得する。そして、クライアント内更新部67は、クライアント内保持部61に保持されているクライアント鍵Kiを、取得した新たなクライアント鍵Kiに置き換える。
これにより、クライアント端末30は、暗号化時または復号時において、クライアント内保持部61に保持されている新たなクライアント鍵Kiを用いてサーバ40との間で暗号通信をすることができる。
なお、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、クライアント内変換部62は、クライアント内保持部61に保持されている新たなクライアント鍵Kiと、既存の変換関数Fδiとに基づき、新たな暗号化鍵EKiを生成する。これにより、クライアント端末30は、新たな暗号化鍵EKiを用いてサーバ40との間で暗号通信をすることができる。
第2例において、サーバ40のサーバ内更新部78は、更新部60から、更新位置Pおよび更新値Vを取得する。サーバ内更新部78は、更新前の既存のサーバ鍵KS、更新位置Pおよび更新値Vに基づき、更新後の新たなサーバ鍵KSを生成する。具体的には、サーバ内更新部78は、更新前のサーバ鍵KSにおける更新位置Pに示されたビット位置の値を、更新値Vに示された値に置き換える。そして、サーバ内更新部78は、サーバ内保持部71に保持されている既存のサーバ鍵KSを、更新後の新たなサーバ鍵KSに置き換える。
暗号化時または復号時において、サーバ内クライアント鍵生成部73は、インデックスi、サーバ内保持部71に保持されている既存のクライアント鍵関数CKeyGen(KS,i)および更新後の新たなサーバ鍵KSに基づき、新たなクライアント鍵Kiを生成する。これにより、サーバ40は、新たなクライアント鍵Kiを用いてクライアント端末30と暗号通信をすることができる。
なお、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、サーバ内変換部74は、生成された新たなクライアント鍵Kiと、既存の変換関数Fδiとに基づき、新たな暗号化鍵EKiを生成する。これにより、サーバ40は、新たな暗号化鍵EKiを用いてクライアント端末30と暗号通信をすることができる。
また、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、サーバ40は、クライアント鍵関数CKeyGen(KS,i)および変換関数Fδiを合成した合成関数CEKGen(KS,i)を用いてもよい。この場合、サーバ内保持部71は、クライアント鍵関数CKeyGen(KS,i)および変換関数Fδiに代えて、合成関数CEKGen(KS,i)を保持する。そして、サーバ内クライアント鍵生成部73は、インデックスi、サーバ内保持部71に保持されている既存の合成関数CEKGen(KS,i)および新たなサーバ鍵KSに基づき、新たな暗号化鍵EKiを生成する。
また、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、更新部60は、更新後の新たなクライアント鍵Kiに代えて新たな暗号化鍵EKiを生成して、クライアント端末30に送信してもよい。この場合、クライアント内更新部67は、クライアント内保持部61に保持されている暗号化鍵EKiを、取得した新たな暗号化鍵EKiに置き換える。
第2例に係る更新部60によれば、サーバ鍵KSの一部を更新することにより、クライアント鍵Kiまたは暗号化鍵EKiを更新することができる。
図19は、第3例に係る更新部60の構成をクライアント端末30およびサーバ40とともに示す図である。なお、第3例を説明するに当たり、第2例と略同一の構成および機能を有する部材には同一の符号を付けて、相違点を除き説明を省略する。
第3例において、クライアント鍵関数CKeyGen(KS,i)は、複数のクライアント鍵Kiのそれぞれに対応して異なる複数の関数を含む。例えば、クライアント鍵関数CKeyGen(KS,i)は、複数のクライアント鍵Kiのそれぞれに対応する複数の関数から構成される。例えば、クライアント鍵関数CKeyGen(KS,i)は、図12に示した、更新対象のクライアント鍵K1を構成する部分系列からクライアント鍵K1へ変換するための第3データ変換Fγに対応した複数の部分関数を含む。従って、クライアント鍵関数CKeyGen(KS,i)は、指定されたインデックスiに対応する関数部分が変更されることにより、この指定されたインデックスiに対応して生成するクライアント鍵Kiが変更される。
また、生成装置20は、サーバ鍵KSとともに、マスター関数Gf(gi,i)を出力する。第3例において、マスター関数Gf(gi,i)は、マスター鍵giおよびインデックスiから、クライアント鍵関数CKeyGen(KS,i)に含まれる指定されたインデックスiに対応する関数部分を生成するための関数である。すなわち、マスター関数Gf(gi,i)にマスター鍵giおよびインデックスiを入力すると、クライアント鍵関数CKeyGen(KS,i)に含まれるインデックスiに対応する関数部分が生成される。
第3例においては、更新部60は、更新対象のクライアント鍵Kiを更新する。これとともに、更新部60は、マスター鍵giを更新して、クライアント鍵関数CKeyGen(KS,i)に含まれる更新対象のクライアント鍵Kiに対応する関数部分を更新する。
クライアント鍵関数CKeyGen(KS,i)が、図12に示す変換で、第3データ変換Fγがクライアント毎に異なる場合、第3データ変換Fγが指定されたインデックスiに対応する関数部分となる。インデックスiに対応する第3データ変換FγをFγiとする。
マスター関数Gf(gi,i)は、例えば、以下に示すような例の第3データ変換Fγを出力する。ここで、なお、更新情報生成部82は、マスター鍵giに加えてシステム管理番号およびリビジョン番号等の情報に基づいて第3データ変換Fγを生成してもよい。ここでは、マスター鍵gi以外を管理情報wと表す。管理情報wは、秘匿情報であってもよいし、公開情報であってもよい。このとき、マスター関数Gf(gi,i,w)は、第3データ変換Fγを出力する。
例えば、第3データ変換Fγは、下記の式(70)〜(72)に示されるように、変換前クライアント鍵K
i’とマスター鍵g
iとの算術和、算術積または排他的論理和を出力する関数であってもよい。なお、式(72)は、K
i’とg
iとのビット長が等しい場合の式である。
また、例えば、第3データ変換Fγ
iは、下記の式(73)に示されるように、変換前クライアント鍵K
i’とマスター鍵g
iと管理情報wとの演算結果を出力する関数であってもよい。
また、例えば、第3データ変換Fγ
iは、下記の式(74)に示されるように、変換前クライアント鍵K
i’とマスター鍵g
iと管理情報wとの和、積または排他的論理和を関数F
12により変換した系列を出力する関数であってもよい。F
12は、一例として、一対一関数、擬似ランダム関数またはハッシュ関数等である。また、F
12は、l
iビットの入力に対して、l
iビットを出力する。
また、例えば、第3データ変換Fγ
iは、下記の式(75)に示されるように、K
i’を行ベクトルと考え右から正則行列g
iをかけてもよい。例えば、第3データ変換Fγ
iは、K
iの1ビットをベクトルの1要素とし、1×l
iの行ベクトルとし、g
iをl
i×l
iの正則行列として計算する。また、例えば、第3データ変換Fγ
iは、K
i’の複数ビットが示す数をベクトルの1つの要素として計算してもよい。
また、例えば、第3データ変換Fγ
iは、下記の式(76)に示されるように、K
i’を列ベクトルと考え、行列wと列ベクトルg
iの積を加えてもよい。例えば、第3データ変換Fγ
iは、K
i’の1ビットをベクトルの1要素とし、l
i×1の列ベクトルとし、wをl
i×l
g行列とし、g
iをl
g×1の列ベクトルとして計算する。また、例えば、第3データ変換Fγ
iは、K
i’
、g
i、wの複数ビットが示す数をベクトルの1つの要素として計算してもよい。
また、例えば、第3データ変換Fγ
iは、下記の式(77)に示されるように、クライアント鍵K
iを関数F
12により変換した系列と、マスター鍵g
iを関数F
13により変換した系列との、演算結果を出力してもよい。F
13は、一例として、一対一関数、擬似ランダム関数またはハッシュ関数等である。
なお、第3データ変換Fγiは、このような関数に限らず、変換前クライアント鍵Ki’を、マスター鍵giまたは管理情報w等によってクライアント鍵Kiに変換する関数であればよい。
クライアント鍵関数CKeyGen(KS,i)が、関数H(i)の出力値がKSのビット位置を示すと考え、KSの該当位置のビットを連結させてクライアント鍵を生成する場合を考える。ここで、関数Hはハッシュ関数または疑似ランダム関数等である。この場合、マスター関数Gf(gi,i,w)は、関数H(i○gi○w)を出力する。
更新部60は、図19に示すように、入力部80と、乱数発生部81と、第1更新情報生成部84と、第2更新情報生成部85と、出力部83とを有する。
第1更新情報生成部84は、マスター鍵生成部95を含む。マスター鍵生成部95は、乱数発生部81により発生された乱数に基づき、マスター鍵giを生成する。
第2更新情報生成部85は、関数生成部96と、クライアント鍵生成部94とを含む。関数生成部96は、マスター関数Gf(gi,i)を保持し、入力部80が入力したインデックスiおよびマスター鍵生成部95により生成されたマスター鍵giに基づき、クライアント鍵関数CKeyGen(KS,i)に含まれる、入力部80が入力したインデックスiに対応する関数部分を生成する。そして、関数生成部96は、既存のクライアント鍵関数CKeyGen(KS,i)における入力部80が入力したインデックスiに対応する部分を新たな関数に置き換えて、新たなクライアント鍵関数CKeyGen(KS,i)を生成する。
クライアント鍵生成部94は、入力部80が入力したインデックスi、関数生成部96が生成した新たなクライアント鍵関数CKeyGen(KS,i)および既存のサーバ鍵KSに基づき、新たなクライアント鍵Kiを生成する。
出力部83は、第1更新情報生成部84が生成したマスター鍵giおよび入力部80が入力したインデックスiをサーバ鍵更新情報sriとしてサーバ40に出力する。また、出力部83は、更新対象のクライアント鍵Kiを保持するクライアント端末30のそれぞれに、第2更新情報生成部85が生成した新たなクライアント鍵Kiをクライアント鍵更新情報criとして出力する。
なお、第3例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、マスター関数Gf(gi,i)は、マスター鍵giおよびインデックスiから、指定されたインデックスiに対応する変換関数Fδiを生成してもよい。この場合、関数生成部96は、インデックスiおよびマスター鍵giに基づき、新たな変換関数Fδiを生成する。また、この場合、クライアント鍵生成部94は、入力部80が入力したインデックスi、関数生成部96が生成した新たな変換関数Fδi、既存のクライアント鍵関数CKeyGen(KS,i)および既存のサーバ鍵KSに基づき、新たな暗号化鍵EKiを生成する。そして、出力部83は、新たな暗号化鍵EKiをクライアント鍵更新情報criとして出力する。また、出力部83は、クライアント鍵Kiおよび変換関数Fδiをクライアント鍵更新情報criとして出力してもよい。
また、第3例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、関数生成部96は、新たなクライアント鍵関数CKeyGen(KS,i)と既存の変換関数Fδiとを合成した合成関数CEKGen(KS,i)、または、既存のクライアント鍵関数CKeyGen(KS,i)と新たな変換関数Fδiとを合成した合成関数CEKGen(KS,i)を生成してもよい。出力部83は、この合成関数CEKGen(KS,i)をサーバ鍵更新情報sriとしてサーバ40に送信してもよい。また、この場合、クライアント鍵生成部94は、入力部80が入力したインデックスi、合成関数CEKGen(KS,i)および既存のサーバ鍵KSに基づき、新たな暗号化鍵EKiを生成する。そして、この場合、出力部83は、新たな暗号化鍵EKiをクライアント鍵更新情報criとして出力する。
図20は、第3例に係る更新部60の処理フローを示す図である。まず、ステップS131において、更新部60の入力部80は、更新対象のクライアント鍵Kiを指定するためのインデックスiの集合を入力する。
続いて、ステップS132において、第1更新情報生成部84は、乱数に基づきマスター鍵giを生成する。続いて、ステップS133において、第2更新情報生成部85は、マスター鍵giに基づき、新たなクライアント鍵関数CKeyGen(KS,i)を生成する。
続いて、ステップS134において、第2更新情報生成部85は、入力部80が入力したインデックスi、既存のサーバ鍵KSおよび新たなクライアント鍵関数CKeyGen(KS,i)に基づき、新たなクライアント鍵Kiを生成する。
そして、ステップS135において、出力部83は、マスター鍵giおよびインデックスiをサーバ40に出力する。また、出力部83は、更新対象のクライアント鍵Kiを保持するクライアント端末30のそれぞれに、新たなクライアント鍵Kiを出力する。
図21は、第3例に係るクライアント端末30およびサーバ40の構成の一部を更新部60とともに示す図である。第3例において、更新対象のクライアント端末30のクライアント内更新部67は、更新部60からクライアント鍵Kiを取得する。そして、クライアント内更新部67は、クライアント内保持部61に保持されているクライアント鍵Kiを、取得した新たなクライアント鍵Kiに置き換える。これにより、クライアント端末30は、暗号化時または復号時において、クライアント内保持部61に保持されている新たなクライアント鍵Kiを用いてサーバ40との間で暗号通信をすることができる。
なお、第3例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、クライアント内変換部62は、クライアント内保持部61に保持されている新たなクライアント鍵Kiと、既存の変換関数Fδiとに基づき、新たな暗号化鍵EKiを生成する。これにより、クライアント端末30は、新たな暗号化鍵EKiを用いてサーバ40との間で暗号通信をすることができる。
また、第3例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、クライアント内更新部67は、更新部60から、更新後の新たなクライアント鍵Kiに代えて新たな暗号化鍵EKiを取得してもよい。この場合、クライアント内更新部67は、クライアント内保持部61に保持されている暗号化鍵EKiを、取得した新たな暗号化鍵EKiに置き換える。
第3例において、サーバ40のサーバ内更新部78は、更新部60からインデックスiおよびマスター鍵giを取得する。サーバ内更新部78は、取得したマスター鍵giおよびインデックスiを、予め保持しているマスター関数Gf(gi,i)に入力して、クライアント鍵関数CKeyGen(KS,i)に含まれる、入力部80が入力したインデックスiに対応する関数部分を生成する。この関数部分は、更新部60が更新する関数部分に対応する。サーバ内更新部78は、既存のクライアント鍵関数CKeyGen(KS,i)における入力部80が入力したインデックスiに対応する部分を新たな関数に置き換えて、新たなクライアント鍵関数CKeyGen(KS,i)を生成する。そして、サーバ内更新部78は、サーバ内保持部71に保持されている既存のクライアント鍵関数CKeyGen(KS,i)を、新たなクライアント鍵関数CKeyGen(KS,i)に置き換える。
暗号化時または復号時において、サーバ内クライアント鍵生成部73は、インデックスi、サーバ内保持部71に保持されている新たなクライアント鍵関数CKeyGen(KS,i)および既存のサーバ鍵KSに基づき、新たなクライアント鍵Kiを生成する。これにより、サーバ40は、新たなクライアント鍵Kiを用いてクライアント端末30と暗号通信をすることができる。
なお、第3例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合であって、且つ、マスター関数Gf(gi,i)が変換関数Fδiを生成するための関数である場合には、サーバ内更新部78は、マスター鍵giに基づき、新たな変換関数Fδiを生成する。この場合、サーバ内変換部74は、既存のクライアント鍵Kiと新たな変換関数Fδiとに基づき、新たな暗号化鍵EKiを生成する。これにより、サーバ40は、新たな暗号化鍵EKiを用いてクライアント端末30と暗号通信をすることができる。
また、第3例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、サーバ内更新部78は、新たなクライアント鍵関数CKeyGen(KS,i)と既存の変換関数Fδiとを合成した新たな合成関数CEKGen(KS,i)、または、既存のクライアント鍵関数CKeyGen(KS,i)と新たな変換関数Fδiとを合成した新たな合成関数CEKGen(KS,i)を生成してもよい。また、サーバ内更新部78は、合成関数CEKGen(KS,i)を生成装置20から取得してもよい。また、この場合、サーバ内更新部78は、サーバ内保持部71に保持されている合成関数CEKGen(KS,i)を、新たな合成関数CEKGen(KS,i)に置き換える。そして、暗号化時または復号時において、サーバ内クライアント鍵生成部73は、インデックスi、サーバ内保持部71に保持されている新たな合成関数CEKGen(KS,i)および既存のサーバ鍵KSに基づき、新たな暗号化鍵EKiを生成する。これにより、サーバ40は、新たな暗号化鍵EKiを用いてクライアント端末30と暗号通信をすることができる。
第3例に係る更新部60によれば、マスター鍵giを用いてクライアント鍵関数CKeyGen(KS,i)を更新することにより、クライアント鍵Kiまたは暗号化鍵EKiを更新することができる。
図22は、第4例に係る更新部60の構成をクライアント端末30およびサーバ40とともに示す図である。なお、第4例を説明するに当たり、第3例と略同一の構成および機能を有する部材には同一の符号を付けて、相違点を除き説明を省略する。
第4例においては、更新部60は、更新対象のクライアント鍵Kiを更新する。これとともに、更新部60は、新たなクライアント鍵関数CKeyGen(KS,i)を生成して、サーバ40が保持するクライアント鍵関数CKeyGen(KS,i)を更新する。
更新部60は、図22に示すように、入力部80と、乱数発生部81と、第1更新情報生成部84と、第2更新情報生成部85と、出力部83とを有する。
第1更新情報生成部84は、マスター鍵生成部95と、関数生成部96とを含む。第2更新情報生成部85は、クライアント鍵生成部94を含む。
出力部83は、第1更新情報生成部84が生成した新たなクライアント鍵関数CKeyGen(KS,i)をサーバ鍵更新情報sriとしてサーバ40に出力する。また、出力部83は、更新対象のクライアント鍵Kiを保持するクライアント端末30のそれぞれに、第2更新情報生成部85が生成した新たなクライアント鍵Kiをクライアント鍵更新情報criとして出力する。
なお、第4例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、マスター関数Gf(gi,i)は、マスター鍵giおよびインデックスiから、指定されたインデックスiに対応する変換関数Fδiを生成してもよい。この場合、関数生成部96は、インデックスiおよびマスター鍵giに基づき、新たな変換関数Fδiを生成する。そして、出力部83は、クライアント鍵関数CKeyGen(KS,i)に代えて、新たな変換関数Fδiをサーバ鍵更新情報sriとしてサーバ40に出力する。
図23は、第4例に係る更新部60の処理フローを示す図である。まず、ステップS141において、更新部60の入力部80は、更新対象のクライアント鍵Kiを指定するためのインデックスiの集合を入力する。
続いて、ステップS142において、第1更新情報生成部84は、乱数に基づきマスター鍵giを生成する。続いて、ステップS143において、第1更新情報生成部84は、マスター鍵giに基づき、新たなクライアント鍵関数CKeyGen(KS,i)を生成する。
続いて、ステップS144において、第2更新情報生成部85は、入力部80が入力したインデックスi、既存のサーバ鍵KSおよび新たなクライアント鍵関数CKeyGen(KS,i)に基づき、新たなクライアント鍵Kiを生成する。
そして、ステップS145において、出力部83は、クライアント鍵関数CKeyGen(KS,i)をサーバ40に出力する。また、出力部83は、更新対象のクライアント鍵Kiを保持するクライアント端末30のそれぞれに、新たなクライアント鍵Kiを出力する。
図24は、第4例に係るクライアント端末30およびサーバ40の構成の一部を更新部60とともに示す図である。
第4例において、サーバ40のサーバ内更新部78は、更新部60から新たなクライアント鍵関数CKeyGen(KS,i)を取得する。サーバ内更新部78は、サーバ内保持部71に保持されている既存のクライアント鍵関数CKeyGen(KS,i)を、取得した新たなクライアント鍵関数CKeyGen(KS,i)に置き換える。
暗号化時または復号時において、サーバ内クライアント鍵生成部73は、インデックスi、サーバ内保持部71に保持されている新たなクライアント鍵関数CKeyGen(KS,i)および既存のサーバ鍵KSに基づき、新たなクライアント鍵Kiを生成する。これにより、サーバ40は、新たなクライアント鍵Kiを用いてクライアント端末30と暗号通信をすることができる。
なお、第4例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合であって、且つ、マスター関数Gf(gi,i)が変換関数Fδiを生成するための関数である場合には、サーバ内更新部78は、更新部60から、クライアント鍵関数CKeyGen(KS,i)に代えて新たな変換関数Fδiを取得する。そして、サーバ内更新部78は、サーバ内保持部71に保持されている既存の変換関数Fδiを、取得した新たな変換関数Fδiに置き換える。この場合、暗号化時または復号時において、サーバ内クライアント鍵生成部73は、インデックスi、サーバ内保持部71に保持されている既存のクライアント鍵関数CKeyGen(KS,i)および既存のサーバ鍵KSに基づき、クライアント鍵Kiを生成する。サーバ内変換部74は、生成されたクライアント鍵Kiと、サーバ内保持部71に保持されている新たな変換関数Fδiとに基づき、新たな暗号化鍵EKiを生成する。これにより、サーバ40は、新たな暗号化鍵EKiを用いてクライアント端末30と暗号通信をすることができる。
また、第4例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、サーバ内更新部78は、新たなクライアント鍵関数CKeyGen(KS,i)と既存の変換関数Fδiとを合成した新たな合成関数CEKGen(KS,i)、または、既存のクライアント鍵関数CKeyGen(KS,i)と新たな変換関数Fδiとを合成した新たな合成関数CEKGen(KS,i)を、更新部60から取得してもよい。この場合、サーバ内更新部78は、サーバ内保持部71に保持されている合成関数CEKGen(KS,i)を、取得した新たな合成関数CEKGen(KS,i)に置き換える。そして、暗号化時または復号時において、サーバ内クライアント鍵生成部73は、インデックスi、サーバ内保持部71に保持されている新たな合成関数CEKGen(KS,i)および既存のサーバ鍵KSに基づき、新たな暗号化鍵EKiを生成する。これにより、サーバ40は、新たな暗号化鍵EKiを用いてクライアント端末30と暗号通信をすることができる。
第4例に係る更新部60によれば、サーバ40に保持されているクライアント鍵関数CKeyGen(KS,i)を更新することにより、クライアント鍵Kiまたは暗号化鍵EKiを更新することができる。
図25は、第5例に係る更新部60の構成をクライアント端末30およびサーバ40とともに示す図である。なお、第5例を説明するに当たり、第4例と略同一の構成および機能を有する部材には同一の符号を付けて、相違点を除き説明を省略する。
第5例において、クライアント鍵関数CKeyGen(KS,gi,i)は、インデックスi、サーバ鍵KS、および、マスター鍵giに基づき、インデックスiにより指定されたクライアント鍵Kiを生成する。すなわち、第5例に係るクライアント鍵関数CKeyGen(KS,gi,i)は、引数としてマスター鍵giが追加されている。
第5例においては、クライアント鍵関数CKeyGen(KS,gi,i)は、図12に示す第2データ変換Fβおよび第3データ変換Fγにより構成される。このとき、第3データ変換は、変換前クライアント鍵Ki’とマスター鍵giを引数にとるFγi(Ki’,gi)である。また、第5例においては、クライアント鍵関数をCKeyGen(KS,gi,i,w)とし、インデックスi、サーバ鍵KS、マスター鍵giおよび管理情報wに基づき、インデックスiにより指定されたクライアント鍵Kiを生成してもよい。このとき、第3データ変換をFγi(Ki’,gi,w)とし、変換前クライアント鍵Ki’とマスター鍵giおよび管理情報wに基づき、変換後クライアント鍵Kiを生成してもよい。
例えば、第3データ変換Fγは、下記の式(80)〜式(82)に示されるように、変換前クライアント鍵K
i’とマスター鍵g
iとの算術和、算術積または排他的論理和を出力する関数であってもよい。なお、式(82)は、K
i’とg
iとのビット長が等しい場合の式である。
また、例えば、第3データ変換Fγ
iは、下記の式(83)に示されるように、変換前クライアント鍵K
i’とマスター鍵g
iと管理情報wとの演算結果を出力する関数であってもよい。
また、例えば、例えば、第3データ変換Fγ
iは、下記の式(84)に示されるように、変換前クライアント鍵K
i’とマスター鍵g
iと管理情報wとの和、積または排他的論理和を関数F
12により変換した系列を出力する関数であってもよい。F
12は、一例として、一対一関数、擬似ランダム関数またはハッシュ関数等である。また、F
12は、l
iビットの入力に対して、l
iビットを出力する。
また、例えば、第3データ変換Fγ
iは、下記の式(85)に示されるように、K
i’を行ベクトルと考え右から正則行列g
iをかけてもよい。例えば、第3データ変換Fγ
iは、K
iの1ビットをベクトルの1要素とし、1×l
iの行ベクトルとし、g
iをl
i×l
iの正則行列として計算する。また、例えば、第3データ変換Fγ
iは、K
i’の複数ビットが示す数をベクトルの1つの要素として計算してもよい。
また、例えば、第3データ変換Fγ
iは、下記の式(86)に示されるように、K
i’を列ベクトルと考え、行列wと列ベクトルg
iの積を加えてもよい。例えば、第3データ変換Fγ
iは、K
i’の1ビットをベクトルの1要素とし、l
i×1の列ベクトルとし、wをl
i×l
g行列とし,g
iをl
g×1の列ベクトルとして計算する。また、例えば、第3データ変換Fγ
iは、K
i’
,g
i,wの複数ビットが示す数をベクトルの1つの要素として計算してもよい。
また、例えば、第3データ変換Fγ
iは、下記の式(87)に示されるように、クライアント鍵K
iを関数F
12により変換した系列と、マスター鍵g
iを関数F
13により変換した系列との、演算結果を出力してもよい。F
13は、一例として、一対一関数、擬似ランダム関数またはハッシュ関数等である。
なお、第3データ変換Fγiは、このような関数に限らず、変換前クライアント鍵Ki’を、マスター鍵giまたは管理情報w等によってクライアント鍵Kiに変換する関数であればよい。
クライアント鍵関数CKeyGen(KS,i,gi)が、関数H(i)の出力値がKSのビット位置を示すと考え、KSの該当位置のビットを連結させてクライアント鍵を生成する場合を考える。ここで、関数Hはハッシュ関数または疑似ランダム関数等である。クライアント鍵関数CKeyGen(KS,i,gi)を構成する関数H(i○gi)は、インデックスiおよびマスター鍵giに基づいて、サーバ鍵KSのビット位置を出力する。また、クライアント鍵関数CKeyGen(KS,i,gi,w)を構成する関数H(i○gi○w)は、インデックスi、マスター鍵giおよび管理情報wに基づいて、サーバ鍵KSのビット位置を出力してもよい。
そして、第5例において、更新部60は、更新対象のクライアント鍵Kiを更新するとともに、マスター鍵giを更新することにより更新対象のクライアント鍵Kiを更新する。
更新部60は、図25に示すように、入力部80と、乱数発生部81と、第1更新情報生成部84と、第2更新情報生成部85と、出力部83とを有する。
第1更新情報生成部84は、マスター鍵生成部95を含む。マスター鍵生成部95は、乱数発生部81により発生された乱数に基づき、新たなマスター鍵giを生成する。
第2更新情報生成部85は、クライアント鍵生成部94を含む。クライアント鍵生成部94は、入力部80が入力したインデックスi、既存のクライアント鍵関数CKeyGen(KS,gi,i)、新たなマスター鍵giおよび既存のサーバ鍵KSに基づき、新たなクライアント鍵Kiを生成する。
出力部83は、第1更新情報生成部84が生成した新たなマスター鍵giをサーバ鍵更新情報sriとしてサーバ40に出力する。また、出力部83は、更新対象のクライアント鍵Kiを保持するクライアント端末30のそれぞれに、第2更新情報生成部85が生成した新たなクライアント鍵Kiをクライアント鍵更新情報criとして出力する。
また、第5例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合には、クライアント鍵生成部94は、クライアント鍵関数CKeyGen(KS,gi,i)と変換関数Fδiとを合成した合成関数CEKGen(KS,gi,i)を保持していてもよい。この場合、クライアント鍵生成部94は、入力部80が入力したインデックスi、合成関数CEKGen(KS,gi,i)、新たなマスター鍵giおよび既存のサーバ鍵KSに基づき、新たな暗号化鍵EKiを生成する。そして、この場合、出力部83は、新たな暗号化鍵EKiをクライアント鍵更新情報criとして出力する。
図26は、第5例に係る更新部60の処理フローを示す図である。まず、ステップS151において、更新部60の入力部80は、更新対象のクライアント鍵Kiを指定するためのインデックスiの集合を入力する。
続いて、ステップS152において、第1更新情報生成部84は、乱数に基づきマスター鍵giを生成する。続いて、ステップS153において、第2更新情報生成部85は、入力部80が入力したインデックスi、既存のサーバ鍵KS、新たなマスター鍵giおよび既存のクライアント鍵関数CKeyGen(KS,gi,i)に基づき、新たなクライアント鍵Kiを生成する。
そして、ステップS154において、出力部83は、マスター鍵giをサーバ40に出力する。また、出力部83は、更新対象のクライアント鍵Kiを保持するクライアント端末30のそれぞれに、新たなクライアント鍵Kiを出力する。
図27は、第5例に係るクライアント端末30およびサーバ40の構成の一部を更新部60とともに示す図である。第5例において、サーバ40のサーバ内更新部78は、マスター鍵giを取得する。サーバ内更新部78は、サーバ内保持部71に保持されている既存のマスター鍵giを、取得した新たなマスター鍵giに置き換える。
暗号化時または復号時において、サーバ内クライアント鍵生成部73は、インデックスi、サーバ内保持部71に保持されている新たなマスター鍵gi、既存のクライアント鍵関数CKeyGen(KS,gi,i)および既存のサーバ鍵KSに基づき、新たなクライアント鍵Kiを生成する。これにより、サーバ40は、新たなクライアント鍵Kiを用いてクライアント端末30と暗号通信をすることができる。
なお、第5例において、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合、サーバ内保持部71は、クライアント鍵関数CKeyGen(KS,gi,i)と変換関数Fδiとを合成した新たな合成関数CEKGen(KS,gi,i)を保持していてもよい。この場合、暗号化時または復号時において、サーバ内クライアント鍵生成部73は、インデックスi、新たなマスター鍵gi、サーバ内保持部71に保持されている合成関数CEKGen(KS,gi,i)および既存のサーバ鍵KSに基づき、新たな暗号化鍵EKiを生成する。これにより、サーバ40は、新たな暗号化鍵EKiを用いてクライアント端末30と暗号通信をすることができる。
第5例に係る更新部60によれば、マスター鍵giを用いてクライアント鍵関数CKeyGen(KS,gi,i)を更新することにより、クライアント鍵Kiまたは暗号化鍵EKiを更新することができる。なお、生成装置20がサーバ鍵更新情報sriおよびクライアント鍵更新情報criを送信する通信路は、安全な通信路が望ましいが、そうでない通信路であってもよい。
以上のように、第1実施形態に係る暗号処理システム10によれば、複数のクライアント鍵Kiのそれぞれの一部を他のクライアント鍵Kiと相関を持たせた場合であっても、複数のクライアント鍵Kiまたは暗号化鍵EKiの一部を容易に更新することができる。また、クライアント鍵Kiが暗号化鍵EKiの生成の種である場合、クライアント鍵更新情報criは、クライアント鍵Ki、マスター鍵giまたは変換関数Fδiであるが、これらの何れかが漏えいした場合にも、暗号化鍵EKiは漏洩せず、安全に鍵を更新することができる。
(第2実施形態)
図28は、第2実施形態に係る暗号処理システム110の構成を示す図である。暗号処理システム110は、生成装置120と、第1のクライアント端末131と、第2のクライアント端末132と、サーバ140と、再暗号化装置150とを備える。
生成装置120は、第1のクライアント鍵K1、第2のクライアント鍵K2、および、マスター鍵Krを生成する。生成装置120は、一例として、乱数発生器により発生された乱数に基づき、クライアント鍵K1、クライアント鍵K2およびマスター鍵Krを生成する。
生成装置120は、第1のクライアント鍵K1を第1のクライアント端末131に出力する。生成装置120は、第2のクライアント鍵K2を第2のクライアント端末132に出力する。さらに、生成装置120は、第1のクライアント鍵K1、第2のクライアント鍵K2およびマスター鍵Krをサーバ140に出力する。なお、生成装置120は、第1のクライアント鍵K1および第2のクライアント鍵K2に代えて、第1実施形態の生成装置20と同様に、第1のクライアント鍵K1および第2のクライアント鍵K2を生成するためのサーバ鍵KSおよびクライアント鍵規則をサーバ140に出力してもよい。
サーバ140は、クライアント鍵K1、クライアント鍵K2およびマスター鍵Krを生成装置120から取得する。サーバ140は、第1のクライアント鍵K1をマスター鍵Krにより暗号化した第1再暗号化鍵K1 (r)を生成する。また、サーバ140は、第2のクライアント鍵K2をマスター鍵Krにより暗号化した第2再暗号化鍵K2 (r)を生成する。サーバ140は、再暗号化装置150からのリクエストに応じて、第1再暗号化鍵K1 (r)および第2再暗号化鍵K2 (r)を再暗号化装置150に出力する。なお、生成装置120およびサーバ140は、一体の構成であってもよい。
第1のクライアント端末131は、生成装置120から第1のクライアント鍵K1を取得して保持する。第1のクライアント端末131は、平文mを第1のクライアント鍵K1で暗号化した第1暗号文C1(=Enc(k1,m))を生成する。第1のクライアント端末131は、第1暗号文C1を再暗号化装置150に出力する。
再暗号化装置150は、第1のクライアント端末131から第1暗号文C1を取得する。再暗号化装置150は、第1暗号文C1を取得したことに応じてサーバ140にリクエストを出力して、第1再暗号化鍵K1 (r)および第2再暗号化鍵K2 (r)を取得する。
再暗号化装置150は、第1暗号文C1、第1再暗号化鍵K1 (r)および第2再暗号化鍵K2 (r)に基づき、平文mを第2のクライアント鍵K2で暗号化した第2暗号文C2(=Enc(k2,m))を生成する。そして、再暗号化装置150は、第2暗号文C2を第2のクライアント端末132に出力する。
第2のクライアント端末132は、生成装置120から第2のクライアント鍵K2を取得して保持する。第2のクライアント端末132は、再暗号化装置150から第2暗号文C2を取得する。第2のクライアント端末132は、第2のクライアント鍵K2により第2暗号文C2を復号して、平文mを生成する。
以下、暗号化処理として、排他的論理和演算を用いる場合の再暗号化装置150の構成を説明する。この場合、平文m、第1のクライアント鍵K1、第2のクライアント鍵K2、マスター鍵Kr、第1再暗号化鍵K1 (r)、第2再暗号化鍵K2 (r)、合成鍵K1,2 (r)、第1暗号文C1および第2暗号文C2は、全て同一ビット長の2進数データである。
図29は、再暗号化装置150の構成を示す図である。再暗号化装置150は、受信部151と、取得部152と、合成鍵生成部153と、再暗号化部154と、送信部155とを有する。
受信部151は、第1のクライアント端末131から、平文mと第1のクライアント鍵K1とを排他的論理和演算した第1暗号文C1を受信する。取得部152は、第1のクライアント鍵K1とマスター鍵Krとを排他的論理和演算した第1再暗号化鍵K1 (r)をサーバ140から取得する。また、取得部152は、第2のクライアント鍵K2とマスター鍵Krとを排他的論理和演算した第2再暗号化鍵K2 (r)を取得する。
合成鍵生成部153は、取得部152が取得した第1再暗号化鍵K1 (r)と第2再暗号化鍵K2 (r)とを排他的論理和演算して、合成鍵K1,2 (r)を生成する。再暗号化部154は、受信部151が受信した第1暗号文C1と、合成鍵生成部153が生成した合成鍵K1,2 (r)とを排他的論理和演算して、第2暗号文C2を生成する。送信部155は、再暗号化部154が生成した第2暗号文C2を第2のクライアント端末132に送信する。
図30は、第2実施形態に係る暗号処理システム110の処理フローを示す図である。第1のクライアント端末131から第2のクライアント端末132へ暗号通信により平文mを転送する場合、以下のステップS201からステップS210の処理が実行される。
まず、ステップS201において、第1のクライアント端末131は、下記の式(101)に示すように、平文mと第1のクライアント鍵K
1とを排他的論理和演算した第1暗号文C
1を生成する。
続いて、ステップS202において、第1のクライアント端末131は、第1暗号文C1を再暗号化装置150に出力する。この場合に、第1のクライアント端末131は、送信先(第2のクライアント端末132)を指定する情報も再暗号化装置150に出力する。
続いて、ステップS203において、再暗号化装置150は、第1のクライアント端末131から第1暗号文C1を取得したことに応じて、サーバ140にリクエストを出力する。この場合に、再暗号化装置150は、送信元(第1のクライアント端末131)および送信先(第2のクライアント端末132)を指定する情報もサーバ140に出力する。
続いて、ステップS204において、サーバ140は、送信元の第1のクライアント端末131が保持する第1のクライアント鍵K1、送信先の第2のクライアント端末132が保持する第2のクライアント鍵K2、および、マスター鍵Krを取得する。サーバ140は、一例として、第1のクライアント鍵K1、第2のクライアント鍵K2およびマスター鍵Krを、生成装置120から予め取得して保持している。また、サーバ140は、一例として、再暗号化装置150からリクエストを受けた後に、生成装置120から取得してもよい。また、サーバ140は、生成装置120からマスター鍵Krを取得するのではなく、内部に備える乱数発生器により発生された乱数をマスター鍵Krとしてもよい。
続いて、ステップS205において、サーバ140は、下記の式(102)に示すように、第1のクライアント鍵K
1とマスター鍵K
rとを排他的論理和演算した第1再暗号化鍵K
1 (r)を生成する。また、サーバ140は、下記の式(103)に示すように、第2のクライアント鍵K
2とマスター鍵K
rとを排他的論理和演算した第2再暗号化鍵K
2 (r)を生成する。
続いて、ステップS206において、サーバ140は、第1再暗号化鍵K1 (r)および第2再暗号化鍵K2 (r)を再暗号化装置150に返信する。
続いて、ステップS207において、再暗号化装置150は、第1再暗号化鍵K
1 (r)および第2再暗号化鍵K
2 (r)を取得したことに応じて、下記の式(104)に示すように、第1再暗号化鍵K
1 (r)と第2再暗号化鍵K
2 (r)とを排他的論理和演算して、合成鍵K
1,2 (r)を生成する。
続いて、ステップS208において、再暗号化装置150は、下記の式(105)に示すように、第1暗号文C
1と合成鍵K
1,2 (r)とを排他的論理和演算して、第2暗号文C
2を生成する。
続いて、ステップS209において、再暗号化装置150は、第2暗号文C2を第2のクライアント端末132に送信する。
ここで、第2暗号文C
2と第1のクライアント鍵K
1とを排他的論理和演算した式は、下記の式(106)のように表される。
また、第1暗号文C
1は、式(101)に示したように、第1のクライアント鍵K
1と平文mとを排他的論理和した値である。また、合成鍵K
1,2 (r)は、下記の式(107)に示すように、第1のクライアント鍵K
1と第2のクライアント鍵K
2とを排他的論理和した値である。
従って、式(101)および式(107)を式(106)に代入すると、右辺には平文mだけが残る。
そこで、ステップS210において、第2のクライアント端末132は、第2暗号文C
2を受信したことに応じて、下記式(108)に示すように、第2暗号文C
2と第2のクライアント鍵K
2とを排他的論理和演算して平文mを生成する。これにより、第2のクライアント端末132は、第1のクライアント端末131から送信された平文mを取得することができる。
なお、再暗号化装置150は、予め、第1再暗号化鍵K1 (r)および第2再暗号化鍵K2 (r)の一方または全部をサーバ140から取得していてもよい。この場合、サーバ140は、第1のクライアント鍵K1および第2のクライアント鍵K2の更新時に、更新した第1再暗号化鍵K1 (r)および第2再暗号化鍵K2 (r)を再暗号化装置150に送信する。再暗号化装置150は、更新した第1再暗号化鍵K1 (r)および第2再暗号化鍵K2 (r)を、元の第1再暗号化鍵K1 (r)および第2再暗号化鍵K2 (r)に追加してもよいし、上書きしてもよい。
以上のように、第2実施形態に係る再暗号化装置150は、第1のクライアント鍵K1および第2のクライアント鍵K2を知らずに、平文mを第1のクライアント鍵K1により暗号化した第1暗号文C1を、平文mを第2のクライアント鍵K2により暗号化した第2暗号文C2に変換することができる。
図31は、生成装置20、クライアント端末30、サーバ40および再暗号化装置150のハードウェア構成の一例を示す図である。生成装置20、クライアント端末30、サーバ40および再暗号化装置150は、CPU(Central Processing Unit)201などの制御装置と、ROM(Read Only Memory)202やRAM(Random Access Memory)203などの記憶装置と、ネットワークに接続して通信を行う通信I/F204と、各部を接続するバスを備えている。
実施形態に係る生成装置20、クライアント端末30、サーバ40および再暗号化装置150で実行されるプログラムは、ROM202等に予め組み込まれて提供される。また、このプログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
さらに、このプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、このプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
実施形態に係る生成装置20で実行されるプログラムは、コンピュータを上述した生成装置20の各部(入力部51、乱数発生部52、サーバ鍵生成部53、クライアント鍵生成部54、出力部55)として機能させうる。なお、入力部51、乱数発生部52、サーバ鍵生成部53、クライアント鍵生成部54、出力部55は、一部または全部がハードウェアにより構成されていてもよい。
実施形態に係るクライアント端末30で実行されるプログラムは、コンピュータを上述したクライアント端末30の各部(クライアント内保持部61、クライアント内変換部62、クライアント内暗号化部63、クライアント内送信部64、クライアント内受信部65、クライアント内復号部66およびクライアント内更新部67)として機能させうる。なお、クライアント内保持部61、クライアント内変換部62、クライアント内暗号化部63、クライアント内送信部64、クライアント内受信部65、クライアント内復号部66およびクライアント内更新部67は、一部または全部がハードウェアにより構成されていてもよい。
実施形態に係るサーバ40で実行されるプログラムは、コンピュータを上述したサーバ40の各部(サーバ内保持部71、サーバ内受信部72、サーバ内クライアント鍵生成部73、サーバ内変換部74、サーバ内復号部75、サーバ内暗号化部76、サーバ内送信部77およびサーバ内更新部78)として機能させうる。なお、サーバ内保持部71、サーバ内受信部72、サーバ内クライアント鍵生成部73、サーバ内変換部74、サーバ内復号部75、サーバ内暗号化部76、サーバ内送信部77およびサーバ内更新部78は、一部または全部がハードウェアにより構成されていてもよい。
実施形態に係る再暗号化装置150で実行されるプログラムは、コンピュータを上述した再暗号化装置150の各部(受信部151、取得部152、合成鍵生成部153、再暗号化部154および送信部155)として機能させうる。なお、受信部151、取得部152、合成鍵生成部153、再暗号化部154および送信部155は、一部または全部がハードウェアにより構成されていてもよい。
そして、このコンピュータは、CPU201がコンピュータ読取可能な記憶媒体から上述した各プログラムを主記憶装置上に読み出して実行することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。