Podpisovanje sporočil CMS
Sporočila v obliki CMS (PKCS #7) podpisujete, na primer za izmenjavo dokumentov, in želite poleg podpisa RSA ali ECDSA priložiti še podpis ML-DSA, ne da bi prejemniki brez znanja o PQ sporočilo zavrnili.
Pregled rešitve
| Element | Namen |
|---|---|
SignedDataExtensions.CreatePqAwareSigner | ustvari CmsSigner za hibridno potrdilo in preveri, ali je njegov ključ ML-DSA na voljo |
SignedCms.ComputeSignature s CryptoMode.Hybrid | podpiše klasično, podpis PQ napove v podpisanem atributu in ga pripne |
SignedCms.CheckSignature s CryptoMode.Hybrid | klasični podpis preveri kot .NET, nato podpis PQ vsakega podpisnika |
Izvedba
Podpisovanje; signerCertificate je hibridno potrdilo s ključem RSA, katerega ključ ML-DSA je v procesu. V
primeru nastane kot samopodpisano:
using var signerRsa = RSA.Create(3072); using var signerCertificate = new CertificateRequest( "CN=Vzorec Računovodstvo", signerRsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1) .CreateSelfSigned(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddYears(1), CryptoMode.Hybrid); var content = new ContentInfo("Račun 2026-0042"u8.ToArray()); var outgoing = new SignedCms(content); outgoing.ComputeSignature(SignedDataExtensions.CreatePqAwareSigner(signerCertificate), CryptoMode.Hybrid); byte[] message = outgoing.Encode();
Preverjanje pri prejemniku:
var incoming = new SignedCms(); incoming.Decode(message); incoming.CheckSignature(verifySignatureOnly: true, CryptoMode.Hybrid); Console.WriteLine("Oba podpisa sta veljavna.");
CheckSignature ne vrne ničesar in pri neveljavnem podpisu sproži CryptographicException, tako kot metoda
.NET.
Opombe
- Klasični prejemniki. Podpis PQ je v nepodpisanem atributu, njegova napoved pa v podpisanem atributu SignerInfo. Prejemniki brez te knjižnice sporočilo preverijo s
CheckSignatureiz .NET kot vsako drugo. - Znižanje zaščite se prepozna. Nepodpisani atribut lahko odstrani vsakdo. Ker napoved ščiti klasični podpis,
CheckSignaturesCryptoMode.Hybridprepozna odstranjen podpis PQ in sprožiCryptographicException. Prav tako zavrne podpis PQ, ustvarjen z drugim ključem od napovedanega. - Brez sprotnega ključa.
CreatePqAwareSignernikoli ne ustvari ključa ML-DSA. Če ključa potrdila v procesu ni, metoda takoj sprožiCryptographicException. Potrdilo takrat naložite iz datoteke PFX ali uporabite preobremenitev, ki sprejme par ključev. - Začasni identifikatorji. Atributi uporabljajo začasne identifikatorje; glejte Oblike postkvantnih delov.
- Preverjanje potrdil.
verifySignatureOnly: truepreveri samo podpise. Zfalse.NET dodatno preveri verigo potrdila podpisnika po pravilih operacijskega sistema, brez dela PQ. Del PQ verige preverite zX509Chain.BuildinCryptoMode.Hybrid.
Sorodne teme
sl/wiki/pqcrypt/lib/how-to/sign-cms-messages.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille