| 日本−日本語 |
|
|
|
![]() |
HP-UX リファレンス: セクション 5 : その他の機能 > ggssapi(5)HP-UX 11i Version 2: September 2004 |
|
名称gssapi ― Generic Security Service Application Programming Interface 説明ここでは、"Internet RFC 2743, Generic Security Service Application Programming Interface" と "RFC 2744, Generic Security Service API: C-bindings" で定義されている Generic Security Service Application Programming Interface (GSSAPI) について大まかに説明します。 また、以下を含む、エラー処理、データ型、および呼び出し規約についても概説します。 整数型 概説Generic Security Service Application Programming Interface (GSSAPI) は、ピアツーピア通信を行うアプリケーションにセキュリティサービスを提供します。アプリケーションは、GSSAPI ルーチンを使用することにより、以下の動作を実行できます。
GSSAPI は、通信を行う 2 つのアプリケーション間のセキュアな接続をサポートします。セキュアな接続を確立するアプリケーションを、 コンテキスト起動側 と呼びます。一方、セキュアな接続を受け付けるアプリケーションを、 コンテキスト受け入れ側 と呼びます。 GSSAPI の使用には、4 つの段階があります。
アプリケーションは、資格証明を使用して、自身のグローバルな身元の証明を行います。グローバルな身元は、そのアプリケーションを実行しているローカルユーザーの名前に関連付けることができますが、必須ではありません。 資格証明には、以下を含めることができます。
セキュリティコンテキスト は、通信アプリケーション間で共有される情報を格納する、一対の GSSAPI データ構造体です。この情報は、各アプリケーションの状態を表します。このセキュリティコンテキストは、メッセージごとのセキュリティサービスに必要です。 セキュリティコンテキストを確立するために、コンテキスト起動側は、 gss_init_sec_context() ルーチンを呼び出して トークン を取得します。このトークンは、暗号によって保護された不透明なデータです。コンテキスト起動側は、トークンをコンテキスト受け入れ側に転送します。このトークンは gss_accept_sec_context() ルーチンに渡されてデコードされ、共有情報が抽出されます。 セキュリティコンテキストを確立する一環として、コンテキスト起動側は、コンテキスト受け入れ側から認証されます。それに対し、コンテキスト起動側は、コンテキスト受け入れ側に自身を認証するよう要求できます。 コンテキスト起動側は、コンテキスト受け入れ側がコンテキスト起動側のエージェントとして動作できるように権限を委託できます。 委託とは、コンテキスト起動側がコンテキスト受け入れ側に、コンテキスト起動側のエージェントとして追加のセキュリティコンテキストを起動する能力を付与することを意味します。 コンテキスト起動側は、委託を行うために、委託する意向を示すフラグを gss_init_sec_context() ルーチンに設定し、返されたトークンを通常の方法でコンテキスト受け入れ側に送信します。コンテキスト受け入れ側は、このトークンを gss_accept_sec_context() ルーチンに渡します。これによって、委託された資格証明が生成されます。コンテキスト受け入れ側は、この資格証明を使用して、追加のセキュリティコンテキストを起動できます。 アプリケーション同士は、このコンテキストを使用して、保護されたメッセージやデータを交換できます。 アプリケーションは、GSSAPI ルーチンを呼び出して、メッセージを介して交換データを保護できます。アプリケーションは、保護されたメッセージを送信するために、適切な GSSAPI ルーチンを呼び出し、以下を実行します。
これにより、アプリケーションは、生成された情報をピアアプリケーションに送信できます。 メッセージを受信したアプリケーションは、受信データを GSSAPI ルーチンに渡します。これにより、保護が解除され、データの検証が行われます。 GSSAPI は、アプリケーションデータを任意のオクテット文字列として処理します。GSSAPI のメッセージごとのセキュリティサービスは、以下のことを提供します。
アプリケーション間の通信が終了すると、両アプリケーションが GSSAPI に対してセキュリティコンテキストを削除するよう指示できます。 Standard GSSAPI ルーチンは、"Internet RFC 2743, Generic Security Service Application Programming Interface" および "RFC 2744, Generic Security Service API : C-bindings" で定義されています。 これらのルーチンには、 gss_ という接頭辞が付きます。 以下の項では、GSSAPI のエラー処理とデータ型について概説します。 エラー処理各 GSSAPI ルーチンは、2 つのステータス値 (重要警戒域と警戒域) を返します。
ルーチンの出力パラメータに、そのルーチンによって割り当てられた記憶領域を指すポインターが含まれている場合は、そのルーチンがエラーを返したとしても、出力パラメータには必ず有効なポインターが含まれます。 記憶領域が割り当てられていない場合は、ルーチンはポインターをヌルに設定し、ポインター (たとえば gss_buffer_desc データ構造体内のポインター) に関連付けられたすべての length フィールドを 0 (ゼロ) に設定します。 警戒域ステータス値には、通常、エラーに関する詳細な情報が含まれます。ただし、それらを GSSAPI の実装間で移植することはできません。 移植可能なアプリケーションを設計する場合は、エラー処理に重要警戒域ステータス値を使用します。警戒域ステータス値は、アプリケーションをデバッグしたり、エラー情報やエラー回復情報をユーザーに表示したりするために使用します。 GSSAPI のデータ型この項では、GSSAPI のデータ型とその定義について概説します。
コンテキストセキュリティコンテキスト は、通信を行うアプリケーション間で共有される情報を格納する、一対の GSSAPI データ構造体です。この情報は、各アプリケーションの暗号化状態を表します。 セキュリティコンテキストはメッセージごとのセキュリティサービスに必要とされるもので、認証のやり取りが正常に行われると作成されます。 gss_ctx_id_t データ型には、GSSAPI セキュリティコンテキストの一端を識別する、アトミックな値が格納されます。このデータ型は、呼び出し側では解読できません。 認証トークンGSSAPI では、セキュリティコンテキストを共有するアプリケーション同士の同期を、トークンによって維持します。 このトークンは、暗号で保護されたビット文字列であり、GSSAPI セキュリティコンテキストの一端においてセキュリティ機構が生成し、GSSAPI セキュリティコンテキストの他端においてピアアプリケーションが使用します。 このデータ型は、呼び出し側では解読できません。 アプリケーションは、 gss_buffer_t データ型を GSSAPI ルーチンに対するトークンとして使用します。 重要警戒域ステータス値GSSAPI ルーチンは、その OM_uint32 関数値として GSS ステータスコードを返します。これらのコードは、汎用 API ルーチンエラーまたは呼び出しエラーを表します。 GSS ステータスコードは、ルーチンにおける致命的な汎用 API エラーおよび呼び出しエラーの 1 つを表すことができます。また、追加のステータス情報も GSS ステータスコードに含めることができます。 これらのエラーは、以下のように、32 ビット GSS ステータスコードにエンコードされます。 GSSAPI ルーチンから返される GSS ステータスコードの上位 16 ビットにゼロ以外の値が含まれている場合は、呼び出しが失敗したことを意味します。このうち、呼び出しエラーフィールドがゼロでない場合は、コンテキスト起動側のルーチンの使い方に誤りがあります。 また、ルーチンは、ステータスコードの補助情報フィールドのビットを設定することで、追加情報を示すことができます。以下の各表では、ルーチンエラー、呼び出しエラー、補助情報の各ステータスビットとその意味を示しています。 以下の表に、GSSAPI ルーチンエラーとその意味をリストします。
以下の表は、呼び出しエラーの値とその意味を示しています。
以下の表は、補助情報のビットとその意味を示しています。
すべての GSS_S_ シンボルは、 OM_uint32 の、ビットフィールド値ではなく完結したステータスコードと同等に見なされます。たとえば、 GSS_S_BAD_NAMETYPE (ルーチンエラーフィールドの値が 3) の実際の値は 3 << 16 です。 重要警戒域ステータスコード GSS_S_FAILURE は、重要警戒域ステータスコードで表せないエラーが、基盤となるセキュリティ機構によって検出されたことを示します。 そのエラーについては、警戒域ステータスコードをチェックします。詳細は、警戒域ステータス値についての項を参照してください。 GSSAPI では、以下の 3 つのマクロが用意されています。
各マクロは、GSS ステータスコードを取得し、関連フィールド以外のフィールドをマスクします。たとえば、ステータスコードに GSS_ROUTINE_ERROR() マクロを使用すると、このマクロが値を返します。その値は、ルーチンエラーフィールドだけが使用され、呼び出しエラーフィールドと補助情報フィールドの値はゼロになります。 さらにマクロ GSS_ERROR() を使用すると、ステータスコードが呼び出しエラーまたはルーチンエラーを示しているかどうかを判断できます。ステータスコードが呼び出しエラーまたはルーチンエラーを示している場合は、このマクロは、ゼロ以外の値を返します。 呼び出しエラーもルーチンエラーも示していない場合は、マクロは 0 (ゼロ) を返します。 注記: 稀に、データにアクセスできない GSSAPI ルーチンが、 GSS_S_CALL_INACCESSIBLE_READ または GSS_S_CALL_INACCESSIBLE_WRITE ステータス値を返す代わりにプラットフォーム固有のシグナルを生成する場合があります。 警戒域ステータス値GSSAPI ルーチンは、基盤となるセキュリティ機構からのエラーを示すために、 minor_status パラメータを返します。 このパラメータには、 OM_uint32 データ型の値で示される単一のエラーが格納されます。 名前名前は本人を識別するものです。GSSAPI は、名前と、その名前を要求する本人との間の関係を認証します。 名前は、以下の 2 つの形式で表されます。
gss_import_name() ルーチンと gss_display_name() ルーチンは、名前を、印字可能形式と gss_name_t データ型の間で変換します。 gss_compare_name() ルーチンは、内部形式名を比較します。 チャネルバインディングチャネルバインディングを定義して使用することにより、セキュリティコンテキストと、それを搬送する通信チャネルとを関連付けることができます。チャネルバインディングは、以下のデータ構造体で GSSAPI に渡されます。 initiator_addrtype フィールドと acceptor_addrtype フィールドは、 initiator_address バッファーと acceptor_address バッファーに含まれるアドレスのタイプを初期化するために使用します。以下の表は、アドレスタイプとその addrtype 値を示しています。
タグは、アドレッシング形式ではなくアドレスファミリを指定します。 複数の代替アドレス形式を含むアドレスファミリについては、 initiator_address フィールドと acceptor_address フィールドに、使用するアドレスを特定できるだけの情報を含める必要があります。 アドレスを含むバイトは、それらのバイトがネットワーク経由で伝送される順序にフォーマットされます。 GSSAPI は、すべてのフィールド (initiator_addrtype、 initiator_address、 acceptor_addrtype、 acceptor_address、 および application_data) を連結してオクテット文字列を作成します。セキュリティ機構は、そのオクテット文字列に署名し、その署名を gss_init_sec_context() ルーチンで生成されたトークンにバインドします。コンテキスト受け入れ側は、同じバインディングを gss_accept_sec_context() ルーチンに渡します。これにより、署名が評価され、トークン内の署名との比較が行われます。 署名が異なる場合は、 gss_accept_sec_context() ルーチンが GSS_S_BAD_BINDINGS エラーを返し、このコンテキストは確立されません。 一部のセキュリティ機構では、 gss_init_sec_context() ルーチンに渡されたチャネルバインディングの initiator_address フィールドにホストシステムの正しいネットワークアドレスが含まれているかどうかがチェックされます。したがって、移植可能なアプリケーションでは、 initiator_addrtype アドレスフィールドに、正しいアドレスタイプと値、または GSS_C_AF_NULLADDR を使用する必要があります。一部のセキュリティ機構では、署名ではなくチャネルバインディングデータがトークンに含まれるため、移植可能なアプリケーションで機密データをチャネルバインディング要素として使用することができません。 GSSAPI は、アドレスを検証したり、プレーンテキストのバインディング情報をトークンに含めたりしません。 オプションパラメータルーチンの記述でオプションパラメータを使用すると、アプリケーションは、そのパラメータのデフォルト値を渡すことで、デフォルトの動作を要求できます。オプションパラメータには以下の規則が使用されます。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||