S/MIME ツールキット

ニュースグループ: netscape.public.mozilla.crypto
テクニカル コンタクト: Christian Kaiser
管理者: Bob Lord

概観

S/MIME ツールキットは、様々な MIME パーサーやジェナレータと共に組み込むことができる API を通じて S/MIME 機能を提供します。 S/MIME version 3 の機構をサポートします。

S/MIME ツールキットは、独自に MIME パーサーとして機能することはできません。 テスト用に簡単なパーサーを持っていますが、 Mozilla メール/ニュース プロジェクト用に開発された MIME パーサー (libmime をご覧ください) のように利用するには、最終的なアプリケーションが必要です。

プロジェクト情報

ソースコードをチェックアウトするには、

cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co mozilla/security

ライブラリ ソースコードは nss/lib/smime にあります。

二つのユーティリティは nss/cmd/smimetools にあります:

  • smime は、署名され、そして/または、 Netscape Communicator 4.7 および Microsoft Outlook で正しく検証し暗号化解除される S/MIME で暗号化されたメッセージを普通の RFC822 メッセージに変換する Perl スクリプトです。
  • cmsutil は、 CMS/PKCS7 メッセージを生成し、 smime により利用されます。

次のようにして、自動的に生成され、署名された電子メールを送ることができます:

"cat rfc822msg.txt | smime -S "nickname" -p "passwd" | mail chrisk@netscape.com"

"nickname" は署名される証明書のニックネームで、 "passwd" は暗号鍵データベース パスワードです。

chrisk@netscape.com に送られるメッセージは、 署名され、 Netscape Communicator 4.7 および Microsoft Outlook により正しく検証されます。

現時点の作業

私達が現在しなければならない作業には、次のものが含まれます:

  • API の第一版を記録し、改良作業に着手する。
  • API を見直して、必要に応じて API の定義に変更を加えて、 様々な MIME パーサーへの組み込み適正を決定する。
  • 理想的にビルド プロセスに組み込めるようなテスト ハーネスを作成する。
  • 優先順位をつけたこれからの作業リストを作成する: 例えば、暗号化メッセージ構文 (Cryptographic Message Syntax:CMS) および S/MIME v3 機能。

現況

バージョン 1.0 コードを完成し、 mozilla.org に追加しました。

ターゲット アプリケーション

新しい S/MIME ツールキット向けのアプリケーションには次のものが含まれる予定です:

  • Mozilla メール/ニュース クライアントでの S/MIME サポート。
  • WebMail クライアントでの S/MIME サポート。
  • EDI メッセージング。
  • Perl スクリプトを利用して S/MIME を生成および処理に利用できる Perl モジュール。

デザイン

S/MIME ツールキットは、 NSS 暗号化および PKI サービスの主要機能の上に実装されます。

S/MIME API は、次のいくつかの理由から C 言語で実装されます:

  • 既存の NSS コードが C で書かれており、 それを今後とも維持することで同じレベルの移植性を保つことができるから。
  • 広く使われている C++ コンパイラが現在の基準に達していないから。
  • アプリケーションの中 (特に組み込みアプリケーション) には、 C++ ランタイム パフォーマンスとの相性が悪いものがある。
  • S/MIME が依存する NSS C コードの中には、 C++ API と相性が悪いものがある。
  • もちろん、 C++ を使うことによるソフトウェア エンジニアリング上および管理上の利点はあります。 なので C++ を採用するという案をごみ箱に捨ててしまったわけではありません。

プロジェクト ゴール

S/MIME ツールキットの最終的なゴールは、実際のアプリケーションに実装できるような、 利用価値の高いコードを作成することです。この目標を見失わないようにするため、 私達が達成したいと考えていることをリストにしてみました。

S/MIME ツールキットは、将来 ...

  • S/MIME を使いやすくし、幅広く様々な MIME パーサーやジェナレータに組み込みます。

    私達は、ユーザーの要求を先回りして提供できるような柔軟な API を求めています。 例えば、通常とストリーミングの両方の入/出力をサポートする必要があります。

    非メール/ MIME 利用環境の暗号化メッセージを完全にサポートできるよう、 暗号化メッセージ構文 (CMS) を実装する必要があります。

    最後に、一般的な MIME パーサーおよびジェナレータに実装できるような、 S/MIME 固有のグルーコード (glue code) が必要です。

  • よく利用される S/MIME v3 の機能を実装します。

  • 次の機能が 「よく利用される」 リストに挙がっています。重要度の高いものから順に:

    • sMimeCapabilities および sMimeEncryptionKeyPreferences 属性
    • signingCertificate 属性
    • DSA 署名
    • Triple-DES CBC バルク暗号化 (Triple-DES CBC bulk encryption)
    • Diffie-Helman キー アグリーメント プロトコル (Diffie-Helman key agreement protocol)

  • CMS メッセージの生成および処理のために特別に API を提供します。

    S/MIME は CMS メッセージを基礎にしていますが、 CMS は MIME 以外 (ウォレット、データ保存、汎用メッセージ (generic messaging)、 など) の利用環境でも多くの便利なアプリケーションを備えています。

  • S/MIME および生 CMS メッセージを、署名、検証、暗号化、 および暗号解除できるサポートツールを提供します。

    コードのテストや検証が実際にコードを書くより困難な場合、 ツールキットの利用はかなり困難です。

  • 基本的なテストに適した軽量の MIME パーサーを提供します。

目標にはなっていないもの

目標にはなっていないもののリストの中には、達成できるものも含まれていますが、 私達は意識的にそれらを目標からはずしています。

S/MIME ツールキットは、将来にわたっても ...

  • S/MIME v3 向けのリファレンス実装 (reference implementation) はしません。

    S/MIME ツールキットは、 S/MIME v3 の全ての機能を実装するわけではありません。 例えば、現時点で ESS にはサポートが計画されていない部分もあります。

  • MIME ヘッダーの分析または生成はしません。

    目標は、すでにビルド、デバック、およびテストを経た MIME パーサー/ジェナレータを実装することです。

機能一覧

下に示した一覧は、これから実装される機能を重要なものから順に示したものです。 それぞれの機能にたいして S/MIME ツールキットは適切な API を使用して、 属性 (または機能) を生成し処理することができるようになります。

ツールキットは、 RFC2632RFC2633、または RFC2634 で定義されたあらゆる機能や属性を含むメッセージを、 不具合を表示することなく処理できなければなりません。 (*) 印のついた機能は、 Communicator 向けに実装された現在の PKCS7 および iS/MIME で利用できます。

  1. MIME パーサー インターフェース: ストリーミングおよびワンショット モードの両方での入/出力 (* - ストリーミング モード)
  2. MIME パーサー インターフェース: clear-signed および inline-signed メッセージ (multipart/signed および application/pkcs7-mime)
  3. CMS: 内部および外部署名のある SignedData オブジェクト (RFC2630 - 5) (* - 外部署名)
  4. CMS: EnvelopedData オブジェクト(RFC2630 - 6) (*)
  5. SMIME: smimeCapabilities 属性
  6. CERT: SignedData メッセージ用署名および CRL の一覧作成 (*)
  7. CMS: MD5 および SHA1 ダイジェスト アルゴリズム (RFC2630 12.1.1、 12.1.2)(*)
  8. CMS: RSA 署名アルゴリズム (RFC2630 12.2.2)(*)
  9. CMS: DSA 署名アルゴリズム (RFC2630 - 12.2.1)(*)
  10. CMS: RSA 暗号鍵トランスポート プロトコル (RFC2630 12.3.2.1)(*)
  11. CMS: Triple-DES CBC および RC2 CBC コンテンツ暗号化アルゴリズム (RFC2630 12.4.1 および 12.4.2) (*)
  12. SMIME: sMIMEEncryptionKeyPreference 属性 (デュアル キー サポート)
  13. ESS: signingCertificate 属性 (RFC2634 - 5)
  14. ESS: トリプル ラッピング (Triple Wrapping)(RFC2634 - 1.1)
  15. CMS: 証明書および証明書失効リストのみを含む "degenerate" SignedData オブジェクト (RFC2630 - 5)
  16. CMS: Ephemeral Static Diffie-Helman Key Agreement Protocol (ESDH) (RFC2630 12.3.1.1)。 これには、 Triple-DES CBC および RC2 キー ラップ アルゴリズムが含まれます。
  17. CMS: EncryptedData オブジェクト (RFC2630 - 8)
  18. 次に挙げた機能は優先順位が低く、 version 1.0 には含まれる可能性が低いものです:

  19. CMS: Static Static Diffie Hellman Key Agreement Protocol (SSDH) (RFC2630 12.3.1.1)
  20. CMS: SignedData オブジェクトのための multiple signers
  21. CMS: counter signatures (RFC2630 - 11.4)
  22. CMS: DigestedData オブジェクト (RFC2630 - 7)
  23. CMS: AuthenticatedData オブジェクト (RFC2630 - 9)
  24. ESS: Signed Receipt Requests and Receipts (RFC2634 - 2)
  25. ESS: セキュリティ ラベル (RFC2634 - 3)
  26. ESS: contentHints 属性 (RFC2634 - 2.9)
  27. ESS: contentIdentifier/contentReference 属性 (RFC2634 - 2.7, 2.11)
  28. ESS: メール リスト エージェント (Mail List Agent: MLA) Processing (RFC2634 - 4)