ソフトウェアのみで構成されるストレージ装置であって、N個の秘密鍵を生成する秘密鍵生成手段と、該N個の秘密鍵を前記プログラム内に隠蔽する隠蔽手段と、乱数を生成する乱数生成手段と、前記N個の秘密鍵と生成した乱数とから暗号鍵を生成する暗号鍵生成手段と、格納されるデータを該生成した暗号鍵で暗号化する暗号化手段と、を備えたことを特徴とするストレージ装置。前記秘密鍵生成手段が、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とし、前記暗号鍵生成手段が前記N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とする請求項1に記載のストレージ装置。前記使用した乱数と使用した秘密鍵のインデックス情報をデータに付与するインデックス情報付与手段を備えたことを特徴とする請求項2に記載のストレージ装置。前記秘密鍵生成手段が、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とし、前記暗号鍵生成手段が前記N個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成することを特徴とする請求項1に記載のストレージ装置。前記秘密鍵生成手段が、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とし、前記暗号鍵生成手段が前記n個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とする請求項1に記載のストレージ装置。前記暗号鍵生成手段が、暗号化処理ごとに異なる暗号鍵を生成することを特徴とする請求項1から請求項5のいずれかに記載のストレージ装置。ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、N個の秘密鍵を生成する第1のステップと、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップと、乱数を生成する第3のステップと、前記N個の秘密鍵と生成した乱数とから暗号鍵を生成する第4のステップと、格納されるデータを該生成した暗号鍵で暗号化する第5のステップと、を備えたことを特徴とするストレージ方法。ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする第1のステップと、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップと、乱数を生成する第3のステップと、前記N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第4のステップと、格納されるデータを該生成した暗号鍵で暗号化する第5のステップと、を備えたことを特徴とするストレージ方法。ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする第1のステップと、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップと、乱数を生成する第3のステップと、前記N個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成する第4のステップと、格納されるデータを該生成した暗号鍵で暗号化する第5のステップと、を備えたことを特徴とするストレージ方法。ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とする第1のステップと、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップと、乱数を生成する第3のステップと、前記n個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第4のステップと、格納されるデータを該生成した暗号鍵で暗号化する第5のステップと、を備えたことを特徴とするストレージ方法。ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、N個の秘密鍵を生成する第1のステップと、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップと、乱数を生成する第3のステップと、前記N個の秘密鍵と生成した乱数とから暗号鍵を生成する第4のステップと、格納されるデータを該生成した暗号鍵で暗号化する第5のステップと、をコンピュータに実行させるためのプログラム。ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする第1のステップと、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップと、乱数を生成する第3のステップと、前記N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第4のステップと、格納されるデータを該生成した暗号鍵で暗号化する第5のステップと、をコンピュータに実行させるためのプログラム。ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする第1のステップと、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップと、乱数を生成する第3のステップと、前記N個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成する第4のステップと、格納されるデータを該生成した暗号鍵で暗号化する第5のステップと、をコンピュータに実行させるためのプログラム。ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とする第1のステップと、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップと、乱数を生成する第3のステップと、前記n個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第4のステップと、格納されるデータを該生成した暗号鍵で暗号化する第5のステップと、をコンピュータに実行させるためのプログラム。一方、近年、オープンプラットフォームでのセキュリティ確保が重要な課題となっている。このようなオープンプラットフォーム環境では、耐タンパデバイスが必ずしも利用できる訳ではなく、ソフトウェアのみでセキュリティ確保が必要となり、秘密情報を格納するセキュアストレージも、ソフトウェアのみで構成しなければならない。また、セキュアストレージに対しては、サイドチャネル攻撃が想定され、そのような攻撃に対して耐性を持つ方式が必要である。そこで、本発明は、上述の課題に鑑みてなされたものであり、耐タンパデバイスやOSの特殊な領域を使用すること無しに、暗号学的に安全、かつ効率的なストレージ装置、ストレージ方法およびプログラムを提供することを目的とする。本発明は、上記の課題を解決するために、以下の事項を提案している。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。1本発明は、ソフトウェアのみで構成されるストレージ装置であって、N個の秘密鍵を生成する秘密鍵生成手段例えば、図1の秘密鍵生成部101に相当と、該N個の秘密鍵を前記プログラム内に隠蔽する隠蔽手段例えば、図1の秘密鍵秘匿部102に相当と、乱数を生成する乱数生成手段例えば、図1の乱数生成部103に相当と、前記N個の秘密鍵と生成した乱数とから暗号鍵を生成する暗号鍵生成手段例えば、図1の暗号鍵生成部104に相当と、格納されるデータを該生成した暗号鍵で暗号化する暗号化手段例えば、図1の暗号化部106に相当と、を備えたことを特徴とするストレージ装置を提案している。この発明によれば、秘密鍵生成手段は、N個の秘密鍵を生成する。隠蔽手段は、N個の秘密鍵をプログラム内に隠蔽する。乱数生成手段は、乱数を生成する。暗号鍵生成手段は、N個の秘密鍵と生成した乱数とから暗号鍵を生成する。暗号化手段は、格納されるデータを生成した暗号鍵で暗号化する。したがって、鍵生成手段が、N個の秘密鍵を生成するため、秘密鍵がN-1個漏洩しても耐性を有する。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。2本発明は、1のストレージ装置について、前記秘密鍵生成手段例えば、図3の秘密鍵生成部201に相当が、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とし、前記暗号鍵生成手段例えば、図3の暗号鍵生成部204に相当が前記N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とするストレージ装置を提案している。この発明によれば、秘密鍵生成手段が、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とし、暗号鍵生成手段がN個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする。したがって、暗号鍵生成手段がN個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするため、さらにセキュリティ能力を向上させることができる。3本発明は、2のストレージ装置について、前記使用した乱数と使用した秘密鍵のインデックス情報をデータに付与するインデックス情報付与手段例えば、図3のインデックス付与部207に相当を備えたことを特徴とするストレージ装置を提案している。この発明によれば、インデックス情報付与手段は、使用した乱数と使用した秘密鍵のインデックス情報をデータに付与する。したがって、これにより、N個の秘密鍵のうち、どのn個の秘密鍵を用いたのかを明確に把握することができる。4本発明は、1のストレージ装置について、前記秘密鍵生成手段例えば、図5の秘密鍵生成部201に相当が、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とし、前記暗号鍵生成手段例えば、図5の暗号鍵生成部304に相当が前記N個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成することを特徴とするストレージ装置を提案している。この発明によれば、秘密鍵生成手段が、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とし、暗号鍵生成手段がN個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成する。したがって、暗号鍵生成手段がN個の秘密鍵のそれぞれに生成した乱数を乗じることにより、生成した暗号鍵を第3者からの攻撃に対して、秘匿化することができる。5本発明は、1のストレージ装置について、前記秘密鍵生成手段例えば、図7の秘密鍵生成部401に相当が、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とし、前記暗号鍵生成手段例えば、図7の暗号鍵生成部404に相当が前記n個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とすることを特徴とするストレージ装置を提案している。この発明によれば、秘密鍵生成手段が、暗号鍵のシードとなるマスターシークレットを生成し、生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とし、暗号鍵生成手段がn個の情報からマスターシークレットを復元し、復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする。したがって、n-1個までのマスターシークレットの漏洩に対して、漏洩耐性を得ることができる。6本発明は、1から5のストレージ装置について、前記暗号鍵生成手段例えば、図1の暗号鍵生成部104、図3の暗号鍵生成部204、図5の暗号鍵生成部304、図7の暗号鍵生成部404に相当が、暗号化処理ごとに異なる暗号鍵を生成することを特徴とするストレージ装置を提案している。この発明によれば、暗号鍵生成手段が、暗号化処理ごとに異なる暗号鍵を生成する。したがって、暗号化に使用する鍵が暗号化ごとに異なるため、さらに、第三者の攻撃に対して、耐性を持つことができる。7本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、N個の秘密鍵を生成する第1のステップ例えば、図2のステップS101に相当と、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップ例えば、図2のステップS102に相当と、乱数を生成する第3のステップ例えば、図2のステップS103に相当と、前記N個の秘密鍵と生成した乱数とから暗号鍵を生成する第4のステップ例えば、図2のステップS104に相当と、格納されるデータを該生成した暗号鍵で暗号化する第5のステップ例えば、図2のステップS105に相当と、を備えたことを特徴とするストレージ方法を提案している。この発明によれば、N個の秘密鍵を生成し、生成したN個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、N個の秘密鍵と生成した乱数とから暗号鍵を生成する。そして、格納されるデータを生成した暗号鍵で暗号化する。したがって、N個の秘密鍵を生成するため、秘密鍵がN-1個漏洩しても耐性を有する。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。8本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする第1のステップ例えば、図4のステップS201に相当と、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップ例えば、図4のステップS202に相当と、乱数を生成する第3のステップ例えば、図4のステップS203に相当と、前記N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第4のステップ例えば、図4のステップS204に相当と、格納されるデータを該生成した暗号鍵で暗号化する第5のステップ例えば、図4のステップS205に相当と、を備えたことを特徴とするストレージ方法を提案している。この発明によれば、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする。このN個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とし、格納されるデータを生成した暗号鍵で暗号化する。したがって、N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするため、秘密鍵がn-1個漏洩しても耐性を有する。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。9本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする第1のステップ例えば、図6のステップS301に相当と、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップ例えば、図6のステップS302に相当と、乱数を生成する第3のステップ例えば、図6のステップS303に相当と、前記N個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成する第4のステップ例えば、図6のステップS305に相当と、格納されるデータを該生成した暗号鍵で暗号化する第5のステップ例えば、図6のステップS306に相当と、を備えたことを特徴とするストレージ方法を提案している。この発明によれば、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする。このN個の秘密鍵を前記プログラム内に隠蔽する。さらに、乱数を生成し、N個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成し、格納されるデータを生成した暗号鍵で暗号化する。したがって、暗号鍵生成手段がN個の秘密鍵のそれぞれに生成した乱数を乗じることにより、生成した暗号鍵を第3者からの攻撃に対して、秘匿化することができる。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。10本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法であって、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とする第1のステップ例えば、図8のステップS401に相当と、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップ例えば、図8のステップS402に相当と、乱数を生成する第3のステップ例えば、図8のステップS403に相当と、前記n個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第4のステップ例えば、図8のステップS404に相当と、格納されるデータを該生成した暗号鍵で暗号化する第5のステップ例えば、図8のステップS405に相当と、を備えたことを特徴とするストレージ方法を提案している。この発明によれば、暗号鍵のシードとなるマスターシークレットを生成し、生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とする。このN個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、n個の情報からマスターシークレットを復元し、復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵として、格納されるデータを生成した暗号鍵で暗号化する。したがって、n-1個までのマスターシークレットの漏洩に対して、漏洩耐性を得ることができる。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。11本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、N個の秘密鍵を生成する第1のステップ例えば、図2のステップS101に相当と、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップ例えば、図2のステップS102に相当と、乱数を生成する第3のステップ例えば、図2のステップS103に相当と、前記N個の秘密鍵と生成した乱数とから暗号鍵を生成する第4のステップ例えば、図2のステップS104に相当と、格納されるデータを該生成した暗号鍵で暗号化する第5のステップ例えば、図2のステップS105に相当と、をコンピュータに実行させるためのプログラムを提案している。この発明によれば、N個の秘密鍵を生成し、生成したN個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、N個の秘密鍵と生成した乱数とから暗号鍵を生成する。そして、格納されるデータを生成した暗号鍵で暗号化する。したがって、N個の秘密鍵を生成するため、秘密鍵がN-1個漏洩しても耐性を有する。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。12本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする第1のステップ例えば、図4のステップS201に相当と、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップ例えば、図4のステップS202に相当と、乱数を生成する第3のステップ例えば、図4のステップS203に相当と、前記N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第4のステップ例えば、図4のステップS204に相当と、格納されるデータを該生成した暗号鍵で暗号化する第5のステップ例えば、図4のステップS205に相当と、をコンピュータに実行させるためのプログラムを提案している。この発明によれば、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする。このN個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とし、格納されるデータを生成した暗号鍵で暗号化する。したがって、N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするため、秘密鍵がn-1個漏洩しても耐性を有する。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。13本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする第1のステップ例えば、図6のステップS301に相当と、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップ例えば、図6のステップS302に相当と、乱数を生成する第3のステップ例えば、図6のステップS303に相当と、前記N個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成する第4のステップ例えば、図6のステップS305に相当と、格納されるデータを該生成した暗号鍵で暗号化する第5のステップ例えば、図6のステップS306に相当と、をコンピュータに実行させるためのプログラムを提案している。この発明によれば、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする。このN個の秘密鍵を前記プログラム内に隠蔽する。さらに、乱数を生成し、N個の秘密鍵のそれぞれに生成した乱数を乗じることにより、暗号鍵を生成し、格納されるデータを生成した暗号鍵で暗号化する。したがって、暗号鍵生成手段がN個の秘密鍵のそれぞれに生成した乱数を乗じることにより、生成した暗号鍵を第3者からの攻撃に対して、秘匿化することができる。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。14本発明は、ソフトウェアのみで構成されるストレージ装置のストレージ方法をコンピュータに実行させるためのプログラムであって、暗号鍵のシードとなるマスターシークレットを生成し、該生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とする第1のステップ例えば、図8のステップS401に相当と、該N個の秘密鍵を前記プログラム内に隠蔽する第2のステップ例えば、図8のステップS402に相当と、乱数を生成する第3のステップ例えば、図8のステップS403に相当と、前記n個の情報からマスターシークレットを復元し、該復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする第4のステップ例えば、図8のステップS404に相当と、格納されるデータを該生成した暗号鍵で暗号化する第5のステップ例えば、図8のステップS405に相当と、をコンピュータに実行させるためのプログラムを提案している。この発明によれば、暗号鍵のシードとなるマスターシークレットを生成し、生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とする。このN個の秘密鍵をプログラム内に隠蔽する。さらに、乱数を生成し、n個の情報からマスターシークレットを復元し、復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵として、格納されるデータを生成した暗号鍵で暗号化する。したがって、n-1個までのマスターシークレットの漏洩に対して、漏洩耐性を得ることができる。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。本発明によれば、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができるという効果がある。また、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができるという効果がある。以下、本発明の実施形態について、図面を用いて、詳細に説明する。なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。<第1の実施形態>図1および図2を用いて、本発明の第1の実施形態について説明する。<ストレージ装置の構成>本実施形態に係るストレージ装置は、図1に示すように、秘密鍵生成部101と、秘密鍵秘匿部102と、乱数生成部103と、暗号鍵生成部104と、データ格納部105と、暗号化部106とから構成されている。なお、各構成要素は、すべてソフトウェアで構成されている。ここで、秘密鍵生成部101は、N個の秘密鍵を生成する。秘密鍵秘匿部102は、秘密鍵生成部101が生成したN個の秘密鍵をプログラム内に隠蔽する。乱数生成部103は、乱数を生成する。暗号鍵生成部104は、秘密鍵生成部101が生成したN個の秘密鍵と乱数生成部103が生成した乱数とから暗号鍵を生成する。なお、暗号鍵生成部104は、暗号化処理ごとに異なる暗号鍵を生成するようにしてもよい。データ格納部105は、暗号化の対象となるデータを格納する。暗号化部106は、データ格納部105に格納されるデータを暗号鍵生成部104が生成した暗号鍵で暗号化する。<ストレージ装置の処理>図2を用いて、本実施形態に係るストレージ装置の処理について説明する。まず、秘密鍵生成部101は、N個の秘密鍵を生成するステップS101。秘密鍵秘匿部102は、生成したN個の秘密鍵をプログラム内に隠蔽するステップS102。次に、乱数生成部103は、乱数を生成しステップS103、暗号鍵生成部104がN個の秘密鍵と生成した乱数とから暗号鍵を生成するステップS104。そして、データ格納部105に格納されるデータを暗号化部106が、生成された暗号鍵で暗号化するステップS105。したがって、本実施形態によれば、N個の秘密鍵を生成するため、秘密鍵がN-1個漏洩しても耐性を有する。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。<第2の実施形態>図3および図4を用いて、本発明の第2の実施形態について説明する。<ストレージ装置の構成>本実施形態に係るストレージ装置は、図3に示すように、秘密鍵生成部201と、秘密鍵秘匿部102と、乱数生成部103と、暗号鍵生成部204と、データ格納部105と、暗号化部206と、インデックス付与部207とから構成されている。なお、各構成要素は、すべてソフトウェアで構成されている。また、第1の実施形態と同様の符号を付す構成要素については、同様の機能を有するため、その詳細な説明は省略する。ここで、秘密鍵生成部201は、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とする。暗号鍵生成部204は、N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする。なお、暗号鍵生成部204は、暗号化処理ごとに異なる暗号鍵を生成するようにしてもよい。暗号化部206は、データ格納部105に格納されるデータを暗号鍵生成部204が生成した暗号鍵で暗号化する。インデックス付与部207は、使用した乱数と使用した秘密鍵のインデックス情報をデータに付与する。<ストレージ装置の処理>図4を用いて、本実施形態に係るストレージ装置の処理について説明する。まず、秘密鍵生成部101は、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とするステップS201。秘密鍵秘匿部102は、生成したN個の秘密鍵をプログラム内に隠蔽するステップS202。次に、乱数生成部103は、乱数を生成しステップS203、暗号鍵生成部204がN個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするステップS204。そして、データ格納部105に格納されるデータを暗号化部206が、生成された暗号鍵で暗号化するステップS205。したがって、本実施形態によれば、N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするため、秘密鍵がn-1個漏洩しても耐性を有する。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。<第3の実施形態>図5および図6を用いて、本発明の第3の実施形態について説明する。<ストレージ装置の構成>本実施形態に係るストレージ装置は、図5に示すように、秘密鍵生成部201と、秘密鍵秘匿部102と、乱数生成部103と、暗号鍵生成部304と、データ格納部105と、暗号化部306と、インデックス付与部207とから構成されている。なお、各構成要素は、すべてソフトウェアで構成されている。また、第1の実施形態または第2の実施形態と同様の符号を付す構成要素については、同様の機能を有するため、その詳細な説明は省略する。ここで、暗号鍵生成部304は、N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする。なお、暗号鍵生成部204は、暗号化処理ごとに異なる暗号鍵を生成するようにしてもよい。暗号化部206は、データ格納部105に格納されるデータを暗号鍵生成部204が生成した暗号鍵で暗号化する。<ストレージ装置の処理>図6を用いて、本実施形態に係るストレージ装置の処理について説明する。まず、秘密鍵生成部101は、鍵長Lと鍵の個数Nとを入力し、長さLの乱数をN個生成して、これを秘密鍵とするステップS201。秘密鍵秘匿部102は、生成したN個の秘密鍵をプログラム内に隠蔽するステップS202。次に、乱数生成部103は、乱数を生成しステップS203、暗号鍵生成部204がN個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするステップS204。そして、データ格納部105に格納されるデータを暗号化部206が、生成された暗号鍵で暗号化するステップS205。したがって、本実施形態によれば、N個の秘密鍵のうちn個の秘密鍵と生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするため、秘密鍵がn-1個漏洩しても耐性を有する。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。<第4の実施形態>図7および図8を用いて、本発明の第4の実施形態について説明する。<ストレージ装置の構成>本実施形態に係るストレージ装置は、図7に示すように、秘密鍵生成部401と、秘密鍵秘匿部102と、乱数生成部103と、暗号鍵生成部404と、データ格納部105と、暗号化部406とから構成されている。なお、各構成要素は、すべてソフトウェアで構成されている。また、第1の実施形態と同様の符号を付す構成要素については、同様の機能を有するため、その詳細な説明は省略する。ここで、秘密鍵生成部401は、暗号鍵のシードとなるマスターシークレットを生成し、生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とする。暗号鍵生成部404は、n個の情報からマスターシークレットを復元し、復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とする。なお、暗号鍵生成部404は、暗号化処理ごとに異なる暗号鍵を生成するようにしてもよい。暗号化部406は、データ格納部105に格納されるデータを暗号鍵生成部404が生成した暗号鍵で暗号化する。<ストレージ装置の処理>図8を用いて、本実施形態に係るストレージ装置の処理について説明する。まず、秘密鍵生成部401は、暗号鍵のシードとなるマスターシークレットを生成し、生成したマスターシークレットをnN>n個の情報が集まれば、マスターシークレットを復元できる閾値秘密分散法によりN個に分割し、これを秘密鍵とするステップS401。秘密鍵秘匿部102は、生成したN個の秘密鍵をプログラム内に隠蔽するステップS402。次に、乱数生成部103は、乱数を生成しステップS403、暗号鍵生成部404は、n個の情報からマスターシークレットを復元し、復元したマスターシークレットと生成した乱数とをハッシュ関数に入力して、その出力を暗号鍵とするステップS404。そして、データ格納部105に格納されるデータを暗号化部406が、生成された暗号鍵で暗号化するステップS405。したがって、本実施形態によれば、n-1個までのマスターシークレットの漏洩に対して、漏洩耐性を得ることができる。また、耐タンパデバイスやOSの特殊な領域を用いることなく、暗号学的に安全、かつ効率的なストレージ装置を構成することができる。さらに、ソフトウェアのみで構成されるため、オープンプラットフォームにおいても十分なセキュリティを確保することができる。なお、ストレージ装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをストレージ装置に読み込ませ、実行することによって本発明のストレージ装置を実現することができる。ここでいうコンピュータシステムとは、OSや周辺装置等のハードウェアを含む。また、コンピュータシステムは、WWWWorldWideWebシステムを利用している場合であれば、ホームページ提供環境あるいは表示環境も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する伝送媒体は、インターネット等のネットワーク通信網や電話回線等の通信回線通信線のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル差分プログラムであっても良い。以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。