ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11 セキュリティーサービス開発ガイド Oracle Solaris 11.1 Information Library (日本語) |
1. Oracle Solaris の開発者向けセキュリティー機能 (概要)
3. PAM アプリケーションおよび PAM サービスの記述
GSS-API におけるコンテキストのエクスポートとインポート
8. Oracle Solaris 暗号化フレームワークの紹介
GSS-API を使用すると、プログラマはセキュリティーの点で汎用的なアプリケーションを記述できます。開発者は、特定のプラットフォーム、セキュリティー機構、保護の種類、または転送プロトコル向けにセキュリティー実装をカスタマイズする必要はありません。GSS-API を使用すれば、プログラマはネットワークデータを保護する方法の詳細を知る必要がありません。GSS-API を使用するプログラムは、ネットワークセキュリティーに関する移植性が高くなります。この移植性が、Generic Security Service API の優れた特徴を示します。
GSS-API は、セキュリティーサービスを汎用的な方法で呼び出し元に提供するフレームワークです。次の図に示すように、GSS-API フレームワークは、Kerberos v5 や公開鍵技術など、基盤となるさまざまな機構や技術によって支えられています。
図 4-1 GSS-API の層
GSS-API の主な機能は、簡単に言うと次の 2 つです。
GSS–API は、セキュリティーコンテキストを作成し、アプリケーション間でのデータの送受信は、このコンテキスト内で行うことができます。コンテキストは、2 つのアプリケーションが互いに信頼している状態を表します。コンテキストを共有するアプリケーションは、相手がだれであるかを知っており、したがって、そのコンテキストが継続する限り、互いにデータを転送できます。
GSS–API は、セキュリティーサービスとして知られる 1 種類以上の保護機能を、転送データに対して適用します。セキュリティーサービスについては、「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 は次の 3 種類のセキュリティーサービスを提供します。
認証 – 認証は、GSS-API によって提供される基本的なセキュリティー機能です。認証とは相手の身元を確認することです。あるユーザーが認証されると、システムは、そのユーザーがそのユーザー名で活動する権利を持つ人であるとみなします。
整合性 – 整合性は、データの有効性を検証することです。データが有効なユーザーから送られてきたとしても、そのデータ自体が破壊または改ざんされている可能性があります。整合性は、メッセージが完全に意図されたとおりの内容であり、情報の追加や削除がまったく行われていないことを保証します。GSS-API では、メッセージ整合性コード (Message Integrity Code、MIC) と呼ばれる暗号タグを、データに添付できるようになっています。MIC は、ユーザーが受信したデータが、送信側が送信したデータと同一であることを証明します。
機密性 – 機密性は、メッセージを傍受した第三者がその内容を読み取ろうとしても読み取れないことを保証します。認証と整合性のどちらも、データに変更を施すわけではありません。したがって、データが何らかの方法で傍受された場合、そのデータの内容が他人に読み取られてしまいます。したがって、GSS-API ではデータを暗号化できるようになっています。ただしそれには、暗号化をサポートする機構が利用可能である必要があります。このようにデータを暗号化することを機密性と呼びます。
GSS-API の現在の実装では、次の機構が利用できます。 Kerberos v5、Diffie-Hellman、および SPNEGO。Kerberos 実装についての詳細は、『Oracle Solaris 11.1 の管理: セキュリティーサービス』の第 19 章「Kerberos サービスについて」を参照してください。Kerberos v5 は、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+ Developer’s Guide』の「Authentication Using RPCSEC_GSS」を参照してください。
次の図は、RPCSEC_GSS 層がアプリケーションと GSS-API の間に位置している様子を示したものです。
図 4-2 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 の C 言語バインディング、つまり関数とデータ型だけに言及しています。Java バインディング版の GSS-API が利用可能になりました。Java GSS-API には、RFC 2853 で規定された Generic Security Services Application Program Interface (GSS-API) に対する Java バインディングが含まれています。
GSS-API についての詳細は、次の 2 つのドキュメントを参照してください。
『Generic Security Service Application Program Interface』 ドキュメント (ftp://ftp.isi.edu/in-notes/rfc2743.txt) は、GSS-API の概念について簡単に説明しています。
『Generic Security Service API Version 2: C-Bindings』 ドキュメント (ftp://ftp.isi.edu/in-notes/rfc 2744.txt) は、C 言語ベースの GSS-API に固有の情報を提供しています。