Go to main content
Oracle® Solaris 11 セキュリティー開発者ガイド

印刷ビューの終了

更新: 2016 年 11 月
 
 

GSS-API の紹介

GSS-API を使用すると、プログラマはセキュリティーの点で汎用的なアプリケーションを記述できます。開発者は、特定のプラットフォーム、セキュリティーメカニズム、保護の種類、または転送プロトコル向けにセキュリティー実装をカスタマイズする必要はありません。GSS-API を使用すれば、プログラマはネットワークデータを保護する方法の詳細を知る必要がありません。GSS-API を使用するプログラムは、ネットワークセキュリティーに関する移植性が高くなります。この移植性が、Generic Security Service API の優れた特徴を示します。

GSS-API は、セキュリティーサービスを汎用的な方法で呼び出し元に提供するフレームワークです。次の図に示すように、GSS-API フレームワークは、Kerberos v5 や公開鍵技術など、基盤となるさまざまなメカニズムや技術によって支えられています。

図 2  GSS-API の層

image:アプリケーションとセキュリティーメカニズムの間に、GSS-API とプロトコル層が存在することを示しています。

    GSS-API の主な機能は、簡単に言うと次の 2 つです。

  1. GSS–API は、セキュリティーコンテキストを作成し、アプリケーション間でのデータの送受信は、このコンテキスト内で行うことができます。コンテキストは、2 つのアプリケーションが互いに信頼している状態を表します。コンテキストを共有するアプリケーションは、相手がだれであるかを知っており、したがって、そのコンテキストが継続する限り、互いにデータを転送できます。

  2. GSS–API は、セキュリティーサービスとして知られる 1 種類以上の保護機能を、転送データに対して適用します。セキュリティーサービスについては、GSS-API のセキュリティーサービスを参照してください。

    さらに、GSS-API は次の機能を実行します。

  • データ変換

  • エラーの検査

  • ユーザー特権の委託

  • 情報の表示

  • 識別情報の比較

GSS-API にはさまざまな補助関数や簡易関数が含まれています。

アプリケーションの移植性と GSS-API

    GSS-API は、アプリケーションに対して次のような移植性を提供します。

  • メカニズム非依存。GSS-API は汎用的なセキュリティーインタフェースを提供します。デフォルトのセキュリティーメカニズムを指定することで、アプリケーションは適用すべきメカニズムやメカニズムの詳細を知る必要がなくなります。

  • プロトコル非依存。GSS-API は特定の通信プロトコルまたはプロトコル群に依存しません。たとえば、GSS–API は、ソケット、RCP、TCP/IP のいずれを使用するアプリケーションからも使用可能です。

    RPCSEC_GSS は、GSS-API と RPC をスムースに統合するために追加される層です。詳細は、リモートプロシージャー呼び出しと GSS-APIを参照してください。

  • プラットフォーム非依存。GSS-API は、アプリケーションが動作しているオペレーティングシステムの種類に依存しません。

  • 保護品質非依存。保護品質 (Quality of Protection、QOP) とは、データを暗号化したり暗号タグを生成したりする際に使用されるアルゴリズムの種類を示します。GSS-API では、プログラマは QOP を無視できます。それには、GSS-API が提供するデフォルトを使用します。一方、必要であればアプリケーションは QOP を指定することもできます。

GSS-API のセキュリティーサービス

    GSS-API は次の 3 種類のセキュリティーサービスを提供します。

  • 認証 – 認証は、GSS-API によって提供される基本的なセキュリティー機能です。認証とは相手の身元を確認することです。あるユーザーが認証されると、システムは、そのユーザーがそのユーザー名で活動する権利を持つ人であるとみなします。

  • 整合性 – 整合性は、データの有効性を検証することです。データが有効なユーザーから送られてきたとしても、そのデータ自体が破壊または改ざんされている可能性があります。整合性は、メッセージが完全に意図されたとおりの内容であり、情報の追加や削除がまったく行われていないことを保証します。GSS-API では、メッセージ整合性コード (Message Integrity Code、MIC) と呼ばれる暗号タグを、データに添付できるようになっています。MIC は、ユーザーが受信したデータが、送信側が送信したデータと同一であることを証明します。

  • 機密性 – 機密性は、メッセージを傍受した第三者がその内容を読み取ろうとしても読み取れないことを保証します。認証と整合性のどちらも、データに変更を施すわけではありません。したがって、データが何らかの方法で傍受された場合、そのデータの内容が他人に読み取られてしまいます。したがって、GSS-API ではデータを暗号化できるようになっています。ただしそれには、暗号化をサポートするメカニズムが利用可能である必要があります。このようにデータを暗号化することを機密性と呼びます。

GSS-API で利用可能なメカニズム

GSS-API の現在の実装では、Kerberos v5、Diffie-Hellman、および SPNEGO のメカニズムが利用できます。Kerberos 実装についての詳細は、Oracle Solaris 11.3 での Kerberos およびその他の認証サービスの管理を参照してください。Kerberos v5 は、GSS-API 対応プログラムが動作するすべてのシステム上で、インストールおよび実行される必要があります。

リモートプロシージャー呼び出しと GSS-API

RPC (Remote Procedure Call) プロトコルをネットワークアプリケーションに使用するプログラマは、RPCSEC_GSS を使用してセキュリティーを提供できます。RPCSEC_GSS は GSS-API 上にある別の層です。RPCSEC_GSS は GSS-API のすべての機能を RPC 用にカスタマイズした形式で提供します。実際、RPCSC_GSS は GSS-API の多くの側面をプログラマから隠蔽する役割を果たしており、その結果、特に高い操作性と移植性を備えた RPC セキュリティーが実現されています。RPCSEC_GSS の詳細は、ONC+ RPC Developer’s Guide の Authentication Using RPCSEC_GSSを参照してください。

次の図は、RPCSEC_GSS 層がアプリケーションと GSS-API の間に位置している様子を示したものです。

図 3  RPCSEC_GSS と GSS-API

image:リモートプロシージャー呼び出しのセキュリティー機能を提供する RPCSEC_GSS 層を示しています。

GSS-API の制限

    GSS-API は、データ保護作業を単純化しますが、GSS-API の一般的な性質に合致しないいくつかのタスクをサポートしていません。GSS-API が実行「しない」作業は、次のとおりです。

  • ユーザーまたはアプリケーションにセキュリティー資格を提供すること。資格は、実際のセキュリティーメカニズムが提供する必要があります。GSS-API は、アプリケーションが資格を自動的または明示的に獲得することを可能にしています。

  • アプリケーション間でデータを転送すること。セキュリティー関連のデータまたは通常のデータのどちらの場合でも、ピア間ですべてのデータの転送を処理することはアプリケーションの責任です。

  • 転送データのさまざまな種類を識別すること。たとえば、GSS-API は、データパケットがプレーンデータ、暗号化データのいずれであるかを認識できません。

  • 非同期エラーによるステータスを示すこと。

  • マルチプロセスプログラムのプロセス間で送信される情報をデフォルトで保護すること。

  • GSS-API 関数に渡される文字列バッファーを割り当てること。GSS-API の文字列とそれに類するデータを参照してください。

  • GSS-API データ領域を解放すること。そうしたメモリー領域の解放は、gss_release_buffer()gss_delete_name() などの関数を使って明示的に行う必要があります。

GSS-API の言語バインディング

このドキュメントでは現在、GSS-API の C 言語バインディング、つまり関数とデータ型だけに言及しています。Java バインディング版の GSS-API が利用可能になりました。Java GSS-API には、RFC 2853 で規定された Generic Security Services Application Program Interface (GSS-API) に対する Java バインディングが含まれています。

GSS-API に関する詳細情報の入手先