Barvna shema: Svetla
Trenutno dejavna stran: start » sl » Dokumentacija » Postkvantna kriptografija » WKL.System.Security.Cryptography – pregled » Navodila » Podpisovanje dokumentov XML

Podpisovanje dokumentov XML

Dokumente XML, na primer elektronske račune, podpisujete s SignedXml iz .NET in želite poleg podpisa RSA v isti element podpisa dodati še podpis ML-DSA.

Pregled rešitve

ElementNamen
SignedXml.ComputeSignature(pqKey, CryptoMode.Hybrid)podpiše klasično s SigningKey in poleg doda podpis ML-DSA prek istega SignedInfo
SignedXml.CheckSignature(key, pqPublicKey, CryptoMode.Hybrid)preveri oba podpisa
SignedXml.ComputeSignature(pqKey, CryptoMode.PostQuantum)podpiše samo z ML-DSA; potrebuje PostQuantumExemptions.PurePostQuantum

Za SignedXml vključite paket System.Security.Cryptography.Xml, kot je v .NET običajno.

Izvedba

Podpisovanje:

var document = new XmlDocument { PreserveWhitespace = true };
document.LoadXml("<Invoice><Number>2026-0042</Number><Amount currency=\"EUR\">1190.00</Amount></Invoice>");
 
using var xmlRsa = RSA.Create(3072);
using var xmlPq = MLDsaKey.Generate(MLDsaParameterSet.MLDsa65);
 
var signedXml = new SignedXml(document) { SigningKey = xmlRsa };
var reference = new Reference(string.Empty);
reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
signedXml.AddReference(reference);
signedXml.ComputeSignature(xmlPq, CryptoMode.Hybrid);
document.DocumentElement!.AppendChild(document.ImportNode(signedXml.GetXml(), true));
string signedDocument = document.OuterXml;

Preverjanje pri prejemniku, ki pozna javni ključ RSA in javni ključ ML-DSA:

var received = new XmlDocument { PreserveWhitespace = true };
received.LoadXml(signedDocument);
var check = new SignedXml(received);
check.LoadXml((XmlElement)received.GetElementsByTagName("Signature", SignedXml.XmlDsigNamespaceUrl)[0]!);
 
Console.WriteLine(check.CheckSignature(xmlRsa, xmlPq, CryptoMode.Hybrid));

Opombe

  • Klasični preverjevalniki. Podpis ML-DSA je v elementu ds:Object znotraj elementa podpisa. Podpis RSA pokriva samo SignedInfo, transformacija »enveloped signature« pa celoten element podpisa izvzame iz referenc. CheckSignature(xmlRsa) iz .NET zato podpis potrdi kot običajno.
  • Vrnjena vrednost kot v .NET. CheckSignature vrne false, kadar podpis ni pravilen, tudi kadar v načinu Hybrid podpis ML-DSA manjka. CryptographicException sledi samo tam, kjer izjemo sproži tudi .NET, ali kadar dela PQ sploh ni mogoče preveriti, na primer brez OpenSSL.
  • Ohranite presledke. Dokumente nalagajte s PreserveWhitespace = true. Če se presledki med podpisovanjem in preverjanjem spremenijo, nobeden od podpisov ni več pravilen.
  • Začasni identifikatorji. Element, imenski prostor in URI-ji postopkov za ML-DSA so začasni; glejte Oblike postkvantnih delov.

Sorodne teme

sl/wiki/pqcrypt/lib/how-to/sign-xml-documents.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille