(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-04
(45)【発行日】2024-04-12
(54)【発明の名称】セキュアな初期プログラム・ロード
(51)【国際特許分類】
G06F 21/57 20130101AFI20240405BHJP
【FI】
G06F21/57 350
(21)【出願番号】P 2021562186
(86)(22)【出願日】2020-04-01
(86)【国際出願番号】 EP2020059297
(87)【国際公開番号】W WO2020216593
(87)【国際公開日】2020-10-29
【審査請求日】2022-09-22
(32)【優先日】2019-04-24
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】ゴメス、ルイス
(72)【発明者】
【氏名】シュヴィデフスキー、マーティン
(72)【発明者】
【氏名】ブエントゲン、ラインハルト
(72)【発明者】
【氏名】ミハイロフスキ、ヴィクトール
【審査官】岸野 徹
(56)【参考文献】
【文献】特表2017-513114(JP,A)
【文献】米国特許出願公開第2015/0019856(US,A1)
【文献】国際公開第2010/041464(WO,A1)
【文献】米国特許出願公開第2003/0194094(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/57
(57)【特許請求の範囲】
【請求項1】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラムであって、
コンピュータに、前記コンピューティング環境のシステム・コンポーネントの初期プログラム・ロードを実行させることを含み、前記初期プログラム・ロードを実行することが、
前記システム・コンポーネントに関連する1つまたは複数の署名されたバイナリ・コード・コンポーネントの1つまたは複数の署名が検証されているかどうかを判定することと、
前記1つまたは複数の署名が検証されているということの決定に基づいて、追加の検証を実行することとを含み、前記追加の検証を実行することが、
前記システム・コンポーネントに関連する1つまたは複数のバイナリ・コード・コンポーネントのうちの選択されたバイナリ・コード・コンポーネントを取得することと、
前記選択されたバイナリ・コード・コンポーネントが、前記1つまたは複数のバイナリ・コード・コンポーネントに関する特定の署名されたバイナリ・コード・コンポーネントであるかどうかを判定することと、
前記選択されたバイナリ・コード・コンポーネントが前記特定の署名されたバイナリ・コード・コンポーネントであるということの決定に基づいてチェックを実行することと、
チェックの成功に基づいて、前記初期プログラム・ロードの実行を継続することとを含み、
前記選択されたバイナリ・コード・コンポーネントを取得することが、制御位置でのポインタに基づいて前記選択されたバイナリ・コード・コンポーネントを選択することを含む、
コンピュータ・プログラム。
【請求項2】
前記1つまたは複数のバイナリ・コード・コンポーネントが、前記1つまたは複数の署名されたバイナリ・コード・コンポーネントおよび1つまたは複数の署名されていないバイナリ・コード・コンポーネントを含み、前記1つまたは複数のバイナリ・コード・コンポーネントが順序不同である、請求項1に記載のコンピュータ・プログラム。
【請求項3】
前記1つまたは複数の署名が、前記1つまたは複数の署名されたバイナリ・コード・コンポーネントとは別に格納される、請求項1に記載のコンピュータ・プログラム。
【請求項4】
前記制御位置がプログラム状態ワードである、請求項1に記載のコンピュータ・プログラム。
【請求項5】
前記チェックを実行することが、前記ポインタがそれ自身を指し示しているかどうかを判定することを含み、前記ポインタがそれ自身を指し示していることに基づいて前記チェックが成功する、請求項1に記載のコンピュータ・プログラム。
【請求項6】
前記チェックの成功に基づいて、有効インジケータが、選択された値に設定される、請求項1に記載のコンピュータ・プログラム。
【請求項7】
前記初期プログラム・ロードの実行を継続することが、
別のバイナリ・コード・コンポーネントを取得することと、
前記別のバイナリ・コード・コンポーネントを取得することに基づいて、前記有効インジケータが前記選択された値に設定されているかどうかを判定することと、
前記有効インジケータが前記選択された値に設定されているということの決定に基づいて、処理される他のバイナリ・コード・コンポーネントが存在することに基づいて前記取得することおよび前記判定することを繰り返すこととを含む、請求項6に記載のコンピュータ・プログラム。
【請求項8】
前記初期プログラム・ロードの実行を継続することが、前記有効インジケータが前記選択された値以外の値に設定されているということの決定に基づいて前記初期プログラム・ロードを終了することを含む、請求項7に記載のコンピュータ・プログラム。
【請求項9】
前記追加の検証を実行することが、
セキュアな初期プログラム・ロードが実行されるかどうかを判定することと、
前記セキュアな初期プログラム・ロードが実行されるということの決定に基づいて、前記選択されたバイナリ・コード・コンポーネントが、前記1つまたは複数のバイナリ・コード・コンポーネントに関する前記特定の署名されたバイナリ・コード・コンポーネントであるかどうかの前記判定を実行することとをさらに含む、請求項1に記載のコンピュータ・プログラム。
【請求項10】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラムであって、
コンピュータに、前記コンピューティング環境のシステム・コンポーネントの初期プログラム・ロードを実行させることを含み、前記初期プログラム・ロードを実行することが、
前記システム・コンポーネントに関連する1つまたは複数の署名されたバイナリ・コード・コンポーネントの1つまたは複数の署名が検証されているかどうかを判定することと、
前記1つまたは複数の署名が検証されているということの決定に基づいて、追加の検証を実行することとを含み、前記追加の検証を実行することが、
前記システム・コンポーネントに関連する1つまたは複数のバイナリ・コード・コンポーネントのうちの選択されたバイナリ・コード・コンポーネントを取得することと、
前記選択されたバイナリ・コード・コンポーネントが、前記1つまたは複数のバイナリ・コード・コンポーネントに関する特定の署名されたバイナリ・コード・コンポーネントであるかどうかを判定することと、
前記選択されたバイナリ・コード・コンポーネントが前記特定の署名されたバイナリ・コード・コンポーネントであるということの決定に基づいてチェックを実行することと、
チェックの成功に基づいて、前記初期プログラム・ロードの実行を継続することとを含み、
前記特定の署名されたバイナリ・コード・コンポーネントが、前記1つまたは複数のバイナリ・コード・コンポーネントのうちの第1の署名されたバイナリ・コード・コンポーネントである、コンピュータ・プログラム。
【請求項11】
前記システム・コンポーネントがカーネルである、請求項1に記載のコンピュータ・プログラム。
【請求項12】
前記初期プログラム・ロードを実行することが、
前記1つまたは複数のバイナリ・コンポーネントおよび前記1つまたは複数の署名を使用して情報報告ブロックを生成することと、
前記情報報告ブロックを、少なくとも、前記1つまたは複数の署名が検証されているかどうかを判定することにおいて採用することと
をさらに含む、請求項1に記載のコンピュータ・プログラム。
【請求項13】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムが、
メモリと、
前記メモリと通信するプロセッサとを備えており、前記コンピュータ・システムが方法を実行するように構成されており、前記方法が、
前記コンピューティング環境のシステム・コンポーネントの初期プログラム・ロードを実行することを含み、前記初期プログラム・ロードを実行することが、
前記システム・コンポーネントに関連する1つまたは複数の署名されたバイナリ・コード・コンポーネントの1つまたは複数の署名が検証されているかどうかを判定することと、
前記1つまたは複数の署名が検証されているということの決定に基づいて、追加の検証を実行することとを含み、前記追加の検証を実行することが、
前記システム・コンポーネントに関連する1つまたは複数のバイナリ・コード・コンポーネントのうちの選択されたバイナリ・コード・コンポーネントを取得することと、
前記選択されたバイナリ・コード・コンポーネントが、前記1つまたは複数のバイナリ・コード・コンポーネントに関する特定の署名されたバイナリ・コード・コンポーネントであるかどうかを判定することと、
前記選択されたバイナリ・コード・コンポーネントが前記特定の署名されたバイナリ・コード・コンポーネントであるということの決定に基づいてチェックを実行することと、
チェックの成功に基づいて、前記初期プログラム・ロードの実行を継続することとを含み、
前記選択されたバイナリ・コード・コンポーネントを取得することが、制御位置でのポインタに基づいて前記選択されたバイナリ・コード・コンポーネントを選択することを含む、
コンピュータ・システム。
【請求項14】
前記チェックを実行することが、前記ポインタがそれ自身を指し示しているかどうかを判定することを含み、前記ポインタがそれ自身を指し示していることに基づいて前記チェックが成功する、請求項13に記載のコンピュータ・システム。
【請求項15】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムが、
メモリと、
前記メモリと通信するプロセッサとを備えており、前記コンピュータ・システムが方法を実行するように構成されており、前記方法が、
前記コンピューティング環境のシステム・コンポーネントの初期プログラム・ロードを実行することを含み、前記初期プログラム・ロードを実行することが、
前記システム・コンポーネントに関連する1つまたは複数の署名されたバイナリ・コード・コンポーネントの1つまたは複数の署名が検証されているかどうかを判定することと、
前記1つまたは複数の署名が検証されているということの決定に基づいて、追加の検証を実行することとを含み、前記追加の検証を実行することが、
前記システム・コンポーネントに関連する1つまたは複数のバイナリ・コード・コンポーネントのうちの選択されたバイナリ・コード・コンポーネントを取得することと、
前記選択されたバイナリ・コード・コンポーネントが、前記1つまたは複数のバイナリ・コード・コンポーネントに関する特定の署名されたバイナリ・コード・コンポーネントであるかどうかを判定することと、
前記選択されたバイナリ・コード・コンポーネントが前記特定の署名されたバイナリ・コード・コンポーネントであるということの決定に基づいてチェックを実行することと、
チェックの成功に基づいて、前記初期プログラム・ロードの実行を継続することとを含み、
前記特定の署名されたバイナリ・コード・コンポーネントが、前記1つまたは複数のバイナリ・コード・コンポーネントのうちの第1の署名されたバイナリ・コード・コンポーネントである、請求項13に記載のコンピュータ・システム。
【請求項16】
コンピューティング環境内の処理を容易にするコンピュータ実装方法であって、前記コンピュータ実装方法が、
前記コンピューティング環境のシステム・コンポーネントの初期プログラム・ロードを実行することを含み、前記初期プログラム・ロードを実行することが、
前記システム・コンポーネントに関連する1つまたは複数の署名されたバイナリ・コード・コンポーネントの1つまたは複数の署名が検証されているかどうかを判定することと、
前記1つまたは複数の署名が検証されているということの決定に基づいて、追加の検証を実行することとを含み、前記追加の検証を実行することが、
前記システム・コンポーネントに関連する1つまたは複数のバイナリ・コード・コンポーネントのうちの選択されたバイナリ・コード・コンポーネントを取得することと、
前記選択されたバイナリ・コード・コンポーネントが、前記1つまたは複数のバイナリ・コード・コンポーネントに関する特定の署名されたバイナリ・コード・コンポーネントであるかどうかを判定することと、
前記選択されたバイナリ・コード・コンポーネントが前記特定の署名されたバイナリ・コード・コンポーネントであるということの決定に基づいてチェックを実行することと、
チェックの成功に基づいて、前記初期プログラム・ロードの実行を継続することとを含み、
前記チェックを実行することが、ポインタがそれ自身を指し示しているかどうかを判定することを含み、前記ポインタがそれ自身を指し示していることに基づいて前記チェックが成功する、
コンピュータ実装方法。
【請求項17】
コンピューティング環境内の処理を容易にするコンピュータ実装方法であって、前記コンピュータ実装方法が、
前記コンピューティング環境のシステム・コンポーネントの初期プログラム・ロードを実行することを含み、前記初期プログラム・ロードを実行することが、
前記システム・コンポーネントに関連する1つまたは複数の署名されたバイナリ・コード・コンポーネントの1つまたは複数の署名が検証されているかどうかを判定することと、
前記1つまたは複数の署名が検証されているということの決定に基づいて、追加の検証を実行することとを含み、前記追加の検証を実行することが、
前記システム・コンポーネントに関連する1つまたは複数のバイナリ・コード・コンポーネントのうちの選択されたバイナリ・コード・コンポーネントを取得することと、
前記選択されたバイナリ・コード・コンポーネントが、前記1つまたは複数のバイナリ・コード・コンポーネントに関する特定の署名されたバイナリ・コード・コンポーネントであるかどうかを判定することと、
前記選択されたバイナリ・コード・コンポーネントが前記特定の署名されたバイナリ・コード・コンポーネントであるということの決定に基づいてチェックを実行することと、
チェックの成功に基づいて、前記初期プログラム・ロードの実行を継続することとを含み、
前記特定の署名されたバイナリ・コード・コンポーネントが、前記1つまたは複数のバイナリ・コード・コンポーネントのうちの第1の署名されたバイナリ・コード・コンポーネントである、コンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【0001】
1つまたは複数の態様は、一般に、コンピューティング環境内の処理に関し、特に、コンピューティング環境内のセキュアな処理に関する。
【背景技術】
【0002】
セキュアな処理は、処理の多くの態様において賢明である。1つまたは複数の態様においてセキュリティを提供するのを支援するために、コモン・クライテリアが開発された。コモン・クライテリアは、コンピュータ・セキュリティ製品の仕様、実装、および評価のプロセスが厳格に実施されていることの保証、規格、および反復可能な方法を、対象の使用環境と一致するレベルで提供する。コモン・クライテリアの実施の責任を負う1つの組織は、少なくとも米国では、国家情報保証パートナーシップ(NIAP:National Information Assurance Partnership)である。NIAPは、製品またはプロセスが特定のセキュリティ基準を満たしていることを認証するための方法を提供し、この方法が正常に完了したときに、本明細書ではコモン・クライテリア証明書と呼ばれる証明書が与えられる。
【0003】
コモン・クライテリアの要件は、時間と共に変化する。例えば、コモン・クライテリア証明書に関する新しいオペレーティング・システムの保護プロファイルが追加されており、この保護プロファイルは、現在、セキュア・ブートのサポートを要求している。セキュア・ブートは、相手先商標製品製造会社(OEM:Original Equipment Manufacturer)によって信頼されているソフトウェアのみを使用してデバイスが起動することを保証するために使用されるセキュリティ規格である。セキュア・ブートは、マルウェアからの攻撃および感染に抵抗するのに役立つ。コモン・クライテリア証明書を順守するために、セキュア・ブートの形態が使用される。
【発明の概要】
【0004】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供によって、従来技術の欠点が克服され、追加の利点がもたらされる。このコンピュータ・プログラム製品は、処理回路によって読み取り可能なコンピュータ可読ストレージ媒体を含み、コンピュータ可読ストレージ媒体は、方法を実行するための命令を格納している。この方法は、コンピューティング環境のシステム・コンポーネントの初期プログラム・ロードを実行することを含む。初期プログラム・ロードを実行することは、システム・コンポーネントに関連する1つまたは複数の署名されたバイナリ・コード・コンポーネント(binary code components)の1つまたは複数の署名が検証されているかどうかを判定することを含む。1つまたは複数の署名が検証されているということの決定に基づいて、追加の検証が実行される。追加の検証を実行することは、システム・コンポーネントに関連する1つまたは複数のバイナリ・コード・コンポーネントのうちの選択されたバイナリ・コード・コンポーネントを取得することと、選択されたバイナリ・コード・コンポーネントが、1つまたは複数のバイナリ・コード・コンポーネントに関する特定の署名されたバイナリ・コード・コンポーネントであるかどうかを判定することとを含む。選択されたバイナリ・コード・コンポーネントが特定の署名されたバイナリ・コード・コンポーネントであるということの決定に基づいて、チェックが実行される。チェックの成功に基づいて、初期プログラム・ロードの実行が継続する。
【0005】
カーネルなどのシステム・コンポーネントのセキュアな初期プログラム・ロードが提供され、コンピューティング環境内のセキュリティを強化し、コンピューティング環境内の処理を容易にする。
【0006】
1つの実施形態では、1つまたは複数のバイナリ・コード・コンポーネントが、1つまたは複数の署名されたバイナリ・コード・コンポーネントおよび1つまたは複数の署名されていないバイナリ・コード・コンポーネントを含み、1つまたは複数のバイナリ・コード・コンポーネントが順序不同である。順序を必要としないことにより、パッケージが柔軟になり、パッケージの複雑さが軽減される。これによって、デバイス・コンポーネントをさらに追加することなどを可能にする。
【0007】
1つの例として、1つまたは複数の署名が、1つまたは複数の署名されたバイナリ・コード・コンポーネントとは別に格納される。これによって、セキュリティを強化する。
【0008】
1つの例では、選択されたバイナリ・コード・コンポーネントを取得することが、制御位置でのポインタに基づいて、選択されたバイナリ・コード・コンポーネントを選択することを含む。制御位置は、例えば、プログラム状態ワードである。
【0009】
1つの例として、チェックを実行することは、ポインタがそれ自身を指し示しているかどうかを判定することを含み、ポインタがそれ自身を指し示していることに基づいて、チェックが成功する。
【0010】
さらに、1つの例では、チェックの成功に基づいて、有効インジケータが、選択された値に設定される。
【0011】
1つの実施形態では、初期プログラム・ロードの実行を継続することが、別のバイナリ・コード・コンポーネントを取得することと、別のバイナリ・コード・コンポーネントを取得することに基づいて、有効インジケータが選択された値に設定されているかどうかを判定することと、有効インジケータが選択された値に設定されているということの決定に基づいて、処理される他のバイナリ・コード・コンポーネントが存在することに基づいて取得することおよび判定することを繰り返すこととを含む。
【0012】
1つの例では、初期プログラム・ロードの実行を継続することが、有効インジケータが選択された値以外の値に設定されているということの決定に基づいて、初期プログラム・ロードを終了することを含む。
【0013】
1つの例では、追加の検証を実行することが、セキュアな初期プログラム・ロードが実行されるかどうかを判定することと、セキュアな初期プログラム・ロードが実行されるということの決定に基づいて、バイナリ・コード・コンポーネントが、1つまたは複数のバイナリ・コード・コンポーネントに関する特定の署名されたバイナリ・コード・コンポーネントであるかどうかの判定を実行することとをさらに含む。
【0014】
一例として、特定の署名されたバイナリ・コード・コンポーネントは、1つまたは複数のバイナリ・コード・コンポーネントのうちの第1の署名されたバイナリ・コード・コンポーネントである。さらに、一例として、システム・コンポーネントはカーネルである。
【0015】
さらに、1つの実施形態では、1つまたは複数のバイナリ・コンポーネントおよび1つまたは複数の署名が、情報報告ブロックの生成に使用される。情報報告ブロックは、少なくとも、1つまたは複数の署名が検証されているかどうかを判定することにおいて採用される。
【0016】
1つまたは複数の態様に関連するコンピュータ実装方法およびシステムも本明細書に記載され、特許請求される。さらに、1つまたは複数の態様に関連するサービスも本明細書に記載されており、特許請求され得る。
【0017】
その他の特徴および利点が、本明細書に記載された技術によって実現される。その他の実施形態および態様は、本明細書において詳細に説明され、特許請求される態様の一部と見なされる。
【0018】
1つまたは複数の態様は、本明細書の最後にある特許請求の範囲において例として具体的に指摘され、明確に特許請求される。前述の内容、ならびに1つまたは複数の態様の目的、特徴、および利点は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【0019】
【
図1A】本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一例を示す図である。
【
図1B】本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【
図2A】本発明の1つまたは複数の態様に従って、初期プログラム・ロードおよびブート・プロセスの一例を示す図である。
【
図2B】本発明の1つまたは複数の態様に従って、初期プログラム・ロードおよびブート・プロセスの一例を示す図である。
【
図2C】本発明の1つまたは複数の態様に従って、初期プログラム・ロードおよびブート・プロセスの一例を示す図である。
【
図3】本発明の態様に従って使用される初期プログラム・ロード(IPL:initialprogram load)情報報告ブロックの一例を示す図である。
【
図4】本発明の態様に従って使用されるIPL署名証明書リストのIPL情報ブロックの一例を示す図である。
【
図5】本発明の態様に従って、
図4のIPL情報ブロックのIPL署名証明書エントリの一例を示す図である。
【
図6】本発明の態様に従って使用されるIPLデバイス・コンポーネント・リストのIPL情報ブロックの一例を示す図である。
【
図7】本発明の態様に従って、
図6のIPL情報ブロックのIPLデバイス・コンポーネント・エントリの一例を示す図である。
【
図8】本発明の態様に従って、リストで管理されたIPLデバイスのセキュアIPLを実行するためのプロセスの一例を示す図である。
【
図9】本発明の態様に従って、ガード・コード・セキュリティ・チェック・プロセスの一例を示す図である。
【
図10A】本発明の1つまたは複数の態様に関連して、コンピューティング環境内の処理を容易にする一実施形態を示す図である。
【
図10B】本発明の1つまたは複数の態様に関連して、コンピューティング環境内の処理を容易にする一実施形態を示す図である。
【
図11A】本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【
図12】クラウド・コンピューティング環境の一実施形態を示す図である。
【
図13】抽象モデル・レイヤの一例を示す図である。
【発明を実施するための形態】
【0020】
本発明の態様に従って、システム・コンポーネントの初期プログラム・ロード(IPL)を安全に実行するための能力が提供される。システム・コンポーネントは、例えば、オペレーティング・システムなどのカーネル、あるいは1つまたは複数のコード・コンポーネントを含む、その他のアプリケーション、プログラム、またはコードである。1つの特定の例では、カーネルは、IBM Z(R)サーバまたはIBM(R)LinuxONEサーバにロードされるLinux(R)カーネルである。しかし、他の例では、他のカーネルもしくはシステム・コンポーネントまたはその両方がロードされてよく、あるいはカーネルもしくはシステム・コンポーネントまたはその両方が、他のサーバ、マシン、プロセッサ、デバイスなどにロードされてよく、あるいはその両方であってもよい。
【0021】
本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態が、
図1Aを参照して説明される。1つの例では、コンピューティング環境は、インターナショナル・ビジネスマシーンズ・コーポレーション(ニューヨーク州アーモンク)によって提供されるz/Architecture(R)ハードウェア・アーキテクチャに基づく。z/Architecture(R)ハードウェア・アーキテクチャの一実施形態は、“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-11, September 2017に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。z/Architecture(R)ハードウェア・アーキテクチャは単に1つの例示的なアーキテクチャであり、コンピューティング環境は他のアーキテクチャに基づいてよい。
【0022】
図1に示されているように、コンピューティング環境100は、例えば、汎用コンピューティング・デバイスの形態で示されるコンピュータ・システム112を含んでいる。コンピュータ・システム112は、1つまたは複数のバスまたはその他の接続120あるいはその両方を介して互いに結合された、1つまたは複数のプロセッサまたはプロセッシング・ユニット114(例えば、中央処理装置(CPU))、メモリ116(例えば、システム・メモリ、メイン・メモリ、主記憶装置、中央記憶装置、またはストレージとも呼ばれる)、および1つまたは複数の入出力(I/O:input/output)インターフェイス118を含んでよいが、これらに限定されない。
【0023】
バス120は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および任意のさまざまなバス・アーキテクチャを使用するプロセッサまたはローカル・バスを含む、任意の複数の種類のバス構造のうちの1つまたは複数を表す。例として、そのようなアーキテクチャは、ISA(Industry Standard Architecture)、MCA(Micro Channel Architecture)、EISA(Enhanced ISA)、VESA(Video Electronics Standards Association)ローカル・バス、およびPCI(Peripheral Component Interconnects)を含むが、これらに限定されない。
【0024】
メモリ116は、例えば、プロセッサ114のローカル・キャッシュ123に結合されてよい、共有キャッシュなどのキャッシュ122を含んでよい。さらに、メモリ116は、1つまたは複数のプログラムまたはアプリケーション124、オペレーティング・システム126、ファームウェア127、および1つまたは複数のコンピュータ可読プログラム命令129を含んでよい。コンピュータ可読プログラム命令129は、本発明の態様の実施形態の機能を実行するように構成されてよい。
【0025】
ファームウェア127は、プロセッサのマイクロコードまたはシステムのマイクロコードあるいはその両方を含んでよい。ファームウェア127は、例えば、上位レベルのマシン・コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。1つの実施形態では、ファームウェア127は、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。1つの例では、ファームウェア127は、本発明の1つまたは複数の態様に従ってIPL処理(セキュアIPL処理を含む)において使用されるブート・ローダ128を含む。
【0026】
コンピュータ・システム112は、例えばI/Oインターフェイス118を介して、1つまたは複数の外部デバイス130、1つまたは複数のネットワーク・インターフェイス132、または1つまたは複数のデータ・ストレージ・デバイス134、あるいはその組合せと通信してもよい。外部デバイスの例としては、ユーザ端末、テープ・ドライブ、ポインティング・デバイス、ディスプレイなどが挙げられる。1つの特定の例では、外部デバイス130は、システム・コンポーネント(例えば、Linuxまたはその他のカーネルなどのカーネル)の初期プログラム・ロードに使用されるIPLロード・デバイス131である。ネットワーク・インターフェイス132は、コンピュータ・システム112が、ローカル・エリア・ネットワーク(LAN:local area network)、一般的な広域ネットワーク(WAN:wide area network)、またはパブリック・ネットワーク(例えば、インターネット)、あるいはその組合せなどの1つまたは複数のネットワークと通信できるようにし、他のコンピューティング・デバイスまたはシステムとの通信を実現する。
【0027】
データ・ストレージ・デバイス134は、1つまたは複数のプログラム136、1つまたは複数のコンピュータ可読プログラム命令138、またはデータ、あるいはその組合せなどを格納してよい。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成されてよい。
【0028】
コンピュータ・システム112は、取り外し可能/取り外し不可、揮発性/不揮発性のコンピュータ・システム・ストレージ媒体を含むか、またはそのようなコンピュータ・システム・ストレージ媒体に結合されるか、あるいはその両方であってよい。例えば、コンピュータ・システム112は、取り外し不可、不揮発性の磁気媒体(通常は、「ハード・ドライブ」と呼ばれる)、取り外し可能、不揮発性の磁気ディスク(例えば、「フロッピー(R)・ディスク」)に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、あるいはCD-ROM、DVD-ROM、またはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りと書き込みを行うための光ディスク・ドライブ、あるいはその組合せを含むか、またはこれらに結合されるか、あるいはその両方であってよい。その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム112と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
【0029】
コンピュータ・システム112は、他の多数の汎用または専用のコンピューティング・システム環境または構成で運用されてよい。コンピュータ・システム112での使用に適した周知のコンピューティング・システム、環境、または構成、あるいはその組合せの例としては、パーソナル・コンピュータ(PC:personal computer)システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マイクロプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル・コンシューマ・エレクトロニクス、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、およびこれらの任意のシステムまたはデバイスを含む分散クラウド・コンピューティング環境などが挙げられるが、これらに限定されない。
【0030】
別の実施形態では、コンピューティング環境が論理パーティションまたは仮想マシンあるいはその両方をサポートする。そのような環境の一例が、
図1Bを参照して説明される。1つの例では、コンピューティング環境161は、論理パーティションをサポートする中央処理装置複合体(CPC:central processor complex)163を含んでいる。中央処理装置複合体163は、例えば、1つまたは複数のプロセッサ(中央処理装置(CPU:central processing units)とも呼ばれる)171および入出力サブシステム173に結合されたメモリ165(システム・メモリ、メイン・メモリ、主記憶装置、中央記憶装置、ストレージとも呼ばれる)を含んでおり、これらの各々が下で説明される。
【0031】
メモリ165は、例えば、1つまたは複数の論理パーティション175、ハイパーバイザ177などの論理パーティション・マネージャ、ファームウェア179、およびサービス要素182を含んでいる。ハイパーバイザ177の1つの例は、インターナショナル・ビジネスマシーンズ・コーポレーション(ニューヨーク州アーモンク)によって提供されるPR/SM(TM)(プロセッサ・リソース/システム管理機構:Processor Resource/System Manager)である。ハイパーバイザは、ホストと呼ばれることがある。
【0032】
ファームウェア179は、例えば、プロセッサまたはシステムあるいはその両方のマイクロコードを含む。やはりファームウェア179は、例えば、上位レベルのマシン・コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。1つの実施形態では、ファームウェア179は、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。1つの例では、ファームウェア179は、本発明の1つまたは複数の態様に従ってIPL処理(セキュアIPL処理を含む)において使用されるブート・ローダ180を含む。
【0033】
1つの態様では、1つまたは複数の論理パーティションの一部と見なされるか、または1つまたは複数の論理パーティションに結合されてよい、サービス要素182が、本明細書において説明されているように、カーネル(例えば、オペレーティング・システム183)の初期プログラム・ロードを容易にするために使用される。
【0034】
CPCの論理パーティションのサポートは、多数の論理パーティション175を動作させることができるようにし、各論理パーティション175は、異なるプログラム185で動作し、Linuxなどのゲスト・オペレーティング・システム183を実行することができる。各論理パーティション175は、別々のシステムとして機能することができる。すなわち、各論理パーティションは、独立してリセットされ、ゲスト・オペレーティング・システムを実行し、異なるプログラムで動作することができる。論理パーティション内で実行されるオペレーティング・システムまたはアプリケーション・プログラムは、完全なシステム全体にアクセスできるように見えるが、実際は、その一部のみが利用可能である。
【0035】
メモリ165は、論理パーティションに割り当てることができる物理プロセッサ・リソースであるプロセッサ(例えば、CPU)171に結合される。例えば、論理パーティション175は、1つまたは複数の論理プロセッサを含み、それらの論理プロセッサの各々は、論理パーティションに動的に割り当てることができる物理プロセッサ・リソース171の全部または一部を表す。
【0036】
さらに、メモリ165は、入出力(I/O)サブシステム173に結合される。入出力サブシステム173は、入出力制御ユニット169およびI/Oデバイス167と主記憶装置165の間の情報の流れを管理する。入出力サブシステム173は中央処理装置複合体に結合され、この結合において、入出力サブシステム173は中央処理装置複合体の一部であるか、または中央処理装置複合体から分離することができる。I/Oデバイス167の1つの例は、カーネル(例えば、Linuxカーネルまたはその他のカーネル)などのシステム・コンポーネントの初期プログラム・ロードに使用されるIPLロード・デバイス168である。
【0037】
初期プログラム・ロードは、プログラムが指定されたデバイスから読み取られることを引き起こすため、およびそのプログラムの実行を開始するためのメカニズムを提供する。初期プログラム・ロードおよびブート・プロセスを実行するためのさまざまなプロセスが存在する。初期プログラム・ロードおよびブート・プロセスの一例が、
図2A~
図2Cを参照して説明される。1つの実施形態では、
図2Aを参照すると、プロセッサ114などのプロセッサ上で実行されているIPLプロセスは、IPLロード・デバイス131などのIPLデバイス200にアクセスし、
図2Bに示されているように、それに格納されているブート・ローダ・コード(例えば、Linuxブート・ローダ・コード)202をメモリ204(例えば、メモリ116)にロードする。次に、ブート・ローダ・コードが制御し、
図2Cに示されているように、カーネル(例えば、Linuxカーネル)210をロードする。ブート・プロセスの終了時に、カーネル(例えば、Linuxカーネル)が制御する。
【0038】
カーネル・インスタンス(例えば、Linuxインスタンス)がLPAR(例えば、LPAR175)内で実行される別の実施形態では、上記のIPLプロセスの代わりに、カーネルが、例えば、サービス要素(例えば、サービス要素182)を介して取り外し可能な媒体からメモリ(例えば、メモリ165)にコピーされてよい。その他の例も可能である。
【0039】
1つまたは複数の実施形態では、ブート・ローダ・コード(ブート・ローダとも呼ばれる)が、ロードされるか、コピーされるか、またはその他の方法によってファームウェアに存在し、本発明の態様に従って、カーネルなどのシステム・コンポーネントのセキュアな初期プログラム・ロードの実行において使用される。
【0040】
初期プログラム・ロードの1つの特定の種類は、リストで管理されたIPLであり、本発明の態様に従って、リストで管理されたIPLがセキュアIPLプロセスにおいて使用される。リストで管理されたIPLメカニズムは、バイナリ・コード・コンポーネント(BCC:binary code components)のリストを含んでいるIPLロード・デバイス(例えば、IPLロード・デバイス168)から、およびサービス要素(SE:service element)(例えば、サービス要素182)を介して取得された署名証明書から、カーネル(例えば、Linuxカーネル)のIPLを実行するために使用される。1つの例では、バイナリ・コード・コンポーネントおよび署名証明書は、一緒にパッケージ化されず、カーネルのIPLを実行するために任意の順序で実行され得る。したがって、特定のバイナリ・コード・コンポーネントのパッケージ形式は使用されず、このようにしてパッケージの柔軟性および容易な将来の拡張を実現する。
【0041】
IPロード・デバイスおよびサービス要素から取得された情報に基づいて、IPL情報報告ブロック(IIRB:IPL information report block)が生成され、セキュアIPLを実行するために使用される。IPL情報報告ブロックは、さまざまなIPLレコードの位置を特定するため、およびIPLロード・デバイスの1つまたは複数のセキュアなコンポーネントの署名検証結果を報告するために使用される情報を含む。一例として、IIRBは、IPL署名証明書(ISC:IPL signature certificate)リストおよびIPLデバイス・コンポーネント(IDC:IPL device component)リストという、2つの異なる種類のリストを含む。
【0042】
初期プログラム・ロード(IPL)情報報告ブロック(IIRB)の一例が、
図3を参照して説明される。1つの例では、IPL情報報告ブロック300(IPL情報報告ブロックとも呼ばれる)が、IPL情報報告ブロック・ヘッダー302(IPL情報報告ブロック・ヘッダーとも呼ばれる)および1つまたは複数のIPL情報ブロック304を含んでいる。IPL情報報告ブロック・ヘッダー302は、例えば、IIRBの長さを示す長さフィールド、および選択されたIPLパラメータのバージョン番号を指定するバージョン・フィールドを含む。他の例では、IPL情報報告ブロック・ヘッダー302は、1つまたは複数のフラグ、あるいは他の、追加の、もしくはより少ない、またはその組合せの情報、あるいはその両方を含む。
【0043】
1つまたは複数のIPL情報ブロック304は、1つの例では、IPL情報報告ブロック・ヘッダー302の後に続く。例えば、IPL署名証明書リストを識別するIPL情報ブロックの種類、およびIPLデバイス・コンポーネント・リストを識別するIPL情報ブロックの別の種類を含む、複数の種類のIPL情報ブロックが存在する。各IPL情報ブロックは、共通ヘッダーと、それに続く1つまたは複数の特定の種類のIPL情報ブロック・エントリを含む。
【0044】
図4~7を参照して、IPL情報ブロックに関する詳細がさらに説明される。例えば、
図4~
図5は、IPL署名証明書リストのIPL情報ブロックに関連する情報の一例を示しており、
図6~
図7は、IPLデバイス・コンポーネント・リストのIPL情報ブロックに関連する情報の一例を示しており、これらの各々が下で説明される。
【0045】
図4を参照して、IPL署名証明書リスト(ISC:IPL signature certificate list)のIPL情報ブロックの一例が説明される。1つの例では、IPL署名証明書リスト400のIPL情報ブロックは、例えば、1つまたは複数のカーネル配布者(例えば、Linux配布者)からのX.509証明書のリストを含む。X.509は、公開鍵証明書の形式を定義する規格である。1つまたは複数のX.509証明書が、署名されたコンポーネントを検証するために使用されてよい。
【0046】
1つの例では、IPL署名証明書リスト400のIPL情報ブロックは、IPL情報ブロック・ヘッダー402などのヘッダー、およびIPL署名証明書エントリ0~X404などの1つまたは複数のエントリを含む。IPL情報ブロック・ヘッダー402は、例えば、IPL情報ブロックの長さを示す長さフィールド、およびIPL情報ブロックの種類を示す種類フィールドを含む(例えば、1の値はIPL署名証明書リストを指定し、2の値はIPLデバイス・コンポーネント・リストを指定する)。IPL署名証明書エントリの詳細が、
図5を参照してさらに説明される。
【0047】
図5を参照すると、1つの例では、IPL署名証明書エントリ404が、例えば、X.509証明書の例えば絶対ストレージ位置を指定する64ビット符号なし2進整数であるIPL署名証明書アドレスを含むIPL署名証明書アドレス・フィールド500と、例えば、X.509証明書内のバイト数を指定する64ビット符号なし2進整数であるIPL情報証明書の長さを含むIPL署名証明書長さフィールド502とを含んでいる。
【0048】
上で示されたように、IPL署名証明書リストのIPL情報ブロックに加えて、1つの実施形態では、IPLデバイス・コンポーネント・リスト(IDC)のIPL情報ブロックが存在する。IPLデバイス・コンポーネント・リストは、例えば、バイナリ・コード・コンポーネント(BCC)を含む2つの種類(署名されていないバイナリ・コード・コンポーネントおよび署名されたバイナリ・コード・コンポーネント)、および署名された署名コンポーネント(SCC:signed signature components)を含む第3の種類を含んでいる、3つの種類のIPLデバイス・コンポーネント・エントリを含んでよい。1つまたは複数の署名されたバイナリ・コード・コンポーネントまたは署名されていないバイナリ・コード・コンポーネントあるいはその両方が存在することができる。各署名されたバイナリ・コード・コンポーネントは、カーネル配布者(例えば、Linux配布者)によって、署名されたバイナリ・コード・コンポーネントに署名したときに生成された、対応する署名された署名コンポーネントを含む。署名された署名コンポーネントおよび署名されたバイナリ・コード・コンポーネントは対を形成し、1つの例では、署名された署名コンポーネント・エントリが、署名されたバイナリ・コード・コンポーネント・エントリの直前に存在する。この形式は、最初に、ブート・ローダが署名された署名コンポーネントの位置を特定できるようにし、その後、次のコンポーネント・エントリ(後方/逆向きの連鎖は不要である)で、署名されたバイナリ・コード・コンポーネントを容易に見つけることができ、現在のエントリにある署名の検証に使用することができる。
【0049】
IPLデバイス・コンポーネントのIPL情報ブロックの一例が、
図6を参照して説明される。
図6を参照すると、1つの例では、IPLデバイス・コンポーネント・リスト600のIPL情報ブロックは、IPL情報ブロック・ヘッダー602などのヘッダー、およびIPLデバイス・コンポーネント・エントリ0~X604などの1つまたは複数のエントリを含む。IPL情報ブロック・ヘッダー602は、例えば、IPL情報ブロックの長さを示す長さフィールド、およびIPL情報ブロックの種類を示す種類フィールドを含む(例えば、1の値はIPL署名証明書リストを指定し、2の値はIPLデバイス・コンポーネント・リストを指定する)。IPLデバイス・コンポーネント・エントリの詳細が、
図7を参照してさらに説明される。
【0050】
図7を参照すると、1つの例では、IPLデバイス・コンポーネント・エントリ604が例えば以下を含んでいる。
【0051】
* 例えばコンポーネントのバイナリ・コードの絶対ストレージ位置を指定する、例えば64ビット符号なし2進整数であるIPLデバイス・コンポーネント・アドレスを含んでいるIPLデバイス・コンポーネント・アドレス・フィールド700。
【0052】
* コンポーネントのバイナリ・コード内のバイト数を指定する、例えば64ビット符号なし2進整数であるIPLデバイス・コンポーネントの長さを含んでいるIPLデバイス・コンポーネント長さフィールド702。
【0053】
* 例えば以下のフラグなどの複数のフラグを含んでいるIPLデバイス・コンポーネント・フラグ(DCF:device component flags)フィールド704。
【0054】
* 署名されたコンポーネント(SC:Signed component)フラグ(例えば、ビット0)。1である場合、コンポーネントのバイナリ・コードが署名されており、0である場合、コンポーネントのバイナリ・コードが署名されていない。
【0055】
* コンポーネント署名検証済み(CSV:Component signature verified)フラグ(例えば、ビット1)。1である場合、コンポーネントの署名検証が成功していることを示し、0である場合、コンポーネントの署名検証が失敗していることを示す。1つの例では、SCフラグが1に設定されている場合にのみ、CSVが意味を持つ。SCが0に設定される場合、CSVフラグも0に設定される。
【0056】
* この署名されたコンポーネントを検証するために使用されたX.509証明書を含んでいるIPL署名証明書エントリのインデックスを指定する、例えば16ビット符号なし2進整数を含んでいるIPL署名証明書インデックス(SCI:signature certificate index)フィールド706。1つの例では、SCビットが1に設定されている場合にのみ、SCIフィールドが意味を持ち、コンポーネントのバイナリ・コードが署名されていることを示す。署名されたバイナリ・コード・コンポーネントの検証が成功した場合、署名されたバイナリ・コード・コンポーネントの成功した検証に使用された証明書を含んでいるIPL署名証明書(ISC)エントリのインデックスが、署名されたバイナリ・コード・コンポーネント・エントリのSCIフィールドに保存される。
【0057】
1つの実施形態では、IPL情報ブロックを使用してセキュアIPL処理を実行するために、ブート・ローダは、(例えば、メモリ、レジスタなどの選択された位置に格納された)セキュアIPL(SIPL:secure IPL)フラグが(例えば、SEのIPLパネルを介してセキュアIPLオプションを選択することによって)例えば1に設定された場合に、少なくとも1つの署名された署名コンポーネントと署名されたバイナリ・コード・コンポーネントの対が存在することを検証する。1つまたは複数の署名されていないバイナリ・コード・コンポーネントが存在してもよく、1つまたは複数の署名された署名コンポーネントと署名されたバイナリ・コード・コンポーネントの対と混在してよい。
【0058】
ブート・ローダは、署名された署名コンポーネントと署名されたバイナリ・コード・コンポーネントの対を検出した場合、IPL署名証明書(ISC)リストを通過し、カーネル配布者(例えば、Linux配布者)のうちの1つから取得されたX.509証明書から公開鍵を1つずつ抽出し、署名検証が成功するまで、または配布者から取得されたすべての公開鍵がテストされ、どの公開鍵も署名を検証できないという状態になるまで、公開鍵を使用して、署名されたバイナリ・コード・コンポーネントの検証を試みる。
【0059】
署名された署名エントリの後に続くエントリが署名されたバイナリ・コードを含んでいないか、またはバイナリ・コードが、署名を生成するために使用されたバイナリ・コードでない場合、CSVフラグが例えば0に設定される。
【0060】
さらに説明するために、1つの例では、IPLロード・デバイス(例えば、IPLロード・デバイス131またはIPLロード・デバイス168あるいはその両方)が、リストで管理されたIPLの間に使用される固定ブロック直接アクセス・ロード・デバイス(fixed-block direct-access load device)である。固定ブロック直接アクセス・ロード・デバイスは、例えば、論理ブロックと呼ばれる同じサイズのデータ・ブロックを含んでいるデバイスである。デバイス上の各論理ブロックは、例えば0から開始して、連続的に番号付けされる。論理ブロックのアドレスは、論理ブロック・アドレス(LBA:logical block address)と呼ばれる。
【0061】
1つの実施形態では、最大31個のプログラムをロード・デバイスに格納することができる。リストで管理されたIPLの間にロードされるプログラムを選択する手段、およびロード・デバイス上のプログラム・コードの位置が、以下で定義される。
【0062】
データは、ロード・デバイス上でブート・レコードおよび単一ブロック・テーブルの階層に構造化される。ブート・レコードは、デバイスをIPLデバイスとして識別し、プログラム・テーブルを指し示す。
【0063】
プログラム・テーブルは、例えば最大31個のプログラムに対応する、例えば最大31個のポインタのセットである。各ポインタは、リストで管理されたIPLの間にロードされるプログラムのプログラム・コンポーネントを指定する、コンポーネント・テーブルの論理ブロック・アドレスを含む。単一のリストで管理されたIPL動作において、1つの例では、1つのプログラムのみがロードされ、1つのコンポーネント・テーブルのみが使用される。リストで管理されたIPL動作の間にロードされるプログラムは、リストで管理されたIPLの入力パラメータのうちの1つである。
【0064】
コンポーネント・テーブルはエントリのセットを含み、これらのエントリの各々は、ロード・デバイス上のプログラムの位置を示すポインタのリンク・リストである、コンポーネントの論理ブロック・アドレスを示す。コンポーネント・テーブル内の各エントリは、コンポーネントの種類、およびコンポーネントが格納される論理パーティションまたは仮想マシンのストレージ内の位置も含む。コンポーネントの種類の例としては、以下が挙げられる(他の例も可能である)。
【0065】
x∪01∪ コードx∪01∪は、コンポーネント・テーブル・エントリをコンポーネント・テーブル内の最後のエントリとして識別するために使用される。このエントリの後に続くコンポーネント・テーブルの内容は無視される。SIPLフラグが1である場合、ロード・アドレス/ロードPSW/署名情報フィールド(例えば、コンポーネント・エントリのバイト24~31)が、有効なPSWを含み、署名されたバイナリ・コード・コンポーネントの先頭を指し示す。
【0066】
x∪02∪ コードx∪02∪は、コンポーネントをロードされるバイナリ・コードとして指定する。x∪02∪タイプのコンポーネント・エントリがx∪03∪タイプのコンポーネント・エントリの直後に存在する場合、バイナリ・コードは署名されたバイナリ・コードであり、そうでない場合、バイナリ・コードは署名されたバイナリ・コードではない。
【0067】
1つの例では、SIPLが1に設定され、x∪02∪タイプのコンポーネント・エントリがx∪03∪タイプのコンポーネント・エントリの直後に存在し、バイナリ・コードがディスクのブロック・サイズの倍数でない場合、ディスクのブロックの未使用の部分に0が埋め込まれ、バイナリ・コードの署名を生成するときに、埋め込まれたバイトが使用される。
【0068】
x∪03∪ コードx∪03∪は、コンポーネント・テーブル・エントリを署名情報エントリとして識別するために使用され、次のコンポーネント・テーブル・エントリの署名されたバイナリ・コードの署名を含む。したがって、次のコンポーネント・テーブル・エントリは、署名されたバイナリ・コードを含むx∪02∪タイプのコンポーネント・テーブル・エントリであり、この署名されたバイナリ・コードの署名が、配布者から取得された証明書のうちの1つからの公開鍵を使用して検証される。
【0069】
コンポーネント内のポインタのリストは、セグメント・テーブルと呼ばれる。セグメント・テーブルは、リストで管理されたIPLの間にロードされるデータのセグメントを指し示すポインタを含む。
【0070】
したがって、1つの例では、次のコンポーネント・テーブル・エントリのセグメント・テーブルが署名されたバイナリ・コードを含まないか、またはバイナリ・コードが、現在のコンポーネント・テーブル・エントリのセグメント・テーブル内の署名を生成するために使用されたバイナリ・コードではない場合、IPLデバイス・コンポーネント・エントリ内のコンポーネント署名検証済み(CSV)フラグが例えば0に設定され、ブート・ローダによるコンポーネントの署名検証が成功しなかったことを示す。そうでない場合、コンポーネント署名検証済みフラグが1に設定され、ブート・ローダによるコンポーネントの署名検証が成功したことを示す。CSVフラグは、どのバイナリ・コード・コンポーネントが署名検証エラーを含んでいるかを決定することにおいて役立つ。
【0071】
セキュアIPLフラグが例えば1に設定された場合、ブート・ローダは、署名検証が成功した場合にのみIPLプロセスを継続する。そうではなく、このフラグが例えば0に設定された場合、ブート・ローダは、署名検証が成功しなかった場合でもIPLプロセスを継続する。後者は、セキュアIPLプロセスのテスト中に役立つ。
【0072】
さらに、上で示されたように、1つの実施形態では、最後のコンポーネント・エントリ(FCE:final component entry)と呼ばれるコンポーネント・テーブル内のコンポーネント・エントリが存在する。SIPLフラグが例えば1である場合、最後のコンポーネント・エントリは、有効なPSWを含み、第1の署名されたバイナリ・コード・コンポーネント(BCC)の先頭を指し示す。各署名されたバイナリ・コード・コンポーネントおよび署名されていないバイナリ・コード・コンポーネントは、バイナリ・コード・コンポーネントの最上部にガード・コードを含み、IPLロード・デバイス(ILD)イメージがIPLロード・デバイス内で適切に設定されているかどうか、およびFCE内のPSWが第1の署名されたバイナリ・コード・コンポーネント(例えば、ステージ3のブート・ローダ)の先頭を指し示しているかどうかを検出するように設計されている。そのような設計は、コンポーネント・エントリのいずれかが、意図的に、または意図せずに、アプリケーション・プログラムによって改ざんされているかどうかを検出することもできるであろう。
【0073】
実行された第1のバイナリ・コード・コンポーネントのガード・コードは、1つまたは複数のセキュリティ・チェックに基づいて、IPLプロセスを継続するか、またはIPLプロセスを終了する。
【0074】
1つの選択肢は、valid_start_PSW(プログラム状態ワード)などのフラグなどのインジケータを例えば0に初期化することである。第1の署名されたバイナリ・コード・コンポーネントのガード・コードは、呼び出された場合、FCEのPSWポインタをチェックし、PSWがそれ自身の署名されたコードの先頭を指し示しているかどうかを判定する。指し示している場合、valid_start_PSWフラグが例えば1に設定される。そうでない場合、処理が(無効待機PSW(disable wait PSW))トラップ・コードに入り、IPLプロセスを終了する。他の(署名された、および署名されていない)コンポーネント(例えば、すべてのコンポーネント)は、valid_start_PSWフラグをチェックする。valid_Start_PSWフラグが例えば1に設定された場合、処理が(無効待機PSW)トラップ・コードを回避し、IPLプロセスを継続する。そうでない場合、処理が(無効待機PSW)トラップ・コードに入り、IPLプロセスを終了する。
【0075】
ガード・コードの別の選択肢は、IPL情報報告ブロックの内容を検査し、それらの内容が適切に設定されているかどうかを判定することである。それらが適切に設定されている場合、ガード・コードはIPLプロセスを継続する。そうでない場合、処理が(無効待機PSW)トラップ・コードに入り、IPLプロセスを終了する。妥当性が確認され得る項目は、例えば、少なくとも1つの署名されたバイナリ・コード・コンポーネントが存在すること、各署名されたバイナリ・コード・コンポーネントが署名された署名コンポーネントに対応していること、各署名された署名コンポーネント・エントリが署名されたバイナリ・コード・コンポーネント・エントリの直前に存在すること、およびカーネル配布者によって、署名されたバイナリ・コード・コンポーネントに署名したときに生成された各署名された署名コンポーネントが、有効な署名された署名コンポーネントであること、である。追加の項目、より少ない項目、または異なる項目、あるいはその組合せの妥当性が確認されてよい。
【0076】
さらに、セキュアIPLプロセスの詳細が、
図8~
図9を参照してさらに説明される。例えば、
図8は、セキュアな初期プログラム・ロードおよびブート・プロセスの一例を示しており、
図9は、ガード・コードの処理を示しており、これらの各々が下でさらに説明される。
【0077】
最初に
図8を参照すると、例えば初期プログラム・ロード・デバイスからロードされたセキュア・ブート・イメージ(例えば、1つまたは複数の署名されたバイナリ・コード・コンポーネントまたは署名されていないバイナリ・コード・コンポーネントあるいはその両方を含んでいるLinuxブート・イメージ)、および例えばサービス要素(SE)を介して署名証明書からロードされた署名が使用され、IPL情報報告ブロック(例えば、IPL情報報告ブロック(IIRB)300)を生成する(ステップ800)。ブート・ローダは、SEのIPLパネルを介してセキュアIPL(SIPL)フラグが例えば1に設定された場合に、少なくとも1つの署名された署名コンポーネントと署名されたバイナリ・コード・コンポーネントの対が存在することを検証する(ステップ802)。
【0078】
ブート・ローダは、IDCリストを通過し、署名された署名コンポーネントと署名されたバイナリ・コード・コンポーネントの対を検索する(ステップ804)。対が検出されたかどうかに関する判定が行われる(照会806)。対が検出されなかった場合、その他のコンポーネントが存在するかどうかに関する判定がさらに行われる(照会808)。その他のコンポーネントが存在する場合、処理がステップ804を続行する。しかし、その他のコンポーネントが存在しない場合、処理が、下で説明されるガード・コード・セキュリティ・チェック・プロセスを続行する(ステップ818)。
【0079】
照会806に戻り、対が検出された場合、ブート・ローダがISCリストを通過し、カーネル(例えば、Linux)配布者のうちの1つから取得されたX.509証明書から公開鍵を抽出し、署名検証が成功するか、またはすべての公開鍵がテストされるまで、公開鍵を使用して、署名されたバイナリ・コード・コンポーネントの検証を試みる(ステップ810)。署名が検証されたかどうかに関する判定が行われる(照会812)。署名が検証された場合、コンポーネント署名検証済み(CSV)フラグが例えば1に設定される(ステップ814)。その後、その他のコンポーネントが存在するかどうかに関する判定が行われる(照会816)。その他のコンポーネントが存在する場合、処理がステップ804を続行する。そうでない場合、処理が下で説明されるステップ818を続行する。
【0080】
照会812に戻り、署名が検証されなかった場合、コンポーネント署名検証済み(CSV)フラグが例えば0に設定される(ステップ820)。さらに、このIPLがセキュアIPLになるかどうかに関する判定が行われる(照会822)。このIPLがセキュアIPLになる場合、IPLプロセスが終了され(ステップ824)、処理が終了する(ステップ826)。
【0081】
照会822に戻り、このIPLがセキュアIPLにならない場合、その他のコンポーネントが存在するかどうかに関する判定が行われる(照会816)。その他のコンポーネントが存在する場合、処理がステップ804を続行する。そうでない場合、処理がガード・コード・セキュリティ・チェック・プロセスを続行する(ステップ818)。
【0082】
ガード・コード・セキュリティ・チェック・プロセスの一例が、
図9を参照して説明される。1つの例では、ブート・ローダが、Valid_Start_PSWフラグなどのインジケータを0に初期化する(ステップ900)。プログラム状態ワード(PSW)は、1つの例では、状態を格納するレジスタまたはその他の位置であり、プログラム・カウンタとして機能する。さらに、ブート・ローダは、制御を、ロードされたPSWによって指し示されたバイナリ・コードに移す(ステップ902)。さらに、ブート・ローダは、ロードPSWポインタから開始して、バイナリ・コード・コンポーネントを通過する(ステップ904)。
【0083】
このIPLがセキュアIPLになるかどうかに関する判定が行われる(照会906)。このIPLがセキュアIPLである場合、このコンポーネントが第1の署名されたコンポーネントであるかどうかに関する判定が行われる(照会908)。このコンポーネントが第1の署名されたコンポーネントである場合、ロードされたPSWがそれ自身(第1の署名されたコンポーネント)を指し示しているかどうかに関する判定がさらに行われる(照会910)。ロードされたPSWがそれ自身(第1の署名されたコンポーネント)を指し示していない場合、処理がトラップ・コード(例えば、無効待機PSW)に入り、IPLプロセスを終了する(ステップ912)。その後、処理が終了する(ステップ914)。
【0084】
照会910に戻り、ロードされたPSWがそれ自身(第1の署名されたコンポーネント)を指し示している場合、Valid_Start_PSWフラグが例えば1に設定され、IPLプロセスが継続する(ステップ916)。その他のコンポーネントが存在するかどうかに関する判定が行われる(照会918)。その他のコンポーネントが存在する場合、処理がステップ904を続行する。そうではなく、その他のコンポーネントが存在しない場合、IPLが成功し(ステップ920)、処理が終了する(ステップ914)。
【0085】
照会908に戻り、このコンポーネントが第1の署名されたコンポーネントでない場合、Valid_Start_PSWフラグが例えば1に設定されているかどうかに関する判定がさらに行われる(照会922)。Valid_Start_PSWフラグが1に設定されていない場合、処理がトラップ・コード(無効待機PSW)に入り、IPLプロセスが終了される(ステップ924)。そうではなく、Valid_Start_PSWフラグが例えば1に設定されている場合、トラップ・コードが回避され、IPLプロセスが継続する(ステップ926)。処理は照会918を続行する。
【0086】
照会906に戻り、このIPLがセキュアIPLでない場合、Valid_Start_PSWフラグが例えば1に設定され、IPLプロセスが継続する(ステップ926)。処理は照会918を続行する。
【0087】
本明細書において説明されているように、1つまたは複数の態様では、コード・コンポーネントのパッケージの柔軟性を実現するために、署名されたコード・コンポーネントおよび署名されていないコード・コンポーネントが、任意の順序で出現することができる。コード・コンポーネントは、特定の順序でパッケージ化される必要はない。コード・コンポーネントは、任意の順序で(ディスクおよびメイン・メモリに)格納することができ、任意の順序で実行されてよい。また、新しい順序がないコンポーネントを、将来、容易に追加して維持することができる。したがって、順序がない実装は、特定のパッケージ形式に縛られること、およびパッケージの複雑さを防ぐ。
【0088】
ブート・ローダは、IPLロード・デバイスからロードされたすべてのコードおよびデータ・ブロックを検証し、セキュリティの向上を実現する。ブート・ローダは、例えば、署名を検証し、コンポーネントの重複がないことを検証し、IPLロード・デバイスからロードされた初期ロードPSWが有効であることを検証する。
【0089】
PSWは、セキュアIPLを実行してセキュリティの向上を実現するためのガード・コードを含んでいる署名されたコード・コンポーネントを指し示す。実行された第1のコンポーネントのガード・コードは、1つまたは複数のセキュリティ・チェックに基づいて、IPLプロセスを継続するか、またはIPLプロセスを終了する。1つの選択肢は、Valid_Start_PSWフラグを0に初期化することである。第1の署名されたコンポーネントのガード・コードは、呼び出された場合、01タイプのエントリ(PSポインタを含んでいる)をチェックし、PSWがそれ自身の署名されたコードの先頭を指し示しているかどうかを確認する。指し示している場合、Valid_Start_PSWフラグが1に設定される。そうでない場合、処理が(無効待機PSW)トラップ・コードに入り、IPLプロセスを終了する。他のすべての(署名された、および署名されていない)コンポーネントは、Valid_Start_PSWフラグをチェックする。Valid_Start_PSWフラグが1に設定された場合、処理が(無効待機PSW)トラップ・コードを回避し、IPLプロセスを継続する。そうでない場合、処理が(無効待機PSW)トラップ・コードに入り、IPLプロセスを終了する。別の選択肢は、IPL情報報告ブロックを検査し、何が発生したかを調べることである。
【0090】
コード・コンポーネントおよび対応する署名コンポーネントは、関連する新しい種類のコンポーネントを将来追加できるようにするために、別々になっている。例えば、コンポーネントの種類がさらに追加されてよい。署名を含む特定のコード形式には依存しない。IPLごとに、将来使用されることがある2つ以上の証明書の使用が許容される。例えば、ブート・ボリュームは、さまざまなコンポーネント(例えば、ステージ3のブート・ローダ、さまざまなカーネル、さまざまなパラメータ・リスト、さまざまなRAM(random access memory:ランダム・アクセス・メモリ)ディスク)を含んでよく、それらのコンポーネントから選択されたコンポーネントが起動され得る。この選択は、ブート・メニューを介して実行され、異なるコンポーネントを異なる時間に準備し、異なる鍵を使用して署名することができ(例えば、異なる鍵によって異なるコンポーネントに署名できるように、古い(署名済みの安定した)レスキュー・カーネル、ならびにより新しい標準カーネルおよび新しいレベル3のブート・ローダが存在することがある)、zIPLは、署名鍵がまだ有効である限り、古いコンポーネントに再び署名することを必要とせずに、ブート・プロセスのコンポーネントの組合せを許容する。これによって、さまざまな所有者/ベンダーからのさまざまなコンポーネントの組合せ(例えば、あるベンダーからのカーネルおよび別のベンダーからのソフトウェア・ブート・ローダ)も可能にする。
【0091】
本明細書において説明されているように、署名検証の設定は、例えば、別個のリスト内の異なるベンダーからの2つ以上の証明書を含んでよく、署名およびコンポーネントが別々のエントリ(例えば、タイプ3+タイプ2)であり、署名がコンポーネント(タイプ3+タイプ2)と対にされ、署名検証の設定は、攻撃に対する追加された保護のためのガード・コードをバイナリ・コード・コンポーネントに含んでよく、複数の署名されたバイナリ・コード・セクションおよび署名されていないバイナリ・コード・セクションが、どのような種類の構造も有さずに存在してよく、ブート・ローダが2つ以上の証明書(署名されたコード・セクションごとに1つ)を必要として/使用してよく、またはブート・ローダが、署名されたコード・セクションの署名に一致する証明書を検出するために、証明書を(1つずつ)テストし、一致した証明書のインデックスを署名されたコンポーネント・リストに格納し、あるいはこれらの組合せが実行される。
【0092】
本発明の1つまたは複数の態様は、コンピュータ技術に密接に関係しており、コンピュータ内の処理を容易にし、その性能を改善する。1つまたは複数の態様では、セキュアIPLロード・プロセスを提供することによって、セキュリティが強化され、処理が容易になる。本発明の1つまたは複数の態様に関連している、コンピューティング環境内の処理を容易にする一実施形態の詳細が、
図10A~
図10Bを参照してさらに説明される。
【0093】
図10Aを参照すると、一実施形態では、コンピューティング環境のシステム・コンポーネント(例えば、カーネル)の初期プログラム・ロードが実行される(1000)。初期プログラム・ロードを実行することは、システム・コンポーネントに関連する1つまたは複数の署名されたバイナリ・コード・コンポーネントの1つまたは複数の署名が検証されているかどうかを判定することを含む(1002)。1つまたは複数の署名が検証されているということの決定に基づいて、追加の検証が実行される(1004)。追加の検証を実行することは、例えば、システム・コンポーネントに関連する1つまたは複数のバイナリ・コード・コンポーネントのうちの選択されたバイナリ・コード・コンポーネントを取得することと(1006)、選択されたバイナリ・コード・コンポーネントが、1つまたは複数のバイナリ・コード・コンポーネントに関する特定の署名されたバイナリ・コード・コンポーネント(例えば、第1の署名されたバイナリ・コード・コンポーネント)であるかどうかを判定することと(1008)を含む。選択されたバイナリ・コード・コンポーネントが特定の署名されたバイナリ・コード・コンポーネントであるということの決定に基づいて、チェックが実行される(1010)。チェックの成功に基づいて、初期プログラム・ロードの実行が継続する(1012)。
【0094】
カーネルなどのシステム・コンポーネントのセキュアな初期プログラム・ロードが提供され、コンピューティング環境内のセキュリティを強化し、コンピューティング環境内の処理を容易にする。
【0095】
1つの実施形態では、1つまたは複数のバイナリ・コード・コンポーネントが、1つまたは複数の署名されたバイナリ・コード・コンポーネントおよび1つまたは複数の署名されていないバイナリ・コード・コンポーネントを含み、1つまたは複数のバイナリ・コード・コンポーネントが順序不同である(1014)。順序を必要としないことにより、パッケージが柔軟になり、パッケージの複雑さが軽減される。これによって、デバイス・コンポーネントをさらに追加することなどを可能にする。
【0096】
1つの例として、1つまたは複数の署名が、1つまたは複数の署名されたバイナリ・コード・コンポーネントとは別に格納される(1016)。これによって、セキュリティを強化する。
【0097】
1つの例では、選択されたバイナリ・コード・コンポーネントを取得することが、制御位置(例えば、プログラム状態ワード)でのポインタに基づいて、選択されたバイナリ・コード・コンポーネントを選択することを含む(1018)。
【0098】
1つの例として、
図10Bを参照すると、チェックを実行することは、ポインタがそれ自身(例えば、第1の署名されたコンポーネント)を指し示しているかどうかを判定することを含み、ポインタがそれ自身を指し示していることに基づいて、チェックが成功する(1020)。
【0099】
さらに、1つの例では、チェックの成功に基づいて、有効インジケータが、選択された値に設定される(1022)。
【0100】
1つの実施形態では、初期プログラム・ロードの実行を継続することが、別のバイナリ・コード・コンポーネントを取得することと(1024)、別のバイナリ・コード・コンポーネントを取得することに基づいて、有効インジケータが選択された値に設定されているかどうかを判定することと(1026)、有効インジケータが選択された値に設定されているということの決定に基づいて、処理される他のバイナリ・コード・コンポーネントが存在することに基づいて取得することおよび判定することを繰り返すこととを含む(1028)。
【0101】
1つの例では、初期プログラム・ロードの実行を継続することが、有効インジケータが選択された値以外の値に設定されているということの決定に基づいて、初期プログラム・ロードを終了することを含む(1030)。
【0102】
1つの例では、追加の検証を実行することが、セキュアな初期プログラム・ロードが実行されるかどうかを判定することと(1032)、セキュアな初期プログラム・ロードが実行されるということの決定に基づいて、バイナリ・コード・コンポーネントが、1つまたは複数のバイナリ・コード・コンポーネントに関する特定の署名されたバイナリ・コード・コンポーネントであるかどうかの判定を実行することと(1034)をさらに含む。
【0103】
さらに、1つの実施形態では、1つまたは複数のバイナリ・コンポーネントおよび1つまたは複数の署名を使用して、情報報告ブロックが生成される(1036)。情報報告ブロックは、少なくとも、1つまたは複数の署名が検証されているかどうかを判定することにおいて採用される(1038)。
【0104】
その他の変形および実施形態が可能である。
【0105】
エミュレーション環境を含むが、これに限定されない、その他の種類のコンピューティング環境が、本発明の1つまたは複数の態様を組み込んで使用してもよく、その例が、
図11Aを参照して説明される。この例では、コンピューティング環境35は、例えば、1つまたは複数のバス43またはその他の接続あるいはその両方を介して互いに結合された、ネイティブ中央処理装置(CPU)37、メモリ39、および1つまたは複数の入出力デバイスまたはインターフェイスあるいはその両方41を含む。例えば、コンピューティング環境35は、インターナショナル・ビジネスマシーンズ・コーポレーション(ニューヨーク州アーモンク)によって提供されるPowerPC(R)プロセッサ、あるいはインターナショナル・ビジネスマシーンズ・コーポレーション、インテル、またはその他の企業によって提供されるアーキテクチャに基づくその他のマシン、あるいはその組合せを含んでよい。
【0106】
ネイティブ中央処理装置37は、環境内で処理中に使用される1つまたは複数の汎用レジスタまたは1つまたは複数の専用レジスタあるいはその両方などの、1つまたは複数のネイティブ・レジスタ45を含む。これらのレジスタは、いずれかの特定の時点での環境の状態を表す情報を含む。
【0107】
さらに、ネイティブ中央処理装置37は、メモリ39に格納された命令およびコードを実行する。1つの特定の例では、中央処理装置は、メモリ39に格納されたエミュレータ・コード47を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が、別のアーキテクチャをエミュレートできるようにする。例えば、エミュレータ・コード47は、z/Architecture(R)ハードウェア・アーキテクチャ以外のアーキテクチャに基づくマシン(PowerPC(R)プロセッサ、またはその他のサーバもしくはプロセッサなど)が、z/Architecture(R)ハードウェア・アーキテクチャをエミュレートし、z/Architecture(R)ハードウェア・アーキテクチャに基づいて開発されたソフトウェアおよび命令を実行できるようにする。
【0108】
エミュレータ・コード47に関連する詳細が、
図11Bを参照してさらに説明される。メモリ39に格納されたゲスト命令49は、ネイティブCPU37のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された(例えば、マシン命令と相互関係がある)ソフトウェア命令を含む。例えば、ゲスト命令49は、z/Architecture(R)ハードウェア・アーキテクチャ・プロセッサ上で実行するように設計されていてよいが、代わりに、例えばインテル・プロセッサであってよい、ネイティブCPU37上でエミュレートされる。1つの例では、エミュレータ・コード47は、メモリ39から1つまたは複数のゲスト命令49を取得するため、および取得された命令のローカル・バッファリングを任意選択的に提供するための命令フェッチ・ルーチン51を含む。エミュレータ・コード47は、取得されたゲスト命令の種類を決定するため、およびゲスト命令を、1つまたは複数の対応するネイティブ命令55に変換するための命令変換ルーチン53も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別すること、およびこの機能を実行するためのネイティブ命令を選択することを含む。
【0109】
さらに、エミュレータ・コード47は、ネイティブ命令の実行を引き起こすためのエミュレーション制御ルーチン57を含む。エミュレーション制御ルーチン57は、ネイティブCPU37に、1つまたは複数のすでに取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに返してよい。ネイティブ命令55の実行は、データをメモリ39からレジスタにロードすること、データをレジスタからメモリに再び格納すること、あるいは変換ルーチンによって決定された何らかの種類の算術演算または論理演算を実行することを含んでよい。
【0110】
例えば、各ルーチンは、メモリに格納されてネイティブ中央処理装置37によって実行されるソフトウェアにおいて実装される。他の例では、ルーチンまたは動作のうちの1つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらの何らかの組合せにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブCPUのレジスタ45を使用して、またはメモリ39内の位置を使用することによって、エミュレートされてよい。実施形態では、ゲスト命令49、ネイティブ命令55、およびエミュレータ・コード37は、同じメモリ内に存在してよく、または異なるメモリ・デバイス間で分配されてよい。
【0111】
IBM、z/Architecture、IBM Z、z/OS、PR/SM、およびPowerPCは、少なくとも1つの管轄区域内のインターナショナル・ビジネスマシーンズ・コーポレーションの商標または登録商標である。インテルおよびItaniumは、米国およびその他の国における、インテル社またはその子会社の商標または登録商標である。Linuxは、米国またはその他の国あるいはその両方における、リーナス・トーバルズ(Linus Torvalds)の登録商標である。
【0112】
1つまたは複数の態様がクラウド・コンピューティングに関連してよい。
【0113】
本開示にはクラウド・コンピューティングに関する詳細な説明が含まれているが、本明細書において示された教示の実装は、クラウド・コンピューティング環境に限定されないと理解されるべきである。むしろ、本発明の実施形態は、現在既知であるか、または今後開発される任意のその他の種類のコンピューティング環境と組み合わせて実装できる。
【0114】
クラウド・コンピューティングは、構成可能な計算リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス提供モデルであり、管理上の手間またはサービス・プロバイダとのやりとりを最小限に抑えて、これらのリソースを迅速にプロビジョニングおよび解放することができる。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、および少なくとも4つの展開モデルを含むことができる。
【0115】
特徴は、次のとおりである。
【0116】
オンデマンドのセルフ・サービス:クラウドの利用者は、サーバの時間およびネットワーク・ストレージなどの計算能力を一方的に、サービス・プロバイダとの人間的なやりとりを必要とせず、必要に応じて自動的にプロビジョニングすることができる。
【0117】
幅広いネットワーク・アクセス:クラウドの能力は、ネットワークを経由して利用可能であり、標準的なメカニズムを使用してアクセスできるため、異種のシン・クライアントまたはシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、およびPDA)による利用を促進する。
【0118】
リソース・プール:プロバイダの計算リソースは、プールされ、マルチテナント・モデルを使用して複数の利用者に提供される。さまざまな物理的および仮想的リソースが、要求に従って動的に割り当ておよび再割り当てされる。場所に依存しないという感覚があり、利用者は通常、提供されるリソースの正確な場所に関して管理することも知ることもないが、さらに高い抽象レベルでは、場所(例えば、国、州、またはデータセンター)を指定できる場合がある。
【0119】
迅速な順応性:クラウドの能力は、迅速かつ柔軟に、場合によっては自動的にプロビジョニングされ、素早くスケールアウトし、迅速に解放されて素早くスケールインすることができる。プロビジョニングに使用できる能力は、利用者には、多くの場合、任意の量をいつでも無制限に購入できるように見える。
【0120】
測定されるサービス:クラウド・システムは、計測機能を活用することによって、サービスの種類(例えば、ストレージ、処理、帯域幅、およびアクティブなユーザのアカウント)に適した抽象レベルで、リソースの使用を自動的に制御および最適化する。リソースの使用量は監視、制御、および報告することができ、利用されるサービスのプロバイダと利用者の両方に透明性が提供される。
【0121】
サービス・モデルは、次のとおりである。
【0122】
SaaS(Software as a Service):利用者に提供される能力は、クラウド・インフラストラクチャ上で稼働しているプロバイダのアプリケーションの利用である。それらのアプリケーションは、Webブラウザ(例えば、Webベースの電子メール)などのシン・クライアント・インターフェイスを介して、さまざまなクライアント・デバイスからアクセスできる。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能を含む基盤になるクラウド・インフラストラクチャを、限定的なユーザ固有のアプリケーション構成設定を行う可能性を除き、管理することも制御することもない。
【0123】
PaaS(Platform as a Service):利用者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションをクラウド・インフラストラクチャにデプロイすることである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、デプロイされたアプリケーション、および場合によってはアプリケーション・ホスティング環境の構成を制御することができる。
【0124】
IaaS(Infrastructure as a Service):利用者に提供される能力は、処理、ストレージ、ネットワーク、およびその他の基本的な計算リソースのプロビジョニングであり、利用者は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをデプロイして実行できる。利用者は、基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、オペレーティング・システム、ストレージ、デプロイされたアプリケーションを制御することができ、場合によっては、選択されたネットワーク・コンポーネント(例えば、ホスト・ファイアウォール)を限定的に制御できる。
【0125】
展開モデルは、次のとおりである。
【0126】
プライベート・クラウド:このクラウド・インフラストラクチャは、組織のためにのみ運用される。この組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
【0127】
コミュニティ・クラウド:このクラウド・インフラストラクチャは、複数の組織によって共有され、関心事(例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスに関する考慮事項)を共有している特定のコミュニティをサポートする。これらの組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
【0128】
パブリック・クラウド:このクラウド・インフラストラクチャは、一般ユーザまたは大規模な業界団体が使用できるようになっており、クラウド・サービスを販売する組織によって所有される。
【0129】
ハイブリッド・クラウド:このクラウド・インフラストラクチャは、データとアプリケーションの移植を可能にする標準化された技術または独自の技術(例えば、クラウド間の負荷バランスを調整するためのクラウド・バースト)によって固有の実体を残したまま互いに結合された2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の複合である。
【0130】
クラウド・コンピューティング環境は、ステートレス、疎結合、モジュール性、および意味的相互運用性に重点を置いたサービス指向の環境である。クラウド・コンピューティングの中心になるのは、相互接続されたノードのネットワークを含んでいるインフラストラクチャである。
【0131】
ここで
図12を参照すると、例示的なクラウド・コンピューティング環境50が示されている。図示されているように、クラウド・コンピューティング環境50は、クラウドの利用者によって使用されるローカル・コンピューティング・デバイス(例えば、パーソナル・デジタル・アシスタント(PDA:personal digital assistant)または携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはその組合せなど)が通信できる1つまたは複数のクラウド・コンピューティング・ノード52を含んでいる。ノード52は、互いに通信してよい。ノード52は、1つまたは複数のネットワーク内で、本明細書において前述されたプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはこれらの組合せなどに、物理的または仮想的にグループ化されてよい(図示されていない)。これによって、クラウド・コンピューティング環境50は、クラウドの利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないインフラストラクチャ、プラットフォーム、またはSaaS、あるいはその組合せを提供できる。
図12に示されたコンピューティング・デバイス54A~Nの種類は、例示のみが意図されており、コンピューティング・ノード52およびクラウド・コンピューティング環境50は、任意の種類のネットワークまたはネットワーク・アドレス可能な接続(例えば、Webブラウザを使用した接続)あるいはその両方を経由して任意の種類のコンピュータ制御デバイスと通信することができると理解される。
【0132】
ここで
図13を参照すると、クラウド・コンピューティング環境50(
図12)によって提供される機能的抽象レイヤのセットが示されている。
図13に示されたコンポーネント、レイヤ、および機能は、例示のみが意図されており、本発明の実施形態がこれらに限定されないということが、あらかじめ理解されるべきである。図示されているように、次のレイヤおよび対応する機能が提供される。
【0133】
ハードウェアおよびソフトウェア・レイヤ60は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例は、メインフレーム61、RISC(Reduced Instruction Set Computer)アーキテクチャベースのサーバ62、サーバ63、ブレード・サーバ64、ストレージ・デバイス65、ならびにネットワークおよびネットワーク・コンポーネント66を含む。一部の実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
【0134】
仮想化レイヤ70は、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75などの仮想的実体を提供できる抽象レイヤを備える。
【0135】
一例を挙げると、管理レイヤ80は、以下で説明される機能を提供することができる。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実行するために利用される計算リソースおよびその他のリソースの動的調達を行う。計測および価格設定82は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡、およびそれらのリソースの利用に対する請求書の作成と送付を行う。一例を挙げると、それらのリソースは、アプリケーション・ソフトウェア・ライセンスを含んでよい。セキュリティは、クラウドの利用者およびタスクのID検証を行うとともに、データおよびその他のリソースの保護を行う。ユーザ・ポータル83は、クラウド・コンピューティング環境へのアクセスを利用者およびシステム管理者に提供する。サービス・レベル管理84は、必要なサービス・レベルを満たすように、クラウドの計算リソースの割り当てと管理を行う。サービス水準合意(SLA:Service Level Agreement)計画および実行85は、今後の要求が予想されるクラウドの計算リソースの事前準備および調達を、SLAに従って行う。
【0136】
ワークロード・レイヤ90は、クラウド・コンピューティング環境で利用できる機能の例を示している。このレイヤから提供されてよいワークロードおよび機能の例としては、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想クラスルーム教育の配信93、データ解析処理94、トランザクション処理95、およびセキュアIPL処理96が挙げられる。
【0137】
本発明の態様は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読ストレージ媒体を含んでよい。
【0138】
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組合せであってよいが、これらに限定されない。コンピュータ可読ストレージ媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー(R)・ディスク、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組合せを含む。本明細書において使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【0139】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組合せ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【0140】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide area network)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【0141】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組合せが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【0142】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読ストレージ媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組合せに特定の方式で機能するように指示できるものであってもよい。
【0143】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスにロードされ、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【0144】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組合せは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【0145】
上に加えて、顧客の環境の管理を提供するサービス・プロバイダによって、1つまたは複数の態様が提供されること、提示されること、デプロイされること、管理されること、サービス提供されることなどが行われてよい。例えば、サービス・プロバイダは、1人または複数人の顧客のために1つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成すること、維持すること、サポートすることなどを行うことができる。その見返りとして、サービス・プロバイダは、例えばサブスクリプションまたは料金契約あるいはその両方の下で、顧客から支払いを受け取ってよい。追加または代替として、サービス・プロバイダは、1つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ってよい。
【0146】
1つの態様では、1つまたは複数の実施形態を実行するために、アプリケーションがデプロイされてよい。1つの例として、アプリケーションのデプロイは、1つまたは複数の実施形態を実行するよう機能するコンピュータ・インフラストラクチャを提供することを含む。
【0147】
さらに別の態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャがデプロイされてよく、このコンピューティング・インフラストラクチャでは、コンピューティング・システムと組み合わせたコードが、1つまたは複数の実施形態を実行できる。
【0148】
さらに別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含んでいる、コンピューティング・インフラストラクチャを統合するためのプロセスが提供されてよい。コンピュータ・システムは、コンピュータ可読媒体を備え、このコンピュータ可読媒体では、コンピュータ媒体が1つまたは複数の実施形態を含む。コンピュータ・システムと組み合わせたコードは、1つまたは複数の実施形態を実行できる。
【0149】
上ではさまざまな実施形態が説明されたが、それらは単なる例である。例えば、1つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、さまざまな命令または動作が使用されてよい。さらに、さまざまなブート・プロセスが使用されてよい。多くの変形が可能である。
【0150】
さらに、他の種類のコンピューティング環境が、恩恵を受けることができ、使用され得る。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも2つのプロセッサを含んでいる、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
【0151】
入出力デバイスまたはI/Oデバイス(キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない)は、直接的に、または介在するI/Oコントローラを通じて、システムに結合できる。ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット(R)・カードは、使用可能なネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
【0152】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「ある(a)」、「1つの(an)」、および「その(the)」は、特に明示的に示されない限り、複数形も含むことが意図されている。「備える(comprise)」または「備えている(comprising)」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組合せの存在を示すが、1つまたは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組合せの存在または追加を除外していないということが、さらに理解されるであろう。
【0153】
特許請求の範囲内のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、動作、および等価なものは、もしあれば、具体的に特許請求されるとき、その他の特許請求される要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。1つまたは複数の実施形態の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。多くの変更および変形が可能であるということは、当業者にとって明らかであろう。さまざまな態様および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態を理解できるようにするために、実施形態が選択されて説明された。