~~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}}