セキュリティー
以下の情報は、WebSphere® Application Server のセキュリティーに関する概要となります。
- 認証
- リソース・アクセス制御
- データ保全性
- 機密性
- プライバシー
- セキュア・インターオペラビリティー
- Database 2 (DB2®)
- CICS®
情報管理システム (IMS™)
- MQ Series
- Lotus® Domino®
- IBM Directory
IBM z/OS® Security Server Resource Access Control Facility (RACF®) を含む、 すべての System Authorization Facility (SAF) 準拠セキュリティー・サーバー
- WebSEAL を含むリバース・セキュア・プロキシー・サーバー
ID 管理:
WebSphere Application Server バージョン 7.x 以前のリリースの場合:
SAF セキュリティー機能を利用するには、ユーザーが z/OS ベースのユーザー ID を使用して識別される必要があります。J2EE ID をプラットフォーム・ベースのユーザー ID (この場合、RACF ユーザー ID) にマップするためのプリンシパル・マッピング・モジュールを使用することができます。
SAF EJBROLE チェックを実行するために、LDAP ユーザー ID から RACF ユーザー ID にプリンシパル・マッピングを作成する必要があります。
つまり、LDAP レジストリー内の構成ユーザーから z/OS ユーザー ID を派生させるために、マッピング・ログイン・モジュールが使用可能である必要があります。
(SMF 監査 (SAF を使用した) を使用して、これらの変更をトラッキングすることができます。)
WebSphere Application Server バージョン 8.0 以降の新機能:
![[z/OS]](../images/ngzos.gif)
- JAAS マッピング・モジュールを使用して、J2EE ID を SAF ID にマップします。
- SAF の分散 ID マッピング機能を使用します。これには、特定バージョンの SAF が必要です。 WebSphere で JAAS マッピング・モジュールを構成しないでください。その場合、ユーザーは、分散ユーザー ID (LDAP レジストリーのユーザー ID など) を使用して識別されます。 このマッピングは、z/OS セキュリティー管理者が RACMAP SAF プロファイルを使用して処理します。 このオプションによって、分散ユーザー ID と SAF ID の両方を監査レコードに記録できるようにすることで、SMF 監査が拡張されます。 詳しくは、SAF を使用した分散 ID マッピングを参照してください。
業界標準ベース
IBM WebSphere Application Server では、 Web リソース、Web サービス・エンドポイント、および J2EE 仕様に準拠する Enterprise JavaBeans を保護するため、ポリシー・ベースおよび許可ベースの統合モデルを提供しています。 具体的には、WebSphere Application Server は Java EE 6 仕様に準拠し、J2EE Compatibility Test Suite に合格しています。
- Java 2 セキュリティー・モデル。 システム・リソースに対し、ポリシーおよび許可をベースにした、きめの細かいアクセス制御を提供します。
- Common Secure Interoperability Version 2 (CSIv2) セキュリティー・プロトコル。Secure Authentication Services (SAS) セキュリティー・プロトコルもサポートされています。どちらのプロトコルも、以前の WebSphere Application Server のリリースでサポートされています。
CSIv2 は J2EE 1.4 仕様の必須要素であり、さまざまなベンダーのアプリケーション・サーバー間のインターオペラビリティー、
およびエンタープライズ CORBA サービスとのインターオペラビリティーには不可欠です。
重要: SAS がサポートされるのは、 バージョン 6.1 セルに統合されたバージョン 6.0.x と、 それより前のバージョンの間のサーバーに限られます。
- Java アプリケーション、サーブレット、 およびエンタープライズ Bean 用の Java Authentication and Authorization Service (JAAS) プログラミング・モデル。
- Enterprise Information Systems へのアクセスをサポートするリソース・アダプターに接続するため の J2EE コネクター・アーキテクチャー。
セキュア・ソケット通信、メッセージの暗号化、およびデータ暗号化をサポートする標準のセキュリティー・モデルおよびインターフェースは、 Java Secure Socket Extension (JSSE) および Java Cryptographic Extension (JCE) です。
オープン・アーキテクチャー・パラダイム
アプリケーション・サーバーは、複数層のエンタープライズ・コンピューティング・フレームワークの中核をなす部分です。 IBM WebSphere Application Server は、 オープン・アーキテクチャー・パラダイムを採用し、 エンタープライズ・ソフトウェア・コンポーネントと統合するプラグイン・ポイントを多数提供します。プラグイン・ポイントは、J2EE の標準仕様が適用できるところでは必ず、この仕様を基にしています。
紺色の影が付いた背景は、 WebSphere Application Serverバージョン 9.0 と他のビジネス・アプリケーション・コンポーネントとの境界を示します。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
LTPA 認証メカニズムは、すべてのプラットフォーム・セキュリティー用に設計されています。
ダウンストリーム・サーバーはセキュリティー・トークンを検証できます。また、リバース・セキュア・プロキシー・サーバー
とシングル・サインオン (SSO) とのトラスト・アソシエーション関係のセットアップもサポートします。
これについては後述します。 LTPA と LDAP またはカスタム・ユーザー・レジストリー・インターフェースとの組み合わせ以外に、
バージョン 6.x 以降 では、LocalOS ユーザー・レジストリー・インターフェースを備えた LTPA にも対応しています。単一のノードに
複数のアプリケーション・サーバーが組み込まれている場合に、
この新しい構成は特に有効です。
ローカル OS のユーザー・レジストリー実装が、
Windows ドメイン・コントローラーなどの集中化されたユーザー・レジストリーになっている場合、
または複数ノード上で整合性のある状態を維持できる場合は、この構成を分散環境で機能させることができます。
WebSphere Application Server は、
J2EE コネクター・アーキテクチャーをサポートし、コンテナー管理認証を提供します。
このサーバーは、デフォルトの Java 2 Connector (J2C) のプリンシパルおよびクレデンシャル・マッピング・モジュールを提供します。
このモジュールは、任意の認証済みユーザーのクレデンシャルを、
指定したエンタープライズ情報システム (EIS) セキュリティー・ドメインのパスワード・クレデンシャルにマップします。
このマッピング・モジュールは、Java 2 コネクターおよび JAAS 仕様に従って設計された特別な JAAS ログイン・モジュールです。
他のマッピング・ログイン・モジュールも接続できます。
![[z/OS]](../images/ngzos.gif)
ユーザー・レジストリーおよびアクセス制御
ユーザー・レジストリーにはユーザーおよびグループに関する情報が入っています。 WebSphere Application Server のユーザー・レジストリーは、 ユーザーの認証を行い、 ユーザーおよびグループに関する情報を取得して、 セキュリティー関連の機能 (認証および許可など) を実行します。
- ローカル OS (SAF ベース)
- LDAP
- 統合リポジトリー
WebSphere Application Server は、ローカル OS、LDAP、および統合リポジトリーのレジストリーの他にも、カスタム・レジストリー・フィーチャー (カスタム・ユーザー・レジストリーとも言います) を使用して任意のレジストリーをサポートするプラグインも提供しています。
WebSphere Application Server のローカル OS レジストリー実装が選択されている場合、 WebSphere 環境で直接 Security Access Facility (SAF) を使用して、 Resource Access Control Facility (RACF) などの z/OS Security Server 機能を統合できます。 ローカル OS 以外のレジストリーを構成する場合、2 つのオプションを持つ z/OS Security Server 機能を活用できます。 適切なシステム・ログイン構成で、プラグ可能な JAAS マッピング・モジュール (とそれに続けて WebSphere Application Server for z/OS 提供の JAAS ログイン・モジュール) を構成できます。 WebSphere Application Server バージョン 8.5 では、代わりに分散 ID マッピング・フィーチャーを使用できます。
詳しくは、レジストリーまたはリポジトリーの選択を参照してください。
WebSphere Application Server 構成: WebSphere Application Serverバージョン 9.0 for z/OS では、 既存の z/OS 以外のアプリケーションを System Authorization Facility (SAF) および RACF などの z/OS 固有の機能と統合することができます。 これにより、WebSphere Application Server for z/OS と z/OS 以外のプラットフォームのレジストリーを統合できます。以下に例を示します。
アプリケーション・サーバー構成 | レジストリー・タイプ | 許可方式 | 利点 |
---|---|---|---|
WebSphere Application Server | LDAP | WebSphere バインディングおよび Tivoli® Access Manager などの外部セキュリティー・プロバイダー | 共有レジストリー (異機種のプラットフォームに渡る) |
WebSphere Application Server for z/OS | RACF | WebSphere バインディングおよび RACF EJBROLE | 集中アクセスおよび監査機能 (バージョン 4.0 を実行しているサーバーを含むことができる) |
WebSphere Application Server 混合環境 | LDAP またはカスタム | WebSphere バインディング、外部セキュリティー・プロバイダー、 および RACF EJBROLE | 共有レジストリー、一元アクセス、および監査機能 |
- WebSphere Application Server ネットワーク・レジストリー構成
- WebSphere Application Server for z/OS ネットワーク・レジストリー構成:
- z/OS セキュリティー拡張を使用した WebSphere Application Server ネットワーク・レジストリー
認証メカニズム
- Lightweight Third Party Authentication (LTPA)
Lightweight Third Party Authentication では、認証済みユーザーのセキュリティー・トークンが生成されます。 このトークンを使用することより、以降の呼び出しで、シングル・サインオン (SSO) ドメイン内の同じサーバーまたは 他のサーバーに対して、そのユーザーが認証済みであることを示すことができます。
- Kerberos
認証メカニズムとしての Kerberos のセキュリティー・サポートは、このリリースの WebSphere Application Server で追加されました。Kerberos は、成熟し、柔軟性が高く、オープン、かつ非常にセキュアなネットワーク認証プロトコルです。Kerberos には、認証、相互認証、メッセージの保全性と機密性、および委任の機能が含まれています。
- Simple WebSphere Authentication Mechanism (SWAM)
SWAM は簡単に構成できるため、 単一のアプリケーション・サーバー環境で役立ちます。 ただし、SWAM では、要求ごとにユーザー ID とパスワードの認証を行う必要があります。注: SWAM は WebSphere Application Server の前のリリースで非推奨になり、将来のリリースで削除されます。
IIOP 認証プロトコル
IIOP 認証プロトコルは、Java クライアントから WebSphere Application Server for z/OS への要求、 または J2EE アプリケーション・サーバー間の要求を認証するためのメカニズムです。Common Secure Interoperability Version 2 (CSIv2) は、WebSphere Application Server for z/OS バージョン 6.x 以降で実装されており、 戦略的プロトコルであると見なされています。
![[z/OS]](../images/ngzos.gif)
WebSphere Application Server for z/OS コネクターのセキュリティー
WebSphere Application Server は、 J2EE コネクター・アーキテクチャーをサポートし、コンテナー管理認証を提供します。 WebSphere Application Server は、デフォルトの J2C のプリンシパルおよびクレデンシャル・マッピング・モジュールを提供します。 このモジュールは、任意の認証済みユーザーのクレデンシャルを、指定した EIS (Enterprise Information System) セキュリティー・ドメイン のパスワード・クレデンシャルにマップします。EIS システムが、WebSphere Application Server と同一のセキュリティー・ドメインにある場合、z/OS 仕様のコネクターもサポートされています。 この場合、J2EE 要求に対して使用する認証済みクレデンシャルを EIS のクレデンシャルとして使用できるため、パスワードは必要ではありません。
Web Services Security
WebSphere Application Server では、Organization for the Advancement of Structured Information Standards (OASIS) Web Services Security Version 1.1 仕様に基づいて Web サービスを保護することができます。 このような標準は、Web サービス環境で交換されるメッセージの保護方法を 規定します。この仕様は、メッセージの保全性と機密性を保護するための中核機構を定義し、セキュリティー関連の要求と メッセージを関連付けるためのメカニズムを提供します。
トラスト・アソシエーション
- IBM Tivoli Access Manager for e-business
- WebSEAL
- Caching Proxy
セキュリティー属性の伝搬
- 静的属性を照会するエンタープライズ・ユーザー・レジストリー
- 静的または動的属性を照会できる、カスタム・ログイン・モジュール
シングル・サインオン・インターオペラビリティー・モード
WebSphere Application Server では、インターオペラビリティー・モード・オプションにより、WebSphere Application Server バージョン 6.1.x 以降の シングル・サインオン (SSO) 接続が、前のバージョンのアプリケーション・サーバーと相互運用できるようになります。 このオプションを選択した場合、WebSphere Application Server は応答に旧スタイルの LtpaToken を追加するため、 このトークン・タイプでのみ機能する他のサーバーに応答を送信することができます。 このオプションは、Web インバウンド・セキュリティー属性の伝搬オプションが使用可能になっている場合にのみ適用されます。シングル・サインオンの詳細については、Web ユーザー認証を最小化するためのシングル・サインオンの実装を参照してください。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
![[z/OS]](../images/ngzos.gif)
Web コンテナーおよび EJB コンテナーを使用した J2EE リソースのセキュリティー
それぞれのコンテナーは、2 種類のセキュリティー (宣言セキュリティー とプログラマチック・セキュリティー) に対応しています。 宣言セキュリティーでは、アプリケーションのセキュリティー構造 (データの保全性と機密性、認証要件、セキュリティーのロール、アクセス制御など) が、そのアプリケーション外部の形式で表されます。 特にデプロイメント記述子は、J2EE プラットフォームにおける宣言セキュリティーの主要な手段です。 WebSphere Application Server は、デプロイメント記述子から取得した情報と、デプロイヤーと管理者が 1 組の XML ディスクリプター・ファイルで指定した情報を含む、J2EE セキュリティー・ポリシーを維持します。コンテナーは、実行時には XML ディスクリプター・ファイルで定義されたセキュリティー・ポリシーを使用して、データ制約とアクセス制御を実行します。 宣言セキュリティー単独ではアプリケーションのセキュリティー・モデルを表現するのに十分でない場合には、 プログラマチック・セキュリティーがアプリケーション・コードによって使用され、アクセス判断を行うことがあります。 プログラマチック・セキュリティーのアプリケーション・プログラミング・インターフェース (API) は、 Enterprise JavaBeans (EJB) EJBContext インターフェースの 2 つのメソッド (isCallerInRole、 getCallerPrincipal) およびサーブレット HttpServletrequest インターフェースの 3 つのメソッド (isUserInRole、 getUserPrincipal、getRemoteUser) で構成されています。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[z/OS]](../images/ngzos.gif)
Java 2 セキュリティー
WebSphere Application Server は、 Java 2 セキュリティー・モデルをサポートしています。 管理サブシステム、Web コンテナー、EJB コンテナーなどのシステム・コードは、WebSphere Application Server のセキュリティー・ドメイン内で実行され、現在の実装では、AllPermission の権限を付与され、すべてのシステム・リソースにアクセスできます。 アプリケーションのセキュリティー・ドメイン内で 実行されているアプリケーション・コードは、デフォルトで J2EE 仕様に従ってアクセス権を付与されており、 制限されたシステム・リソース・セットにしかアクセスできません。WebSphere Application Server のランタイム・クラスは、WebSphere Application Server のクラス・ローダーに保護されているため、 アプリケーション・コードからは不可視になっています。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[z/OS]](../images/ngzos.gif)
Java 2 Platform, Enterprise Edition コネクター・セキュリティー
WebSphere Application Server は、 J2EE コネクター・アーキテクチャーをサポートし、コンテナー管理認証を提供します。 WebSphere Application Server は、デフォルトの J2C のプリンシパルおよびクレデンシャル・マッピング・モジュールを提供します。 このモジュールは、任意の認証済みユーザーのクレデンシャルを、指定した EIS (Enterprise Information System) セキュリティー・ドメイン のパスワード・クレデンシャルにマップします。
EIS システムが、WebSphere Application Server と同一のセキュリティー・ドメインにある場合、z/OS 仕様のコネクターもサポートされています。
この場合、J2EE 要求に対して使用する認証済みクレデンシャルを EIS のクレデンシャルとして使用できるため、パスワードは必要ではありません。
詳しくは、接続スレッド ID を参照してください。
アプリケーション・サーバー・プロセスはすべて、デフォルトでは、セル・レベルのセキュリティー XML 文書で定義される共通の セキュリティー構成を共有することになっています。セキュリティー構成では、WebSphere Application Server のセキュリティーを実行 するかどうか、Java 2 セキュリティーを実行するかどうかを決定し、認証メカニズムとユーザー・レジストリー構成、 セキュリティー・プロトコル構成、JAAS ログイン構成、および Secure Sockets Layer 構成について決定します。 アプリケーションには、それぞれ固有のセキュリティー要件がある場合があります。 アプリケーション・サーバー・プロセスはそれぞれ、独自のセキュリティー要件に対応するようにサーバー別のセキュリティー構成を作成することも、WebSphere セキュリティー・ドメインにマップすることもできます。 セキュリティー構成がすべて、アプリケーション・サーバー・レベルで変更できるわけではありません。 アプリケーション・サーバー・レベルで変更できるセキュリティー構成には、 アプリケーション・セキュリティーを実行すべきかどうか、Java 2 セキュリティーを実行すべきかどうかということと、 セキュリティー・プロトコル構成が含まれます。 WebSphere セキュリティー・ドメインでは、セキュリティー構成をさらに詳細に制御できます。このドメインは、個々のサーバーにマップすることができます。詳しくは、『複数のセキュリティー・ドメイン』を参照してください。
一般情報詳細については、スレッド ID サポートによるセキュリティー状態を参照してください。
管理サブシステム・セキュリティー構成は、常にセル・レベルのセキュリティー文書で決定されます。 Web コンテナーと EJB コンテナーのセキュリティー構成は、サーバー・レベルのセキュリティー文書ごとのオプションによって決定され、 セル・レベルのセキュリティー文書よりも優先されます。
セキュリティー構成は、 セル・レベルでもアプリケーション・サーバー・レベルでも、Web ベースの管理コンソール・アプリケーションか、該当するスクリプト・アプリケーションのいずれかで管理されます。
![[z/OS]](../images/ngzos.gif)
Web セキュリティー
- HTTP 基本認証
- HTTPS クライアント認証
- フォーム・ベースのログイン
- Simple and Protected GSS-API Negotiation (SPNEGO) トークン
WebSphere Application Server では、ローカル OS のユーザー・レジストリーはマッピング機能をサポートしていません。
LTPA 認証メカニズムが構成され、シングル・サインオン (SSO) が使用可能になっていると、
認証済みクライアントに、指定したセキュリティー・ドメイン内のユーザーを表すセキュリティー Cookie が発行されます。
セキュリティー Cookie および基本認証情報がインターセプトされたり再実行されたりするのを防ぐために、 Secure Sockets Layer (SSL) の使用をお勧めします。トラスト・アソシエーションが構成されていると、WebSphere Application Server は、認証済みユーザーの ID を、セキュア・リバース・プロキシー・サーバーとの間で確立した信頼関係に基づく、セキュリティー・クレデンシャルにマップすることができます。
- Web セキュリティー・コラボレーターは、アクセス・マネージャー実装を使用して、 ロール・ベースのアクセス制御を実行します。 アクセス・マネージャーは、デプロイメント記述子から派生したセキュリティー・ポリシーに基づいて許可を決定します。 認証済みのユーザー・プリンシパルは、必要なセキュリティー・ロールのいずれかを持っている場合に、 要求したサーブレットまたは JSP ファイルへアクセスできます。サーブレットおよび JSP ファイルは、 HttpServletRequest メソッド (isUserInRole、getUserPrincipal、 および getRemoteUser) を使用できます。例えば、管理コンソールは、isUserInRole メソッドを 使用して、ユーザー・プリンシパルに公開する適切な管理機能セット決定します。
- EJB セキュリティー・コラボレーターは、アクセス・マネージャー実装を使用して、 ロール・ベースのアクセス制御を実行します。 アクセス・マネージャーは、デプロイメント記述子から派生したセキュリティー・ポリシーに基づいて許可を決定します。 認証済みのユーザー・プリンシパルは、必要なセキュリティー・ロールのいずれかを持っている場合に、要求した EJB メソッドへアクセスできます。 EJB コードは、EJBContext メソッドの isCallerInRole および getCallerPrincipal を使用できます。 EJB コードは、JAAS ログインを実行する JAAS プログラミング・モデル、WSSubject doAs および doAsPrivileged メソッドも使用できます。doAs および doAsPrivileged PrivilegedAction ブロック内のコードは、サブジェクト ID を使用して実行されます。 そうでない場合、EJB メソッドは RunAs 構成に応じて、指定した RunAs ID または呼び出し元の ID のいずれかを使用して実行されます。
EJB セキュリティー
セキュリティーが有効になっていると、EJB コンテナーは EJB メソッドを起動してアクセス制御を実行します。 認証は、メソッド許可が特定の EJB メソッド用に定義されているかどうかに関係なく 行われます。
Java アプリケーション・クライアントは、 いくつかの方法で認証データを提供することができます。 sas.client.props ファイルを使用すると、 Java クライアントは、 認証を行うのにユーザー ID とパスワードを使用するか、SSL クライアント証明書を使用するかを指定できます。 クライアント証明書は、sas.client.props ファイル の定義に従って、鍵ファイルまたはハードウェア暗号カードに保管されます。ユーザー ID とパスワードは、 オプションで、sas.client.props ファイルで定義することもできます。
実行時には、Java クライアントはプログラマチック・ログインを実行することも、 遅延認証 を実行することもできます。
Java クライアントが、 保護されているエンタープライズ Bean に初めてアクセスしている遅延認証では、 セキュリティー・ランタイムは、必要な認証データを取得しようとします。 sas.client.props ファイルでの構成設定に応じて、セキュリティー・ ランタイムは、このファイルから認証データを検索するか、ユーザーにプロンプトを出すかのいずれかを行います。 Java クライアントではプログラマチック・ログインを使用することもできます。 WebSphere Application Server は、 JAAS プログラミング・モデルをサポートしており、プログラマチック・ログインの方法としては JAAS ログイン (LoginContext) が推奨されています。 バージョン 6.x およびバージョン 9.0 では、login_helper request_login ヘルパー関数は非推奨です。login_helper APT にプログラムされている Java クライアントは、本バージョンで実行できます。
EJB セキュリティー・コラボレーターは、アクセス・マネージャー実装を使用して、 ロール・ベースのアクセス制御を実行します。
アクセス・マネージャーは、デプロイメント記述子から派生したセキュリティー・ポリシーに基づいて許可を決定します。 認証済みのユーザー・プリンシパルは、必要なセキュリティー・ロールのいずれかを持っている場合に、要求した EJB メソッドへアクセスできます。EJB コードは、EJBContext メソッドの isCallerInRole および getCallerPrincipal を使用できます。 EJB コードでは、JAAS ログインを実行する JAAS プログラミング・モデル、WSSubject doAs および doAsPrivileged メソッド も使用できます。 doAs および doAsPrivileged PrivilegedAction ブロック内のコードは、サブジェクト ID を使用して実行 されます。 そうでない場合、EJB メソッドは RunAs 構成に応じて、指定した RunAs ID または呼び出し元の ID のいずれかを使用して実行されます。J2EE RunAs 仕様は エンタープライズ Bean レベルです。RunAs ID を指定すると、これがすべての Bean メソッドに適用されます。 IBM RunAs 拡張がバージョン 4.0 で導入したメソッド・レベルは、 引き続き本バージョンでもサポートされています。
![[z/OS]](../images/ngzos.gif)
連邦情報処理標準 (FIPS) による承認
連邦情報処理標準 (FIPS) は、米国連邦情報・技術局 (NIST) が、連邦コンピューター・システムのために発行した標準およびガイドラインです。 FIPS は、セキュリティーおよびインターオペラビリティーなど、標準に関する連邦政府の切実な要求がある一方で、 実施可能な業界標準または解決方法が存在しない場合のために開発されました。
WebSphere Application Server には、 Java Secure Socket Extension (JSSE) および Java Cryptography Extension (JCE) を含む暗号モジュールが組み込まれています。 この暗号モジュールは、FIPS 140-2 認証が行われています。
詳しくは、連邦情報処理標準 (FIPS) Java セキュア・ソケット拡張機能ファイルの構成を参照してください。
- AES (FIPS 197)
- TripleDES (FIPS 46-3)
- SHA1 メッセージ・ダイジェスト・アルゴリズム (FIPS 180-1)
- デジタル署名 DSA および RSA アルゴリズム (FIPS 186-2)
- ANSI X 9.31 (FIPS 186-2)
- IBM Random Number Generator
IBMJCEFIPS 暗号モジュールは、FIPS が承認したアルゴリズムを含んでいます。 このアルゴリズムは、IBM JCE モジュール内のアルゴリズムの適正なサブセットを形成しています。