Si tengo una clave simétrica en una matriz byte[]
en C #, ¿cómo puedo borrarla de forma segura?
for (int i = 0; i < array.Length; i++) {
array[i] = 0;
}
¿Esto es lo suficientemente bueno?
Si tengo una clave simétrica en una matriz byte[]
en C #, ¿cómo puedo borrarla de forma segura?
for (int i = 0; i < array.Length; i++) {
array[i] = 0;
}
¿Esto es lo suficientemente bueno?
Sí, eso es generalmente lo suficientemente bueno.
Si le preocupa la corriente residual, primero puede aleatorizarla o usar 0xFF y luego 0x00 para completar la matriz. Sin embargo, recuperar la memoria de los chips en sí no es tan fácil.
Tenga en cuenta que C # y otros idiomas administrados pueden mezclar / copiar ubicaciones de la memoria cuando se realiza la administración de la memoria (por ejemplo, compactar la memoria después de la recolección de basura). Cuanto más corto sea el tiempo de vida de la clave, menor será la probabilidad de que permanezca en la memoria en algún lugar.
Otro problema es que el compilador (justo a tiempo) optimiza la memoria. Lo único en contra de eso es realmente usar la memoria:
byte total;
for (int i = 0; i < array.length; i++)
{
total |= array[i];
}
if (total != 0)
{
throw new Exception();
}
esto hace que sea mucho más difícil y, por lo tanto, es menos probable que el código se optimice.
Y sí, hacer una codificación segura en idiomas administrados tiene muchas ventajas, pero también hay desventajas como las explicadas anteriormente.
Lea otras preguntas en las etiquetas cryptography programming .net