■ ダウンロードとリンク
■ XML長期署名フォーマットXAdESとは?
XAdESは、XML Advanced Electronic Signatures の略であり、主に欧州と日本で採用されつつあるXML形式の電子署名です。
「電子署名+タイムスタンプ」の技術を組み合わせて利用する事で誰が何時署名したかと言う事を、長期間にわたり保証する事が可能になる技術です。
長期署名フォーマットとしてはバイナリ形式のCMS(Cryptographic Message Syntax / RFC3852)形式のCAdESもありますが記述内容はXAdESと基本的には同じものです。日本ではECOM(次世代電子商取引推進協議会)を中心に検証が行われており、「2007年度 相互運用性テスト」等のプロジェクトが実施されました。
現在は「JIS X 5093:2008 XML署名利用電子署名(XAdES)の長期署名プロファイル」としてJIS採用された標準規格です。中央経済社からECOMメンバーがまとめた「電子文書保存のしくみと実務 第2版」が書籍として発行されています。この本はJIS対応で分かりやすくお奨めです。
■ Le-XAdESライブラリとは?
Le-XAdES Library はラング・エッジが開発した、XAdES形式で署名や検証が行えるライブラリです。
現在はバイナリ形式のテスト用実行ファイル「XAdEStool」と、ソース公開版の「Le-XAdES Library」を公開しています。
構造としてはMicrosoftが .NET Framework で提供しているセキュリティAPIを利用して、独自のXML署名クラス(LeXmlSign)をベースにXAdES拡張をしています。
この為に現在の動作環境としては、.NET Framework 2.0 以上が必須となります。
ソース公開版を利用する開発環境としては「Microsoft Visual Studio 2005 - C++」が必要ですが、ソースを再ビルドすることで「Microsoft Visual Studio 2008 - C++」でもご利用頂けます。
開発言語としてC++/CLIを使って実装しています。
C++/CLIを使っている為に、Visual Studio 2005 以前の環境ではビルドできませんのでご注意下さい。
なおソース公開版は基本的に商用利用目的ではライセンス的にご利用頂けません。
商用目的でのご利用に関しては有限会社ラング・エッジまでお問合せ下さい。ライセンスに関してはこちらをご覧ください。なお非商用のソース公開版に関するライセンスの記述を2008年8月29日のVer1.10R2より修正しております。
開発環境を持っておらず単にツールを利用する場合には「Microsoft Visual C++ 2005 SP1 ランタイム コンポーネント」が必要です。MSの必要なコンポーネントは XAdEStool インストーラを使えば自動インストール可能です。詳しくは動作条件をご覧下さい。
今後はXAdES等の電子署名をはじめとするPKI関連技術をもっと一般に広く使って貰えるようにライブラリやツールを提供して行きたいと考えています。
同時に日本での利用を前提にした実装を目指します。
将来は英語対応を行い広く公開して行くつもりです。
まずは気軽にサンプルアプリ「XAdEStool」をお試し頂いて、電子署名の世界を体験してみてください。
■ 動作条件
- Microsoft Windows XP, Vista, 7, 2000 Server, Server 2003, Server 2008 の32bit環境
- Microsoft .NET Framework 2.0 以上(Microsoftダウンロード)
- Microsoft Visual Studio 2005 - C++ 以上
- Microsoft Visual C++ 2005 SP1 ランタイム コンポーネント(Microsoftダウンロード)
- MicrosoftのモジュールはXAdEStoolインストーラによって自動ダウンロードとインストールする事が可能です。
- Microsoftのモジュールに関する最新版はダウンロードセンターを参照
- 署名を行うにはRSA形式の秘密鍵を持つX.509準拠の電子証明書が別途必要。
- PFUタイムスタンプSDKはLe-XAdESライブラリには含まれません。
■ 主な機能一覧
- XML長期署名プロファイル(ETSI TS 101 903 V1.3.2)に対応した署名と検証が可能。
- 現在 XAdES-BES/ XAdES-T/ XAdES-X-L/ XAdES-A に対応しており今後拡張予定。
- 複数の対象ファイルに対して1つまたは別個に署名タイムスタンプが可能。
- 署名方法はDetached(外部)/Enveloping(内部)/Enveloped(埋め込み)に対応。
- タイムスタンプ取得はPFUタイムスタンプとRFC3161準拠のサーバから可能。
- オフラインモードにより署名と簡単な検証のみをオフライン状態で実施が可能。
- XAdES-X-L / XAdES-A に関してはオフライン検証が可能。
- 最終アーカイブタイムスタンプへの証明書/CRLの埋め込みが可能。
- シリアル署名(署名ファイルを対象に更に署名を行う方法)に対応。
- Windows標準の .NET Framework のセキュリティクラスを利用。
- XML署名は独自実装の LeXmlSign クラスを利用(SignedXmlは検証時のみ利用)。
- Windows標準の証明書ストアに対応、別途PKCS#12形式のファイルも指定可能。
- XAdESファイルの内容解析と含まれるASN.1/DERオブジェクトの解析表示が可能。
- CRL(http/ldap/ftp)だけでなくOCSP(http)にも対応した証明書の検証が可能。
- XmlDsig/XAdES1.3.2のプロファイルによるSchema検証が可能。
- 標準の証明書ストア以外にチェーン検証時に別途証明書ファイルが利用可能。
- 取得済みの検証情報(CRL/OCSP)を使った検証や検証情報付与が可能。
■ 主なAPI/class一覧
詳細なAPIリファレンスはこちら。
| XAdES-BES(署名のみ) |
| addDetached |
Detached(外包)形式にて署名対象を追加。
|
| addEnveloping |
Enveloping(内包)形式にて署名対象を追加。
|
| addEnveloped |
Enveloped(埋込)形式にて署名対象を追加。
|
| sign |
署名(XAdES-BES)の付与実行。
事前に秘密鍵と関連付いた署名証明書の指定とaddDetached/addEnveloping/addEnvelopedによる署名対象の指定が必要。
署名対象は複数が指定可能。
|
| XAdES-T(XAdES-BES+署名タイムスタンプ) |
| getEsTHash |
XAdES-Tの対象となるハッシュ値を取得。
取得したハッシュ値を使ってタイムスタンプサーバにタイムスタンプを要求。
RFC3161準拠のタイムスタンプ取得APIは別途提供。
商用タイムスタンプ局の場合はそれぞれのSDKを利用。
|
| addEsT |
XAdES-BESに署名タイムスタンプを埋め込みXAdES-Tに更新。
タイムスタンプサーバより取得したタイムスタンプを指定して埋め込む。
|
| XAdES-X-Long(XAdES-T+検証情報) |
| addEsXL |
XAdES-Tに検証情報(証明書やCRL/OCSP等)を埋め込みXAdES-X-Longに更新。
署名証明書とタイムスタンプ証明書の認証パスを構築して失効情報等を収集して埋め込む。
|
| XAdES-A(XAdES-X-Long+保管タイムスタンプ) |
| getEsAHash |
XAdES-Aの対象となるハッシュ値を取得。
取得したハッシュ値を使ってタイムスタンプサーバにタイムスタンプを要求。
RFC3161準拠のタイムスタンプ取得APIは別途提供。
商用タイムスタンプ局の場合はそれぞれのSDKを利用。
|
| addEsA |
XAdES-X-LongまたはXAdES-Aに署名タイムスタンプを埋め込みXAdES-Aに更新。
タイムスタンプサーバより取得したタイムスタンプを指定して埋め込む。
|
| addEsARevocations |
最後のXAdES-Aのタイムスタンプ証明書の検証情報をタイムスタンプに埋め込む。
タイムスタンプ証明書の認証パスを構築して失効情報等を収集してタイムスタンプ自身に埋め込む。
これにより有効期限の延長が可能となる。
|
| 検証 |
| verify |
XML署名およびXAdES長期署名としての検証を行う。
署名値検証や署名対象のハッシュ値検証はもちろんオプション指定によりスキーマ検証や各種設定しての検証が可能。
|
| 入出力 |
| loadXml |
XAdES情報を読み込みセットする。
署名対象の指定ではありません。
XML文字列を指定するsetXmlもサポート。
|
| saveXml |
XAdES情報を保存する。
XML文字列として取得するgetXmlもサポート。
|
| 補助API/クラス |
| getTsp3161 |
RFC3161に準拠したタイムスタンプサーバからタイムスタンプトークンを取得するAPI。
商用タイムスタンプ局のタイムスタンプトークン取得は、それぞれのタイムスタンプ局が提供するタイムスタンプ取得SDKを利用。
|
| verifyTsp3161 |
RFC3161に準拠したタイムスタンプトークンを検証するAPI。
商用タイムスタンプ局のタイムスタンプトークンも検証可能。
|
| getCRL |
http/https/ladpのURIを指定してCRLを取得するAPI。
|
| getOCSP |
http/httpsのURIを指定してOCSPを取得するAPI。
GPKIのCVS拡張の要求も可能。
|
| LeCertPath |
独自の認証パス構築API。
リンク証明書の対応やトラストアンカーの指定はもちろん、各種証明書ストアの利用が可能。
|
| LeCertDNet |
.NET FrameworkのAPIを利用した証明書の取得や表示のAPI。
|
| LeAsn1Xml対応PKIオブジェクト |
TimeStampReq TimeStampRes TimeStampToken |
RFC3161準拠のタイムスタンプ要求、応答、トークンの操作が可能となるクラス。
|
| LeCertificate |
X.509準拠の証明書の操作が可能となるクラス。
|
| CertificateList |
RFC3280/5280準拠の証明書失効リスト(CRL)の操作が可能となるクラス。
|
OCSPRequest OCSPResponse BasicOCSPResponse |
RFC2560準拠のOCSP要求、応答、BasicOCSPResponseの操作が可能となるクラス。
|
■ 出力例
XAdES-T
XAdES-A
■ サポート情報
- ロジカルテック「LOCKSTAR-PKI」に格納された証明書を使う (2006-10-17)
最新(2006.10.11以降)の「LOCK STAR-PKI エンドユーザ用PKIコンポーネント」を使って下さい。
古いドライバを使った場合にはPIN入力後に「指定された暗号化サービス プロバイダ (CSP) はこのキー アルゴリズムをサポートしていません。」と表示され署名が出来ません。
- その他USBトークンやスマートカードに格納された証明書を使う (2006-10-17)
幾つかトラブルが報告されていますが最新や日本語対応のドライバを使うと正常になる場合が多いようです。まずはお使いのハードをサポートしているメーカーのホームページで最新版を確認してみて下さい。
■ 要素技術
■ 参考リンク
■ コンタクト
■ 免責
公開中ソフトウェアの全部または一部を使用・複製・修正・配布する全部または一部の行為の結果として、いかなる種類の損失、損害または不利益が発生しても、ラング・エッジおよびその社員ないし従業員がその責を一切負わないことに同意し、かつ、ラング・エッジおよびその社員ないし従業員にその責を一切負わせないこと。