Barvna shema: Riviera
Trenutno dejavna stran: start » sl » Dokumentacija » Postkvantna kriptografija » WKL.System.Security.Cryptography – pregled » Navodila » Podpisovanje in preverjanje podatkov

Podpisovanje in preverjanje podatkov

Podpisujete zaporedja bajtov, na primer podatke računov ali sporočila lastnega protokola, in podpis preverite na nasprotni strani – kot sestavljeni podpis ML-DSA iz RSA ali ECDSA skupaj z ML-DSA ali kot čisti podpis ML-DSA.

Pregled rešitve

ElementNamen
RSA.SignData, ECDsa.SignData s CryptoMode.Hybridsestavljeni podpis ML-DSA
RSA.VerifyData, ECDsa.VerifyData s CryptoMode.Hybridpreveri oba dela sestavljenega podpisa
SignatureExtensions.SetTransientPqKeydoloči par ključev ML-DSA za trenutno nit
SignatureExtensions.SetTransientPqPublicKeydoloči javni ključ ML-DSA za preverjanje
SignatureExtensions.ClearTransientPqKeyodstrani ključe niti in prepiše zasebni ključ
MLDsaKey.SignData, MLDsaKey.VerifyDatačisti podpis ML-DSA

Izvedba

Sestavljeni podpis z RSA-3072 in ML-DSA-65:

byte[] data = "Račun 2026-0042"u8.ToArray();
using var rsa = RSA.Create(3072);
using var pqKey = MLDsaKey.Generate(MLDsaParameterSet.MLDsa65);
 
SignatureExtensions.SetTransientPqKey(pqKey.ExportSubjectPublicKeyInfo(), pqKey.ExportPkcs8PrivateKey());
byte[] signature;
try
{
    signature = rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1, CryptoMode.Hybrid);
}
finally
{
    SignatureExtensions.ClearTransientPqKey();
}

Preverjanje na nasprotni strani, ki pozna javni ključ RSA in javni ključ ML-DSA:

SignatureExtensions.SetTransientPqPublicKey(pqKey.ExportSubjectPublicKeyInfo());
try
{
    bool valid = rsa.VerifyData(
        data, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1, CryptoMode.Hybrid);
    Console.WriteLine(valid);
}
finally
{
    SignatureExtensions.ClearTransientPqKey();
}

Čisti podpis ML-DSA:

byte[] pqSignature = pqKey.SignData(data);
Console.WriteLine(pqKey.VerifyData(data, pqSignature));

Opombe

  • Samo pari iz osnutka. Sestavljeni ML-DSA pozna fiksne kombinacije nabora parametrov, klasičnega ključa in zgoščevalnega postopka, na primer ML-DSA-65 z RSA-3072 ali RSA-4096 in ML-DSA-65 z ECDSA P-256 ali P-384. Drug par, na primer ML-DSA-65 z RSA-2048, knjižnica zavrne s CryptographicException, ki par navede. Seznam je v Oblike postkvantnih delov.
  • En ključ na nit. Ključi iz SetTransientPqKey veljajo samo za nit, ki jih nastavi. V asinhroni kodi jih nastavite tik pred klicem, brez vmesnega await, in jih v isti niti znova odstranite. Če ključ manjka, SignData sproži CryptographicException.
  • ClearTransientPqKey prepiše vašo tabelo. Knjižnica zasebnega ključa ne kopira. ClearTransientPqKey podano tabelo zapolni z ničlami. Zato podajte kopijo, ki je pozneje ne potrebujete več, kot v primeru rezultat ExportPkcs8PrivateKey.
  • .NET sestavljenega podpisa ne preveri. rsa.VerifyData brez CryptoMode za sestavljeni podpis vrne false, ker ni čisti podpis RSA. Sestavljene podpise zato izmenjujte samo z nasprotnimi stranmi, ki preverjajo sestavljeni ML-DSA.
  • Velikost. Sestavljeni podpis iz ML-DSA-65 in RSA-3072 je dolg 3693 bajtov, čisti podpis ML-DSA-65 pa 3309 bajtov. Temu prilagodite polja v podatkovni zbirki in okvirje protokola.

Sorodne teme

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