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.