~~NOTOC~~ ====== 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 ^ | [[.:dokument_signieren|8.1]] | Firmare documento | Firmare PDF, XML, JSON | Media | Pianificato | | [[.:code_signieren|8.2]] | Firmare codice | Executables, DLL, Packages | Alta | Pianificato | | [[.:timestamp|8.3]] | Timestamp | Trusted Timestamp (RFC 3161) | Alta | Pianificato | | [[.:signatur_verifizieren|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 ^ | [[it:int:pqcrypt:szenarien:zertifikate:start|3. Emettere certificati]] | Certificati Code-Signing | | [[it:int:pqcrypt:szenarien:validierung:start|5. Validazione]] | Validare certificato di firma | | [[it:int:pqcrypt:szenarien:authentifizierung:start|9. Autenticazione]] | Firma come metodo di autenticazione | ---- << [[it:int:pqcrypt:szenarien:verschluesselung:start|← 7. Crittografia]] | [[it:int:pqcrypt:szenarien:start|↑ Scenari]] | [[it:int:pqcrypt:szenarien:authentifizierung:start|9. Autenticazione →]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>categoria firme signing cms timestamp}}