2017-09-06 21 views
2

私はRSA-SHA1アルゴリズムを使用してXML文書のノードの1つに署名(そして最終的に検証)する必要があります。 w3.org linkRSA-SHA1アルゴリズムを使用してXML要素に署名する方法は?

RSA-SHA1 URI:で指定
http://www.w3.org/2000/09/xmldsig#rsa-sha1

[XMLDSIG-CORE2002]の セクション6.4.2

私はthis exampleを、次の午前、しかし変更する方法を見つけ出すことはできません必要なアルゴリズム。

署名生成は、ここに起こる:

signedXml.ComputeSignature(); 

パラメータでのみオーバーライドKeyedHashAlgorithmを期待:

public void ComputeSignature(KeyedHashAlgorithm macAlg);link

KeyedHashAlgorithmlink)順番にのみHMACを作成可能*とMAC *アルゴリズムであり、RSA-SHA1はありません。

.NETでRSA-SHA1を使用してXMLに署名する最も簡単な方法は何ですか?

編集:

私は鍵を抽出するために、X509証明書を使用しようとしています。証明書の署名アルゴリズムのプロパティはsha1RSAです。

これは私はそれを割り当てるだ方法である:

var signedXml = new SignedXml(xmlDoc); 
... 
signedXml.SigningKey = (RSACryptoServiceProvider)cert.PrivateKey; 
... 
signedXml.ComputeSignature(); 

XML形式マッチが1つを期待結果の署名は、しかしながらdigestsignature値は無効です。

答えて

2

.NET Framework 1.1から.NET Framework 4.7では、signedXml.SigningKeyをRSAキーオブジェクトに設定するだけでRSA-SHA-1を取得できます。

.NET 4.7.1(現在プレビュー中)がインストールされている場合、RSAのデフォルトはhttps://github.com/Microsoft/dotnet/blob/master/releases/net471/dotnet471-changes.mdでRSA-SHA-2-256に変更されます。だから、

、あなたは本当にあなたが

に必要なRSA-SHA-1署名a)はRSAキー

BにsignedXml.SigningKeyを設定したい場合は、()の両方signedXml.ComputeSignature()を呼び出す前に)signedXml.SignedInfo.SignatureMethod = SignedXml.XmlDsigRSASHA1Url

を設定しました

逆に、現在のバージョンでRSA-SHA-1より優れた処理を行う場合は、signedXml.SignedInfo.SignatureMethodをSignedXml.XmlDsigSHA256Url以上に設定してください。


警告の警告:衝突が検出されたため、SHA-1は暗号化目的で破損しているとみなされます。任意のXMLを攻撃するには(この時点で)十分に一般化されていませんが、その時点までは十分に成長する可能性があります。あなたは本当に新しいものでSHA-1を使うべきではありませんし、署名された文書を受け入れるかどうかを決める際には、あなたの署名方法がSHA-1より優れているかどうかを検証することを検討すべきです。

+0

@ user5226582 Ah、SignedXml.SignatureMethodは、書き込み可能なSignedXml.SignatureInfo.SignatureMethodの読み取り専用投影です。答えを修正しました。 – bartonjs

+0

それは、多くのおかげで助けた! – user5226582

関連する問題