レベル: 中級 Phillipe Loher, Software Engineer, IBM
2005年 07月 26日 Lotus Notes/Domino 7.0 では、新しい暗号化/復号 API が導入されています。
この記事では、Notes/Domino 7 の新しい Notes 暗号化/復号 API に関連するさまざまな機能を取り上げます。ビジネスパートナーや他の
Notes 開発者向けに、Notes と S/MIME 暗号化メッセージの読み込みおよび作成機能をどのようにプログラムに組み込むのかを解説します。暗号化されたノート
(note) を表示または作成する機能をアプリケーションに実装しなければならない状況は増え続けています。この記事では、これらの機能や他の
Notes/Domino 7 セキュリティ機能を実装するために必要な情報を技術面および管理面から明らかにします。
さまざまなケースで、Notes アプリケーションから暗号化された文書へのアクセスが必要です。この記事は、新しい API がどのように機能するのかを理解するために役立ちます。この記事に書かれている実装方法は、実際のアプリケーションのアーキテクチャに合わせて自由にカスタマイズできます。
この記事は、Notes/Domino セキュリティを十分に理解し、Notes/Domino アプリケーション開発者としての経験がある読者を対象としています。Domino
のセキュリティ認証モデルに関する知識も役に立ちます。Notes/Domino 7 のセキュリティおよび他の機能の詳細については、developerWorks:
Lotus 記事『Lotus Domino 7.0 の新機能』と『Lotus Notes と Domino Designer 7.0 の新機能』を参照してください。
Notes/Domino 7 セキュリティ API の概要
新規のセキュリティ API メソッドは、Notes/Domino 7 ランタイム C ライブラリの一部です。NRPC コールを使用できるアプリケーションは、Notes/Domino 7 ランタイムライブラリを使用してこの API にアクセスできます。
Notes/Domino 7 に新しい API (Notes/Domino 6.5x で導入されたもののサブセット) が導入される前は、Notes アプリケーションは API の NSFNoteCopyAndEncrypt と NSFNoteDecrypt を使用することにより、Notes 暗号化文書および S/MIME 暗号化文書をそれぞれ読み込み/作成することができました。これらのメソッドは、いくつかの理由により、Notes アプリケーションで使用するには不十分でした。まず、アプリケーションは、SECKFMSwitchToIDFile コールを発行することにより、暗号化または復号を行うユーザーのコンテキストに切り替える必要があります。ユーザー間で (たとえば、管理ユーザーから他のユーザーへ、そして元のユーザーへ) コンテキストを何度も切り替えることは、パフォーマンスに影響します。また、SECKFMSwitchToIDFile を使用するには、ユーザーの ID ファイルが存在し、この ID ファイルが最新の状態でなければなりません。これは、Notes アプリケーションがユーザー ID ファイルを追跡し、ID ファイルに反映される変更 (名前の変更とパブリックキーの変更) を検出する必要があることを意味します。新しい API はこれらの変更を自動的に検出するので、ID ファイルの管理が容易になります。新しいセキュリティ API を使用することは必須ではありませんが、上記のような制限に対して役立ちます。
既存の API である PKCS12_ExportIDFileToFile と PKCS12_ImportFileToIDFile を使用すると、インターネット証明書とキーを ID ファイルにインポートしたり、エクスポートすることができます。インターネット証明書とプライベートキーが ID ファイルに格納されている場合は、S/MIME 暗号化メールの読み込みと S/MIME 署名済みメールの送信が可能です。このメソッドを使用すると S/MIME メッセージを読むことができますが (適切な暗号化エンジンを持っている場合)、これはあまり便利な方法ではなく、S/MIME のデコードのみに使用され、Notes の暗号化メールには使用されません。しかし、新しい API を使用することにより、簡単な方法で Notes 暗号化メッセージと S/MIME 暗号化メッセージの両方にアクセスしたり、これらの暗号化メッセージを作成することができます。
新しい Notes/Domino API
API に関するより詳細で正確な説明は、『Lotus C API Notes/Domino 7.0 Reference and User Guide』(英語版) に記載されています。ここでは、この記事で取り上げる API について簡単に説明します。
SECKFMOpen
正しい ID ファイル名とパスワードを渡すと、このメソッドは ID ファイルのクリデンシャル (認証情報) へのハンドルを返します。クリデンシャルハンドルは、このリスト内の他の関数に渡すことができるので、SECKFMSwitchToIDFile によるユーザーコンテキストの切り替えが不要になります。適切なクリデンシャルがないと、暗号化/復号は実行できません。
SECKFMClose
これは、使用後の SECKFMOpen ハンドルを閉じます。
SECAttachIdFileToDB
このメソッドは、ID ファイルをデータベース (例: ユーザーのメールファイル) に安全に添付するために使用します。これによって、ユーザー ID ファイルの管理が容易になるので、ID ファイルを一括して保管するリポジトリを維持する必要がなくなります。添付を行うには、ID ファイルとパスワードを渡す必要があります。ID ファイルは、データベースのプロフィールノートに保管されます (ノートの名前は、関数を呼び出すときに指定します)。
SECExtractIdFileFromDB
この関数は、SECAttachIdFileToDB 関数によって添付された ID ファイルを取り出します。適切な ID パスを SECKFMOpen に渡すために、ID ファイルを取り出すことが必要です。
SECRefreshIdFile
この関数は、ディレクトリで指定されたユーザーの Notes 証明書の変更、インターネット証明書の変更、およびユーザー名の変更をチェックします。このメソッドには、ID ファイル、パスワード、変更をチェックするサーバー名を渡します。変更が検出された場合は、ID ファイルが更新されます。通常、変更が検出された場合は、SECAttachIdFileToDB を使用して ID ファイルを再添付しなければなりません。ID ファイルを最新の状態に保つために、ID を抽出した後で SECRefreshIdFile を発行する必要があります。
NSFNoteDecrpytExt2
これは、NSFNoteDecryptExt の拡張です。このメソッドに KFM クリデンシャルハンドルを渡すことにより、メッセージを正しく復号できます。
NSFNoteCopyAndEncryptExt2
これは、NSFNoteCopyAndEncrypt の拡張です。このメソッドに KFM クリデンシャルハンドルを渡すことにより、メッセージを正しく暗号化できます。
新しいセキュリティ API の使用
暗号化/復号を行うときは、適切な認証情報を使用するために、セキュアな文書への認証情報を持つ Notes ID にアクセスする必要があります。ユーザーの ID ファイルとパスワードを持っている場合は、新しい SECAttachIdFileToDB 関数を使用することで、その ID ファイルをユーザーのメールファイルに添付できます。たとえば、Notes アプリケーションは各ユーザーの ID ファイルを $MyId プロフィール文書 (または他の固有の名前を持つプロフィール文書) に保存できます。一般的に、ユーザー ID とパスワードをユーザーに要求し、これを保存するインターフェースとして、さまざまなものが考えられます。アプリケーションでユーザー ID を要求する場合は、エンドユーザーと製品のアーキテクチャに沿った適切なインターフェースを提供しなければなりません。
Domino Web Access を例に取ると、Notes ID は $shimmerid プロフィールとして添付されます。ID のリスト (図 1 参照) を示す Notespeek ツールを使用することにより、$shimmerid 文書が存在することを確認できます。
図 1. Notespeek ID リスト

Domino Web Access には、ユーザーが Notes ID ファイルを添付できるユーザーインターフェースのよいサンプルがあります。図
2 の [セキュリティ] プリファレンスタブに示されているように、ユーザーは
Notes ID ファイルを選択し、パスワードを入力することができます。
図 2. [セキュリティ] プリファレンスタブ

開発するアプリケーションに、ユーザーからのアクセスが可能な同様の GUI を組み込むことができます。ユーザーが
ID とパスワードを提供すると、Notes アプリケーションは SECAttachIdFileToDB
を呼び出し、ID ファイルをメールファイルに添付します。Notes アプリケーションは、メッセージを暗号化または復号するときに、この
ID ファイルとパスワードにアクセスできなければなりません。また、ユーザーのデータ
(ID ファイルとパスワード) はセキュリティ上の機密情報なので、Notes アプリケーションはこれらのデータをセキュアに扱う必要があります。
さらに、このメソッドにより、必要な場合に新しい ID を再添付する機能がアプリケーションのユーザーに与えられます。たとえば、ユーザーが新しいパブリックキー/プライベートキーを要求したときは、新たに暗号化されたメッセージにアクセスするために、新しい ID ファイルを添付する必要があります。
添付された ID を使用して暗号化されたメッセージを読む
アプリケーションは、文書が暗号化されているかどうかを判断する必要があります。これを行うには、Notes
API メソッドの NSFNoteIsSignedOrSealed を使用します。文書が暗号化されていると判断された場合、アプリケーションは新しいセキュリティ
API を利用できます。この API を使用するときは、次の手順を参考にしてください。
- SECExtractIdFileFromDB メソッドを使用して、メールファイルからユーザー ID ファイルを取り出します (これを正しく実行するには、ユーザーが ID ファイルをメールファイルに添付しておく必要があります。この方法については、このセクションで前述しました)。また、これを行うには、ユーザー ID ファイルのパスワードも必要です。
- 取り出した ID ファイルに対して SECRefreshIdFile メソッドを発行します。これによって、Notes
証明書の変更、インターネット証明書の変更、およびユーザー名の変更が、取り出したファイルに反映されているかどうかを確認できます。
- SECRefreshIdFile が何らかの変更を検出した場合は、SECAttachIdFileToDB を使用して、ID ファイルをメールファイルに再添付します。
- 取り出した ID ファイル/パスワードをパラメータとして渡すことにより、SECKFMOpen
を使用して ID ファイルハンドルを抽出します。
- この ID ファイルハンドルを NSFNoteDecrpytExt2 メソッドで使用して、暗号化されたメッセージにアクセスします。通常、暗号化されたメッセージには機密データが含まれるので、復号後もコンテンツのセキュリティを維持します。
- SECKFMClose を使用して ID ファイルハンドルを閉じます。
- 文書を閉じ、取り出した ID ファイルをストレージから削除します。
添付された ID を使用して、暗号化したメッセージを作成する
アプリケーションでメッセージの暗号化が必要なときは、新しいセキュリティ API を使用できます。この API を使用するときは、次の手順を参考にしてください。
- SECExtractIdFileFromDB メソッドを使用して、メールファイルからユーザーの ID ファイルを取り出します (もう一度説明しますが、これを正しく実行するには、ユーザーが ID ファイルをメールファイルに添付しておく必要があります)。また、この ID ファイルのユーザーパスワードも必要です。
- 取り出した ID ファイルに対して SECRefreshIdFile メソッドを発行します。これによって、Notes
証明書の変更、インターネット証明書の変更、およびユーザー名の変更が、取り出したファイルに反映されているかどうかを確認できます。
- SECRefreshIdFile が何らかの変更を検出した場合は、SECAttachIdFileToDB を使用して、ID
ファイルをメールファイルに再添付します。
- 取り出した ID ファイル/パスワードをパラメータとして渡すことにより、SECKFMOpen
を使用して ID ファイルハンドルを抽出します。
- この ID ファイルハンドルを NSFNoteCopyAndEncryptExt2 メソッドで使用して、文書を暗号化します。
- SECKFMClose を使用して ID ファイルハンドルを閉じます。
- 文書を閉じ、取り出した ID ファイルをストレージから削除します。
Notes ID 管理の他の概念
アプリケーションでは、さまざまなユーザーに対しメッセージの暗号化または復号を可能にするケースも考えられます。このような場合、それぞれの ID ファイルを個別に添付するのは不便です。このプロセスを簡単にするために、複数の ID ファイルを一括して添付するツールを Notes アプリケーションで作成することができます。
Notes アプリケーションが、暗号化/復号用にユーザーのメールファイルへの添付が必要なすべての ID ファイルとパスワードにアクセスできる限り、SECAttachIdFileToDB メソッドを使用してすべての ID ファイルを添付できます。これを行うには、ID を順番に添付するツールを作成しなければなりません。このツールには、ユーザーの ID ファイルとパスワードを保管するセキュアなリポジトリも必要です。ID ファイルとパスワードは、セキュアで機密が保持される方法で保管しなければなりません。
ユーザーに Notes ID パスワードを変更する機能を与える方法
セキュリティ上の理由から、アプリケーションによってメッセージの暗号化または復号に使用される Notes ID のパスワードを変更する機能を各ユーザーに与える場合もあります。たとえば、パスワードが漏洩した場合は、パスワードの変更が必要です。また、アプリケーションによって使用される Notes ID のパスワードをユーザーが定期的に変更するポリシーを Notes アプリケーションで作成することが必要な場合もあります。
Domino Web Access の [Notes ID のパスワードの変更] ダイアログボックスを図 3 に示します。ユーザーはこのダイアログボックスで Notes ID のパスワードを変更できます。このダイアログは、アプリケーションでパスワードを変更する際のモデルとして参考になります。
図 3. [Notes ID のパスワードの変更

ユーザーの既存のパスワードと新しいパスワードを収集するインターフェースを提供するケースもあります。このインターフェースからデータをアプリケーションに転送します。これを行う手順は、次のようになります。
- SECExtractIdFileFromDB メソッドを使用して、メールファイルからユーザー ID
ファイルを取り出します。
- 取り出した ID ファイルに対して SECRefreshIdFile メソッドを発行します。これによって、Notes
証明書の変更、インターネット証明書の変更、およびユーザー名の変更が、取り出したファイルに反映されているかどうかを確認できます。
- 新しいパスワードを使用し、SECKFMChangePassword によってパスワードを変更します。
- SECAttachIdFileToDB を使用して、ID ファイルをメールファイルに再添付します。
- 文書を閉じ、取り出した ID ファイルをストレージから削除します。
まとめ
この記事では、Notes/Domino 7 に導入された新しいセキュリティ API について紹介しました。また、これらの
API の使い方を説明し、実践的なアプリケーションのサンプルも示しました。この記事がお役に立つことを願っています。この他にも、記事で取り上げてほしい
Notes/Domino セキュリティ関連のトピックがありましたら、お気軽にご提案ください。
参考文献
著者について  | |  | Phillipe Loher is a Software Engineer working on Lotus messaging and collaboration products. Current projects include Domino, unified communications, and mobile-based functionality. Phillipe lives near Boston and likes playing tennis and making wine as a hobby. |
記事の評価
|