La migliore pratica per gestire le chiavi private / segrete in memoria è di usare una memoria fisicamente fuori dalla portata degli attaccanti, come un HSM, Smart Card, Trusted Platform Module o Secure Element.
Il problema è che si tratta di hardware e su macchine moderne (server, cloud, PC, dispositivi mobili), l'hardware affidabile non è facilmente utilizzabile (anche se spesso presente, in particolare vedo un rinnovato interesse per TPM 2.0 in server / cloud).
Le opzioni solo software sono un compromesso. Un ragionevole a
- Confidate nel sistema hardware + OS per mantenere almeno il contenuto della memoria di un processo privato, e mantenere le chiavi private / segrete è un processo separato che fa la crittografia, scambiando messaggi con il processo utilizzando the crypto.
-
E si attaccano agli algoritmi che hanno una protezione intrinseca contro le perdite di canale laterale / processo trasversale, perché gli attacchi su questo fronte sono in abbondanza. Libsodium è una buona scelta da questo punto di vista.
La combinazione almeno fa sì che una perdita di una chiave privata / segreta non sia il risultato di vulnerabilità nel processo che utilizza la crittografia (a causa di errori praticamente inevitabili nello stack di software complesso e ingestibilmente coinvolto in un'applicazione tipica). Uno svantaggio è che l'accesso al processo che esegue la crittografia deve essere gestito in modo sicuro (ad esempio attraverso i diritti di accesso imposti dal sistema operativo), il che aggiunge complessità.
Un modo per vedere le cosiddette "enclaves" è come un'implementazione standardizzata di quel principio di progettazione.
La mia opinione sull'argomento di moltiplicare il segreto contro l'uso di indicatori in un'area centralizzata è che è secondario dal punto di vista della sicurezza, rispetto all'isolamento del processo. Tendo a preferire i puntatori, non tanto perché è leggermente più efficiente, ma perché evita il fastidio di dover azzerare le copie non più in uso per seguire le linee guida che lo richiedono. Considero tale azzeramento come tecnicamente non essenziale (di nuovo, rispetto all'isolamento del processo); ma come usare e > 2 16 in RSA, è qualcosa su cui piegarsi.