2009-04-17

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

[2011-04-25 追記] .NET FrameworkによるRSA-SHA2署名(完結編)を投稿しました。

2008-05-26に「.NET Framework のRSA署名用ハッシュアルゴリズム」として、WindowsのXP環境で .NET Framework において、RSA署名を使うクラスRSACryptoServiceProviderの検証メソッドVerifyDataがRSA-SHA2の署名に対応していないと書きました。今日別件もあり.NETのXML署名関連を調査していて、確認の為にRSA-SHA2の署名と検証を試したところ問題なく動作していました!以前は例外になった箇所がきちんと動作しています。以下はC#で試したコードです。

 RSACryptoServiceProvider key
    = new RSACryptoServiceProvider(2048);
 Byte[] target = Encoding.UTF8.GetBytes("TEST DATA");
 Byte[] sign = key.SignData(target, "SHA512");
 bool verify = key.VerifyData(target, "SHA512", sign);
 if (verify)
  Console.WriteLine("RSA-SHA2 Verify: OK : valid.");
 else
  Console.WriteLine("RSA-SHA2 Verify: NG : faild !!!!!");

う~む何時OKになったんでしょう?少なくとも昨年11月の時点では例外になる事を確認していたのですが… まあいずれにせよRSA-SHA2対応してくれたのはありがたいですね。もう少し調査をして何か分かればまた書きましょう。ちなみに過去の記事も更新しました。

なおXML署名のクラスであるSignedXmlではまだRSA-SHA2署名には対応していないようです。

[2009-05-03 追記]
XMLコンソーシアムWeek向けに調査をしていて、以前ある方からご指摘頂いた現象を確認。実はSignDataメソッドをPKCS#12形式の証明書+秘密鍵から取得した鍵を使うと例外になると言うものだ。しかも例外は「無効なアルゴリズムが指定されました。」と言うもの。どこかでSHA-2に対応できていないに違いない(^^; 参考までにXP環境で例外になるソースを張っておきます。

 X509Certificate2 cert =
   new X509Certificate2("testcert.p12", pkcs12Pswd);;
 RSACryptoServiceProvider key =
   (RSACryptoServiceProvider)cert.PrivateKey;
 Byte[] target = Encoding.UTF8.GetBytes("TEST DATA");
 // Exception !!
 Byte[] sign = key.SignData(target, "SHA512");
 bool verify = key.VerifyData(target, "SHA512", sign);
 if (verify)
  Console.WriteLine("RSA-SHA2 Verify: OK : valid.");
 else
  Console.WriteLine("RSA-SHA2 Verify: NG : faild !!!!!");

Windowsくらい複雑なシステムになるとアルゴリズムの追加も大変ですね。

2009-04-17 17:23:34 - miyachi - [PKI/暗号] -

コメント一覧

まちだ のコメント

お久し振りです。
Windows XP SP3(?)からSHA-2対応しているようですね。SPをあてていないXP機が巷に残っている間はSHA-2導入が難しく、認証局側として電子政府系のSHA-2移行の動きと両立させるのに苦労しております。MicrosoftはSHA-1の寿命をかなり長く(2020以降までOKと)想定していますね。
2009-04-27 08:46:01

miyachi のコメント

まちださん、ご無沙汰してます。
はいXP SP3から証明書の検証ではSHA-2対応していてそれは確認してました。
問題はAPIとしてRSA-SHA2署名が対応しているかと言うことでして…
少なくとも昨年の11月時点ではエラーになってました。
また現在でもPKCS#12の秘密鍵を使うとエラーになるとの情報もあったりします。
Windowsも色々なAPIや機能がありますので全部一度に対応は難しいようです。
RSA2048bitとSHA-2対応は日本ではあと数年の猶予はあると思いますが米国では来年ですよね。
ただ実際にはどうなるのか…
地デジと似たような状況になっているような気がします。
Microsoftも本気になれば全APIと機能でRSA-SHA2対応なんかすぐできると思うのですが。
でもその前にXPのSP2やWindows2000が生き残っている状況の方が問題ですよね(^^;
2009-04-27 10:42:30

コメントを書く

このアイテムは閲覧専用です。コメントの投稿、投票はできません。