本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 5 : その他の機能 > g

gssapi(5)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

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) について大まかに説明します。 また、以下を含む、エラー処理、データ型、および呼び出し規約についても概説します。

整数型
文字列型とその他の類似するデータ型
オブジェクト識別子 (OID)
オブジェクト識別子セット (OID セット)
資格証明
コンテキスト
認証トークン
重要警戒域ステータス値
警戒域ステータス値
名前
チャネルバインディング
オプションパラメータ

概説

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 つのステータス値 (重要警戒域と警戒域) を返します。

重要警戒域ステータス値 

重要警戒域ステータス値は、RFC 2744 で定義されている汎用 API ルーチンエラーまたは呼び出しエラーです。

警戒域ステータス値 

警戒域ステータス値は、機構ごとの固有エラーを表します。

ルーチンの出力パラメータに、そのルーチンによって割り当てられた記憶領域を指すポインターが含まれている場合は、そのルーチンがエラーを返したとしても、出力パラメータには必ず有効なポインターが含まれます。 記憶領域が割り当てられていない場合は、ルーチンはポインターをヌルに設定し、ポインター (たとえば gss_buffer_desc データ構造体内のポインター) に関連付けられたすべての length フィールドを 0 (ゼロ) に設定します。

警戒域ステータス値には、通常、エラーに関する詳細な情報が含まれます。ただし、それらを GSSAPI の実装間で移植することはできません。 移植可能なアプリケーションを設計する場合は、エラー処理に重要警戒域ステータス値を使用します。警戒域ステータス値は、アプリケーションをデバッグしたり、エラー情報やエラー回復情報をユーザーに表示したりするために使用します。

GSSAPI のデータ型

この項では、GSSAPI のデータ型とその定義について概説します。

整数型 

GSSAPI では、以下の整数データ型が定義されています。

OM_uint32 32 ビット符号なし整数

この整数データ型は、GSSAPI ルーチン定義において、最少ビット数を保証するために使用される、移植可能なデータ型です。

文字列型および類似するデータ型 

多くの GSSAPI ルーチンで取得される引き数や返される値は、不透明なデータや文字列のような連続した複数バイトのデータで表わされます。GSSAPI ルーチンとアプリケーションの間でデータの受け渡しを行う場合は、 gss_buffer_t データ型を使用します。これは、バッファー記述子 gss_buffer_desc へのポインターです。

gss_buffer_t データ型のデータ構造体は以下のとおりです。

 
   typedef struct gss_buffer_desc_struct {
           size_t length;
           void *value;
   } gss_buffer_desc, *gss_buffer_t;

length フィールドにはデータの総バイト数が格納され、value フィールドには実際のデータへのポインターが格納されます。

gss_buffer_t データ型を使用した場合は、GSSAPI ルーチンからアプリケーションに渡されるデータのための記憶領域が GSSAPI ルーチンによって割り当てられます。呼び出し側アプリケーションは、 gss_buffer_desc オブジェクトを割り当てる必要があります。このアプリケーションは、未使用の gss_buffer_desc オブジェクトを値 GSS_C_EMPTY_BUFFER で初期化できます。 この記憶領域を解放する場合は、アプリケーションは gss_release_buffer() ルーチンを呼び出します。

オブジェクト識別子 (OID) 

アプリケーションは、 gss_OID データ型を使用して、セキュリティ機構 (Kerberos など) を選択し、名前の型を指定します。 セキュリティ機構を選択するには、それに対応する OID を使用します。

Kerberos Version 5 の場合は、 GSS_C_OID_KRBV5_DES を指定します。

GSS_C_NULL_OID を使用することで、アプリケーションの移植性を確保できます。

gss_OID データ型は、ISO で定義されたツリーデータ構造体の値を格納します。そのデータ構造体は以下のとおりです。

 
 typedef struct gss_OID_desc_struct {
           OM_uint32 length;
           void * elements;
   }  gss_OID_desc, *gss_OID;

elements フィールドは、 gss_OID データ型の値の ASN.1 BER 表現形式を格納するオクテット文字列の、最初のバイトをポイントします。length フィールドには、その値のバイト数が格納されます。

GSSAPI から返される gss_OID_desc の値は読み取り専用です。アプリケーションがそれらの割り当てを解除しないようにする必要があります。

オブジェクト識別子セット 

gss_OID_set データ型は、1 つまたは複数のオブジェクト識別子を表します。 gss_OID_set データ型の値は、以下の用途で使用されます。

GSSAPI でサポートされている、使用可能な機構をレポートする。

特定の機構を要求する。

資格証明でサポートされている機構を識別する。

gss_OID_set データ型のデータ構造体は以下のとおりです。

 
   typedef struct gss_OID_set_desc_struct {
           int count
           gss_OID elements
   } gss_OID_set_desc, *gss_OID_set;

count フィールドには、セット内の OID の数が格納されます。elements フィールドは、 gss_oid_desc オブジェクトの配列へのポインターです。各オブジェクトは、1 つの OID を表します。アプリケーションは、GSSAPI ルーチンからアプリケーションに返された gss_OID_set の値に関連付けられている記憶領域を、 gss_release_oid_set() ルーチンを呼び出して割り当て解除します。

資格証明

資格証明は、アプリケーションなどの本人の身元を証明するものです。

gss_cred_id_t データ型は、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 ステータスコードにエンコードされます。

 
   MSB    LSB 
   +--------------------------------------------+  
   | 呼び出しエラー | ルーチンエラー | 補助情報 |  
   +--------------------------------------------+
     ビット 31       24 23            16 15          0

GSSAPI ルーチンから返される GSS ステータスコードの上位 16 ビットにゼロ以外の値が含まれている場合は、呼び出しが失敗したことを意味します。このうち、呼び出しエラーフィールドがゼロでない場合は、コンテキスト起動側のルーチンの使い方に誤りがあります。 また、ルーチンは、ステータスコードの補助情報フィールドのビットを設定することで、追加情報を示すことができます。以下の各表では、ルーチンエラー、呼び出しエラー、補助情報の各ステータスビットとその意味を示しています。

以下の表に、GSSAPI ルーチンエラーとその意味をリストします。

名前フィールド意味
  
GSS_S_BAD_MECH1要求された機構はサポートされていません。
GSS_S_NAME2渡された名前は無効です。
GSS_S_NAMETYPE3渡された名前はサポートされていません。
GSS_S_BAD_BINDINGS4チャネルバインディングが正しくありません。
GSS_S_BAD_STATUS5ステータス値が無効です。
GSS_S_BAD_SIG6トークンの署名が無効です。
GSS_S_NO_CRED7資格証明が与えられていません。
GSS_S_NO_CONTEXT8確立しているコンテキストがありません。
GSS_S_DEFECTIVE_TOKEN9トークンが無効です。
GSS_S_DEFECTIVE_CREDENTIAL10資格証明が無効です。
GSS_S_CREDENTIALS_EXPIRED11参照した資格証明は期限切れです。
GSS_S_CONTEXT_EXPIRED12コンテキストが期限切れです。
GSS_S_FAILURE13ルーチンが失敗しました。警戒域ステータスコードを確認してください。
GSS_S_BAD_QOP14要求されたレベルの保護を提供できません。
GSS_S_UNAUTHORIZED15その動作はローカルセキュリティポリシーによって禁止されています。

以下の表は、呼び出しエラーの値とその意味を示しています。

名前フィールド意味
  
GSS_S_CALL_INACCESSIBLE_READ1要求された入力パラメータを読み取ることができません。
GSS_S_CALL_INACCESSIBLE_WRITE2要求された出力パラメータを書き込むことができません。
GSS_S_BAD_STRUCTURE3パラメータのデータ構造体が正しくありません。

以下の表は、補助情報のビットとその意味を示しています。

名前ビット意味
 番号 
GSS_S_CONTINUE_NEEDED0 (LSB)ルーチンを再度呼び出して、関数を完了させてください。
GSS_S_DUPLICATE_TOKEN1トークンが以前のトークンと重複しています。
GSS_S_OLD_TOKEN2トークンの妥当性検証の有効期限が切れています。ルーチンは、このトークンが以前のトークンと重複していないことを確認できません。
GSS_S_UNSEQ_TOKEN3後続のトークンが処理されています。

すべての GSS_S_ シンボルは、 OM_uint32 の、ビットフィールド値ではなく完結したステータスコードと同等に見なされます。たとえば、 GSS_S_BAD_NAMETYPE (ルーチンエラーフィールドの値が 3) の実際の値は 3 << 16 です。

重要警戒域ステータスコード GSS_S_FAILURE は、重要警戒域ステータスコードで表せないエラーが、基盤となるセキュリティ機構によって検出されたことを示します。 そのエラーについては、警戒域ステータスコードをチェックします。詳細は、警戒域ステータス値についての項を参照してください。

GSSAPI では、以下の 3 つのマクロが用意されています。

  • GSS_CALLING_ERROR()

  • GSS_ROUTINE_ERROR()

    GSS_SUPPLEMENTARY_INFO()

各マクロは、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 つの形式で表されます。

  • 印字可能形式。アプリケーションに対する表示に使用します。

  • 内部正準形式。API で使用され、アプリケーションでは解読できません。

gss_import_name() ルーチンと gss_display_name() ルーチンは、名前を、印字可能形式と gss_name_t データ型の間で変換します。

gss_compare_name() ルーチンは、内部形式名を比較します。

チャネルバインディング

チャネルバインディングを定義して使用することにより、セキュリティコンテキストと、それを搬送する通信チャネルとを関連付けることができます。チャネルバインディングは、以下のデータ構造体で GSSAPI に渡されます。

 
   typedef struct gss_channel_binding_struct {
           OM_uint32 initiator_addrtype;
           gss_buffer_desc initiator_address;
           OM_uint32 acceptor_addrtype;
           gss_buffer_desc aceptor_address;
           gss_buffer_desc application_data;
   } *gss_channel_bindings_t;

initiator_addrtype フィールドと acceptor_addrtype フィールドは、 initiator_address バッファーと acceptor_address バッファーに含まれるアドレスのタイプを初期化するために使用します。以下の表は、アドレスタイプとその addrtype 値を示しています。

アドレスタイプaddrtype 値
未規定GSS_C_AF_UNSPEC
ホスト-ローカルGSS_C_AF_LOCAL
DARPA インターネットGSS_C_AF_INET
ARPAnet IMPGSS_C_AF_IMPLINK
pup プロトコル (BSP など)GSS_C_AF_PUP
MIT CHAOS プロトコルGSS_C_AF_CHAOS
XEROX NSGSS_C_AF_NS
nbsGSS_C_AF_NBS
ECMAGSS_C_AF_ECMA
データキットプロトコルGSS_C_AF_DATAKIT
CCITT プロトコル (X.25 など)GSS_C_AF_CCITT
IBM SNAGSS_C_AF_SNA
デジタル DECnetGSS_C_AF_DECnet
直接データリンクインタフェースGSS_C_AF_DLI
LATGSS_C_AF_LAT
NSC ハイパーチャネルGSS_C_AF_HYLINK
AppleTalkGSS_C_AF_APPLETALK
BISYNC 2780/3780GSS_C_AF_BSC
分散システムサービスGSS_C_AF_DSS
OSI TP4GSS_C_AF_OSI
X25GSS_C_AF_X25
指定アドレスなしGSS_C_AF_NULLADDR

タグは、アドレッシング形式ではなくアドレスファミリを指定します。 複数の代替アドレス形式を含むアドレスファミリについては、 initiator_address フィールドと acceptor_address フィールドに、使用するアドレスを特定できるだけの情報を含める必要があります。 アドレスを含むバイトは、それらのバイトがネットワーク経由で伝送される順序にフォーマットされます。

GSSAPI は、すべてのフィールド (initiator_addrtypeinitiator_addressacceptor_addrtypeacceptor_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 は、アドレスを検証したり、プレーンテキストのバインディング情報をトークンに含めたりしません。

オプションパラメータ

ルーチンの記述でオプションパラメータを使用すると、アプリケーションは、そのパラメータのデフォルト値を渡すことで、デフォルトの動作を要求できます。オプションパラメータには以下の規則が使用されます。

規則デフォルト値説明
gss_buffer_t 型GSS_C_NO_BUFFER\h'-1'入力パラメータについては、データが入力されてないことを示します。出力パラメータでは、返された情報をアプリケーションが必要としないことを示します。
整数型 (入力) \h'-5'デフォルト値のリファ
レンスページを参照してください。
整数型 (出力)NULL\h'-5'アプリケーションが
その情報を必要としないことを示します。
ポインター型 (出力)NULL\h'-8'アプリケーションが
その情報を必要としないことを示します。
OIDGSS_C_NULL_OID名前型またはセキュリティ機構のデフォルトの選択を示します。
OID セットGSS_C_NULL_OID_SET\h'-3'セキュリティ機構の
デフォルトセットを示します。
資格証明GSS_C_NO_CREDENTIAL\h'-4'アプリケーションが
デフォルトの資格証明ハンドルを使用しなければならないことを示します。
チャネルバインディングGSS_C_NO_CHANNEL_BINDINGS\h'-11'チャネルバインディ
ングが使用されていないことを示します。

参照

gss_accept_sec_context(3)、gss_compare_name(3)、gss_display_name(3)、gss_import_name(3)、gss_init_sec_context(3)、gss_release_buffer(3)、gss_release_oid_set(3)、libgss(4)

DCE-GSSAPI のマンページは DCE-CoreTools 製品に付属しています。 このマンページを参照できるようにするには、 MANPATH/opt/dce/share/man を追加します。

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.