8. Digitalni podpisi

Scenariji: 4
FFI-funkcije: ~30
Status: ⏳ Načrtovano

Ta kategorija zajema vse scenarije za ustvarjanje in verifikacijo digitalnih podpisov. Podpisovanje dokumentov, podpisovanje kode in časovni žigi z ML-DSA.


Scenariji

ID Scenarij Opis Kompleksnost Status
8.1 Podpisovanje dokumentov Podpisovanje PDF, XML, JSON ⭐⭐⭐
8.2 Podpisovanje kode Izvršljive datoteke, DLL-ji, paketi ⭐⭐⭐
8.3 Časovni žig Zaupanja vreden časovni žig (RFC 3161) ⭐⭐⭐⭐
8.4 Verifikacija podpisa Preverjanje podpisov ⭐⭐

Potek dela pri podpisovanju

flowchart LR subgraph SIGN["Podpisovanje"] DOC[Dokument/Koda] HASH[Izračun zgoščene vrednosti] SIG[Ustvarjanje podpisa] end subgraph VERIFY["Verifikacija"] VHASH[Izračun zgoščene vrednosti] VSIG[Preverjanje podpisa] VCERT[Validacija certifikata] end DOC --> HASH --> SIG DOC --> VHASH SIG --> VSIG VSIG --> VCERT style SIG fill:#e8f5e9 style VCERT fill:#e3f2fd


Podpisni algoritmi

Način Algoritem Dolžina podpisa Standard
PostQuantum ML-DSA-65 3309 bajtov NIST FIPS 204
Hibridni ECDSA P-384 + ML-DSA-65 ~3400 bajtov Kompozitni podpisi
Klasični ECDSA P-384 96 bajtov NIST FIPS 186-5

Priporočilo: Za dolgoročno arhiviranje uporabite hibridne podpise. Oba podpisa morata biti prelomljena.


Formati podpisov

Format Uporaba Vsebuje
CMS/PKCS#7 Splošno, e-pošta Podpis + certifikat + opcijski časovni žig
XML-DSig SOAP, SAML Podpis v XML strukturi
JWS REST API-ji, JWT JSON Web Signature
Authenticode Windows PE Podpisovanje kode za EXE/DLL

Panožne zahteve

Panoga Tip podpisa Zahteve
Zdravstvo Kvalificiran podpis (QES) Skladen z eIDAS, gematik
Avtomobilska industrija Podpisovanje kode UNECE R156, Secure Boot
Energetika Dokument + časovni žig Revizijske zahteve, NIS2
Industrija 4.0 Podpisovanje strojne programske opreme IEC 62443

Hiter začetek s kodo

Podpisovanje dokumenta

using WvdS.Security.Cryptography.Signatures.Extensions.PQ;
 
// Nalaganje podpisnega ključa
var signingKey = ctx.LoadPrivateKey("signing.key.pem", password);
var signingCert = ctx.LoadCertificate("signing.crt.pem");
 
// Podpisovanje dokumenta (CMS/PKCS#7)
byte[] document = File.ReadAllBytes("vertrag.pdf");
var signature = ctx.SignData(
    data: document,
    privateKey: signingKey,
    certificate: signingCert,
    mode: CryptoMode.Hybrid,
    options: new SignatureOptions
    {
        IncludeCertificate = true,
        AddTimestamp = true,
        TimestampServer = "http://timestamp.example.com"
    }
);
 
File.WriteAllBytes("vertrag.pdf.p7s", signature);

Verifikacija podpisa

// Nalaganje podpisa
byte[] signature = File.ReadAllBytes("vertrag.pdf.p7s");
byte[] document = File.ReadAllBytes("vertrag.pdf");
 
// Verifikacija
var result = ctx.VerifySignature(
    data: document,
    signature: signature,
    trustStore: trustStore
);
 
if (result.IsValid)
{
    Console.WriteLine($"Podpisal: {result.SignerCertificate.Subject}");
    Console.WriteLine($"Časovni žig: {result.Timestamp}");
}

Povezane kategorije

Kategorija Povezava
3. Izdaja certifikatov Certifikati za podpisovanje kode
5. Validacija Validacija certifikata podpisa
9. Avtentikacija Podpis kot metoda avtentikacije

« ← 7. Šifriranje | ↑ Scenariji | 9. Avtentikacija → »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional