(57)【特許請求の範囲】
【請求項１】
ソフトウェアプログラムのみで構成されるストレージ装置であって、
Ｎ個の秘密鍵を生成する秘密鍵生成手段と、
該Ｎ個の秘密鍵を前記ソフトウェアプログラム内に隠蔽する隠蔽手段と、
乱数を生成する乱数生成手段と、
前記Ｎ個の秘密鍵と生成した乱数とから暗号鍵を生成する暗号鍵生成手段と、
格納されるデータを該生成した暗号鍵で暗号化する暗号化手段と、
を備えたことを特徴とするストレージ装置。
【請求項２】
前記秘密鍵生成手段が、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とし、前記暗号鍵生成手段が前記Ｎ個の秘密鍵のうちｎ（Ｎ≧ｎ）個の秘
密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記暗号鍵生成手段が、前記暗号鍵の出力に使用した乱数と使用した秘密鍵のインデックス情報をデータに付与するインデックス情報付与手段を備えたことを特徴とする請求項２に記載のストレージ装置。
【請求項４】
前記秘密鍵生成手段が、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とし、前記暗号鍵生成手段が前記Ｎ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成することを特徴とする請求項１に記載のストレージ装置。
【請求項５】
前記秘密鍵生成手段が、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とし、前記暗号鍵生成手段が前記ｎ個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とする請求項１に記載のストレージ装置。
【請求項６】
前記暗号鍵生成手段が、暗号化処理ごとに異なる暗号鍵を生成することを特徴とする請求項１から請求項５のいずれかに記載のストレージ装置。
【請求項７】
ソフトウェアプログラムのみで構成され、秘密鍵生成手段と、隠蔽手段と、乱数生成手段と、暗号鍵生成手段と、暗号化手段とを備えたストレージ装置のストレージ方法であって、
前記秘密鍵生成手段が、Ｎ個の秘密鍵を生成する第１のステップと、
前記隠蔽手段が、該Ｎ個の秘密鍵を前記ソフトウェアプログラム内に隠蔽する第２のステップと、
前記乱数生成手段が、乱数を生成する第３のステップと、
前記暗号鍵生成手段が、前記Ｎ個の秘密鍵と生成した乱数とから暗号鍵を生成する第４のステップと、
前記暗号化手段が、格納されるデータを該生成した暗号鍵で暗号化する第５のステップと、
を備えたことを特徴とするストレージ方法。
【請求項８】
前記第１のステップにおいて、前記秘密鍵生成手段が、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、前記Ｎ個の秘密鍵を生成し、
前記第４のステップにおいて、前記暗号鍵生成手段が、前記Ｎ個の秘密鍵のうちｎ（Ｎ≧ｎ）個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする
することを特徴とする請求項７に記載のストレージ方法。
【請求項９】
前記第１のステップにおいて、前記秘密鍵生成手段が、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、前記Ｎ個の秘密鍵を生成し、
前記第４のステップにおいて、前記暗号鍵生成手段が、前記Ｎ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成することを特徴とする請求項７に記載のストレージ方法。
【請求項１０】
前記第１のステップにおいて、前記秘密鍵生成手段が、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とし、
前記第４のステップにおいて、前記暗号鍵生成手段が、前記ｎ個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とする請求項７に記載のストレージ方法。
【請求項１１】
ソフトウェアプログラムのみで構成され、秘密鍵生成手段と、隠蔽手段と、乱数生成手段と、暗号鍵生成手段と、暗号化手段とを備えたストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、
前記秘密鍵生成手段が、Ｎ個の秘密鍵を生成する第１のステップと、
前記隠蔽手段が、該Ｎ個の秘密鍵を前記ソフトウェアプログラム内に隠蔽する第２のステップと、
前記乱数生成手段が、乱数を生成する第３のステップと、
前記暗号鍵生成手段が、前記Ｎ個の秘密鍵と生成した乱数とから暗号鍵を生成する第４のステップと、
前記暗号化手段が、格納されるデータを該生成した暗号鍵で暗号化する第５のステップと、をコンピュータに実行させるためのプログラム。
【請求項１２】
前記第１のステップにおいて、前記秘密鍵生成手段が、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、前記Ｎ個の秘密鍵を生成し、
前記第４のステップにおいて、前記暗号鍵生成手段が、前記Ｎ個の秘密鍵のうちｎ（Ｎ≧ｎ）個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とする請求項１１に記載のプログラム。
【請求項１３】
前記第１のステップにおいて、前記秘密鍵生成手段が、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、前記Ｎ個の秘密鍵を生成し、
前記第４のステップにおいて、前記暗号鍵生成手段が、前記Ｎ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成することを特徴とする請求項１１に記載のプログラム。
【請求項１４】
前記第１のステップにおいて、前記秘密鍵生成手段が、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とし、
前記第４のステップにおいて、前記暗号鍵生成手段が、前記ｎ個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とする請求項１１に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、耐タンパデバイスやＯＳの特殊な領域を使用すること無しに、暗号学的に安全、かつ効率的なストレージ装置、ストレージ方法およびプログラムに関する。
【背景技術】
【０００２】
一般に、プログラムには、価値のあるアルゴリズムおよびコンテンツの暗号鍵等、利用者に対して秘密にすべき情報が含まれる場合がある。一方で、プログラムを解析するための技術（ＲＥ：Ｒｅｖｅｒｓｅ  Ｅｎｇｉｎｅｅｒｉｎｇ）も数多く開発されているのが現状である。このため、これらの技術によりプログラムが解析されると、不正者に秘密情報が入手されるという脅威が考えられる。
【０００３】
このような脅威を回避するために、例えば、ＵＩＭカード（Ｕｓｅｒ  Ｉｄｅｎｔｉｔｙ  Ｍｏｄｕｌｅ  Ｃａｒｄ）やＵＳＩＭカード（Ｕｎｉｖｅｒｓａｌ Ｓｕｂｓｃｒｉｂｅｒ Ｉｄｅｎｔｉｔｙ Ｍｏｄｕｌｅ Ｃａｒｄ）等の耐タンパデバイスを用いた技術が知られている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−６６８８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一方、近年、オープンプラットフォームでのセキュリティ確保が重要な課題となっている。このようなオープンプラットフォーム環境では、耐タンパデバイスが必ずしも利用できる訳ではなく、ソフトウェアのみでセキュリティ確保が必要となり、秘密情報を格納するセキュアストレージも、ソフトウェアのみで構成しなければならない。また、セキュアストレージに対しては、サイドチャネル攻撃が想定され、そのような攻撃に対して耐性を持つ方式が必要である。
【０００６】
そこで、本発明は、上述の課題に鑑みてなされたものであり、耐タンパデバイスやＯＳの特殊な領域を使用すること無しに、暗号学的に安全、かつ効率的なストレージ装置、ストレージ方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために、以下の事項を提案している。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。
【０００８】
（１）本発明は、ソフトウェアのみで構成されるストレージ装置であって、Ｎ個の秘密鍵を生成する秘密鍵生成手段（例えば、図１の秘密鍵生成部１０１に相当）と、該Ｎ個の秘密鍵を前記プログラム内に隠蔽する隠蔽手段（例えば、図１の秘密鍵秘匿部１０２に相当）と、乱数を生成する乱数生成手段（例えば、図１の乱数生成部１０３に相当）と、前記Ｎ個の秘密鍵と生成した乱数とから暗号鍵を生成する暗号鍵生成手段（例えば、図１の暗号鍵生成部１０４に相当）と、格納されるデータを該生成した暗号鍵で暗号化する暗号化手段（例えば、図１の暗号化部１０６に相当）と、を備えたことを特徴とするストレージ装置を提案している。
【０００９】
この発明によれば、秘密鍵生成手段は、Ｎ個の秘密鍵を生成する。隠蔽手段は、Ｎ個の秘密鍵をプログラム内に隠蔽する。乱数生成手段は、乱数を生成する。暗号鍵生成手段は、Ｎ個の秘密鍵と生成した乱数とから暗号鍵を生成する。暗号化手段は、格納されるデータを生成した暗号鍵で暗号化する。したがって、鍵生成手段が、Ｎ個の秘密鍵を生成するため、秘密鍵がＮ−１個漏洩しても耐性を有する。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００１０】
（２）本発明は、（１）のストレージ装置について、前記秘密鍵生成手段（例えば、図３の秘密鍵生成部２０１に相当）が、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とし、前記暗号鍵生成手段（例えば、図３の暗号鍵生成部２０４に相当）が前記Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とするストレージ装置を提案している。
【００１１】
この発明によれば、秘密鍵生成手段が、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とし、暗号鍵生成手段がＮ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする。したがって、暗号鍵生成手段がＮ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするため、さらにセキュリティ能力を向上させることができる。
【００１２】
（３）本発明は、（２）のストレージ装置について、前記使用した乱数と使用した秘密鍵のインデックス情報をデータに付与するインデックス情報付与手段（例えば、図３のインデックス付与部２０７に相当）を備えたことを特徴とするストレージ装置を提案している。
【００１３】
この発明によれば、インデックス情報付与手段は、使用した乱数と使用した秘密鍵のインデックス情報をデータに付与する。したがって、これにより、Ｎ個の秘密鍵のうち、どのｎ個の秘密鍵を用いたのかを明確に把握することができる。
【００１４】
（４）本発明は、（１）のストレージ装置について、前記秘密鍵生成手段（例えば、図５の秘密鍵生成部２０１に相当）が、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とし、前記暗号鍵生成手段（例えば、図５の暗号鍵生成部３０４に相当）が前記Ｎ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成することを特徴とするストレージ装置を提案している。
【００１５】
この発明によれば、秘密鍵生成手段が、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とし、暗号鍵生成手段がＮ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成する。したがって、暗号鍵生成手段がＮ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、生成した暗号鍵を第３者からの攻撃に対して、秘匿化することができる。
【００１６】
（５）本発明は、（１）のストレージ装置について、前記秘密鍵生成手段（例えば、図７の秘密鍵生成部４０１に相当）が、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とし、前記暗号鍵生成手段（例えば、図７の暗号鍵生成部４０４に相当）が前記ｎ個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とするストレージ装置を提案している。
【００１７】
この発明によれば、秘密鍵生成手段が、暗号鍵のシードとなるマスターシークレットを生成し、生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とし、暗号鍵生成手段がｎ個の情報からマスターシークレットを復元し、復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする。したがって、ｎ−１個までのマスターシークレットの漏洩に対して、漏洩耐性を得ることができる。
【００１８】
（６）本発明は、（１）から（５）のストレージ装置について、前記暗号鍵生成手段（例えば、図１の暗号鍵生成部１０４、図３の暗号鍵生成部２０４、図５の暗号鍵生成部３０４、図７の暗号鍵生成部４０４に相当）が、暗号化処理ごとに異なる暗号鍵を生成することを特徴とするストレージ装置を提案している。
【００１９】
この発明によれば、暗号鍵生成手段が、暗号化処理ごとに異なる暗号鍵を生成する。したがって、暗号化に使用する鍵が暗号化ごとに異なるため、さらに、第三者の攻撃に対して、耐性を持つことができる。
【００２０】
（７）本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、Ｎ個の秘密鍵を生成する第１のステップ（例えば、図２のステップＳ１０１に相当）と、該Ｎ個の秘密鍵を前記プログラム内に隠蔽する第２のステップ（例えば、図２のステップＳ１０２に相当）と、乱数を生成する第３のステップ（例えば、図２のステップＳ１０３に相当）と、前記Ｎ個の秘密鍵と生成した乱数とから暗号鍵を生成する第４のステップ（例えば、図２のステップＳ１０４に相当）と、格納されるデータを該生成した暗号鍵で暗号化する第５のステップ（例えば、図２のステップＳ１０５に相当）と、を備えたことを特徴とするストレージ方法を提案している。
【００２１】
この発明によれば、Ｎ個の秘密鍵を生成し、生成したＮ個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、Ｎ個の秘密鍵と生成した乱数とから暗号鍵を生成する。そして、格納されるデータを生成した暗号鍵で暗号化する。したがって、Ｎ個の秘密鍵を生成するため、秘密鍵がＮ−１個漏洩しても耐性を有する。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００２２】
（８）本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする第１のステップ（例えば、図４のステップＳ２０１に相当）と、該Ｎ個の秘密鍵を前記プログラム内に隠蔽する第２のステップ（例えば、図４のステップＳ２０２に相当）と、乱数を生成する第３のステップ（例えば、図４のステップＳ２０３に相当）と、前記Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第４のステップ（例えば、図４のステップＳ２０４に相当）と、格納されるデータを該生成した暗号鍵で暗号化する第５のステップ（例えば、図４のステップＳ２０５に相当）と、を備えたことを特徴とするストレージ方法を提案している。
【００２３】
この発明によれば、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする。このＮ個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とし、格納されるデータを生成した暗号鍵で暗号化する。したがって、Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするため、秘密鍵がｎ−１個漏洩しても耐性を有する。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００２４】
（９）本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする第１のステップ（例えば、図６のステップＳ３０１に相当）と、該Ｎ個の秘密鍵を前記プログラム内に隠蔽する第２のステップ（例えば、図６のステップＳ３０２に相当）と、乱数を生成する第３のステップ（例えば、図６のステップＳ３０３に相当）と、前記Ｎ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成する第４のステップ（例えば、図６のステップＳ３０５に相当）と、格納されるデータを該生成した暗号鍵で暗号化する第５のステップ（例えば、図６のステップＳ３０６に相当）と、を備えたことを特徴とするストレージ方法を提案している。
【００２５】
この発明によれば、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする。このＮ個の秘密鍵を前記プログラム内に隠蔽する。さらに、乱数を生成し、Ｎ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成し、格納されるデータを生成した暗号鍵で暗号化する。したがって、暗号鍵生成手段がＮ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、生成した暗号鍵を第３者からの攻撃に対して、秘匿化することができる。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００２６】
（１０）本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とする第１のステップ（例えば、図８のステップＳ４０１に相当）と、該Ｎ個の秘密鍵を前記プログラム内に隠蔽する第２のステップ（例えば、図８のステップＳ４０２に相当）と、乱数を生成する第３のステップ（例えば、図８のステップＳ４０３に相当）と、前記ｎ個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第４のステップ（例えば、図８のステップＳ４０４に相当）と、格納されるデータを該生成した暗号鍵で暗号化する第５のステップ（例えば、図８のステップＳ４０５に相当）と、を備えたことを特徴とするストレージ方法を提案している。
【００２７】
この発明によれば、暗号鍵のシードとなるマスターシークレットを生成し、生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とする。このＮ個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、ｎ個の情報からマスターシークレットを復元し、復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵として、格納されるデータを生成した暗号鍵で暗号化する。したがって、ｎ−１個までのマスターシークレットの漏洩に対して、漏洩耐性を得ることができる。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００２８】
（１１）本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、Ｎ個の秘密鍵を生成する第１のステップ（例えば、図２のステップＳ１０１に相当）と、該Ｎ個の秘密鍵を前記プログラム内に隠蔽する第２のステップ（例えば、図２のステップＳ１０２に相当）と、乱数を生成する第３のステップ（例えば、図２のステップＳ１０３に相当）と、前記Ｎ個の秘密鍵と生成した乱数とから暗号鍵を生成する第４のステップ（例えば、図２のステップＳ１０４に相当）と、格納されるデータを該生成した暗号鍵で暗号化する第５のステップ（例えば、図２のステップＳ１０５に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００２９】
この発明によれば、Ｎ個の秘密鍵を生成し、生成したＮ個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、Ｎ個の秘密鍵と生成した乱数とから暗号鍵を生成する。そして、格納されるデータを生成した暗号鍵で暗号化する。したがって、Ｎ個の秘密鍵を生成するため、秘密鍵がＮ−１個漏洩しても耐性を有する。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００３０】
（１２）本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする第１のステップ（例えば、図４のステップＳ２０１に相当）と、該Ｎ個の秘密鍵を前記プログラム内に隠蔽する第２のステップ（例えば、図４のステップＳ２０２に相当）と、乱数を生成する第３のステップ（例えば、図４のステップＳ２０３に相当）と、前記Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第４のステップ（例えば、図４のステップＳ２０４に相当）と、格納されるデータを該生成した暗号鍵で暗号化する第５のステップ（例えば、図４のステップＳ２０５に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００３１】
この発明によれば、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする。このＮ個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とし、格納されるデータを生成した暗号鍵で暗号化する。したがって、Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするため、秘密鍵がｎ−１個漏洩しても耐性を有する。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００３２】
（１３）本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする第１のステップ（例えば、図６のステップＳ３０１に相当）と、該Ｎ個の秘密鍵を前記プログラム内に隠蔽する第２のステップ（例えば、図６のステップＳ３０２に相当）と、乱数を生成する第３のステップ（例えば、図６のステップＳ３０３に相当）と、前記Ｎ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成する第４のステップ（例えば、図６のステップＳ３０５に相当）と、格納されるデータを該生成した暗号鍵で暗号化する第５のステップ（例えば、図６のステップＳ３０６に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００３３】
この発明によれば、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする。このＮ個の秘密鍵を前記プログラム内に隠蔽する。さらに、乱数を生成し、Ｎ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成し、格納されるデータを生成した暗号鍵で暗号化する。したがって、暗号鍵生成手段がＮ個の秘密鍵のそれぞれに生成した乱数を乗じることにより、生成した暗号鍵を第３者からの攻撃に対して、秘匿化することができる。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００３４】
（１４）本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とする第１のステップ（例えば、図８のステップＳ４０１に相当）と、該Ｎ個の秘密鍵を前記プログラム内に隠蔽する第２のステップ（例えば、図８のステップＳ４０２に相当）と、乱数を生成する第３のステップ（例えば、図８のステップＳ４０３に相当）と、前記ｎ個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第４のステップ（例えば、図８のステップＳ４０４に相当）と、格納されるデータを該生成した暗号鍵で暗号化する第５のステップ（例えば、図８のステップＳ４０５に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００３５】
この発明によれば、暗号鍵のシードとなるマスターシークレットを生成し、生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とする。このＮ個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、ｎ個の情報からマスターシークレットを復元し、復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵として、格納されるデータを生成した暗号鍵で暗号化する。したがって、ｎ−１個までのマスターシークレットの漏洩に対して、漏洩耐性を得ることができる。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【発明の効果】
【００３６】
本発明によれば、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができるという効果がある。また、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができるという効果がある。
【図面の簡単な説明】
【００３７】
【図１】本発明の第１の実施形態に係るストレージ装置の構成を示す図である。
【図２】本発明の第１の実施形態に係るストレージ装置の処理を示す図である。
【図３】本発明の第２の実施形態に係るストレージ装置の構成を示す図である。
【図４】本発明の第２の実施形態に係るストレージ装置の処理を示す図である。
【図５】本発明の第３の実施形態に係るストレージ装置の構成を示す図である。
【図６】本発明の第３の実施形態に係るストレージ装置の処理を示す図である。
【図７】本発明の第４の実施形態に係るストレージ装置の構成を示す図である。
【図８】本発明の第４の実施形態に係るストレージ装置の処理を示す図である。
【発明を実施するための形態】
【００３８】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００３９】
＜第１の実施形態＞
図１および図２を用いて、本発明の第１の実施形態について説明する。
【００４０】
＜ストレージ装置の構成＞
本実施形態に係るストレージ装置は、図１に示すように、秘密鍵生成部１０１と、秘密鍵秘匿部１０２と、乱数生成部１０３と、暗号鍵生成部１０４と、データ格納部１０５と、暗号化部１０６とから構成されている。なお、各構成要素は、すべてソフトウェアで構成されている。
【００４１】
ここで、秘密鍵生成部１０１は、Ｎ個の秘密鍵を生成する。秘密鍵秘匿部１０２は、秘密鍵生成部１０１が生成したＮ個の秘密鍵をプログラム内に隠蔽する。乱数生成部１０３は、乱数を生成する。
【００４２】
暗号鍵生成部１０４は、秘密鍵生成部１０１が生成したＮ個の秘密鍵と乱数生成部１０３が生成した乱数とから暗号鍵を生成する。なお、暗号鍵生成部１０４は、暗号化処理ごとに異なる暗号鍵を生成するようにしてもよい。データ格納部１０５は、暗号化の対象となるデータを格納する。暗号化部１０６は、データ格納部１０５に格納されるデータを暗号鍵生成部１０４が生成した暗号鍵で暗号化する。
【００４３】
＜ストレージ装置の処理＞
図２を用いて、本実施形態に係るストレージ装置の処理について説明する。
【００４４】
まず、秘密鍵生成部１０１は、Ｎ個の秘密鍵を生成する（ステップＳ１０１）。秘密鍵秘匿部１０２は、生成したＮ個の秘密鍵をプログラム内に隠蔽する（ステップＳ１０２）。次に、乱数生成部１０３は、乱数を生成し（ステップＳ１０３）、暗号鍵生成部１０４がＮ個の秘密鍵と生成した乱数とから暗号鍵を生成する（ステップＳ１０４）。そして、データ格納部１０５に格納されるデータを暗号化部１０６が、生成された暗号鍵で暗号化する（ステップＳ１０５）。
【００４５】
したがって、本実施形態によれば、Ｎ個の秘密鍵を生成するため、秘密鍵がＮ−１個漏洩しても耐性を有する。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００４６】
＜第２の実施形態＞
図３および図４を用いて、本発明の第２の実施形態について説明する。
【００４７】
＜ストレージ装置の構成＞
本実施形態に係るストレージ装置は、図３に示すように、秘密鍵生成部２０１と、秘密鍵秘匿部１０２と、乱数生成部１０３と、暗号鍵生成部２０４と、データ格納部１０５と、暗号化部２０６と、インデックス付与部２０７とから構成されている。なお、各構成要素は、すべてソフトウェアで構成されている。また、第１の実施形態と同様の符号を付す構成要素については、同様の機能を有するため、その詳細な説明は省略する。
【００４８】
ここで、秘密鍵生成部２０１は、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする。暗号鍵生成部２０４は、Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする。なお、暗号鍵生成部２０４は、暗号化処理ごとに異なる暗号鍵を生成するようにしてもよい。
【００４９】
暗号化部２０６は、データ格納部１０５に格納されるデータを暗号鍵生成部２０４が生成した暗号鍵で暗号化する。インデックス付与部２０７は、使用した乱数と使用した秘密鍵のインデックス情報をデータに付与する。
【００５０】
＜ストレージ装置の処理＞
図４を用いて、本実施形態に係るストレージ装置の処理について説明する。
【００５１】
まず、秘密鍵生成部１０１は、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする（ステップＳ２０１）。秘密鍵秘匿部１０２は、生成したＮ個の秘密鍵をプログラム内に隠蔽する（ステップＳ２０２）。
【００５２】
次に、乱数生成部１０３は、乱数を生成し（ステップＳ２０３）、暗号鍵生成部２０４がＮ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする（ステップＳ２０４）。そして、データ格納部１０５に格納されるデータを暗号化部２０６が、生成された暗号鍵で暗号化する（ステップＳ２０５）。
【００５３】
したがって、本実施形態によれば、Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするため、秘密鍵がｎ−１個漏洩しても耐性を有する。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００５４】
＜第３の実施形態＞
図５および図６を用いて、本発明の第３の実施形態について説明する。
【００５５】
＜ストレージ装置の構成＞
本実施形態に係るストレージ装置は、図５に示すように、秘密鍵生成部２０１と、秘密鍵秘匿部１０２と、乱数生成部１０３と、暗号鍵生成部３０４と、データ格納部１０５と、暗号化部３０６と、インデックス付与部２０７とから構成されている。なお、各構成要素は、すべてソフトウェアで構成されている。また、第１の実施形態または第２の実施形態と同様の符号を付す構成要素については、同様の機能を有するため、その詳細な説明は省略する。
【００５６】
ここで、暗号鍵生成部３０４は、Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする。なお、暗号鍵生成部２０４は、暗号化処理ごとに異なる暗号鍵を生成するようにしてもよい。暗号化部２０６は、データ格納部１０５に格納されるデータを暗号鍵生成部２０４が生成した暗号鍵で暗号化する。
【００５７】
＜ストレージ装置の処理＞
図６を用いて、本実施形態に係るストレージ装置の処理について説明する。
【００５８】
まず、秘密鍵生成部１０１は、鍵長Ｌと鍵の個数Ｎとを入力し、長さＬの乱数をＮ個生成して、これを秘密鍵とする（ステップＳ２０１）。秘密鍵秘匿部１０２は、生成したＮ個の秘密鍵をプログラム内に隠蔽する（ステップＳ２０２）。
【００５９】
次に、乱数生成部１０３は、乱数を生成し（ステップＳ２０３）、暗号鍵生成部２０４がＮ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする（ステップＳ２０４）。そして、データ格納部１０５に格納されるデータを暗号化部２０６が、生成された暗号鍵で暗号化する（ステップＳ２０５）。
【００６０】
したがって、本実施形態によれば、Ｎ個の秘密鍵のうちｎ個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするため、秘密鍵がｎ−１個漏洩しても耐性を有する。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００６１】
＜第４の実施形態＞
図７および図８を用いて、本発明の第４の実施形態について説明する。
【００６２】
＜ストレージ装置の構成＞
本実施形態に係るストレージ装置は、図７に示すように、秘密鍵生成部４０１と、秘密鍵秘匿部１０２と、乱数生成部１０３と、暗号鍵生成部４０４と、データ格納部１０５と、暗号化部４０６とから構成されている。なお、各構成要素は、すべてソフトウェアで構成されている。また、第１の実施形態と同様の符号を付す構成要素については、同様の機能を有するため、その詳細な説明は省略する。
【００６３】
ここで、秘密鍵生成部４０１は、暗号鍵のシードとなるマスターシークレットを生成し、生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とする。
【００６４】
暗号鍵生成部４０４は、ｎ個の情報からマスターシークレットを復元し、復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする。なお、暗号鍵生成部４０４は、暗号化処理ごとに異なる暗号鍵を生成するようにしてもよい。
【００６５】
暗号化部４０６は、データ格納部１０５に格納されるデータを暗号鍵生成部４０４が生成した暗号鍵で暗号化する。
【００６６】
＜ストレージ装置の処理＞
図８を用いて、本実施形態に係るストレージ装置の処理について説明する。
【００６７】
まず、秘密鍵生成部４０１は、暗号鍵のシードとなるマスターシークレットを生成し、生成したマスターシークレットをｎ（Ｎ＞ｎ）個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりＮ個に分割し、これを秘密鍵とする（ステップＳ４０１）。秘密鍵秘匿部１０２は、生成したＮ個の秘密鍵をプログラム内に隠蔽する（ステップＳ４０２）。
【００６８】
次に、乱数生成部１０３は、乱数を生成し（ステップＳ４０３）、暗号鍵生成部４０４は、ｎ個の情報からマスターシークレットを復元し、復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする（ステップＳ４０４）。そして、データ格納部１０５に格納されるデータを暗号化部４０６が、生成された暗号鍵で暗号化する（ステップＳ４０５）。
【００６９】
したがって、本実施形態によれば、ｎ−１個までのマスターシークレットの漏洩に対して、漏洩耐性を得ることができる。また、耐タンパデバイスやＯＳの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。
【００７０】
なお、ストレージ装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをストレージ装置に読み込ませ、実行することによって本発明のストレージ装置を実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【００７１】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００７２】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００７３】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００７４】
１０１；秘密鍵生成部
１０２；秘密鍵秘匿部
１０３；乱数生成部
１０４；暗号鍵生成部
１０５；データ格納部
１０６；暗号化部
２０１；秘密鍵生成部
２０４；暗号鍵生成部
２０６；暗号化部
２０７；インデックス付与部
３０４；暗号鍵生成部
３０６；暗号化部
４０１；秘密鍵生成部
４０４；暗号鍵生成部
４０６；暗号化部
【図１】
0005713693.tif 000002
【図２】
0005713693.tif 000003
【図３】
0005713693.tif 000004
【図４】
0005713693.tif 000005
【図５】
0005713693.tif 000006
【図６】
0005713693.tif 000007
【図７】
0005713693.tif 000008
【図８】
0005713693.tif 000009