Barvna shema: Riviera
Trenutno dejavna stran: start » sl » Dokumentacija » Postkvantna kriptografija » WKL.System.Security.Cryptography – pregled » Navodila » Podpisovanje sporočil CMS

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

ElementNamen
SignedDataExtensions.CreatePqAwareSignerustvari CmsSigner za hibridno potrdilo in preveri, ali je njegov ključ ML-DSA na voljo
SignedCms.ComputeSignature s CryptoMode.Hybridpodpiše klasično, podpis PQ napove v podpisanem atributu in ga pripne
SignedCms.CheckSignature s CryptoMode.Hybridklasič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 CheckSignature iz .NET kot vsako drugo.
  • Znižanje zaščite se prepozna. Nepodpisani atribut lahko odstrani vsakdo. Ker napoved ščiti klasični podpis, CheckSignature s CryptoMode.Hybrid prepozna odstranjen podpis PQ in sproži CryptographicException. Prav tako zavrne podpis PQ, ustvarjen z drugim ključem od napovedanega.
  • Brez sprotnega ključa. CreatePqAwareSigner nikoli ne ustvari ključa ML-DSA. Če ključa potrdila v procesu ni, metoda takoj sproži CryptographicException. 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: true preveri samo podpise. Z false .NET dodatno preveri verigo potrdila podpisnika po pravilih operacijskega sistema, brez dela PQ. Del PQ verige preverite z X509Chain.Build in CryptoMode.Hybrid.

Sorodne teme

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