3. S/MIME に関する調査
3.1 PKCS オブジェクトのデコードプログラムS/MIME によりサポートされる PKCS によるメール本文の暗号化においては、 セッション毎に秘密鍵を生成し、それを用いて暗号化を行なう。メール本文を 暗号化する際には、送信相手の公開鍵が既知である必要がない。暗号化された 本文は MIME オブジェクトとして base64 エンコーディングされる。
この秘密鍵を、受信者毎に各々の公開鍵を用い、自身の秘密鍵と併せて使用する ことにより、公開鍵暗号方式により暗号化する。暗号化された秘密鍵は、それぞれ MIME オブジェクトとして base64 エンコーディングされる。
電子署名には、送信者の証明書のメッセージダイジェストを作成し、 送信者自身の秘密鍵を用いて公開鍵方式により暗号化したものが使用される。
S/MIME メールは、暗号化された本文、送信先の数に応じた暗号化された 秘密鍵、および電子署名を含んだ形で送信される。
電子署名の認証を行なう場合には、信頼できる認証局から得られる公開証明書 からメッセージダイジェストを計算する。一方で電子署名を送信者の公開鍵 を用いて復号化し、両者の結果の一致によって送信者が認証される。
これらの一連の機能を実装するにあたって、利用することが期待できるツール あるいはライブラリなどの既存実装を以下に挙げる。
- base64 encode/decode(MIMEオブジェクトのencode/decode)
- 現行 fml 付属のbase64decode.pl/base64encode.pl
- ASN.1 <-> BER(DER) encode/decode (PKCSオブジェクト、LDAPメッセージのencode/decode)
- OpenSSL 0.9.4 の暗号化ライブラリ(Cのライブラリ)
- Convert-BER-1.26(Perlライブラリモジュール) use 5.004(Makefile.PL)
- LDAP client interface(メンバリスト、証明書の取得)
- perl-ldap-0.13(Perlライブラリモジュール) use 5.004(Makefile.PL)
- 公開鍵暗号方式での暗号化/復号化(秘密鍵、署名における メッセージダイジェストの暗号化/復号化)
- OpenSSL 0.9.4 の暗号化ライブラリ(Cのライブラリ)
- 対応公開鍵暗号化方式 : RSA, DSA, Diffie-Hellman
- 秘密鍵暗号方式での暗号化/復号化(電文および署名の暗号化/復号化)
- OpenSSL 0.9.4 の「openssl」コマンド
- 対応秘密鍵暗号方式 : RC2, tripleDES, DES, RC4, RC5, Blowfish, IDEA, CAST, CAST5
- OpenSSL 0.9.4 の暗号化ライブラリ(Cのライブラリ)
- 対応秘密鍵暗号方式 : 「openssl」コマンドに同じ
- Des-perl-a1(Perlのライブラリモジュール) 5.000(README)
- 対応秘密鍵暗号方式 : DES(mode: CBC, ECB, PCBC)
- メッセージダイジェスト(署名、証明書の認証)
- Digest-MD5-2.09(Perlライブラリモジュール) 5.004(README)
- 対応アルゴリズム : SHA-1, MD5, MD2
- OpenSSL 0.9.4 の「openssl」コマンド
- 対応アルゴリズム : SHA-1, MD5, MD2, SHA, MDC2, RIPEMD-160
- OpenSSL 0.9.4 の 暗号化ライブラリ(Cのライブラリ)
- 対応アルゴリズム : 「openssl」コマンドに同じ
- 証明書の認証(メンバの証明書の認証)
- OpenSSL 0.9.4 の「openssl verify」コマンド
- OpenSSL 0.9.4 の 暗号化ライブラリ(Cのライブラリ)
- 公開鍵暗号化方式でのキーペアの作成および証明書の発行 (メーリングリスト用およびメンバ用)
- OpenSSL 0.9.4 の「openssl x509」コマンド
- OpenSSL 0.9.4 の暗号化ライブラリ(Cのライブラリ)
- 証明書および個人鍵の配布ファイル(PKCS#12)の作成 (メンバ用)
- OpenSSL 0.9.4 の「openssl pkcs12」コマンド
- OpenSSL 0.9.4 の暗号化ライブラリ(Cのライブラリ)
OpenSSL 0.9.4 の暗号化ライブラリを使用した PKCS デコード機能のテストの ため、以下のようなのサンプルプログラムを作成した。
- pkcs12.c
このサンプルプログラムが示す通り、既存のライブラリやPerl用モジュールの 利用により、暗号化および認証機能に関する開発の多くの部分を省力化する ことが可能である。
3.2 OpenSSL による認証局のテスト運用
本調査においては、OpenSSL 0.9.4 を以下の環境にインストールし、認証局 のテスト運用を行なった。
- テスト環境(1)
- ハードウェア: Sun Ultra Enterprise 3000
OS: Solaris 2.5.1- テスト環境(2)
- ハードウェア: COMPAQ Alpha station 500u
OS: Tru64 UNIX V4.0Dいずれの環境においても、暗号化および認証に必要な、以下の所定の動作に 問題がないことを確認している。
- 公開鍵暗号化方式による暗号化でで使用するキーペアの作成
- メッセージダイジェストの暗号化による電子署名の作成
- メッセージダイジェストの照合による電子署名の認証
- 公開鍵を含む証明書の作成
- 電子署名による証明書の認証
- 秘密鍵の逐次生成による平文テキストの暗号化
- 証明書を使用して解読した秘密鍵による平文テキストの復号化
3.3 S/MIME 送信/受信エージェントのサンプル調査
S/MIME によるメール本文の暗号化、およびメール送信者の認証機能を持つ メール送信/受信エージェントとして、Netscape messanger を用いた 暗号化メールの送受信テストを行なった。
認証局として、 「4.2 OpenSSL による認証局のテスト運用」 において設定した Tru64 UNIX 上の OpenSSL テスト環境を使用した。
Netscape messanger では、受信した S/MIME メールの送信者を電子署名に より認証し、メール本文を復号化するために、メール送信者の公開証明書 を取得し、その有効性を検証する機能を持っている。
公開証明書の取得方法としては、LDAP サーバーのアクセスによる ディレクトリ・サービスの利用を前提としている。
そのため、メール送受信テストにあたっては、テスト環境の一部として OpenLDAP サーバーの運用テストを併せて行なった。これについては 次章に述べる。