2008-05-26

.NET Framework のRSA署名用ハッシュアルゴリズム  [by miyachi]

[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-2Vistaでは対応済み
XPはSP3+IE7でもまだ未対応
XPも2009年4月時点で対応確認
SHA-1Vista/XP共にサポートしている
MD5Vista/XP共にサポートしている
MD2/MD4Vista/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)
2008-05-26 19:35:10 - miyachi - - [PKI/暗号] -