(57)【特許請求の範囲】
【請求項１】
顧客データの安全を確保するためにコンピュータにより実施される方法であって、
装置により、第２の記憶領域に暗号化された第２のキーフラグメントを格納するステップであって、暗号化された第１のキーフラグメントは前記第２の記憶領域と異なる第１の記憶領域に格納され、さらに、前記第１の記憶領域および前記第２の記憶領域へのアクセスが相互に排他的であり、前記第１のキーフラグメントは前記暗号化された第１のキーフラグメントへのアクセスを有する顧客に固有であるステップと、
前記装置により、前記顧客と通信するアプリケーションサーバから、新しいマスターキーを導出する要求を受信するステップであって、前記要求は、前記暗号化された第２のキーフラグメントを格納した後に受信される、ステップと、
前記装置により、前記アプリケーションサーバから、前記暗号化された第１のキーフラグメントを受信するステップと、
前記装置により、前記第２の記憶領域から、前記暗号化された第２のキーフラグメントを受信するステップと、
前記装置により、ハードウェアセキュリティモジュール（ＨＳＭ）を使用して前記暗号化された第１のキーフラグメントおよび前記暗号化された第２のキーフラグメントを復号して、復号された第１のキーフラグメントおよび復号された第２のキーフラグメントを生成するステップと、
前記装置により、前記復号された第１のキーフラグメントおよび前記復号された第２のキーフラグメントを使用して前記マスターキーを導出するステップであって、前記導出するステップは、前記復号された第１のキーフラグメントを変更し、次に前記変更された復号された第１のキーフラグメント及び前記復号された第２のキーフラグメントを結合するステップを含み、前記新しいマスターキーは前記顧客に固有である、ステップと、
前記装置により、前記導出した新しいマスターキーを要求側のアプリケーションサーバへ送信するステップであって、前記マスターキーは前記アプリケーションサーバのインメモリキャッシュに格納され、前記アプリケーションサーバが前記アプリケーションサーバに格納された顧客データを暗号化できるようにするステップと、
を含む方法。
【請求項２】
前記暗号化された第１のキーフラグメントおよび前記暗号化された第２のキーフラグメントが、プライベートキーおよび対称キーを含むキーセットを使用してさらに復号され、前記プライベートキーは前記対称キーを用いて予め暗号化され、前記ＨＳＭがＨＳＭパブリックキーおよびＨＳＭプライベートキーを含み、前記対称キーは前記ＨＳＭパブリックキーを用いて予め暗号化される、請求項１に記載の方法。
【請求項３】
前記ＨＳＭプライベートキーを使用して前記暗号化された対称キーを復号して、復号された対称キーを生成するステップと、
前記復号された対称キーを使用して前記暗号化されたプライベートキーを復号して、復号されたプライベートキーを生成するステップと、をさらに含む、請求項２に記載の方法。
【請求項４】
前記暗号化された第１のキーフラグメントおよび前記暗号化された第２のキーフラグメントが、前記キーセットを用いて復号される、請求項３に記載の方法。
【請求項５】
前記装置が、前記第１のキーフラグメントおよび前記第２のキーフラグメントを、乱数発生器を使用して生成するステップと、
前記装置が、前記暗号化された対称キーおよび前記暗号化されたプライベートキーを、前記第２の記憶領域に格納するステップと、
をさらに含む請求項４に記載の方法。
【請求項６】
前記第１のキーフラグメントを、前記顧客データに関連付けられた顧客に関連付けられた第２の装置を用いて生成するステップ、を更に含む請求項５に記載の方法。
【請求項７】
前記装置により、前記顧客データを暗号化する、または暗号化された顧客データを復号するため、前記マスターキーを使用するステップ、をさらに含む請求項５に記載の方法。
【請求項８】
複数のキーセットがあり、各キーセットが、前記キーセットに固有の、プライベートキー、対称キー、およびキーフラグメントを含み、前記装置は、特定のキーセットの前記キーフラグメントを、前記第２のキーフラグメントとして使用する、請求項５に記載の方法。
【請求項９】
顧客データの安全を確保するための装置であって、
１つまたは複数のプロセッサと、
複数の命令を格納した非一時的コンピュータ可読媒体と、
を含み、前記命令は実行されると前記１つまたは複数のプロセッサに、
暗号化された第２のキーフラグメントを第２の記憶領域に格納させ、暗号化された第１のキーフラグメントは前記第２の記憶領域と異なる第１の記憶領域に格納され、更に、前記第１の記憶領域及び前記第２の記憶領域へのアクセスは、相互に排他的であり、前記第１のキーフラグメントは前記暗号化された第１のキーフラグメントへのアクセスを有する顧客に固有であり、
前記顧客と通信するアプリケーションサーバから、新しいマスターキーを導出する要求を受信させ、前記要求は、前記暗号化された第２のキーフラグメントを格納した後に受信され、
前記アプリケーションサーバから、前記暗号化された第１のキーフラグメントを受信させ、
前記第２の記憶領域から前記暗号化された第２のキーフラグメントを読み出させ、
ハードウェアセキュリティモジュール（ＨＳＭ）を使用して前記暗号化された第１のキーフラグメントおよび前記暗号化された第２のキーフラグメントを復号させて、復号された第１のキーフラグメントおよび復号された第２のキーフラグメントを生成させ、
前記復号された第１のキーフラグメントおよび前記復号された第２のキーフラグメントを使用して前記マスターキーを導出させ、前記の導出は、前記復号された第１のキーフラグメントを変更させ、次に前記変更された復号された第１のキーフラグメント及び前記復号された第２のキーフラグメントを結合させることを含み、前記新しいマスターキーは前記顧客に固有であり、
前記導出した新しいマスターキーを、前記要求側のアプリケーションサーバへ送信させ、前記マスターキーは、前記アプリケーションサーバのインメモリキャッシュに格納され、前記アプリケーションサーバが前記アプリケーションサーバに格納された顧客データを暗号化できるようにする、装置。
【請求項１０】
前記暗号化された第１のキーフラグメントおよび前記暗号化された第２のキーフラグメントが、さらに、（ａ）ＨＳＭプライベートキーを使用してキーセットに関連付けられた暗号化された対称キーを復号して、復号された対称キーを生成することであって、前記暗号化された対称キーは、ＨＳＭパブリックキーを使用して予め暗号化されていること、および（ｂ）前記復号された対称キーを使用して前記キーセットに関連付けられた暗号化されたプライベートキーを復号して、復号されたプライベートキーを生成することであって、前記暗号化されたプライベートキーは、前記対称キーを使用して予め暗号化されていること、により復号される、請求項９に記載の装置。
【請求項１１】
前記暗号化された第１のキーフラグメントおよび前記暗号化された第２のキーフラグメントが、前記キーセットに関連付けられた前記復号されたプライベートキーを使用して復号される、請求項１０に記載の装置。
【請求項１２】
前記第１のキーフラグメントが、前記第１の記憶領域に関連付けられた第１のサーバコンピューティングシステムの乱数発生器を使用して生成され、前記第２のキーフラグメントが、前記第１のサーバコンピューティングシステムに結合され、前記第２の記憶領域に関連付けられた第２のサーバコンピューティングシステムの乱数発生器を使用して生成され、前記暗号化された対称キーおよび前記暗号化されたプライベートキーが、前記第２の記憶領域に格納される、請求項１１に記載の装置。
【請求項１３】
前記第１のキーフラグメントが、前記顧客データに関連付けられた顧客によって生成される、請求項１２に記載の装置。
【請求項１４】
前記マスターキーが、前記顧客データを暗号化する、または暗号化された顧客データ復号するために使用される、請求項１２に記載の装置。
【請求項１５】
複数のキーセットがあり、各キーセットが、前記キーセットに固有の、プライベートキー、対称キー、およびキーフラグメントを含み、特定のキーセットの前記キーフラグメントが、前記第２のキーフラグメントとして使用される、請求項１４に記載の装置。
【請求項１６】
コンピュータ可読プログラムコードを含むコンピュータプログラムプロダクトであって、前記コンピュータ可読プログラムコードは非一時的コンピュータ可読媒体から読み出されると１つまたは複数のプロセッサにより実行され、前記プログラムコードは、
暗号化された第２のキーフラグメントを第２の記憶領域に格納し、暗号化された第１のキーフラグメントは前記第２の記憶領域と異なる第１の記憶領域に格納され、更に、前記第１の記憶領域及び前記第２の記憶領域へのアクセスは、相互に排他的であり、前記第１のキーフラグメントは前記暗号化された第１のキーフラグメントへのアクセスを有する顧客に固有であり、
前記顧客と通信するアプリケーションサーバから、新しいマスターキーを導出する要求を受信し、前記要求は、前記暗号化された第２のキーフラグメントを格納した後に受信され、
前記アプリケーションサーバから、前記暗号化された第１のキーフラグメントを受信し、
前記第２の記憶領域から前記暗号化された第２のキーフラグメントを読み出し、
ハードウェアセキュリティモジュール（ＨＳＭ）を使用して前記暗号化された第１のキーフラグメントおよび前記暗号化された第２のキーフラグメントを復号して、復号された第１のキーフラグメントおよび復号された第２のキーフラグメントを生成し、
前記復号された第１のキーフラグメントおよび前記復号された第２のキーフラグメントを使用して前記マスターキーを導出し、前記の導出は、前記復号された第１のキーフラグメントを変更し、次に前記変更された復号された第１のキーフラグメント及び前記復号された第２のキーフラグメントを結合することを含み、前記新しいマスターキーは前記顧客に固有であり、
前記導出した新しいマスターキーを、前記要求側のアプリケーションサーバへ送信し、前記マスターキーは、前記アプリケーションサーバのインメモリキャッシュに格納され、前記アプリケーションサーバが前記アプリケーションサーバに格納された顧客データを暗号化できるようにする、
ための命令を含む、コンピュータプログラムプロダクト。
【請求項１７】
前記暗号化された第１のキーフラグメントおよび前記暗号化された第２のキーフラグメントが、プライベートキーおよび対称キーを含むキーセットを使用してさらに復号され、前記プライベートキーは前記対称キーを使用して予め暗号化され、前記ＨＳＭがＨＳＭパブリックキーおよびＨＳＭプライベートキーを含み、前記対称キーは前記ＨＳＭパブリックキーを用いて予め暗号化される、請求項１６に記載のコンピュータプログラムプロダクト。
【請求項１８】
前記１つまたは複数のプロセッサに、
前記ＨＳＭプライベートキーを使用して前記暗号化された対称キーを復号して、復号された対称キーを生成させ、
前記復号された対称キーを使用して前記暗号化されたプライベートキーを復号して、復号されたプライベートキーを生成させる命令をさらに含む、請求項１７に記載のコンピュータプログラムプロダクト。
【請求項１９】
前記暗号化された対称キーおよび前記暗号化されたプライベートキーが前記第２の記憶領域に格納され、前記第１のキーフラグメントおよび前記第２のキーフラグメントが乱数発生器を使用して生成され、前記マスターキーが顧客データを暗号化する、または暗号化された顧客データを復号するために使用される、請求項１８に記載のコンピュータプログラムプロダクト。
【発明の詳細な説明】
【技術分野】
【０００１】
著作権表示
本特許文献の開示の一部は、著作権保護の対象となる資料を含む。著作権者は、特許商標庁の特許ファイルまたは記録に記載されているように、特許文書または特許開示のいずれかによるファクシミリ複製に異論を唱えないが、それ以外の場合はすべての著作権を留保する。
【０００２】
本開示は、一般にデータ処理に関し、より具体的にはデータの暗号化および復号に関する。
【背景技術】
【０００３】
背景技術の項で論じる主題は、単に背景技術の項でのその言及の結果として従来技術と仮定されるものではない。同様に、背景技術の項で言及される、または背景技術の項の主題と関連する課題は、従来技術において以前認識されていたと仮定すべきではない。背景技術の項の主題は、単に異なるアプローチを表すもので、それ自体で発明であってもよい。
【０００４】
以下の詳細な説明は、開示される技術を参照してなされる。好ましい実装形態は、開示される技術を例示するために記述され、特許請求の範囲により定義されるその範囲を制限するものではない。当業者であれば、その記述の様々な同等の変更形態を認識するであろう。
【０００５】
（データベース、データストアなどの）記憶領域に保存された（顧客データなどの）データの安全を確保するための既存の方法は、非対称または対称暗号法に基づくことができる。非対称暗号法では、パブリックキーおよびプライベートキーの一対の鍵が使用される。顧客データは、パブリックキーを使用して暗号化することができ、対応するプライベートキーを使用して復号できる。典型的には、非対称キーの対のパブリックキーを使用してデータを暗号化することは非常に時間がかかる。その代わりに実用上受け入れられるのは、対称キーを使用してデータを暗号化することである。対称キー自体をパブリックキーを用いて暗号化し、それにより、対称キー暗号化の性能上の問題を克服する。
【発明の概要】
【０００６】
一部の実施形態では、マルチテナントデータベース環境で顧客データの安全を確保するための方法およびシステムは、暗号化された第１のキーフラグメントを第１の記憶領域に保存し、暗号化された第２のキーフラグメントを第１の記憶領域とは異なる第２の記憶領域に保存することを含む。第１の記憶領域および第２の記憶領域へのアクセスは、相互に排他的である。第１のキーフラグメントおよび第２のキーフラグメントは、キーセットを使用して暗号化されている。マスターキーを導出する要求を受信することに基づいて、暗号化された第１のキーフラグメントおよび暗号化された第２のキーフラグメントは、キーセットおよびハードウェアセキュリティモジュール（ＨＳＭ）と関連付けられたキーを使用して復号される。マスターキーは、復号された第１のキーフラグメントおよび復号された第２のキーフラグメントを使用して導出される。マスターキーは、インメモリキャッシュに格納し、暗号化または暗号化された顧客データの復号のために使用することができる。
【０００７】
本発明の他の態様および利点は、以下の図面、詳細な説明、および特許請求の範囲をよく調べることにより理解することができる。
[0001]                          
【図面の簡単な説明】
【０００８】
含まれる図面は、例示のみを目的として、開示された技術の可能な構造および工程段階の例を提供する働きのみをする。本開示の精神および範囲から逸脱することなく当業者によりなすことができる、実施形態への形態および詳細の変更をこれらの図面は制限しない。
【０００９】
【図１】本発明の一部の実施形態と共に使用することができる例示的なコンピューティングシステム１０２の図面を示す。
【図２】本発明の一部の実施形態と共に使用することができる例示的なネットワーク環境２００の図面を示す。
【図３Ａ】一部の実施形態にしたがって、顧客データを暗号化および復号するマスターキーを導出するために使用することができるキーフラグメントの例を示す。
【図３Ｂ】一部の実施形態にしたがって、マスターキーと顧客の間の例示的な関係を示す。
【図３Ｃ】一部の実施形態にしたがって、ＨＳＭを使用する暗号化の例を示す。
【図４Ａ】一部の実施形態にしたがって、キーリリースを使用する暗号化の例を示す。
【図４Ｂ】一部の実施形態にしたがって、複数のキーリリースの例を示す。
【図５】一部の実施形態にしたがって、暗号化を実施するためにキーリリースのキーを使用する例を示す。
【図６Ａ】一部の実施形態にしたがって実施される、顧客データの要求を処理する例示的なプロセスの流れ図を示す。
【図６Ｂ】一部の実施形態にしたがって実施される、顧客データを暗号化する例示的なプロセスの流れ図を示す。
【図７Ａ】一部の実施形態にしたがって実施される、暗号化を実施する例示的なプロセスの流れ図を示す。
【図７Ｂ】一部の実施形態にしたがって実行される、マスターキーを生成する例示的なプロセスの流れ図を示す。
【図８Ａ】一部の実施形態にしたがって、適用可能な環境の構築構成要素を示すシステム図８００を示す。
【図８Ｂ】一部の実施形態にしたがって、適用可能な環境の構築構成要素をさらに示すシステム図を示す。
【図９】一部の実施形態にしたがって、マルチテナントデータベース環境のアーキテクチャを示すシステム図９１０を示す。
【図１０】一部の実施形態にしたがって、マルチテナントデータベース環境のアーキテクチャをさらに示すシステム図９１０を示す。
【発明を実施するための形態】
【００１０】
１つまたは複数の実施形態によるシステムおよび方法の適用が、この項に説明される。これらの例は、文脈を加え、本開示の理解を助けるためにのみ提供されている。したがって、本明細書に記載の技術が、これらの特定の詳細の一部またはすべてを使わずに実行可能なことは、当業者には明らかであろう。他の例では、公知の工程段階が、本開示を不必要に不明確にすることを回避するため詳細を記載していない。他の適用も可能であり、以下の例が決定的、または範囲もしくは設定のいずれかを制限すると解釈されるべきではない。
【００１１】
以下の詳細な説明では、説明の一部を形成し、その中に例示により特定の実施形態を図示する、添付図面を参照する。当業者であれば本開示を実行することが可能なほど詳細にこれらの実施形態は説明されるが、これらの例は、制限するものではなく、他の実施形態を使用し、本開示の精神および範囲から逸脱することなく変更をなすことが可能であることが理解されよう。
【００１２】
本明細書で使用する場合、「マルチテナントデータベースシステム」という用語は、データベースシステムのハードウェアおよびソフトウェアの様々な要素が、１つまたは複数の顧客により共有可能なシステムを指す。例えば、所与のアプリケーションサーバが、多くの顧客への要求を同時に処理することができ、所与のデータベーステーブルが、潜在的にはるかに多くの顧客のための行を保存することができる。
【００１３】
記載の主題は、ソフトウェアベースのシステム、データベースシステム、マルチテナント環境などの任意のコンピュータ実施されるシステムのコンテキストで実施可能である。さらに、記載の主題は、互いに協働し通信する、２つ以上の別の異なるコンピュータ実施されるシステムと共に実行可能である。１つまたは複数の実装形態は、プロセス、装置、システム、デバイス、方法、コンピュータ可読命令またはコンピュータプログラムコードを含むコンピュータ可読記憶媒体などのコンピュータ可読媒体として、あるいは、その中で具現化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を備えるコンピュータプログラム製品として、様々な手段で実施することができる。
【００１４】
一般に、マルチテナントデータベース環境は、組織または顧客と関連付けられたデータを保存するよう構成される複数のデータベースを含むことができる。（顧客データとも呼ばれる）データは、顧客が保存する際、暗号化されない場合がある。顧客データは、停止中は非対称または対称暗号法を使用して、暗号化することができる。暗号化された顧客データは、不正利用者によるアクセスから保護される。顧客データを暗号化することが重要な場合があるが、復号キー（プライベートキーまたは対称キー）の安全を確保することが望ましい場合がある。復号キーは、（データベース管理者などの）権限を付与された所定の人員だけが、アクセスすることができる記憶領域に格納することができる。顧客が顧客データを取り出したいとき、復号キーを使用して暗号化された顧客データを復号することができる。そして、復号された顧客データは、顧客に送信することができる。暗号化された顧客データは、クラウドベースの記憶領域、クラウドベースでない記憶領域、または他の形態の記憶実装を含む、マルチテナントデータベース環境と関連付けられた任意の記憶領域に保存することができる。
【００１５】
復号キーを保護するための一技術は、ハードウェアセキュリティモジュール（ＨＳＭ）を使用することである。ＨＳＭは、オンボードでの安全なキー生成およびオンボードのキー記憶および管理を提供する。ＨＳＭは、対称キーの対を生成するために使用することができる。ＨＳＭは、誰にもＨＳＭプライベートキーを引き抜くことができないように、その記憶装置にＨＳＭプライベートキーを保持することができる。ＨＳＭプライベートキーは、対応するＨＳＭパブリックキーを使用して暗号化されているデータを復号するために使用することができる。システムにインストールされるＨＳＭを使用するためにパスワードが必要な場合がある。ＨＳＭは、ユニバーサルシリアルバス（ＵＳＢ）ポートを介して接続されるＵＳＢデバイス、システムボードを介してインストールされるカードデバイス、またはネットワーク接続デバイスであってもよい。
【００１６】
開示された実施形態は、マルチテナントデータベース環境で、顧客データを暗号化および復号するための方法を含むことができる。この方法は、第１のキーフラグメントおよび第２のキーフラグメントを含む、２つのキーフラグメントに基づく対称キーを生成することを含む。第１のキーフラグメントおよび第２のキーフラグメントは、乱数発生器を使用して生成することができ、少なくともハードウェアセキュリティモジュール（ＨＳＭ）内のキーを用いて安全を確保することができる。対称キーは、インメモリキャッシュに格納される。顧客データは、対称キーを用いて、暗号化することができる。暗号化された顧客データは、顧客が顧客データを要求するとき、対称キーを使用して復号することができる。
【００１７】
開示された実施形態は、顧客データの安全を確保するための装置を含み、プロセッサおよび１つまたは複数の保存された命令のシーケンスを含むことができる。その命令は、プロセッサによって実行されると、プロセッサに第１の記憶領域の暗号化された第１のキーフラグメントを保存させ、第１の記憶領域と異なる第２の記憶領域に暗号化された第２のキーフラグメントを保存させるが、第１の記憶領域および第２の記憶領域へのアクセスが、相互に排他的であり、第１のキーフラグメントおよび第２のキーフラグメントがキーセットを用いて暗号化されている。命令はさらに、マスターキーを導出する要求を受信することに基づいて、キーセットおよびハードウェアセキュリティモジュール（ＨＳＭ）と関連付けられたキーを使用して、予め暗号化された第１のキーフラグメントおよび予め暗号化された第２のキーフラグメントをプロセッサに復号させる。マスターキーは、復号された第１のキーフラグメントおよび復号された第２のキーフラグメントを使用して導出される。マスターキーは、インメモリキャッシュに格納される。
【００１８】
開示された実施形態は、顧客データの安全を確保するための１つまたは複数の命令のシーケンスを帯同する機械可読媒体を含むことができる。その命令は、１つまたは複数のプロセッサにより実行されると、１つまたは複数のプロセッサに第１の記憶領域に暗号化された第１のキーフラグメントを保存させ、第１の記憶領域と異なる第２の記憶領域に暗号化された第２のキーフラグメントを保存させるが、第１の記憶領域および第２の記憶領域へのアクセスが互いに排他的であり、第１のキーフラグメントおよび第２のキーフラグメントがキーセットを使用して暗号化されている。マスターキーを導出する要求の受信に基づいて、１つまたは複数のプロセッサにより実行されると、命令はさらに、１つまたは複数のプロセッサにキーセットおよびハードウェアセキュリティモジュール（ＨＳＭ）と関連付けられたキーを使用して予め暗号化された第１のキーフラグメントおよび予め暗号化された第２のキーフラグメントを復号させ、復号された第１のキーフラグメントおよび復号された第２のキーフラグメントを使用してマスターキーを導出させ、かつインメモリキャッシュにマスターキーを保存させる。
【００１９】
開示された実施形態は、コンピュータ実施されるシステム内の顧客データの暗号化および復号または顧客データの安全の確保に関連してもよい。記載の主題は、ソフトウェアベースのシステム、データベースシステム、マルチテナント環境などの任意のコンピュータ実施されるシステムのコンテキストで実施可能である。さらに、記載の主題は、互いに協働し通信する、２つ以上の別の異なるコンピュータ実施されるシステムと共に実行可能である。１つまたは複数の実施形態は、プロセス、装置、システム、デバイス、方法、コンピュータ可読命令またはコンピュータプログラムコードを含むコンピュータ可読記憶媒体などのコンピュータ可読媒体として、あるいは、その中で具現化されるコンピュータ可読プログラムコードを有するコンピュータ使用可能媒体を備えるコンピュータプログラム製品として、様々な手段で実施することができる。
コンピュータシステム
【００２０】
図１は、本発明の一部の実施形態と共に使用することができる例示的なコンピューティングシステムの図面を示す。コンピューティングシステム１０２は顧客または組織によって使用されて、マルチテナントデータベース環境と関連付けられた記憶領域に保存される顧客データを伝送することができる。例えば、マルチテナントデータベース環境は、セールスフォース・ドットコム（登録商標）によって提供されるサービスと関連付けることができる。コンピューティングシステム１０２はまた、記憶領域から顧客データを取り出すために使用することができる。
【００２１】
コンピューティングシステム１０２は、モバイルコンピューティングシステムなどの適切なコンピューティングシステムの単に１つの例であり、使用の範囲または設計の機能性に関する制限を示唆するものではない。コンピューティングシステム１０２は、図示の構成要素のいずれか１つまたはその組み合わせに関連して、依存性または要件を有すると解釈されるものではない。その設計は、多くの他の汎用または専用コンピューティングシステムと動作可能である。その設計との使用に適することができる公知のコンピューティングシステム、環境、および／または構成の例は、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサ型システム、セットトップボックス、プログラム可能家電、ミニコンピュータ、メインフレームコンピュータ、上述のシステムまたは装置のいずれかを含む分散型コンピューティング環境などを含むが、それらに限定されない。例えば、コンピューティングシステム１０２は、カリフォルニア州クパティーノのＡｐｐｌｅ  Ｉｎｃ．によって開発されたオペレーティングシステム（例えば、ｉＯＳ）またはカリフォルニア州マウンテンビューのＧｏｏｇｌｅ  Ｉｎｃにより開発されたオペレーティングシステム（例えば、アンドロイド）と動作するよう構成されたものなどのモバイルコンピューティングシステムとして実装することができる。
【００２２】
本発明の一部の実施形態は、コンピュータによって実行されるプログラムモジュールなどの、コンピューティングシステム実行可能命令の一般コンテキストに記載することができる。一般に、プログラムモジュールは、特定の作業を実行する、または特定の抽象データ型を実施するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。当業者であれば、以下で論じる任意の形態のコンピューティングマシン可読媒体上に具現化することができるコンピュータ実行可能命令として、本明細書の説明および／または図面を実装することができる。
【００２３】
本発明の一部の実施形態はまた、通信ネットワークを介してリンクされる遠隔処理装置によりタスクが実行される分散型コンピューティング環境で実行することができる。分散型コンピューティング環境では、プログラムモジュールをメモリ記憶装置を含むローカルおよびリモートコンピュータ記憶媒体の両方に配置することができる。
【００２４】
図１を参照すると、コンピューティングシステム１０２は、１つまたは複数のプロセシングコアを有するプロセシングユニット１２０、システムメモリ１３０、およびシステムメモリ１３０を含む様々なシステム構成要素をプロセシングユニット１２０に結合するシステムバス１２１を含むことができるが、それに限定されない。システムバス１２１は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含むいくつかの種類のバス構造のいずれかであってよい。制限としてではなく例として、こうしたアーキテクチャは、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオエレクトロニクススタンダーズアソシエーション（ＶＥＳＡ）ローカルバス、およびメザニンバスとしても知られるペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスを含む。
【００２５】
コンピューティングシステム１０２は、典型的には様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピューティングシステム１０２によりアクセス可能な任意の入手可能な媒体とすることができ、揮発性および不揮発性媒体の両方、着脱式および非着脱式媒体の両方を含む。制限としてではなく例として、コンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータなどの情報を保存することができる。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ，ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、あるいは所望の情報を保存するために使用可能でコンピューティングシステム１０２によってアクセス可能な任意の他の媒体を含むが、それに限定されない。通信媒体は、一般にコンピュータ可読命令、データ構造、またはプログラムモジュールを具現化する。
【００２６】
システムメモリ１３０は、読み出し専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２などの揮発性および／または不揮発性メモリの形態のコンピュータ記憶媒体を含むことができる。起動中などに、コンピューティングシステム１０２内の構成要素の間の情報を転送する助けをする基本ルーチンを有する基本入出力システム（ＢＩＯＳ）１３３は、一般にＲＯＭ１３１に格納される。ＲＡＭ１３２は、プロセシングユニット１２０に直ちにアクセス可能かつ／または現在プロセシングユニット１２０により動作しているデータおよび／またはプログラムモジュールを一般に含む。制限としてではなく例として、図１はまた、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【００２７】
コンピューティングシステム１０２はまた、他の着脱式／非着脱式、揮発性／不揮発性コンピュータ記憶媒体を含むことができる。単なる例として、図１はまた、非着脱式、不揮発性磁気媒体から読み出し、それに書き込むハードディスクドライブ１４１、着脱式、不揮発性磁気ディスク１５２から読み出し、それに書き込む磁気ディスクドライブ１５１、および、例えば、ＣＤ−ＲＯＭまたは他の光媒体などの着脱式、不揮発性光ディスク１５６から読み出し、それに書き込む光ディスクドライブ１５５を示す。例示的な動作環境で使用することができる他の着脱式／非着脱式、揮発性／不揮発性コンピュータ記憶媒体として、ＵＳＢドライブおよび装置、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどが挙げられるが、それに限定されない。ハードディスクドライブ１４１は、一般にインタフェース１４０などの非着脱式メモリインタフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、一般にインタフェース１５０などの着脱式メモリインタフェースによってシステムバス１２１に接続される。
【００２８】
上記で論じ、図１に示すドライブおよびその関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピューティングシステム１０２用の他のデータのストレージを提供する。図１では、例えば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するように図示される。これらの構成要素は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じであっても、異なってもいずれでもよいことに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、プログラムデータ１４７は、最低、それらが別々の複写であると示すため、ここに異なる数字識別を与えられる。
【００２９】
ユーザは、キーボード１６２、マイクロフォン１６３、およびマウス、トラックボールもしくはタッチパッド、またはタッチスクリーンなどのポインティング装置１６１などの入力装置を介して、コンピューティングシステム１０２にコマンドおよび情報を入力することができる。他の入力装置（図示せず）は、ジョイスティック、ゲームパッド、スキャナなどを含んでもよい。これらおよび他の入力装置は、システムバス１２１に結合されるユーザ入力インタフェース１６０を介してプロセシングユニット１２０に接続されることが多いが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインタフェースおよびバス構造により接続されてもよい。モニタ１９１または他の種類のディスプレイ装置も、ビデオインタフェース１９０などのインタフェースを介してシステムバス１２１に接続される。モニタに加えて、コンピュータも、出力周辺インタフェース１９０を介して接続することができるスピーカ１９７およびプリンタ１９６などの他の周辺出力装置を含んでもよい。
【００３０】
コンピューティングシステム１０２は、リモートコンピュータ１８０などの１つまたは複数のリモートコンピュータへの論理接続を用いてネットワーク環境で動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、ハンドヘルド装置、サーバ、ルータ、ネットワークＰＣ、ピア装置または他の共通ネットワークノードであってもよく、典型的には、コンピューティングシステム１０２に関係する上述の多くのまたはすべての構成要素を含む。図１に図示する論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１および広域ネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含んでもよい。こうしたネットワーキング環境は、オフィス規模のコンピュータネットワーク、企業規模のコンピュータネットワーク、イントラネット、およびインターネットでは、普通である。
【００３１】
ＬＡＮネットワーキング環境で使用されるとき、コンピューティングシステム１０２は、ネットワークインタフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続することができる。ＷＡＮネットワーキング環境で使用するとき、コンピューティングシステム１０２は、典型的には、モデム１７２またはインターネットなどのＷＡＮ１７３上で通信を確立する他の手段を含む。内蔵または外付けでもよいモデム１７２は、ユーザ入力インタフェース１６０または他の適切な機構を介してシステムバス１２１に接続することができる。ネットワーク環境では、コンピューティングシステム１０２に関連して図示されるプログラムモジュールまたはその一部は、遠隔メモリ記憶装置に格納することができる。制限としてではなく例として、図１は、リモートコンピュータ１８０に常駐するものとしてリモートアプリケーションプログラム１８５を示す。示されているネットワーク接続は例示であり、コンピュータ間の通信リンクを確立する他の手段が使用されてもよいことが、認識されよう。
【００３２】
本発明の一部の実施形態は、図１に関連して説明されるもののようなコンピューティングシステム上で実行可能であることに留意されたい。しかし、本発明の一部の実施形態は、サーバ、メッセージ処理専用コンピュータ、ハンドヘルド装置上、または本設計の別の部分が、分散型コンピューティングシステムの別の部分で実行可能な分散型システム上で実行可能である。
【００３３】
システムバス１２１に結合可能な他の装置は、電池または直流（ＤＣ）電源および交流（ＡＣ）アダプタ回路などの電源である。ＤＣ電源は、電池、燃料電池、または定期的に再充電が必要な同様のＤＣ電源とすることができる。通信モジュール（またはモデム）１７２は、ワイヤレスアプリケーションプロトコル（ＷＡＰ）を採用して、ワイヤレス通信チャネルを確立することができる。通信モジュール１７２は、Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ（ＩＥＥＥ）による１９９９年発行、ＩＥＥＥ規格８０２．１１−１９９９、ＩＥＥＥ８０２．１１規格などのワイヤレスネットワーク規格を実装することができる。
【００３４】
モバイルコンピューティングシステムの例として、ラップトップコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯情報端末、またはモバイルコンピューティングシステムにＤＣ電圧を供給する直流（ＤＣ）電源により給電され、単独でモバイルコンピューティングシステム内に存在し、燃料電池または電池など、定期的に再充電する必要があるオンボードプロセシングパワーおよび無線通信機能を有する他の同様の装置を挙げることができる。
ネットワーク
【００３５】
図２は、本発明の一部の実施形態と共に使用することができる例示的なネットワーク環境の図面を示す。ネットワーク環境２００は、コンピューティングシステム２０５および２１２を含む。コンピューティングシステム２０５と２１２の１つ以上は、モバイルコンピューティングシステムであってよい。コンピューティングシステム２０５および２１２は、ネットワーク２５０に携帯電話接続またはＷｉ−Ｆｉルータ（図示せず）を介して、接続することができる。ネットワーク２５０は、インターネットであってもよい。コンピューティングシステム２０５および２１２は、１つまたは複数のサーバコンピューティングシステム２５５および２６０とネットワーク２５０を介して結合することができる。
【００３６】
コンピューティングシステム２０５は、顧客と関連付けることができ、顧客アプリケーションモジュール２０８を含むことができる。ユーザは、顧客コンピューティングシステム２０５および顧客アプリケーションモジュール２０８を使用して、サーバコンピューティングシステム２５５（アプリケーションサーバ２５５とも呼ばれる）に接続して通信し、アプリケーション２５７（例えば、Ｓａｌｅｓｆｏｒｃｅ．ｃｏｍ（登録商標）アプリケーション）にログインすることができる。ユーザは、顧客データをアプリケーションサーバ２５５に送信し、顧客データをアプリケーションサーバ２５５に要求することができる。
【００３７】
アプリケーションサーバ２５５は、顧客データを保存するよう構成されるデータベース２７０に結合することができる。アプリケーションサーバ２５５は、エンティティ（例えば、Ｓａｌｅｓｆｏｒｃｅ．ｃｏｍ（登録商標））と関連付けることができる。エンティティは、暗号のためにキーの対を生成することができる。キーの対は、パブリックキー２７３およびプライベートキー（図示せず）を含む。プライベートキーは、公開されていないが、エンティティ（キー保持者とも呼ばれる）により秘密が守られる。パブリックキー２７３は、認証局（ＣＡ）が発行した電子証明書により、誰にでも利用可能にすることができる。証明書は、証明書に含まれパブリックキーが、証明書に記されているエンティティに属するということのＣＡによる確認または検証でもある。例えば、顧客は証明書をダウンロードし、パブリックキー２７３を取得して、アプリケーションサーバ２５５へ送信する顧客データを暗号化することができる。エンティティ（または、プライベートキーの保持者）だけが、パブリックキー２７３を使用して暗号化された顧客データを復号することができる。
【００３８】
アプリケーションサーバ２５５は、暗号アプリケーションモジュール２１４で構成される暗号化コンピューティングシステム２１２と結合することができる。暗号アプリケーションモジュール２１４は、図４Ａと共に説明するように、１つまたは複数のキーリリース用に、パブリックキー、プライベートキー、対称キー、およびキーフラグメントを生成するよう構成することができる。
【００３９】
アプリケーションサーバ２５５は、ファイルシステム２７１と結合することができる。ファイルシステム２７１は、暗号コンピューティングシステム２１２により生成されたキーを含む様々な暗号化されたキーを格納するよう構成することができる。
【００４０】
アプリケーションサーバ２５５は、ＨＳＭ２６６で構成されるサーバコンピューティングシステム２６０（ＨＳＭサーバ２６０とも呼ばれる）と結合することができる。ＨＳＭ２６６は、ＨＳＭパブリックキー２６７およびＨＳＭプライベートキー２６８と関連付けることができる。ＨＳＭサーバ２６０は、ＨＳＭ２６６と相互作用し、様々な暗号化および復号作業を実行するよう構成されるＨＳＭアプリケーションモジュール２６５を含むことができる。例えば、ＨＳＭアプリケーションモジュール２６５は、ＨＳＭプライベートキー２６８を使用して、対応するＨＳＭパブリックキー２６７を使用して予め暗号化したデータを復号することができる。パスワードが、ＨＳＭ２６６にアクセスするために必要となる場合がある。負荷分散の目的で、ロードバランサ（図示せず）に接続される複数のアプリケーションサーバ２５５および複数のＨＳＭサーバ２６０があってもよい。すべてのアプリケーションサーバ２５５は、任意の特定の時間にどのＨＳＭサーバ２６０と話すことができるかを知る必要がある可能性がある。
【００４１】
実施形態によっては、ファイルシステム２７１は、ＨＳＭサーバ２６０に対してローカルのファイルシステムと同期することができる。これにより、ファイルシステム２７１がローカルファイルシステムであるかのように、ＨＳＭサーバ２６０がファイルシステム２７１のデータにアクセスし、それを保存することができるようにする。実施形態によっては、ＨＳＭサーバ２６０は、アプリケーションサーバ２５５により送信された質問にのみ応答することができる。これにより、不正利用者によるＨＳＭサーバ２６０と関連付けられたデータまたはサービスへのアクセスを防ぐことができる。例えば、アプリケーションサーバ２５５は、ＨＳＭサーバ２６０と共有する秘密を用いてＨＳＭサーバ２６０に送信する全ての要求に電子署名することを必要とすることができる。
キーフラグメント
【００４２】
図３Ａは、一部の実施形態にしたがって、顧客データを暗号化および復号するマスターキーを導出するために使用することができるキーフラグメントの例を示す。第１のキーフラグメント３０２および第２のキーフラグメント３０４は、乱数発生器を用いて生成することができる。例えば、乱数発生器は、２５６ビット長のキーフラグメントを生成することができる。実施形態によっては、第１のキーフラグメント３０２が、アプリケーションサーバ２５５（図２に示す）によって生成され、第２のキーフラグメント３０４が、暗号コンピューティングシステム２１２（図２に示す）によって生成されてもよい。実施形態によっては、第１のキーフラグメント３０２および第２のキーフラグメント３０４の両方が、アプリケーションサーバ２５５によって生成されてもよい。これにより、マスターキー３０８の導出の性能の向上に役立つ場合がある。実施形態によっては、第１のキーフラグメント３０２および第２のキーフラグメント３０４の両方が、ＨＳＭサーバ２６０によって生成されてもよい。これにより、導出されたマスターキー３０８の性能および安全性の改善に役立つ可能性がある。第１のキーフラグメント３０２は、顧客それぞれに対して固有であってもよい。第２のキーフラグメント３０４は、図４Ａと共に説明するように、特定のキーリリースと関連付けることができる。
【００４３】
第１のキーフラグメント３０２は、アプリケーションサーバ２５５によって処理することができる。これは、第１のキーフラグメント３０２を暗号化させ、データベース２７０に格納させることを含んでもよい。第２のキーフラグメント３０４は、ＨＳＭサーバ２６０によって処理することができる。これは、ＨＳＭサーバ２６０とファイルシステム２７１の間のデータ同期に基づいて、第２のキーフラグメント３０４を暗号化させ、ファイルサーバ２７１に格納させることを含んでもよい。暗号化された第１のキーフラグメント３０２および暗号化された第２のキーフラグメント３０４をアクセス可能性が所定の人員に制限される別の領域に格納することにより、第１のキーフラグメント３０２および第２のキーフラグメント３０４が権限を付与されていない人員にアクセスされることを防ぐ。例えば、権限を付与された人員の一つの群だけが、データベース２７０の第１のキーフラグメント３０２にアクセスすることができてもよく、権限を付与された人員の別の群だけが、ファイルシステム２７１の第２のキーフラグメント３０４にアクセスすることができてもよいが、権限を付与された人員のいずれの群も、データベース２７０およびファイルシステム２７１の両方へのアクセス権はない。このアクセスは、相互に排他的と見られてもよい。実施形態によっては、アプリケーションサーバ２５５だけが、データベース２７０の第１のキーフラグメント３０２にアクセスすることができ、ＨＳＭサーバ２６０だけが、ファイルシステム２７１の第２のキーフラグメント３０４にアクセスすることができる。
【００４４】
実施形態によっては、第１のキーフラグメント３０２を使用する代わりに、顧客が生成した第１のキーフラグメント３０３を使用してもよい。図３Ａを参照すると、顧客が生成した第１のキーフラグメント３０３と共に示される点線は、代替の選択肢を知らせることを意味する。顧客が生成した第１のキーフラグメント３０３は、２５６ビット乱数発生器を使用して生成することができる。顧客が生成した第１のキーフラグメント３０３は、顧客自身のプライベートキー（図示せず）を用いて暗号化され、その後、顧客自身のパブリックキーを用いてアプリケーションサーバ２５５によって復号することができる。あるいは、顧客が生成した第１のキーフラグメント３０３は、エンティティのパブリックキー２７３（図２に示す）を使用して暗号化され、その後、エンティティのプライベートキーを使用して復号されてもよい。暗号化された顧客が生成した第１のキーフラグメント３０３は、アプリケーションサーバ２５５が、第１のキーフラグメント３０２を処理する方法と同様に、アプリケーションサーバ２５５によって受信および処理することができる。
【００４５】
顧客が生成した第１のキーフラグメント３０３を使用する１つの利点は、顧客が、マスターキー３０８の導出にわたる一部の制御（したがって顧客データの安全性全般の制御）を有することができることである。顧客が生成した第１のキーフラグメント３０３が損なわれたとしても、第２のキーフラグメント３０４が、まだ安全な可能性がある。以下の論述は、システムが生成した第１のキーフラグメント３０２（または単に第１のキーフラグメント３０２）について言及するが、第１のキーフラグメントは、システムが生成しても、顧客が生成してもいずれでもよいことが理解されよう。
マスターキー導出
【００４６】
マスターキー導出モジュール３０６は、復号された第１のキーフラグメント３０２と復号された第２のキーフラグメント３０４を組み合わせて、マスターキー３０８を導出する動作を実施するよう構成することができる。実施形態によっては、動作は、セキュアアルゴリズムを介して、複数のループ（例えば、１０，０００ループ）を実行することを含むことができる。マスターキー３０８は、対称キーであってもよい。マスターキー導出モジュール３０６は、パスワードベースの鍵導出関数２（ＰＢＫＤＦ２）アルゴリズムを実施するよう構成することができる。ＰＢＫＤＦ２アルゴリズムは、暗号ハッシュ、暗号などの疑似乱数関数をソルト値と共に入力パスワードまたはパスフレーズに適用することができ、マスターキー３０８を導出するために幾度もプロセスを繰り返す。ソルトは、乱数発生器を使用して生成し、ＰＢＫＤＦ２アルゴリズムで使用することができる。ソルトは、ＨＳＭサーバ２６０によって生成することができる。
【００４７】
マスターキー３０８は、固有であり、１つの顧客のみに関連付けられる。というのは、マスターキー導出モジュール３０６は、２つのキーフラグメント、すなわち第１のキーフラグメント３０２および第２のキーフラグメント３０４を使用し、少なくとも第１のキーセグメント３０２は、顧客それぞれに対して固有であるからである。実施形態によっては、マスターキー導出モジュール３０６は、ＨＳＭサーバ２６０に含まれてもよい。マスターキー３０８が導出されると、マスターキー３０８は暗号化され、アプリケーションサーバ２５５へ送信することができる。例えば、マスターキー３０８の暗号化は、ＣＡパブリックキー２７３を使用することに基づくことができる。これにより、マスターキー３０８が、ネットワーク２５０（図２に示す）を通ってアプリケーションサーバ２５５へ移動する間、それを保護することができる。暗号化されたマスターキー３０８は、その後、ＣＡプライベートキー２７２を使用してアプリケーションサーバ２５５によって復号することができる。
【００４８】
マスターキー３０８は、アプリケーションサーバ２５５のインメモリキャッシュ３０７に一時的に格納されることができる。インメモリキャッシュ３０７にあることで、マスターキー３０８は、アプリケーションサーバ２５５に素早くアクセスされることが可能になるが、不正利用者にアクセスされることはない。
【００４９】
マスターキー導出モジュール３０６が、同じ第１のキーフラグメント３０２および第２のキーフラグメント３０４を受け取る限り、同じマスターキー３０８が生成されることに留意されてもよい。アプリケーションサーバ２５５の電源が遮断され、その後再度給電される場合、インメモリキャッシュ３０７のマスターキー３０８は、喪失する可能性があるが、マスターキー導出モジュール３０６により導出することができる。
【００５０】
図３Ｂは、一部の実施形態にしたがって、マスターキーと顧客の間の例示的な関係を示す。この例では、２人の顧客３１５および３２５がいる。動作中、顧客３１５は、その顧客データ３２０をアプリケーションサーバ２５５へ送信することができる。そして、アプリケーションサーバ２５５は、顧客３１５に固有のマスターキー３２２を使用して、顧客データ３２０を暗号化し、暗号化された顧客データ３２４を生成する。そして、暗号化された顧客データ３２４は、データベース２７０に保存される。その後、顧客３１５が、その顧客データを要求すると、暗号化された顧客データ３２４が、データベース２７０から取得され、マスターキー３２２を使用してアプリケーションサーバ２５５により復号され、復号された顧客データ３２０が顧客３１５へ送信される。
【００５１】
同様に、顧客３２５は、その顧客データ３３０をアプリケーションサーバ２５５へ送信することができる。そして、アプリケーションサーバ２５５は、顧客３２５に固有のマスターキー３３２を使用して、顧客データ３３０を暗号化し、暗号化された顧客データ３３４を生成する。そして、暗号化された顧客データ３３４は、データベース２７０に保存される。その後、顧客３２５が、その顧客データを要求すると、暗号化された顧客データ３３４が、データベース２７０から取得され、マスターキー３３２を使用してアプリケーションサーバ２５５により復号され、復号された顧客データ３３０が顧客３２５へ送信される。
【００５２】
アプリケーションサーバ２５５が、マスターキー３２２または３３２にアクセスする必要があるとき、アプリケーションサーバ２５５は、マスターキー３２２または３３２がインメモリキャッシュ３０７に存在するかを調べて確認することができる。マスターキー３２２または３３２が、インメモリキャッシュ３０７に存在する場合、アプリケーションサーバ２５５によりアクセスされ使用される。マスターキー３２２または３３２が、インメモリキャッシュ３０７に存在しない場合、アプリケーションサーバ２５５は、マスターキー導出モジュール３０６にマスターキー３２２または３３２を導出するよう要求することができる。
【００５３】
図３Ｃは、一部の実施形態にしたがって、ＨＳＭを使用する暗号化の例を示す。マスターキー３２２または３３２の導出は、それぞれの第１のキーフラグメント３２３または３３３およびそれぞれの第２のキーフラグメント３２４または３３４に基づくので、第１のキーフラグメント３２３、３３３、および第２のキーフラグメント３２４、３３４を保護することが望ましい。実施形態によっては、第１のキーフラグメント３２３および第２のキーフラグメント３２４は、ＨＳＭ３５０のパブリックキー３５１を使用して暗号化されてもよい。同様に、第１のキーフラグメント３３３および第２のキーフラグメント３３４は、ＨＳＭ３５５のパブリックキー３５６を使用して暗号化されてもよい。暗号化された第１のキーフラグメント３２３および３３３は、データベース２７０に格納されてもよい。暗号化された第２のキーフラグメント３２４および３３４は、ファイルシステム２７１に格納されてもよい。実施形態によっては、第１のキーフラグメント３２３および第２のキーフラグメント３２４は、２つの異なるＨＳＭを使用して暗号化および復号されてもよい。例えば、第１のキーフラグメント３２３は、パブリックキー３５１を使用して暗号化し、プライベートキー３５２を使用して復号することができるが、第２のキーフラグメント３２４は、パブリックキー３５６を使用して暗号化し、プライベートキー３５７を使用して復号することができる。
【００５４】
マスターキー３２２を導出する必要があるとき、マスターキー導出モジュール３０６は、アプリケーションサーバ２５５から暗号化された第１のキーフラグメント３２３を受信してもよい。マスターキー導出モジュール３０６は、暗号化された第２のキーフラグメント３２４をファイルシステム２７１に照会してもよい。マスターキー導出モジュール３０６は、暗号化された第１のキーフラグメント３２３および暗号化された第２のキーフラグメント３２４の両方をＨＳＭ３５０のプライベートキー３５２を使用して復号し、それらを使用してマスターキー３２２を導出することができる。マスターキー３２２が導出されると、アプリケーションサーバ２５５に送信し、インメモリキャッシュ３０７に格納し、顧客データの暗号化または暗号化された顧客データの復号に使用することができる（例えば、図３Ｂに示す顧客データ３２０）。同様に、マスターキー３３２を導出する必要があるとき、マスターキー導出モジュール３０６は、アプリケーションサーバ２５５から暗号化された第１のキーフラグメント３３３を受信してもよい。マスターキー導出モジュール３０６は、暗号化された第２のキーフラグメント３３４をファイルシステム２７１に照会してもよい。マスターキー導出モジュール３０６は、暗号化された第１のキーフラグメント３３３および暗号化された第２のキーフラグメント３３４の両方をＨＳＭ３５５のプライベートキー３５７を使用して復号し、それらを使用してマスターキー３３２を導出することができる。マスターキー３３２が導出されると、アプリケーションサーバ２５５に送信し、インメモリキャッシュ３０７に格納し、顧客データ３３０の暗号化または暗号化された顧客データの復号に使用することができる（例えば、図３Ｂに示す顧客データ３３０）。
【００５５】
ＨＳＭ３５０のプライベートキー３５２だけが、ＨＳＭ３５０のパブリックキー３５１を使用して予め暗号化されたキーフラグメントを復号するために使用することができるので、マスターキー３２２および３３２の導出は、ＨＳＭ３５０および３５５の可用性次第であることに留意されてもよい。同様に、ＨＳＭ３５５のプライベートキー３５７だけが、ＨＳＭ３５５のパブリックキー３５６を使用して予め暗号化されたキーフラグメントを復号することができる。ＨＳＭ３５０が故障した場合、ＨＳＭ３５５のプライベートキー３５７は、ＨＳＭ３５０のパブリックキー３５１を使用して暗号化されたキーフラグメントを復号するために使用することができない。同様に、ＨＳＭ３５５が故障した場合、ＨＳＭ３５０のプライベートキー３５２は、ＨＳＭ３５５のパブリックキー３５６を使用して暗号化されたキーフラグメントを復号するために使用することができない。マスターキーおよび顧客は、特定のＨＳＭとそのパブリックキーとプライベートキーに関連付けられているので、ＨＳＭ３５０またはＨＳＭ３５５のいずれかを単一障害点としてもよい可能性がある。
【００５６】
キーフラグメントも冗長ＨＳＭのパブリックキーを用いて暗号化されるように、冗長性を適用して、ＨＳＭの数を増加することにより単一障害点の問題を低減することが可能かもしれない。複数の暗号化されたキーフラグメントが、データベース２７０に格納されてもよい。しかし、この方法は、特定のＨＳＭを記憶して、特定の暗号化されたキーフラグメント復号する必要があるため、複雑な可能性がある。パブリックキーは、そのキーのサイズより大きいデータの暗号化のために使用できないので、パブリックキーを使用して顧客データを暗号化することは、いくつかの制限がある可能性がある。このように、サポートすることができる顧客の数は、制限される可能性がある。
【００５７】
図４Ａは、一部の実施形態にしたがって、キーリリースを使用する暗号化の例を示す。キーリリースは、顧客が特定のＨＳＭと関連付けられない暗号化を可能にするために使用することができ、多くの顧客をサポートすることができる。実施形態によっては、暗号コンピューティングシステム２１２は、複数のキー（またはシード）４１０を有するキーセットを生成するよう構成することができる。キーセット４１０は、キーリリースと関連付けることができる。１つまたは複数のキーリリースがあってもよい。キーセット４１０は、任意の顧客に使用することができる。複数のキーリリースがある場合、キーリリースそれぞれが、固有のキーセット４１０と関連付けられる。
【００５８】
キーセット４１０は、リリース毎プライベートキー４１２、リリース毎パブリックキー４１３、リリース毎対称キー４１４、およびリリース毎キーフラグメント４１５を含むことができる。リリース毎キーフラグメント４１５は、マスターキー３０８を導出するため、第２のキーフラグメント３０４（図３Ａに示す）と同様に第２のキーフラグメントとして使用することができる。顧客それぞれに対して別の第１のキーフラグメント３０２があるので、同じリリース毎キーフラグメント４１５が、第２のキーフラグメント３０４として使用されても、別のマスターキー３０８が、顧客それぞれに導出される。
【００５９】
図４Ｂは、一部の実施形態にしたがって、複数のキーリリースの例を示す。キーリリースの数は、無限であってもよい。例えば、複数のキーリリースが、キーリリース４９２、４９４、４９６および４９８を含んでもよい。キーリリース４９２用のキーセットが、パブリックキー、プライベートキー、対称キー、およびキーフラグメントを含んでもよい。同様に、キーリリース４９４、４９６および４９８のキーセットを、図４Ｂに示す。キーリリースは、定期的に変更されてもよい。例えば、キーリリース４９２は、四半期毎に有効になるように設定することができ、キーリリース４９４、４９６および４９８がそれに続く。実施形態によっては、顧客が、特定のキーリリースを使用する、またはそれに変更する選択肢を有してもよい。例えば、キーリリース４９４が現在有効なキーリリースであっても、顧客は、キーリリース４９８が現在有効なキーリリースとして使用されるよう要求してもよい。実施形態によっては、任意の利用可能なキーリリースが、有効なキーリリースとして使用されてもよい。
【００６０】
実施形態によっては、暗号コンピューティングシステム２１２は、キーセット４１０（図４Ａに示す）のキーをＨＳＭサーバ２６０へエクスポートすることができる。キーセット４１０のキーそれぞれを、ＨＳＭ２６６のパブリックキー２６７を使用して暗号化し、ＨＳＭサーバ２６０へ送信することができる。ＨＳＭサーバ２６０は、ＨＳＭ２６６（図２に示す）のプライベートキー２６８を使用して、それらを暗号化することができる。これにより、それらが、ＨＳＭサーバ２６０に送信されるとき、キーセット４１０のキーの完全性を保護することができる。
【００６１】
ＨＳＭサーバ２６０は、ファイルシステム２７１にリリース毎プライベートキー４１２、リリース毎パブリックキー４１３、リリース毎対称キー４１４、およびリリース毎キーフラグメント４１５を格納することができる。例えば、キーリリース４９２に関連する情報などのキーリリース情報（またはシード情報）も、キーセット４１０と共にエクスポートすることができる。キーリリース情報は、ファイルシステム２７１から取得する正しいキーを決定するために使用されて、マスターキー３０８を導出することができる。
【００６２】
実施形態によっては、リリース毎キーフラグメント４１５が特定の地理位置の顧客のマスターキー３０８を導出するためにのみ使用することができるように、キーセット４１０が、地理特有となるよう構成することができる。例えば、同じ地理位置に配置されたＨＳＭサーバ２５５だけがリリース毎キーフラグメント４１５を処理できるように、地理特有コードをリリース毎キーフラグメント４１５の一部とすることができる。
【００６３】
図５は、一部の実施形態にしたがって、暗号化を実施するためにキーリリースのキーを使用する例を示す。この例では、ＨＳＭ３５０および３５５のキーリリース４９２とパブリックキー３５１、３５６とプライベートキー３５２、３５７が、暗号を示すために使用されている。ブロック５５０および５５２に示すように、キーリリース４９２のパブリックキーは、第１のキーフラグメント５７０および第２のキーフラグメント５８０を暗号化するために使用することができる。キーリリース４９２のキーフラグメントは、この例では第２のキーフラグメント５８０として使用されている。暗号化された第１のキーフラグメント５７０は、（図２に示す）データベース２７０に格納することができる。暗号化された第２のキーフラグメント５８０は、ファイルシステム２７１に格納することができる。
【００６４】
ブロック５５４に示すように、（第１のキーフラグメント５７０および第２のキーフラグメント５８０を復号するために使用することができる）キーリリース４９２のプライベートキーは、キーリリース４９２の対称キーを使用して暗号化される。ブロック５５６および５５８に示すように、（キーリリース４９２のプライベートキーを暗号化するために使用される）キーリリース４９２の対称キーは、ＨＳＭ３５０のパブリックキー３５１および（図３Ｃに示す）ＨＳＭ３５５のパブリックキー３５６を使用して、自身を暗号化する。（ブロック５５４に示す）キーリリース４９２の暗号化されたプライベートキーおよび（ブロック５５６および５５８に示す）キーリリース４９２の暗号化された対称キーは、ファイルシステム２７１に格納することができる。
【００６５】
実施形態によっては、キーリリース４９２の対称キーが、第１のキーフラグメント５７０および第２のキーフラグメント５８０を暗号化するためおよび暗号化された第１のキーフラグメント５７０および暗号化された第２のキーフラグメント５８０を復号するために使用されてもよい。暗号化された第１のキーフラグメント５７０は、（図２に示す）データベース２７０に格納することができる。暗号化された第２のキーフラグメント５８０は、ファイルシステム２７１に格納することができる。
【００６６】
マスターキー３０８を導出する必要があるとき、アプリケーションサーバ２５５は、暗号化された第１のキーフラグメント５７０をＨＳＭサーバ２６０へ送信してもよい。アプリケーションサーバ２５５はまた、関連するキーリリースがキーリリース４９２であることをＨＳＭサーバ２６０へ示してもよい。ＨＳＭサーバ２６０は、暗号化された第２のキーフラグメント５８０をファイルシステム２７１から取得することができる。ＨＳＭサーバ２６０は、暗号化された第１のキーフラグメント５７０および暗号化された第２のキーフラグメント５８０を復号するためにキーリリース４９２のプライベートキーが必要である。
【００６７】
上述の通り、キーリリース４９２のプライベートキーは、キーリリース４９２の対称キーを使用して暗号化される。キーリリース４９２の暗号化されたプライベートキーを復号するために、ＨＳＭサーバ２６０は、キーリリース４９２の対称キーを決定する必要がある。ＨＳＭサーバ２６０は、ＨＳＭ３５０とそのプライベートキー３５２またはＨＳＭ３５５とそのプライベートキー３５７のいずれかを使用して、キーリリース４９２の暗号化された対称キーを復号することができる。そして、ＨＳＭサーバ２６０は、キーリリース４９２の復号された対称キーを使用して、キーリリース４９２の暗号化されたプライベートキーを復号する。キーリリース４９２の復号されたプライベートキーを使用して、ＨＳＭサーバ２６０は、暗号化された第１のキーフラグメント５７０および暗号化された第２のキーフラグメント５８０を復号し、マスターキー３０８を導出することができる。
【００６８】
（ＨＳＭサーバ２６０などの）複数のＨＳＭサーバおよび（アプリケーションサーバ２５５などの）複数のアプリケーションサーバがあるとき、いずれのＨＳＭサーバ２６０も、この方法を用いてキーリリース４９２のプライベートキーを取得し、いずれのアプリケーションサーバ２５５からの要求も処理することができる。（図３Ｃに示すように）ＨＳＭ３５０のパブリックキー３５１を使用して第１のキーフラグメント５７０および第２のキーフラグメント５８０を暗号化する代わりに、第１のキーフラグメント５７０および第２のキーフラグメント５８０をキーリリース４９２のパブリックキーを使用して復号する。ＨＳＭ３５０または３５５のいずれかにそのプライベートキー３５２または３５６を使用させて、第１のキーフラグメント５７０および第２のキーフラグメント５８０に到達するためにキーリリース４９２の対称キーを復号するようにすることは、間接参照のレベルである。
【００６９】
キーリリース４９２の対称キーは、ＨＳＭ３５０のパブリックキー３５１およびＨＳＭ３５５のパブリックキー３５６を使用して暗号化されるので、キーリリース４９２の暗号化された対称キーは、ＨＳＭ３５０のプライベートキー３５２またはＨＳＭ３５５のプライベートキー３５７のいずれを使用しても復号できることに留意してもよい。ＨＳＭ３５０が故障した場合、キーリリース４９２の復号された対称キーが、ＨＳＭ３５５を使用して取得されてもよい。新しいＨＳＭが追加された場合、キーリリース４９２の対称キーは、新しいＨＳＭのパブリックキーを使用して復号される。したがって、１０個のＨＳＭがあれば、キーリリース４９２の対称キーは、１０個のＨＳＭのパブリックキーを使用することにより暗号化され、１０個の暗号化された対称キーが、ファイルシステム２７１に格納されてもよい。
【００７０】
１０個のＨＳＭのいずれのプライベートキーも、キーリリース４９２の１０個の適切な暗号化された対称キーを復号するために使用することができる。適切な暗号化された対称キーを復号するために関与するＨＳＭのすべてのプライベートキーを知る必要はないかもしれない。キーリリース４９２の復号された対称キーが取得できる限り、キーリリース４９２の復号されたプライベートキーは、取得できる。キーリリース４９２の復号されたプライベートキーを使用して、必要なマスターキーを導出するために、復号された第１のキーフラグメント５７０および第２のキーフラグメント５８０が、取得可能である。この方法により、単一障害点を排除する。実施形態によっては、同じＨＳＭのプライベートキーおよびパブリックキーを使用して、別の顧客に関連付けられた対称キーの暗号化および復号が可能な場合がある。
【００７１】
キーリリースが、キーリリース４９２からキーリリース４９４へ変更されると、リリース毎キーフラグメントが（キーリリース４９２のキーフラグメントからキーリリース４９４のキーフラグメントへ）変更されることに留意してもよい。キーリリース４９４のキーフラグメントは、第２のキーフラグメント４８０として使用されるので、これにより、別のマスターキーを導出させることができる。実施形態によっては、顧客を（異なるキーリリースに基づく）複数のマスターキーに関連付けることができるが、この顧客に対して、一度に一つの有効なマスターキーしかない。他のマスターキーは、同じマスターキーで予め暗号化された顧客データを復号するためにまだ必要となる場合がある。マスターキーに関連付けられた第１のキーフラグメント５７０または第２のキーフラグメント５８０のいずれかが喪失した、または破壊された場合、同じマスターキーで予め暗号化された顧客データを復号することはできない可能性がある。顧客データ全てを暗号化するために所定のキーリリースの同じキーセットを使用することは、安全でないかもしれないので、複数のリリースを有することにより、顧客データの保護に別のレベルの安全性を付加することができる。
【００７２】
実施形態によっては、暗号コンピューティングシステム２１２は、各キーリリースに対して生成する（例えば、リリース毎対称キー、リリース毎キーフラグメントなどの）キーを格納するよう構成することができる。暗号コンピューティングシステム２１２は、（図２に示す）ＨＳＭ２１５を含んで、ＨＳＭ２１５のパブリックキーを使用してキーリリースのキーを暗号化し、ＨＳＭ２１５のプライベートキーを使用してこれらのキーを復号することができる。暗号コンピューティングシステム２１２へのアクセスは、権限を付与された所定の人員だけに限定することができる。実施形態によっては、暗号コンピューティングシステム２１２は、キーリリースのキーをＨＳＭサーバ２６０へエクスポートした後に、（例えば、電源を切る、またはネットワークから遮断することにより）オフライン状態に切り替えることができる。オフライン状態では、暗号コンピューティングシステム２１２が不正利用者にアクセスされるのを防ぐことができる。
流れ図
【００７３】
図６Ａは、一部の実施形態にしたがって実施される、顧客データの要求を処理する例示的なプロセスの流れ図を示す。プロセス６００は、（図２に示す）アプリケーションサーバ２５５によって実施することができ、それを、（図４Ｂに示す）キーリリース４９２および（図３Ｃに示す）ＨＳＭ３５０に含まれるキーを用いて説明する。要求は、アプリケーションプログラムインタフェース（ＡＰＩ）またはユーザインタフェース（ＵＩ）を介して、顧客コンピューティングシステム２０５を使用してユーザにより行うことができる。ブロック６０２で、要求がアプリケーションサーバ２５５に受信される。顧客データは、データベース２７０に格納することができるが、それが顧客に関連付けられたマスターキー３０８で暗号化されている場合がある。ブロック６０４で、アプリケーションサーバ２５５が顧客データをデータベース２７０に照会することができる。
【００７４】
ブロック６０６で、アプリケーションサーバ２５５は、マスターキー３０８がアプリケーションサーバ２５５のインメモリキャッシュ３０７に存在するかを調べて確認することができる。マスターキー３０８が見つかった場合、プロセスは、顧客データがマスターキー３０８を使用して復号されるブロック６０８へ進むことができる。ブロック６１０で、復号された顧客データがユーザに送信される。
【００７５】
ブロック６０６で、アプリケーションサーバ２５５がインメモリキャッシュ３０７にマスターキー３０８を見つけられない場合、マスターキー３０８を導出する必要がある。このため、ブロック６１２に示すように、アプリケーションサーバ２５５はデータベース２７０に、暗号化された第１のキーフラグメント３０２を照会する必要がある。第１のキーフラグメント３０２は、キーリリース４９２のパブリックキーを使用して、前に暗号化されている。アプリケーションサーバ２５５は、暗号化された第１のキーフラグメント３０２をＨＳＭサーバ２６０へ送信し、マスターキー３０８が導出されるのを要求する。アプリケーションサーバ２５５はまた、他の情報もＨＳＭサーバ２６０へ送信することができる。これには、顧客識別情報、キーリリース情報を含んでもよい。
【００７６】
ブロック６１４で、ＨＳＭサーバ２６０は、第２のキーフラグメント３０４をファイルシステム２７１に照会することができる。第２のキーフラグメント３０４は、キーリリース４９２のパブリックキーを使用して、前に暗号化されている。
【００７７】
ブロック６１６で、マスターキー３０８の生成が、ＨＳＭサーバ２６０のマスターキー導出モジュール３０６（図３に示す）により実施されてもよい。マスターキー導出モジュール３０６は、復号された第１のキーセグメント３０２および復号された第２のキーセグメント３０４を使用してマスターキー３０８を導出し、インメモリキャッシュ３０７に格納することができる。復号された第１のキーセグメント３０２および復号された第２のキーセグメント３０４は、ＨＳＭ３５０のプライベートキーおよびキーリリース４９２の対称キーを使用して取得することができる。そして、プロセスは、顧客データが復号されるブロック６０８および顧客データが顧客に送信されるブロック６１０へ続く。
【００７８】
図６Ｂは、一部の実施形態にしたがって実施される、顧客データを暗号化する例示的なプロセスの流れ図を示す。プロセス６５０は、（図２に示す）アプリケーションサーバ２５５によって実施することができ、それを、（図４Ｂに示す）キーリリース４９２および（図３Ｃに示す）ＨＳＭ３５０に含まれるキーを用いて説明する。ブロック６５２で、顧客データは、アプリケーションサーバ２５５に受信される。ブロック６５４で、顧客データは、データベース２７０に保存される。
【００７９】
ブロック６５６で、アプリケーションサーバ２５５は、マスターキー３０８がアプリケーションサーバ２５５のインメモリキャッシュ３０７に存在するかを調べて確認することができる。マスターキー３０８が見つかった場合、プロセスは、顧客データがマスターキー３０８を使用して復号され、データベース２７０に保存されるブロック６５８へ進むことができる。
【００８０】
ブロック６５６で、アプリケーションサーバ２５５がインメモリキャッシュ３０７にマスターキー３０８を見つけられない場合、マスターキー３０８を導出する必要がある。このため、ブロック６６０に示すように、アプリケーションサーバ２５５はデータベース２７０に、暗号化された第１のキーフラグメント３０２を照会する必要がある。第１のキーフラグメント３０２は、キーリリース４９２のパブリックキーを使用して、前に暗号化されている。アプリケーションサーバ２５５は、暗号化された第１のキーフラグメント３０２をＨＳＭサーバ２６０へ送信し、マスターキー３０８が導出されるのを要求する。アプリケーションサーバ２５５は、他の情報もＨＳＭサーバ２６０へ送信することができる。これには、顧客識別情報、キーリリース情報を含んでもよい。
【００８１】
ブロック６６２で、ＨＳＭサーバ２６０は、第２のキーフラグメント３０４をファイルシステム２７１に照会することができる。第２のキーフラグメント３０４は、キーリリース４９２のパブリックキーを使用して、前に暗号化されている。
【００８２】
ブロック６６４で、マスターキー３０８の生成が、ＨＳＭサーバ２６０のマスターキー導出モジュール３０６（図３に示す）により実施されてもよい。マスターキー導出モジュール３０６は、復号された第１のキーセグメント３０２および復号された第２のキーセグメント３０４を使用してマスターキー３０８を導出し、インメモリキャッシュ３０７に格納することができる。復号された第１のキーセグメント３０２および復号された第２のキーセグメント３０４は、ＨＳＭ３５０のプライベートキーおよびキーリリース４９２の対称キーを使用して取得することができる。そして、プロセスは、顧客データが暗号化されるブロック６５８へ続く。
【００８３】
図７Ａは、一部の実施形態にしたがって実施される、暗号化を実施する例示的なプロセスの流れ図を示す。プロセス７００は、（図２に示す）ＨＳＭサーバ２６０によって実施することができ、それを、（図４Ｂに示す）キーリリース４９２および（図３Ｃに示す）ＨＳＭ３５０に含まれるキーを用いて説明する。ブロック７０５で、キーリリース４９２のキーは、ＨＳＭサーバ２６０に受信される。キーリリース４９２のキーは、（図２に示す）暗号コンピューティングシステム２１２により生成されている場合がある。ブロック７１０で、ＨＳＭサーバ２６０は、第１のキーフラグメント３０２および（キーリリース４９２のキーフラグメントと同一である）第２のキーフラグメント３０４をキーリリース４９２のパブリックキーを使用して暗号化し、それらをファイルシステム２７１に格納することができる。ブロック７１５で、ＨＳＭサーバ２６０は、キーリリース４９２のプライベートキーをキーリリース４９２の対称キーで暗号化し、それをファイルシステム２７１に格納する。ブロック７２０で、ＨＳＭサーバ２６０は、キーリリース４９２の対称キーをＨＳＭ３５０のＨＳＭパブリックキーで暗号化し、それをファイルシステム２７１に格納する。
【００８４】
図７Ｂは、一部の実施形態にしたがって実行される、マスターキーを生成する例示的なプロセスの流れ図を示す。プロセス７５０は、（図２に示す）ＨＳＭサーバ２６０によって実施することができ、それを（図４Ｂに示す）キーリリース４９２および（図３Ｃに示す）ＨＳＭ３５０に含まれるキーを用いて説明する。
【００８５】
ブロック７５５で、ＨＳＭサーバ２６０は、マスターキー３０８を導出する要求を受信することができる。この要求は、アプリケーションサーバ２５５によって開始することができる。
【００８６】
ブロック７６０で、ＨＳＭサーバ２６０は、アプリケーションサーバ２５５から暗号化された第１のキーフラグメント３０２およびキーリリース情報を受信することができる。第１のキーフラグメント３０２は、キーリリース４９２のパブリックキーを使用して、前に暗号化されている。ＨＳＭサーバ２６０は、暗号化された第２のキーフラグメント３０４をファイルシステム２７１から取得することができる。第２のキーフラグメント３０４は、キーリリース４９２のパブリックキーを使用して、前に暗号化されている。
【００８７】
ブロック７６５で、ＨＳＭサーバ２６０は、キーリリース４９２の暗号化された対称キーをファイルシステム２７１から取得することができる。キーリリース４９２の暗号化された対称キーは、ＨＳＭ３５０のパブリックキー３５１を使用して、前に暗号化されている。
【００８８】
ブロック７７０で、キーリリース４９２の対称キーは、ＨＳＭ３５０のプライベートキー３５２を使用して暗号化することができる。
【００８９】
ブロック７７５で、キーリリース４９２の復号された対称キーは、キーリリース４９２のプライベートキーを復号するために使用することができる。キーリリース４９２のプライベートキーは、キーリリース４９２の対称キーを使用して、前に暗号化されている。
【００９０】
ブロック７８０で、キーリリース４９２の復号されたプライベートキーは、第１のキーフラグメント３０２および第２のキーフラグメント３０４を復号するために使用することができる。第１のキーフラグメント３０２および第２のキーフラグメント３０４は、キーリリース４９２のパブリックキーを使用して、前に暗号化されている。
【００９１】
ブロック７８５で、復号された第１のキーフラグメント３０２および復号された第２のキーフラグメント３０４は、マスターキー導出モジュール３０６に使用されて、マスターキー３０８を導出することができる。
【００９２】
図８Ａは、一部の実施形態による、オンデマンドサービス環境のアーキテクチャ構成要素を示すシステム図８００を示す。クラウド８０４（または、インターネット）に配置されたクライアントマシンは、１つまたは複数のエッジルータ８０８および８１２を介して、オンデマンドサービス環境と通信することができる。エッジルータは、ファイアウォール８１６を介して、１つまたは複数のコアスイッチ８２０および８２４と通信することができる。コアスイッチは、ポッド８４０および８４４などの異なるポッドへサーバの負荷を分散することができるロードバランサ８２８と通信することができる。それぞれが、１つまたは複数のサーバおよび／または他のコンピューティングリソースを含むことができるポッド８４０および８４４は、オンデマンドサービスを提供するために使用されるデータ処理および他の動作を実行することができる。ポッドとの通信は、ポッドスイッチ８３２および８３６を介して行うことができる。オンデマンドサービス環境の構成要素は、データベースファイアウォール８４８およびデータベーススイッチ８５２を介して、データベース記憶システム８５６と通信することができる。
【００９３】
図８Ａおよび８Ｂに示すように、オンデマンドサービス環境にアクセスすることが、様々な異なるハードウェアおよび／またはソフトウェア構成要素間で送信される通信を含んでもよい。さらに、オンデマンドサービス環境８００は、実際のオンデマンドサービス環境を単純化して表示している。例えば、図８Ａおよび８Ｂには、それぞれの種類の装置が１つまたは２つ示されているだけであるが、オンデマンドサービス環境の実施形態によっては、どこでもそれぞれの種類の装置が１つから多数まで含まれてもよい。また、オンデマンドサービス環境は、図８Ａおよび８Ｂに示す装置それぞれを含む必要はなく、または図８Ａおよび８Ｂに示されていない追加の装置を含んでもよい。
【００９４】
さらに、オンデマンドサービス環境８００の装置の１つ以上が、同じ物理装置に実装されても、または別のハードウェアに実装されてもよい。装置によっては、ハードウェアを使用して実装されても、ハードウェアおよびソフトウェアの組み合わせを使用して実装されてもよい。したがって、「データ処理装置」、「機械」、「サーバ」および「装置」などの用語が本明細書で使用される場合、単一のハードウェア装置に限定されず、どちらかと言えば説明した機能を提供するよう構成された任意のハードウェアおよびソフトウェアを含む。
【００９５】
クラウド８０４は、インターネットを含む場合が多いデータネットワークまたは複数のデータネットワークを指すことを意図する。クラウド８０４に配置されるクライアントマシンは、オンデマンドサービス環境と通信してオンデマンドサービス環境により提供されるサービスにアクセスすることができる。例えば、クライアントマシンは、オンデマンドサービス環境にアクセスして、情報の取得、格納、編集、および／または処理を行うことができる。
【００９６】
実施形態によっては、エッジルータ８０８および８１２が、クラウド８０４とオンデマンドサービス環境８００の他の構成要素の間でパケットをルーティングする。エッジルータ８０８および８１２は、ボーダーゲートウェイプロトコル（ＢＧＰ）を採用することができる。ＢＧＰは、インターネットのコアルーティングプロトコルである。エッジルータ８０８および８１２は、インターネット上の自立システム間でネットワークの到達可能性を示すＩＰネットワークテーブルまたは「プレフィックス」を維持することができる。
【００９７】
１つまたは複数の実施形態で、ファイアウォール８１６が、オンデマンドサービス環境８００の内部構成要素をインターネットのトラフィックから保護することができる。ファイアウォール８１６は、１組の規則および他の基準に基づいて、オンデマンドサービス環境８００の内部構成要素へのアクセスを遮断、許可、または拒否することができる。ファイアウォール８１６は、パケットフィルタ、アプリケーションゲートウェイ、ステートフルフィルタ、プロキシサーバ、または任意の他の種類のファイアウォールのうちの１つ以上としての役割を持つことができる。
【００９８】
実施形態によっては、コアスイッチ８２０および８２４は、オンデマンドサービス環境８００内でパケットを転送する高容量スイッチである。コアスイッチ８２０および８２４は、オンデマンドサービス環境内の異なる構成要素の間でデータを素早くルーティングするネットワークブリッジとして構成することができる。実施形態によっては、２つ以上のコアスイッチ８２０および８２４を使用することにより、冗長性および／または短縮されたレイテンシを提供することができる。
【００９９】
実施形態によっては、ポッド８４０および８４４は、オンデマンドサービス環境により提供されるコアデータ処理およびサービス機能を実施することができる。各ポッドは、様々な種類のハードウェアおよび／またはソフトウェアコンピューティングリソースを含んでもよい。ポッドの構成の例を、図８Ｂを参照してより詳細に論じる。
【０１００】
実施形態によっては、ポッド８４０と８４４の間の通信が、ポッドスイッチ８３２および８３６を介して行われてもよい。ポッドスイッチ８３２および８３６は、ポッド８４０および８４４とクラウド８０４に配置されたクライアントマシンの間の通信を、例えば、コアスイッチ８２０および８２４を介して、容易にすることができる。また、ポッドスイッチ８３２および８３６は、ポッド８４０および８４４とデータベース記憶装置８５６の間の通信を容易にすることができる。
【０１０１】
実施形態によっては、ロードバランサ８２８が、ポッド８４０と８４４の間で作業負荷を分散することができる。ポッド間のオンデマンドサービスの要求のバランスを取ることにより、リソースの使用の改善、スループットの増加、応答時間の減少、および／またはオーバーヘッドの低減を支援することができる。ロードバランサ８２８は、マルチレイヤスイッチを含んで、トラフィックを解析し、転送することができる。
【０１０２】
実施形態によっては、データベース記憶装置８５６へのアクセスが、データベースファイアウォール８４８により保護されてもよい。データベースファイアウォール８４８は、プロトコルスタックのデータベースアプリケーション層で動作するコンピュータアプリケーションファイアウォールとしての役割をすることができる。データベースファイアウォール８４８は、構造化照会言語（ＳＱＬ）インジェクション、データベースルートキット、および不正な情報開示などのアプリケーション攻撃からデータベース記憶装置８５６を保護することができる。
【０１０３】
実施形態によっては、データベースファイアウォール８４８が、１つ以上の形態のリバースプロキシサービスを使用するホストを含んで、トラフィックをゲートウェイルータへ渡す前にそれをプロキシしてもよい。データベースファイアウォール８４８は、データベーストラフィックの内容を検査し、所定のコンテンツまたはデータベース要求を遮断することができる。データベースファイアウォール８４８は、ＴＣＰ／ＩＰスタック上のＳＱＬアプリケーション層で作動し、データベースまたはＳＱＬ管理インタフェースへのアプリケーションの接続の管理、ならびにデータベースネットワークまたはアプリケーションインタフェースとの間のパケットの移動の妨害および強要を行うことができる。
【０１０４】
実施形態によっては、データベース記憶装置８５６との通信が、データベーススイッチ８５２を介して行われてもよい。マルチテナントデータベースシステム８５６は、データベースの照会を取り扱う２つ以上のハードウェアおよび／またはソフトウェア構成要素を含んでもよい。したがって、データベーススイッチ８５２は、（例えば、ポッド８４０および８４４などの）オンデマンドサービス環境の他の構成要素によって送信されたデータベースクエリをデータベース記憶システム８５６内の正しい構成要素へ誘導することができる。実施形態によっては、データベース記憶システム８５６は、多くの異なる組織に共有されるオンデマンドデータベースシステムである。オンデマンドデータベースシステムは、マルチテナント方式、仮想化方式、または任意の他の種類のデータベース方式を採用してもよい。オンデマンドデータベースシステムを、図９および１０を参照してより詳細に論じる。
【０１０５】
図８Ｂは、一部の実施形態によるポッド８４４のアーキテクチャを示すシステム図を示す。ポッド８４４は、オンデマンドサービス環境８００のユーザにサービスを与えるために使用されてもよい。実施形態によっては、各ポッドが、様々なサーバおよび／または他のシステムを含んでもよい。ポッド８４４は、１つまたは複数のコンテンツバッチサーバ８６４、コンテンツサーチサーバ８６８、クエリサーバ８７２、ファイルフォースサーバ８７６、アクセス制御システム（ＡＣＳ）サーバ８８０、バッチサーバ８８４、およびアプリサーバ８８８を含む。また、ポッド８４４は、データベースインスタンス８９０、クイックファイルシステム（ＱＦＳ）８９２、およびインデクサ８９４を含む。１つまたは複数の実施形態で、ポッド８４４のサーバ間の一部またはすべての通信が、スイッチ８３６を介して送信されてもよい。
【０１０６】
実施形態によっては、アプリケーションサーバ８８８が、ポッド８４４を介してオンデマンドサービス環境８００により提供されるアプリケーションの構築をサポートする（例えば、プログラム、ルーチン、スクリプトなどの）手順の実行専用のハードウェアおよび／またはソフトウェアフレームワークを含んでもよい。一部のこうした手順は、本明細書に記載のサービスを提供する動作を含んでもよい。コンテンツバッチサーバ８６４は、ポッドの内部への要求を行うことができる。これらの要求は、長期間実行することができ、かつ／または特定の顧客にひも付けされなくてもよい。例えば、コンテンツバッチサーバ８６４は、ログマイニング、クリーンアップ作業、および保守タスクに関連する要求を扱うことができる。
【０１０７】
コンテンツサーチサーバ８６８は、照会およびインデクサ機能を提供することができる。例えば、コンテンツサーチサーバ８６８により提供される機能で、ユーザがオンデマンドサービス環境に格納されたコンテンツを検索できるようにしてもよい。ファイルフォースサーバ８７６は、ファイルフォース記憶装置８７８に保存された要求の情報を管理することができる。ファイルフォース記憶装置８７８は、書類、画像、およびベーシックラージオブジェクト（ＢＬＯＢ）などの情報を保存することができる。ファイルフォースサーバ８７６を使用して、情報の要求を管理することで、データベース上のイメージのフットプリントを削減することができる。
【０１０８】
クエリサーバ８７２は、１つまたは複数のファイルシステムから情報を取得するために使用することができる。例えば、クエリシステム８７２は、アプリサーバ８８８から情報の要求を受信し、ポッド外部に配置されるＮＦＳ８９６に情報クエリを送信することができる。ポッド８４４は、異なる組織が同じデータベースへのアクセスを共有するマルチテナント環境として構成されるデータベースインスタンス８９０を共有してもよい。さらに、ポッド８４４により与えられるサービスが、様々なハードウェアおよび／またはソフトウェアリソースを必要としてもよい。実施形態によっては、ＡＣＳサーバ８８０が、データ、ハードウェアリソース、またはソフトウェアリソースへのアクセスを制御してもよい。
【０１０９】
実施形態によっては、バッチサーバ８８４が、指定の時間にタスクを実行するために使用するバッチジョブを処理してもよい。したがって、バッチサーバ８８４は、アプリサーバ８８８などの他のサーバへ命令を送信して、バッチジョブを引き起こすことができる。実施形態によっては、ＱＦＳ８９２は、カリフォルニア州サンタクララのＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ（登録商標）から入手可能なオープンソースファイルシステムであってよい。ＱＦＳは、ポッド８４４内で入手可能な情報を保存し、それにアクセスするための高速ファイルシステムとしての働きをすることができる。ＱＦＳ８９２は、いくつかのボリューム管理機能をサポートし、多くのディスクがファイルシステム内にグループ化されるようにすることができる。ファイルシステムメタデータは、別のディスクのセットに保持することができ、長いディスクシークが許されないストリーミングアプリケーションで有用となる可能性がある。したがって、ＱＦＳシステムは、１つまたは複数のコンテンツサーチサーバ８６８および／またはインデクサ８９４と通信して、ネットワークファイルシステム８９６および／または他の記憶システムに格納されたデータの識別、取得、移動、および／または更新をすることができる。
【０１１０】
実施形態によっては、１つまたは複数のクエリサーバ８７２が、ＮＦＳ８９６と通信して、ポッド８４４の外部に格納された情報の取得および／または更新を行うことができる。ＮＦＳ８９６は、ポッド８４４に配置されたサーバがローカル記憶装置にアクセスするのと同様の手法で、情報にアクセスし、ネットワーク上でファイルにアクセスするようにできる。実施形態によっては、クエリサーバ８２２のクエリを、リソース要求をオンデマンドサービス環境で入手可能な様々なリソースへ分散することができるロードバランサ８２０を介してＮＦＳ８９６に送信することができる。ＮＦＳ８９６はまた、ＱＦＳ８９２と通信して、ＮＦＳ８９６に保存された情報を更新し、かつ／またはポッド８４４内に配置されたサーバによって使用される情報をＱＦＳ８９２に提供することができる。
【０１１１】
実施形態によっては、ポッドが、１つまたは複数のデータベースインスタンス８９０を含んでもよい。データベースインスタンス８９０は、情報をＱＦＳ８９２へ送信することができる。情報がＱＦＳへ送信されると、追加のデータベースコールを必要とすることなく、ポッド８４４内のサーバで利用可能とすることができる。実施形態によっては、データベース情報がインデクサ８９４へ送信されてもよい。インデクサ８９４は、データベース８９０および／またはＱＦＳ８９２で入手可能な情報の索引を提供することができる。索引情報は、ファイルフォースサーバ８７６および／またはＱＦＳ８９２に提供することができる。
【０１１２】
図９は、一部の実施形態による、オンデマンドサービスが使用されることがある環境９１０のブロック図を示す。環境９１０は、オンデマンドデータベースサービス９１６を含む。ユーザシステム９１２は、ユーザがデータベースユーザシステムにアクセスするために使用する任意の機械またはシステムであってよい。例えば、ユーザシステム９１２のいずれも、ハンドヘルドコンピューティングシステム、携帯電話、ラップトップコンピュータ、ワークステーション、および／またはコンピューティングシステムのネットワークであってよい。図９および１０に示すように、ユーザシステム９１２は、ネットワーク９１４を介してオンデマンドデータベースサービス９１６と対話することがある。
【０１１３】
システム９１６などのオンデマンドデータベースサービスは、データベースシステムの構築および／または保守と必ずしも関連する必要がない外部ユーザに利用可能になされるが、代わりに、ユーザが（例えば、ユーザの要求で）データベースシステムが必要なとき、その使用のために利用可能にされてもよいデータベースシステムである。一部のオンデマンドデータベースサービスは、マルチテナントデータベースシステム（ＭＴＳ）を形成するため、共通のデータベース画像のテーブルに保存された１つまたは複数のテナントからの情報を保存することができる。したがって、「オンデマンドデータベースサービス９１６」および「システム９１６」は、本明細書では同じ意味で使用される。データベース画像は、１つまたは複数のデータベースオブジェクトを含んでもよい。リレーショナルデータベース管理システム（ＲＤＢＭＳ）または等価物は、データベースオブジェクト（複数可）に対する情報の記憶および取得を実行することができる。アプリケーションプラットフォーム９１８は、ハードウェアおよび／またはオペレーティングシステムなどのソフトウェアなどのシステム９１６のアプリケーションが動作することを可能にするフレームワークであってもよい。一実装形態では、オンデマンドデータベースサービス９１６は、オンデマンドデータベースサービスのプロバイダ、ユーザシステム９１２を介してオンデマンドデータベースサービスへアクセスするユーザ、またはユーザシステム９１２を介してオンデマンドデータベースサービスにアクセスするサードパーティアプリケーションディベロッパが開発した１つまたは複数のアプリケーションの作成、管理、および実行を可能にするアプリケーションプラットフォーム９１８を含んでもよい。
【０１１４】
ネットワークインタフェース９２０、アプリケーションプラットフォーム９１８、テナントデータ９２３用テナントデータ記憶装置９２２、システム９１６および場合によっては複数のテナントがアクセス可能なシステムデータ９２５用システムデータ記憶装置９２４、システム９１６の様々な機能を実装するプログラムコード９２６、およびアプリケーションホスティングサービスの一部としてアプリケーションを実行する、ＭＴＳシステムプロセスおよびテナント特有のプロセスを実行するプロセススペース９２８を含む、システム９１６の構成要素の一構成を図９に示す。システム９１６上で実行可能な追加のプロセスは、データベースインデクシングプロセスを含む。
【０１１５】
ユーザシステム９１２のユーザは、それぞれの能力が異なってもよく、特定のユーザシステム９１２の能力は、全体として現在のユーザへの許可（許可レベル）によって決定されることがある。例えば、コールセンターエージェントが、システム９１６と対話するために特定のユーザシステム９１２を使用している場合、ユーザシステム９１２は、コールセンターエージェントに割り当てられた能力を有する。しかし、管理者は、システム９１６と対話するためにそのユーザシステムを使用しているが、そのユーザシステムは、その管理者に割り当てられた能力を有する。階層的ロールモデルを有するシステムでは、一許可レベルのユーザは、より低い許可レベルのユーザがアクセス可能なアプリケーション、データおよびデータベース情報にアクセスすることができるが、より高い許可レベルのユーザがアクセス可能な特定のアプリケーション、データベース情報、およびデータにアクセスできない。したがって、ユーザのセキュリティまたは許可レベルに応じて、異なるユーザは、アプリケーションおよびデータベース情報へのアクセスおよび変更に関して異なる能力を有してもよい。
【０１１６】
ネットワーク９１４は、任意のネットワークまたは互いに通信する装置のネットワークの組み合わせである。例えば、ネットワーク９１４は、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（広域ネットワーク）、電話ネットワーク、無線ネットワーク、ポイントツーポイントネットワーク、スター型ネットワーク、トークンリングネットワーク、ハブネットワーク、または他の適切な構成のいずれか１つまたは任意の組み合わせであってよい。現在使用される最も一般的な型のコンピュータネットワークは、ＴＣＰ／ＩＰ（伝送制御プロトコルおよびインターネットプロトコル）ネットワーク（例えば、インターネット）なので、このネットワークは、本明細書の多くの例で使用される。しかし、ＴＣＰ／ＩＰがよく実装されるプロトコルでありながら、一部の実施形態で使用されるネットワークは、そのように制限されるものではないことを理解されたい。
【０１１７】
ユーザシステム９１２は、ＴＣＰ／ＩＰを使用してシステム９１６と通信することがあり、より高いネットワークレベルで、ＨＴＴＰ、ＦＴＰ、ＡＦＳ、ＷＡＰなどの他の共通インターネットプロトコルを使用して通信することがある。ＨＴＴＰが使用される例では、ユーザシステム９１２は、システム９１６でＨＴＴＰサーバとの間でＨＴＴＰメッセージを送受信する一般に「ブラウザ」と呼ばれるＨＴＴＰクライアントを含むことがある。こうしたＨＴＴＰサーバは、システム９１６とネットワーク９１４の間で、唯一のネットワークインタフェースとして実装されることがあるが、他の技術も同様にまたは代替として、使用されることがある。実施形態によっては、システム９１６とネットワーク９１４の間のインタフェースは、負荷のバランスを取り、入ってくるＨＴＴＰ要求を複数のサーバへ均等に分散するラウンドロビンＨＴＴＰ要求ディストリビュータなどの負荷分割機能を含む。少なくともそのサーバにアクセスしているユーザについては、複数のサーバのそれぞれが、ＭＴＳのデータへのアクセスを有する。しかし、他の代替の構成が代わりに使用されてもよい。
【０１１８】
実施形態によっては、図９に示すシステム９１６は、ウェブベースの顧客関係管理（ＣＲＭ）システムを実装する。例えば、実施形態によっては、システム９１６は、ＣＲＭソフトウェアアプリケーションの実装および実行をするよう構成されるアプリケーションサーバを含むほか、ユーザシステム９１２との間で関連データ、コード、フォーム、ウェブページおよび他の情報をやり取りし、関連データ、オブジェクト、およびウェブページコンテンツをデータベースシステムへ格納し、そこから取得する。マルチテナントシステムの場合、マルチテナントのデータは、同じ物理的データベースオブジェクトに格納することができるが、テナントのデータは、こうしたデータが明示的に共有されてない限り、典型的には、一テナントが他のテナントのデータへのアクセスを有することがないように、一テナントのデータが他のテナントのデータと論理的に隔離されるように配置される。特定の実施形態では、システム９１６は、ＣＲＭアプリケーション以外の、またはそれに加えて、アプリケーションを実装する。例えば、システム９１６は、テナントに複数のホストされた（標準およびカスタムの）アプリケーションへのアクセスを提供することができる。ＣＲＭを含んでも含まなくてもよいユーザ（または、サードパーティディベロッパ）アプリケーションは、アプリケーションの作成および１つまたは複数のデータベースオブジェクトへの記憶ならびにシステム９１６のプロセス空間の仮想マシン内でのアプリケーションの実行を管理するアプリケーションプラットフォーム９１８にサポートされてもよい。
【０１１９】
各ユーザシステム９１２は、デスクトップパーソナルコンピュータ、ワークステーション、ラップトップ、ＰＤＡ、携帯電話、または任意の無線アクセスプロトコル（ＷＡＰ）対応装置またはインターネットもしくは他のネットワーク接続へ直接もしくは間接的にインタフェース可能な任意の他のコンピューティングシステムを含んでもよい。ユーザシステム９１２は、典型的には、ユーザシステム９１２のユーザ（例えば、マルチテナントデータベースシステムのサブスクライバなど）がネットワーク９１４上でシステム９１６からそのユーザが利用可能な情報、ページおよびアプリケーションに対するアクセス、処理および閲覧を可能にするＨＴＴＰクライアント、例えば、ＭｉｃｒｏｓｏｆｔのＩｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ（登録商標）ブラウザ、ＭｏｚｉｌｌａのＦｉｒｅｆｏｘ（登録商標）ブラウザ、Ｏｐｅｒａのブラウザ、または携帯電話、ＰＤＡもしくは他の無線装置の場合はＷＡＰ対応ブラウザなどの閲覧プログラムを起動する。
【０１２０】
各ユーザシステム９１２はまた、典型的には、システム９１６または他のシステムもしくはサーバにより提供されるページ、フォーム、アプリケーションおよび他の情報と共に（例えば、モニタ画面、ＬＣＤディスプレイなどの）ディスプレイ上でブラウザにより提供されるグラフィカルユーザインタフェース（ＧＵＩ）と対話するための、キーボード、マウス、トラックボール、タッチパッド、タッチスクリーン、ペンなどの１つまたは複数のユーザインタフェースデバイスを含む。例えば、ユーザインタフェースデバイスは、システム９１６がホストするデータとアプリケーションにアクセスし、保存されたデータ上で検索するために使用することができ、その他に、ユーザに提示することができる様々なＧＵＩページとユーザが対話することを可能にする。上述の通り、実施形態は、ネットワークの特定のグローバルインターネットワークを指すインターネットで使用するのに好適である。しかし、イントラネット、エクストラネット、仮想プライベートネットワーク（ＶＰＮ）、ＴＣＰ／ＩＰベースでないネットワーク、任意のＬＡＮまたはＷＡＮなどの他のネットワークを、インターネットの代わりに使用してもよいことを理解されたい。
【０１２１】
一部の実施形態によれば、ユーザシステム９１２のそれぞれおよびその構成要素のすべては、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）プロセッサなどの中央処理装置を使用して実行されえるコンピュータコードを含む、ブラウザなどのアプリケーションを使用して、オペレータが設定可能である。同様に、システム９１６（および、２つ以上が提示されているＭＴＳの追加のインスタンス）およびそれらの構成要素のすべては、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）プロセッサまたは同種のもの、および／または複数のプロセッサユニットを含むプロセッサシステム９１７などの中央処理装置を使用して実行されるコンピュータコードを含むアプリケーション（複数可）を使用して、オペレータが設定可能であることがある。
【０１２２】
コンピュータプログラム製品の実装は、本明細書に記載の実施形態のプロセスのいずれかを実施するようにコンピュータをプログラムするために使用される、そこに保存された命令を有するマシン可読記憶媒体を含む。本明細書に記載するように、ウェブページ、アプリケーション、ならびに他のデータおよびメディアコンテンツと相互通信し、処理するようにシステム９１６を動作させ、設定するコンピュータコードは、ダウンロードされ、ハードディスクに格納されるのが好ましいが、全体のプログラムコードまたはその一部はまた、ＲＯＭまたはＲＡＭなどの任意の他の揮発性または不揮発性メモリ媒体またはデバイスに格納されてもよく、あるいは、フロッピーディスク、光ディスク、デジタル多用途ディスク（ＤＶＤ）、コンパクトディスク（ＣＤ）、マイクロドライブ、および光磁気ディスクを含む任意の種類の回転媒体、ならびに磁気または光カード、（分子メモリＩＣを含む）ナノシステム、または命令および／もしくはデータを格納するのに好適な任意の種類のメディアまたはデバイスなどのプログラムコードを格納することができる任意の媒体で提供されてもよい。さらに、全体のプログラムコード、またはその一部は、例えばインターネット上の伝送媒体上のソフトウェアソース、または他のサーバから、送信され、ダウンロードされてもよく、あるいは、（例えば、ＴＣＰ／ＩＰ、ＨＴＴＰ、ＨＴＴＰＳ、イーサネット（登録商標）などの）任意の通信媒体およびプロトコルを使用して、（例えば、エクストラネット、ＶＰＮ、ＬＡＮなどの）任意の他の従来型ネットワーク接続上で送信されてもよい。実施形態を実施するコンピュータコードは、クライアントシステムおよび／またはサーバまたはサーバシステム上で実行することができる任意のプログラミング言語で実装することができることも認識されよう。プログラミング言語は、例えば、Ｃ、Ｃ＋＋、ＨＴＭＬ、任意の他のマークアップ言語、ＪＡＶＡ（商標）、ＪａｖａＳｃｒｉｐｔ（登録商標）、ＡｃｔｉｖｅＸ（登録商標）、ＶＢＳｃｒｉｐｔなどの任意の他のスクリプト言語が挙げられ、公知の多くの他のプログラミング言語が使用されてもよい。（Ｊａｖａ（商標）は、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ（登録商標）、Ｉｎｃ．の商標である）。
【０１２３】
一部の実施形態によれば、各システム９１６は、ウェブページ、フォーム、アプリケーション、データおよびメディアコンテンツをユーザ（クライアント）システム９１２に提供して、システム９１６のテナントとしてのユーザシステム９１２によるアクセスをサポートするよう構成される。このように、システム９１６は、データが共有されるのでない限り、それぞれのテナントのデータを分離しておくためセキュリティ機構を提供する。２つ以上のＭＴＳが使用される場合、それらは、（例えば、単一のビルまたはキャンパスに配置されたサーバファームに）互いに近接して配置してもよい、またはそれらは、互いに遠隔な位置に分散されてもよい（例えば、Ａ町に配置された１つまたは複数のサーバおよびＢ町に配置された１つまたは複数のサーバ）。本明細書で使用される場合、各ＭＴＳは、ローカルにまたは１つもしくは複数の地理位置へ分散された、論理的におよび／または物理的に接続されたサーバを含んでもよい。さらに、「サーバ」という用語は、処理を行うハードウェアおよびプロセススペース（複数可）、ならびに当業者に公知の、関連する記憶システムおよび（例えば、ＯＯＤＢＭＳまたはＲＤＢＭＳなどの）データベースアプリケーションを含むコンピューティングシステムを含むことを意味する。
【０１２４】
「サーバシステム」および「サーバ」は、本明細書ではよく同じ意味で使用されることも理解されたい。同様に、本明細書に記載のデータベースオブジェクトは、単一のデータベース、分散されたデータベース、分散されたデータベースのコレクション、冗長オンラインもしくはオフラインバックアップまたは他の冗長性を有するデータベースとして実装することができ、分散されたデータベースまたは記憶ネットワークおよび関連する処理インテリジェンスを含むことがある。
【０１２５】
図１０は、一部の実施形態による、システム９１６および様々な相互接続をさらに示す環境９１０のブロック図を示す。図１０は、ユーザシステム９１２が、プロセッサシステム９１２Ａ、メモリシステム９１２Ｂ、入力システム９１２Ｃ、および出力システム９１２Ｄを含むことができることを示す。図１０は、ネットワーク９１４およびシステム９１６を示す。図１０はまた、システム９１６が、テナントデータ記憶装置９２２、テナントデータ９２３、システムデータ記憶装置９２４、システムデータ９２５、ユーザインタフェース（ＵＩ）１０３０、アプリケーションプログラムインタフェース（ＡＰＩ）１０３２、ＰＬ／ＳＯＱＬ１０３４、セーブルーチン１０３６、アプリケーションセットアップ機構１０３８、アプリケーションサーバ１０００１−１０００Ｎ、システムプロセススペース１００２、テナントプロセススペース１００４、テナント管理プロセススペース１０１０、テナント記憶領域１０１２、ユーザ記憶１０１４、およびアプリケーションメタデータ１０１６を含んでもよいことを示す。実施形態によっては、環境９１０が、上記に記載したものと同じ構成要素を有してなくてもよい、かつ／または上記に記載したものの代わりに、または追加で他の構成要素を有してもよい。
【０１２６】
ユーザシステム９１２、ネットワーク９１４、システム９１６、テナントデータ記憶装置９２２、およびシステムデータ記憶装置９２４は、上記図９で論じられている。ユーザシステム９１２に関して、プロセッサシステム９１２Ａは、プロセッサの任意の組み合わせでよい。メモリシステム９１２Ｂは、１つもしくは複数のメモリ装置、短期記憶、および／または長期記憶メモリの組み合わせでもよい。入力システム９１２Ｃは、キーボード、マウス、トラックボール、スキャナ、カメラ、および／またはネットワークへのインタフェースなどの入力デバイスの任意の組み合わせでもよい。出力システム９１２Ｄは、モニタ、プリンタ、および／またはネットワークへのインタフェースなどの出力デバイスの任意の組み合わせでもよい。図１０によって示すように、システム９１６は、１組のＨＴＴＰアプリケーションサーバ１０００、アプリケーションプラットフォーム９１８、テナントデータ記憶装置９２２およびシステムデータ記憶装置９２４として実装される（図９の）ネットワークインタフェース９２０を含んでもよい。また、個々のテナントプロセススペース１００４およびテナント管理プロセススペース１０１０を含むシステムプロセススペース１００２が示される。各アプリケーションサーバ１０００は、ユーザシステム９１２の要求に応対するためテナントデータ記憶装置９２２およびその中のテナントデータ９２３、ならびにシステムデータ記憶装置９２４およびその中のシステムデータ９２５に対して構成されてもよい。テナントデータ９２３は、データの物理的配置および／または論理的配置のいずれとすることもできる、個々のテナントデータ記憶領域１０１２に分割されることがある。各テナントデータ記憶領域１０１２内で、ユーザ記憶１０１４およびアプリケーションメタデータ１０１６は、各ユーザに同様に配分されることがある。例えば、ユーザの直近に使用した（ＭＲＵ）項目の写しは、ユーザ記憶１０１４に格納されることがある。同様に、テナントである組織全体用のＭＲＵ項目の写しは、テナント記憶領域１０１２に格納されることがある。ユーザシステム９１２のユーザおよび／または開発者に、ＵＩ１０３０は、ユーザインタフェースを提供し、ＡＰＩ１０３２はシステム９１６常駐プロセスへのアプリケーションプログラマインタフェースを提供する。テナントデータおよびシステムデータは、Ｏｒａｃｌｅ（商標）データベースなどの様々なデータベースに格納されてもよい。
【０１２７】
アプリケーションプラットフォーム９１８は、アプリケーション開発者のアプリケーションの作成および管理をサポートするアプリケーションセットアップ機構１０３８を含み、それを、例えば、テナント管理プロセス１０１０によって管理されるテナントプロセススペース１００４として、サブスクライバが実行するために、セーブルーチン１０３６によりテナントデータ記憶装置９２２へメタデータとして保存することができる。こうしたアプリケーションへの呼び出しは、プログラミング言語スタイルインタフェース拡張をＡＰＩ１０３２へ提供するＰＬ／ＳＯＱＬ３４を使用して符号化することができる。一部のＰＬ／ＳＯＱＬ言語の実施形態の詳細な説明は、本発明の譲受人に譲渡された、２００７年９月２１日出願のＣｒａｉｇ  Ｗｅｉｓｓｍａｎによる「ＭＥＴＨＯＤ  ＡＮＤ  ＳＹＳＴＥＭ  ＦＯＲ  ＡＬＬＯＷＩＮＧ  ＡＣＣＥＳＳ  ＴＯ  ＤＥＶＥＬＯＰＥＤ  ＡＰＰＬＩＣＡＴＩＯＮＳ  ＶＩＡ  Ａ  ＭＵＬＴＩ−ＴＥＮＡＮＴ  ＯＮ−ＤＥＭＡＮＤ  ＤＡＴＡＢＡＳＥ  ＳＥＲＶＩＣＥ」と題する米国特許第７，７３０，４７８号に論じられ、その内容全体およびすべての目的は参照により本明細書に組み込まれる。アプリケーションへの呼び出しは、システムプロセスによって検出することができ、それは、呼び出しを行い、メタデータをアプリケーションとして仮想マシンで実行するサブスクライバのためにアプリケーションメタデータ１０１６の取得を管理する。
【０１２８】
各アプリケーションサーバ１０００は、別のネットワーク接続を介して、例えばシステムデータ９２５およびテナントデータ９２３へのアクセスを有する、データベースシステムに通信可能に結合可能である。例えば、一アプリケーションサーバ１０００１は、（インターネットなどの）ネットワーク９１４を介して結合されることがあり、他のアプリケーションサーバ１０００Ｎ−１は、ダイレクトネットワークリンクを介して結合されることがあり、他のアプリケーションサーバ１０００Ｎは、さらに別のネットワーク接続によって、結合されることがある。伝送制御プロトコルおよびインターネットプロトコル（ＴＣＰ／ＩＰ）は、アプリケーションサーバ１０００とデータベースシステムの間を通信するための典型的なプロトコルである。しかし、他のトランスポートプロトコルが、使用されるネットワークの相互接続に応じてシステムを最適化するために使用されてもよい。
【０１２９】
特定の実施形態では、アプリケーションサーバ１０００それぞれは、テナントである任意の組織に関連する任意のユーザへの要求を取り扱うよう構成される。アプリケーションサーバをいつでもどのような理由でも追加し、サーバプールから取り除くことができることが望ましいため、ユーザおよび／または組織にとって特定のアプリケーションサーバ１０００と密接に関係するサーバが無いことが好ましい。したがって、実施形態によっては、（Ｆ５  Ｂｉｇ−ＩＰ  ロードバランサなどの）負荷分散機能を実装するインタフェースシステムは、アプリケーションサーバ１０００への要求を分散するためにアプリケーションサーバ１０００とユーザシステム９１２の間に通信可能に結合される。実施形態によっては、ロードバランサは、最小の接続アルゴリズムを使用して、ユーザ要求をアプリケーションサーバ１０００へ送り届ける。ラウンドロビンおよび測定された応答時間などの負荷分散アルゴリズムの他の例も、使用されてもよい。例えば、特定の実施形態では、同一ユーザからの３つの連続した要求は、３つの異なるアプリケーションサーバ１０００に届く可能性があり、異なるユーザからの３つの要求は、同一アプリケーションサーバ１０００に届く可能性がある。このように、システム９１６はマルチテナントであり、システム９１６が異なるユーザおよび組織にわたる異なるオブジェクト、データおよびアプリケーションの記憶およびそれらへのアクセスを取り扱う。
【０１３０】
記憶装置の例として、一テナントが、各コールセンターエージェントがシステム９１６を使用してその営業プロセスを管理する、営業職員を雇用する会社である場合がある。したがって、ユーザは、（例えば、テナントデータ記憶装置９２２で）ユーザの個人営業プロセスにすべて適用可能な、連絡先データ、見込み客データ、顧客フォローアップデータ、実績データ、目標および進捗データなどを維持する場合がある。ＭＴＳ構成の例では、アクセス、閲覧、変更、報告、送信、計算などを行うためのデータおよびアプリケーションの全てが、ネットワークアクセス以外何もないユーザシステムにより維持およびアクセス可能なので、ユーザは、多くの異なるユーザシステムのいずれからも自身の営業努力および営業サイクルを管理することができる。例えば、コールセンターエージェントが顧客を訪問していて、顧客のロビーにインターネットアクセスがある場合、コールセンターエージェントは、ロビーでその顧客が到着するのを待っている間に、その顧客に関する重要な更新を取得することができる。
【０１３１】
各ユーザのデータは、各ユーザの雇用主に関わらず、他のユーザのデータと分離されている場合があり、一部のデータは、テナントである所与の組織の複数のユーザまたはすべてのユーザにより共有またはアクセス可能な全組織的データである場合がある。したがって、テナントレベルで配分される、システム９１６により管理される一部のデータ構造である場合があり、他のデータ構造は、ユーザレベルで管理されている場合がある。ＭＴＳは、考えられる競合を含む複数のテナントをサポートすることがあるので、データ、アプリケーション、およびアプリケーションの使用を分離するセキュリティプロトコルを有する必要がある。また、多くのテナントが、自身のシステムを維持するよりＭＴＳへのアクセスを選択する可能性があるので、冗長性、動作可能時間、およびバックアップが、ＭＴＳに実装してもよい追加の機能である。ユーザ特有のデータおよびテナント特有のデータに加えて、システム９１６はまた、複数のテナントまたは他のデータにより使用可能なシステムレベルのデータを維持することがある。こうしたシステムレベルのデータは、テナント間で共有可能な業界レポート、ニュース、掲示などを含むことがある。
【０１３２】
特定の実施形態では、（クライアントマシン／システムであってよい）ユーザシステム９１２が、アプリケーションサーバ１０００と通信して、１つまたは複数のクエリをテナントデータ記憶装置９２２および／またはシステムデータ記憶装置９２４へ送信することを必要とすることがあるシステム９１６からのシステムレベルおよびテナントレベルのデータを要求し、更新する。（システム９１６のアプリケーションサーバ１０００などの）システム９１６は、所望の情報にアクセスするように設計されている（ＳＱＬクエリなどの）１つまたは複数のＳＱＬ文を自動的に生成する。システムデータ記憶装置９２４は、クエリプランを生成して、データベースの要求されたデータにアクセスすることができる。
【０１３３】
各データベースは、一般に予め定義されたカテゴリに適合されるデータを含む１組の論理テーブルなどのオブジェクトのコレクションとして閲覧することができる。「テーブル」は、データオブジェクトの一表現であり、本明細書では、一部の実施形態によるオブジェクトおよびカスタムオブジェクトの概念記述を簡単にするために使用することができる。「テーブル」および「オブジェクト」は、本明細書では同じ意味で使用されることを理解されたい。各テーブルは、一般に閲覧可能な図内のコラムまたはフィールドとして論理的に配置された１つまたは複数のデータカテゴリを含む。各列またはテーブルの記録は、フィールドによって規定された各カテゴリ用のデータのインスタンスを含む。例えば、ＣＲＭデータベースは、氏名、住所、電話番号、ファックス番号などの基本的な連絡先情報のフィールドを使って顧客を記述するテーブルを含むことができる。他のテーブルは、顧客、製品、販売価格、日付などの情報のフィールドを含む発注書を記述することがある。一部のマルチテナントデータベースシステムでは、標準エンティティテーブルは、全てのテナントの使用に供されることがある。ＣＲＭデータベースアプリケーションでは、こうした標準エンティティは、口座、連絡先、見込み、および機会のデータ用のテーブルを含むことがあり、それぞれが予め定義されたフィールドを含む。「エンティティ」という用語はまた、本明細書では「オブジェクト」および「テーブル」と同じ意味で使用されてもよいと理解されたい。
【０１３４】
一部のマルチテナントデータベースシステムでは、テナントが、カスタムオブジェクトを生成し保存することを許可されてもよい、あるいは例えば、カスタムインデックスフィールドを含む、標準オブジェクト用のカスタムフィールドを生成することにより、標準エンティティまたはオブジェクトをカスタマイズすることを許可されてもよい。そのすべての内容およびすべての目的が参照により本明細書に組み入れられる、Ｗｅｉｓｓｍａｎなどの「ＣＵＳＴＯＭ  ＥＮＴＩＴＩＥＳ  ＡＮＤ  ＦＩＥＬＤＳ  ＩＮ  Ａ  ＭＵＬＴＩ−ＴＥＮＡＮＴ  ＤＡＴＡＢＡＳＥ  ＳＹＳＴＥＭ」と題する米国特許第７，７７９，０３９号は、カスタムオブジェクトを生成するほか、マルチテナントデータベースシステムで標準オブジェクトをカスタマイズするシステムおよび方法を教授する。実施形態によっては、例えば、すべてのカスタムエンティティのデータの列が、組織毎の複数の論理テーブルを含むことができる単一のマルチテナント物理的テーブルに格納される。実施形態によっては、単一の顧客用の複数の「テーブル」は、実際には１つの大きいテーブルおよび／または他の顧客のデータと同じテーブルに格納されてもよい。
【０１３５】
本開示のこれらおよび他の態様は、様々な種類のハードウェア、ソフトウェア、ファームウェアなどによって実装することができる。例えば、本開示の一部の特徴は、本明細書に記載の様々な動作を実施するために、少なくとも部分的に、プログラム命令、状態情報などを含む機械可読媒体によって実装されてもよい。プログラム命令の例として、コンパイラによって生成された機械コードおよびインタープリタを使用してコンピュータによって実行可能なより高いレベルのコードを含むファイルの両方が挙げられる。機械可読媒体の例として、ハードディスク、フロッピーディスク、および磁気テープなどの磁気媒体、ＣＤ−ＲＯＭディスクなどの光媒体、磁気光媒体、および読み出し専用メモリ装置（「ＲＯＭ」）およびランダムアクセスメモリ（「ＲＡＭ」）などのプログラム命令を保存し実行するよう特別に構成されたハードウェア装置が挙げられるが、それらに限定されない。
【０１３６】
１つまたは複数の実施形態および技術が、サービスクラウドコンソールが、複数のテナントをサポートすることができるオンデマンドデータベースサービス用フロントエンドを提供するアプリケーションサーバを有するシステムで実装される実装形態を参照して説明されるが、１つまたは複数の実施形態および技術は、マルチテナントデータベースにもアプリケーションサーバの配置にも制限されない。実施形態は、他のデータベースアーキテクチャ、すなわち、ＯＲＡＣＬＥ（登録商標）、ＩＢＭによるＤＢ２（登録商標）などを用いて、請求される実施形態の範囲から逸脱することなく、実施することができる。
【０１３７】
上述の実施形態のいずれも、単独または任意の組み合わせで互いに共に使用することができる。様々な実施形態が、本明細書の１つまたは複数の場所で論じ言及することができる従来技術の様々な不備により動機を与えられてきたが、その実施形態は、これらの不備のいずれにも対処することを必要としない。言い換えると、別の実施形態は、本明細書で論じることが可能な別の不備に対処することができる。実施形態によっては、本明細書で論じることが可能な一部の不備に部分的に対処する、またはほんの１つの不備に対処してもよく、実施形態によっては、これらの不備のいずれにも対処しなくてよい。
【０１３８】
様々な実施形態が本明細書に説明されてきたが、それらは、ほんの例として提示され、制限するものではないことを理解されたい。したがって、本出願の範囲は、本明細書に記載のいずれにも制限されないが、以下の特許請求の範囲およびその等価物にしたがってのみ定義されるものである。
【図１】
0006700294.tif 000002
【図２】
0006700294.tif 000003
【図３Ａ】
0006700294.tif 000004
【図３Ｂ】
0006700294.tif 000005
【図３Ｃ】
0006700294.tif 000006
【図４Ａ】
0006700294.tif 000007
【図４Ｂ】
0006700294.tif 000008
【図５】
0006700294.tif 000009
【図６Ａ】
0006700294.tif 000010
【図６Ｂ】
0006700294.tif 000011
【図７Ａ】
0006700294.tif 000012
【図７Ｂ】
0006700294.tif 000013
【図８Ａ】
0006700294.tif 000014
【図８Ｂ】
0006700294.tif 000015
【図９】
0006700294.tif 000016
【図１０】
0006700294.tif 000017