8. Firme digitali

Scenari: 4
Funzioni FFI: ~30
Stato: Pianificato

Questa categoria comprende tutti gli scenari per la creazione e verifica delle firme digitali. Firma documenti, Code-Signing e timestamp con ML-DSA.


Scenari

ID Scenario Descrizione Complessità Stato
8.1 Firmare documento Firmare PDF, XML, JSON Media Pianificato
8.2 Firmare codice Executables, DLL, Packages Alta Pianificato
8.3 Timestamp Trusted Timestamp (RFC 3161) Alta Pianificato
8.4 Verificare firma Verificare firme Bassa Pianificato

Workflow delle firme

flowchart LR subgraph SIGN["Firmare"] DOC[Documento/Codice] HASH[Calcolare hash] SIG[Creare firma] end subgraph VERIFY["Verificare"] VHASH[Calcolare hash] VSIG[Verificare firma] VCERT[Validare certificato] end DOC --> HASH --> SIG DOC --> VHASH SIG --> VSIG VSIG --> VCERT style SIG fill:#e8f5e9 style VCERT fill:#e3f2fd


Algoritmi di firma

Modalità Algoritmo Lunghezza firma Standard
PostQuantum ML-DSA-65 3309 Bytes NIST FIPS 204
Ibrido ECDSA P-384 + ML-DSA-65 ~3400 Bytes Composite Signatures
Classico ECDSA P-384 96 Bytes NIST FIPS 186-5

Raccomandazione: Per archiviazione a lungo termine utilizzare firme ibride. Entrambe le firme devono essere violate.


Formati delle firme

Formato Applicazione Contiene
CMS/PKCS#7 Generale, E-Mail Firma + Certificato + Timestamp opzionale
XML-DSig SOAP, SAML Firma in struttura XML
JWS REST APIs, JWT JSON Web Signature
Authenticode Windows PE Code-Signing per EXE/DLL

Requisiti specifici per settore

Settore Tipo di firma Requisiti
Sanità Firma qualificata (QES) Conforme eIDAS, gematik
Automotive Code-Signing UNECE R156, Secure Boot
Energia Documento + Timestamp Requisiti audit, NIS2
Industria 4.0 Firma firmware IEC 62443

Guida rapida al codice

Firmare documento

using WvdS.Security.Cryptography.Signatures.Extensions.PQ;
 
// Caricare chiave di firma
var signingKey = ctx.LoadPrivateKey("signing.key.pem", password);
var signingCert = ctx.LoadCertificate("signing.crt.pem");
 
// Firmare documento (CMS/PKCS#7)
byte[] document = File.ReadAllBytes("contratto.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("contratto.pdf.p7s", signature);

Verificare firma

// Caricare firma
byte[] signature = File.ReadAllBytes("contratto.pdf.p7s");
byte[] document = File.ReadAllBytes("contratto.pdf");
 
// Verificare
var result = ctx.VerifySignature(
    data: document,
    signature: signature,
    trustStore: trustStore
);
 
if (result.IsValid)
{
    Console.WriteLine($"Firmato da: {result.SignerCertificate.Subject}");
    Console.WriteLine($"Timestamp: {result.Timestamp}");
}

Categorie correlate

Categoria Relazione
3. Emettere certificati Certificati Code-Signing
5. Validazione Validare certificato di firma
9. Autenticazione Firma come metodo di autenticazione

« ← 7. Crittografia | ↑ Scenari | 9. Autenticazione → »


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

Zuletzt geändert: il 30/01/2026 alle 06:53