やさしく解説するマイクロソフトの最新技術(第2回)

マイクロソフト株式会社 ソリューションデベロッパー事業部 デベロッパー製品部
テクニカル・エバンジェリスト 熊谷 恒治 kojik@microsoft.com



セキュリティについて


 前回はActive Directoryについて紹介させていただきました。
 さて、今回は新しいテクノロジーであるセキュリティをご紹介いたします。セキュリティというととても範囲が広くかぎられた紙面では語り尽くせませんので、そのなかでも認証、暗号化について触れてみたいと思います。
 マイクロソフトはWindowsプラットフォームにおいて暗号化、認証をアプリケーションから透過的に利用するための技術としてCryptoAPIとSSPIという二つのインターフェイスを提供しています。CryptoAPIはデータの暗号化、復号化及び暗号化に使用する暗号鍵の管理を行うインターフェイスであり、SSPIは認証をサポートするサービスです。暗号化及び認証を必要とするアプリケーションはこれらのAPIを使うことになります。特にSSPIは今後Windows NT 5.0で実装される新しい認証サービスを利用する上でこのSSPIが必要になります。

●CryptoAPI

 CryptoAPI(以下CAPI)は先に説明したとおりメッセージの暗号復号化に関連するサービス等セキュリティの下位レイヤーの機能を提供します。SSL3を代表する認証サービス及びセッション間で流れるメッセージの暗号化を提供する上位サービスは、このCryptoAPIを下位のレイヤーとして利用してメッセージの暗号化やメッセージへのサインによる認証などを行います。(図1参照)

図1 セキュリティアーキテクチャ

 デベロッパーは実際にはSSLなど上位のプロトコル経由でこのサービスを利用するケースが多いため直接は関係ない方が多いとは思いますが概念は知っておいたほうが良いでしょう。デベロッパーとしてCAPIを使うケースは例えば自社のアプリケーションが扱う独自のデータベースに対して暗号化の要求があがった場合、開発者はこのCAPIを通して暗号複合鍵の生成を行い、その鍵を使ってデータの暗号化、複合化を行うとか、SMIME対応メールソフトウェアを作る場合なでがあたるでしょう。
 さて、このCAPIが開発者にとって有利な点として挙げられるものは暗号化アルゴリズムにあたるものがコンポーネント化されている点です。CAPIは二つの階層に分かれており、一つはアプリケーションインターフェイスの層そして暗号復号化のアルゴリズムを提供するCrypto Service Provider(CSP)です。CAPIは暗号化に関する部分をCSPによって抽象化しているため開発者から見ると鍵の生成、メッセージのハッシュ、メッセージの暗号複合化などのAPIだけを意識して下位の暗号化アルゴリズム(DESであるとかRC2,RC4等)は意識する必要はありません。ゆえに暗号化の方式を変える場合でも基本的にコードを変更する必要がなくなります。さらにこのコンポーネントモデルはCSPの提供方法をソフトウェアだけでなくSmartCardによるCSPの提供及び拡張カードによる提供も考えられていることです。SmartCardでCSPが配布できれば会員制のInternet Shop等では会員用のカードを作り、そこから強力な暗号アルゴリズムを提供するCSPを利用できるわけです。さらに拡張カードを使った指紋照合をベースにしたCSP等も利用可能です。
 さてここで簡単にCAPIで提供されているファンクションを紹介してみましょう。
CAPIは1.0、2.0のバージョンが存在し、CAPI 1.0では、
・暗号鍵の生成、管理
・鍵の交換
・鍵を使ったメッセージの暗号複合化
・メッセージのハッシング、サイニング及び照合(メッセージの身元保証のために使用)

 CAPI 2.0ではこれらのファンクションに、証明書(Certificate)管理が追加されます。これらの関係を図で示したものが図2 CryptoAPI2.0アーキテクチャです。

図2 CryptoAPI2.0アーキテクチャ

 CAPIのSDKはPlatform SDKとしてCryptoAPI SDKが提供されており、一般のデベロッパーはこれを使います。ただここで若干の(大きな?)問題が発生します。実は皆さんもご存知のとおり米国において暗号化システムの輸出は厳しく制限されており。まずCSPの輸出は暗号鍵の短い限られたものしか北米以外には輸出できないのです。さらにCSPを開発しようとした場合CSP SDKと言うものがあるのですが、これも輸出期制がかかっています。これらを利用する場合個別に輸出申請を行う必要が出てきます。現在の対応は金融機関向けには利用機関の登録を行うことで長い鍵を使ったCSPが提示できる対応になっておりCSP SDKに関しても個別にISVとコンタクトをとって対応することで輸出が可能になるケースも出てきます。
 これらの問題さえクリアできれば今後様々な方式のCSPを利用する事でセキュアなシステムの構築が可能になることでしょう。

●SSPI

 SSPIはCAPIの上位に位置するサービスです。SSPIの役割はクライアント、サーバーの正当性確認(認証)及び二者間で交換されるメッセージの機密性、完全性の保証を行うためのインターフェイスを提供します。例えばブラウザ−Webサーバー間で利用されるSSL(Secure Socket Layer)等が代表的なサービスですがSSPIはこれらのサービスを抽象化してデベロッパーにインターフェイスを提供します。SSPIのアーキテクチャはCAPIと似ておりAPIの部分と実際の認証アルゴリズムをつかさどるサービスプロバイダから成り立ちます。先ほど紹介したSSLなどはこのサービスプロバイダで提供されます。ではデベロッパーはこのSSPIでどんな利益を受けるのでしょうか。それはクライアント、サーバーモデルで認証を行うようなアプリケーションを作る場合、認証モデルによる実装の違いを意識しなくて良いということです。SSPIプロパイダは処理がスタートするとまずネゴシエーションを行い適切なプロバイダ間での通信を行う仕組みを実装しています。(図3参照)
図3 SSPIアーキテクチャ

 認証方式はNT固有のNTLMに始まり、SSL2、3そしてNT5で実装予定のKerberos等多岐にわたりますがこれらを極力意識せずに実装ができるわけです。現在マイクロソフトではサービスプロバイダとしてNTLM,SSL2,SSL3,DPA,Kerberos等を提供もしくは提供する予定です。
 デベロッパーから見るとSSLをはじめとするプロトコルを使って認証、暗号化ができるわけですから独自の認証、暗号機能をソケット通信の上に実現するよりはずっと開発が楽なはずです。さらに新しい認証サービスが出てきた場合にも柔軟に対応できるのがこの仕組みの良いところです。
 さてここでNT5から実装されるプロバイダ(認証サービス)であるKerberosについて簡単に説明をして今回の説明を終わりたいと思います。デベロッパーの方がWindows NT5対応のアプリケーションを開発するときに意識する必要がある大きな変更点がこのKerberosによる認証及びActive Directoryであるからです。
 KerberosはNTLMに変わる新い認証方式であり分散システム、大規模システムにおいて威力を発揮します。Kerberosの認証は大きく3段階に別れています。(図4参照)

図4 Kerberosによる認証

 構成としては認証を受けるクライアント、認証を行う認証サーバーそして実際のリソースを提供するサーバー(クライアントの最終アクセス先)から構成されます。
 クライアントは最初のLogonプロセスで認証サーバーにアクセスしTGT(Ticket Granting ticket)を要求します。認証サーバーはKDC(Key Distribution Center)と言い最初のユーザー認証がとおればTGTをクライアントに渡します。TGTは今後クライアントが各アプリケーションサーバーにアクセスする際に必要となるセッションチケットを認証サーバーから受け取る時に必要となります。このステップはいわばネットワークへのLogonです。
 次に実際のリソースにアクセスする際、クライアントとアプリケーションサーバーはセッションキーというものでお互いの正当性を確認します。このセッションキーを得るためクライアントは認証サーバーに対して先ほどのTGTを提示し(ここでTGTによる認証が行われているものと理解してください)これが成功するとセッションキーを受け取ります。最後にこのセッションキーを使ってサーバーとの通信を行うわけです。さらに認証サーバーはいくつかのサーバーをまとめて認証グループを構成し、他のグループと階層構造の信頼関係を結ぶことができます。これを利用するとユーザーは一度TGTを取得してしまえば(一度だけのLogon作業で)認証グループの階層化された信頼関係にのっとり様々なサーバーへアクセスする事が可能になります。紙面の関係で詳しくは説明できませんがこのKerberosの仕組みにより最終アクセス先サーバーの認証に関するオーバーヘッドは今までよりも小さくなります。さらにKerberosというのは別にNTだけの仕組みではないためUNIXで実装されているKerberosサーバー及びそれに対応するアプリケーションとの相互運用性も確立されます。
 このKerberosを利用するアプリケーションは先に紹介したSSPIを使うことで実現可能です。SSPIはCAPIと同様、Platform SDKにてSSPI SDKとして提供されており、KerborosのサービスプロバイダもNT5のベータバージョンで提供されますので一度試してみるのも良いかもしれません。

 さて今回はこれで終わりますが先に解説したActive Directoryそして今回のKerboesともNT5の重要なサービスです。NT5が出るのはまだ先ではありますが、将来にそなえそろそろこれらの技術も追っていたほうが良いのではないでしょうか。
 最後にもう一つ、もし取り上げてほしいテクノロジー等ありましたらぜひ要望をあげてください。私が対応できるテクノロジーでしたらできるだけご要望に添いたいと思います。なにしろネタを決めるのも大変なものでぜひ皆さんのご意見をいただければと思います。


Contents         Windows Consortium ホームページ