Qual è il modo corretto di gestire e rimuovere la chiave simmetrica in C #

3

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?

    
posta adrianobruno 17.05.2018 - 19:50
fonte

1 risposta

1

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.

    
risposta data 14.06.2018 - 12:16
fonte

Leggi altre domande sui tag