7. Crittografia

Scenari: 3
Funzioni FFI: ~25
Stato: Pianificato

Questa categoria comprende tutti gli scenari per la crittografia sicura Post-Quantum. Crittografia ibrida con ML-KEM, Key Encapsulation e crittografia simmetrica.


Scenari

ID Scenario Descrizione Complessità Stato
7.1 Crittografia ibrida ECDH + ML-KEM combinati Alta Pianificato
7.2 Key Encapsulation ML-KEM per scambio chiavi Media Pianificato
7.3 Crittografia file Cifrare file di grandi dimensioni Media Pianificato

Workflow crittografia ibrida

sequenceDiagram participant A as Alice (Mittente) participant B as Bob (Destinatario) Note over B: Generare coppia di chiavi B->>A: Chiave pubblica (ECDH + ML-KEM) Note over A: Key Encapsulation A->>A: ECDH SharedSecret + ML-KEM Ciphertext A->>A: HKDF(ECDH || ML-KEM) → KEK A->>A: AES-GCM Encrypt(KEK, Plaintext) A->>B: ECDH Ephemeral PK + ML-KEM Ciphertext + AES Ciphertext Note over B: Key Decapsulation B->>B: ECDH SharedSecret + ML-KEM Decapsulate B->>B: HKDF(ECDH || ML-KEM) → KEK B->>B: AES-GCM Decrypt(KEK, Ciphertext)


Algoritmi

Componente Algoritmo Livello sicurezza Standard
Key Encapsulation (PQ) ML-KEM-768 192 Bit NIST FIPS 203
Key Exchange (classico) ECDH P-384 192 Bit NIST SP 800-56A
Key Derivation HKDF-SHA384 - RFC 5869
Crittografia simmetrica AES-256-GCM 256 Bit NIST SP 800-38D

Principio ibrido: Entrambi gli algoritmi (ECDH + ML-KEM) devono essere violati per compromettere la crittografia.


Scenari di utilizzo

Applicazione Modalità raccomandata Motivazione
Archiviazione a lungo termine ML-KEM (solo PQ) I dati devono rimanere sicuri 20+ anni
Comunicazione attuale Ibrido Compatibilità + sicurezza futura
Sistemi legacy ECDH (Classico) Nessun supporto PQ

Guida rapida al codice

Crittografia ibrida

using WvdS.Security.Cryptography.Extensions.PQ;
 
// Destinatario: generare coppia di chiavi
using var recipientKey = ctx.GenerateHybridKeyPair(
    classicAlgorithm: EcdhCurve.P384,
    pqAlgorithm: PqAlgorithm.MlKem768
);
var publicKeyPem = recipientKey.ExportPublicKeyPem();
 
// Mittente: cifrare
var (ciphertext, encapsulatedKey) = ctx.HybridEncrypt(
    plaintext: Encoding.UTF8.GetBytes("Messaggio segreto"),
    recipientPublicKey: publicKeyPem
);
 
// Destinatario: decifrare
var plaintext = ctx.HybridDecrypt(
    ciphertext: ciphertext,
    encapsulatedKey: encapsulatedKey,
    privateKey: recipientKey
);

Crittografia file

// Cifrare file di grandi dimensioni (streaming)
await ctx.EncryptFileAsync(
    inputPath: "documento.pdf",
    outputPath: "documento.pdf.enc",
    recipientPublicKey: publicKeyPem,
    mode: CryptoMode.Hybrid
);
 
// Decifrare
await ctx.DecryptFileAsync(
    inputPath: "documento.pdf.enc",
    outputPath: "documento-decrypted.pdf",
    privateKey: recipientKey
);

Categorie correlate

Categoria Relazione
11. Gestione chiavi Gestire coppie di chiavi
10. TLS/mTLS Key Exchange nell'handshake TLS
12. Import/Export Esportare chiavi cifrate

« ← 6. Revoca | ↑ Scenari | 8. Firme digitali → »


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

Zuletzt geändert: il 30/01/2026 alle 07:07