Se ho una chiave simmetrica in una matrice byte[]
in C #, come posso cancellarla in modo sicuro?
for (int i = 0; i < array.Length; i++) {
array[i] = 0;
}
È abbastanza buono?
Se ho una chiave simmetrica in una matrice byte[]
in C #, come posso cancellarla in modo sicuro?
for (int i = 0; i < array.Length; i++) {
array[i] = 0;
}
È abbastanza buono?
Sì, generalmente è abbastanza buono.
Se sei preoccupato per la corrente residua, puoi prima randomizzarlo o usare 0xFF e poi 0x00 per riempire l'array. Tuttavia, recuperare la memoria dai chip in sé non è così facile.
Si noti che C # e altre lingue gestite possono mescolare / copiare i percorsi di memoria quando viene eseguita la gestione della memoria (ad esempio compattando la memoria dopo la garbage collection). Minore è il tempo di vita della chiave, meno possibilità rimarrà in memoria da qualche parte.
Un altro problema è che il compilatore (just-in-time) ottimizza la memoria. L'unica cosa contro questo è in realtà utilizzare la memoria:
byte total;
for (int i = 0; i < array.length; i++)
{
total |= array[i];
}
if (total != 0)
{
throw new Exception();
}
questo rende molto più difficile e quindi meno probabile che il codice verrà ottimizzato.
E sì, fare codice sicuro nelle lingue gestite ha molti vantaggi, ma ci sono anche degli svantaggi come quelli spiegati sopra.
Leggi altre domande sui tag .net cryptography programming