はじめに
オープンソースのセキュリティライブラリ、The Legion of the Bouncy Castleの学習。および、C#の勉強用にRFC3820のProxyCertInfo証明書拡張を生成・解析する機能を実装します。
対象読者
- C#勉強中な読者。基礎知識程度(難しい文法は出ません)。
- 公開鍵暗号方式の基礎は分かっている人。
- セキュリティをより詳細に実装する必要性に駆られている人。
- ASN.1(DER形式)、およびRFC等も知ってた方がいいです。
必要な環境
- Windows XP Home以降
- Visual C# 2008 Express Edition以降
Bouncy Castleとは
Bouncy Castleとは、オープンソースの暗号ライブラリです。JavaおよびC#の実装が用意されています。
主に以下の機能があります。
- 軽量暗号API(Java and C#)
- JCE暗号プロバイダ実装(JCE 1.2.1)
- ASN.1生成・解析 (DER形式(構造体をパック化したバイナリデータ)生成解析)
- 軽量クライアント用TLS API.
- X.509証明書(ver 1と3)、CRL(Ver 2)、PKCS#12ファイル、X.509属性証明書
- S/MIME and CMS (PKCS7/RFC 3852)
- OCSP (RFC 2560) (オンライン証明書確認)
- TSP (RFC 3161) (時刻認証)
- OpenPGP (RFC 2440)
- JDK 1.4-1.6 and the Sun JCEによって電子署名されたライブラリ
と盛りだくさんのライブラリです。
本記事では、最新版(2008/01/15現在)のbccrypto-net-1.3-src.zipを使用しています。
ただし、最新版はVisual C# 2005系統のプロジェクトファイルです。筆者の場合は、普通にプロジェクトファイルを開いてVisual Studio変換ウイザードを使用したら変換されました。
代理証明書とは
RFC3820(proxy certificate)とは、簡単に言えば、RFC 3280と似た、X.509電子証明書です。あるエンティティ(秘密鍵を持つ人)が別のエンティティを代理認証するための枠組みです。
簡単に言うと、ある電子証明書(および秘密鍵)を持つ人が「なりすまし用証明書」をおおっぴらに生成できる規約です。とはいえ、おおっぴらに作成できてしまうと問題なので、いろいろと制約があります。RFC3820にはその制約が記述されています。
本記事では、RFC3820の詳細説明は割愛します(C#とBouncy Castleの学習用のため)。概要を知りたい方は『グリッドにおけるセキュリティの概要と動向』(PDF)を参照ください。詳細を知りたい方はRFCの原文をあたってください。
ここでは、代理証明書にはProxy Certificate Information拡張(ProxyCertInfo拡張)という情報を証明書に埋め込む必要があるのを示すだけとします。
Issuer
以下、RFC3820の意訳です。Proxy CertificateのProxy Issuerは以下のどちらかである * End Entity Certificate * Proxy Certificate 代理証明書の発行者名は、代理発行者のサブジェクト名でなければならない(MUST)
Proxy Certificate Information
以下は、RFC3820の原文です。Proxy Certificate Information拡張(ProxyCertInfo拡張)が必須だということが述べられています。All Proxy Certificates MUST include the Proxy Certificate Information (ProxyCertInfo) extension defined in this section and the extension MUST be critical.