3DES non è stato deprecato, né DPAPI. Anche se l'algoritmo 3DES non è l'ideale e non dovrebbe essere usato in nuovi design dove è evitabile, l'attacco migliore contro cui ci imbattiamo è un attacco "meet-in-the-middle" che richiede 512PiB di RAM che corregge gli errori e 2 112 + 2 56 operazioni. Considerando altri possibili attacchi contro DPAPI, ad es. utilizzando il modulo DPAPI mimikatz su un sistema in esecuzione, questo sembra piuttosto stravagante.
CNG-DPAPI (che ora è chiamato DPAPI-NG) sarebbe una scelta migliore per i progetti moderni. Sfortunatamente gli esempi là fuori sono piuttosto scarsi, lasciandoti lavorare molte cose da te. Di seguito è riportato un esempio di alto livello su come implementare l'archiviazione segreta utilizzando DPAPI-NG:
- Chiama
NCryptCreateProtectionDescriptor
con dwFlags
impostato su 0 e pwszDescriptorString
impostato su una stringa descrittore di protezione. Per proteggere i dati in modo che solo l'utente corrente possa accedervi, usa "LOCAL=user"
, e per la protezione a livello di macchina usa "LOCAL=machine"
. È inoltre possibile crittografare su un set di credenziali Web in un contesto ASP, un certificato dall'archivio certificati, un utente di dominio specificando un SID oppure è possibile specificare un descrittore di sicurezza completamente personalizzato utilizzando SSDL.
- Chiama
NCryptProtectSecret
, passando l'handle ottenuto dall'operazione precedente, per crittografare piccole quantità di dati (ad esempio una stringa di credenziali)
- Chiama
NCryptStreamOpenToProtect
se desideri crittografare molti dati. Questo apre uno stream in cui puoi scrivere i dati tramite NCryptStreamUpdate
.
- Chiama
NCryptUnprotectSecret
per decrittografare i dati crittografati con NCryptProtectSecret
.
- Chiama
NCryptStreamOpenToUnprotect
per decrittografare i dati crittografati con NCryptStreamOpenToProtect
. Di nuovo, qui viene utilizzato NCryptStreamUpdate
.
- Se hai utilizzato una delle funzioni del flusso, chiama
NCryptStreamClose
per chiuderle.
- Chiama
NCryptCloseProtectionDescriptor
per chiudere l'handle del descrittore di protezione che hai creato nel primo passaggio.
DPAPI-NG è ancora influenzato da strumenti come mimikatz, ma questa è solo una parte inerente di come funziona la sicurezza del sistema operativo - se un utente malintenzionato sta eseguendo il codice come amministratore, ha vinto.
La vecchia API per DPAPI è molto più semplice, ma la nuova API ha un supporto più completo per diversi scenari di sicurezza come descritto sopra. La crittografia in uso non è certamente l'anello più debole della catena per entrambe le API.