[2011-04-25 追記]
.NET FrameworkによるRSA-SHA2署名(完結編)を投稿しました。
Le-XAdES Library ではMicrosoftの
.NET Framework を使っています。色々便利な反面幾つか困ったこともあります。困っている事の最大の項目はRSA署名を使うクラス
RSACryptoServiceProviderの検証メソッド
VerifyDataが対応しているハッシュアルゴリズムです。
以前にも書きましたが
SHA-1の利用には問題がある為に、米国では2010年末までに日本でも2013年までに
SHA-2への移行または移行準備を完了させる必要があります。
しかしながら現在のWindows XPではSP3でもまだSHA-2を使ったRSA署名には未対応の状況です。もちろんWindows Vistaなら対応済みなので問題は無いのですが。これをネタにXPからVistaへの移行を進めようと考えているんじゃ無いかと勘ぐりたくもなります(^^;; なおXPのSP3ではIE7が入っているかどうかでエラーコードが異なります。IE6環境では「暗号アルゴリズムが不明です。」だったのが、IE7環境では「無効なアルゴリズムが指定されました。」になります。まあ、あまり違いはありませんが。 [2009-04-17追記] XP環境においてもRSA-SHA2署名が使えるようになっていました。
さて先週あるお客様よりうまく証明書チェーンの構築とCRLの検証がうまく行かない現象のご相談がありました。調べてみたところ署名に使っている証明書は大手V社のものです。メジャーに使われている証明書なのですが、幾つか問題が見つかりました。
1) 中間証明書用CRLのRSA署名にMD5を使っている。
2) ルート証明書のRSA署名にMD2を使っている。
MD5はCRLの署名だし.NET Frameworkでも対応できるので簡単な修正で対応できました。しかしMD2は… .NET Framework のRSACryptoServiceProviderでは既に対応していないようです。X.509証明書のクラス
X509Certificate2では対応しているようなのでMD2/MD4の場合はこちらを使うように修正。本当はエラーにしたいところですがメジャーな証明書なので仕方がありません。しかもこの
MD2を使ったルート証明書の有効期限は2028年まであります。良いのかなぁ…
と言う事でRSACryptoServiceProviderクラスのVerifyDataメソッドで対応しているハッシュアルゴリズムの状況を以下にまとめます。もし私の勘違い等ありましたらご指摘頂けるとありがたいです。
ハッシュアルゴリズム | Windows対応状況 |
---|
SHA-2 | Vistaでは対応済み
XPはSP3+IE7でもまだ未対応 XPも2009年4月時点で対応確認 |
---|
SHA-1 | Vista/XP共にサポートしている |
---|
MD5 | Vista/XP共にサポートしている |
---|
MD2/MD4 | Vista/XP共にサポートしていない |
RSACryptoServiceProviderハッシュアルゴリズム対応状況
それにしても .NET Framework と言うかMicrosoftのセキュリティ系のAPIは過去を切り捨てる方向が多い(しかも新しいアルゴリズムへの対応も遅い)ので色々苦労があります。素直に
OpenSSL等をセキュリティ系のAPIとして利用した方が良いのかもしれないとさえ思ってしまいます。OpenSSLならMD2からSHA-2までバッチリ対応しています。Le-XAdES Libraryの将来のメジャーバージョンアップ時には検討したいとは考えています。技術的な問題は全て分かっているので手間の問題だけなのですが(^^;;
[2009-04-17追記]
XP環境においてもRSA-SHA2署名が使えるようになっていました。アナウンスに気が付かなかったのですがどこかの時点のアップデートで解決したようです。
[2008-05-27追記]
XPのSP3+IE7の環境でSHA-2署名された証明書はちゃんと扱えるようになっていた。証明書をバイナリファイルにして開くと、SP2までは検証エラーだったものがSP3+IE7だとエラーにならない。
でも同じ環境なのにRSACryptoServiceProviderやSignedCms等の.NETのAPIでは相変わらずエラーになる。手抜きしないでちゃんと対応して欲しいなあ… Windows XP Service Pack 3 の概要 (PDF) のMicrosoft 暗号化モジュールの説明を読む限りでもX.509証明書の検証だけ対応したように見えますね。
X.509 証明書の検証で、SHA2 ハッシュ アルゴリズム (SHA256、SHA384、および SHA512) を実装しサポートします。これは、暗号化モジュール rsaenh.dll に追加されました。
おそらくSSL等で困るのでとりあえず証明書だけまず対応したようにも思えます。まあMicrosoftとしてはVistaにしろと言うことなのでしょうが…シクシク(T-T)