2010-11-10 36 views
5

En un proyecto que estoy haciendo, deseo darles a los usuarios la opción de eliminar "de forma segura" un archivo, como sobrescribiéndolo con bits aleatorios o de 0. ¿Hay alguna manera fácil de hacer esto en C# .NET? ¿Y qué tan efectivo sería?Eliminación segura de un archivo en C# .NET

+1

posible duplicado de [Trituración de archivos en .NET] (http://stackoverflow.com/questions/1046635/shredding-files-in-net) –

+0

Ha perdido completamente el punto de mi respuesta, no hay forma de asegúrese de que los datos que intenta escribir en un archivo ocupen realmente la misma ubicación en el disco que los datos que está reemplazando, para que no pueda hacer lo que está pidiendo. – mikerobi

+0

¿Desea eliminar de forma segura los contenidos o desea sobrescribirlos con bits aleatorios? Ellos no son los mismos. Me parece que sobrescribir el archivo no hará lo que usted quiere. –

Respuesta

5

Puede invocar sysinternals SDelete para hacer esto por usted. Esto utiliza la API de desfragmentación para manejar todos esos casos extremos difíciles.

Uso de la API de desfragmentación, SDelete puede determinar con precisión cuál cúmulo en un disco están ocupados por los datos que pertenecen a archivos cifrados comprimido, escasa y.

Si desea volver a empaquetar esa lógica en una forma más conveniente, la API se describe here.

2

No puede eliminar de forma segura un archivo en un sistema de archivos de diario. El único sistema sin diario que aún se usa mucho es fat32. En cualquier otro sistema, la única manera de eliminar de forma segura es triturar todo el disco duro.

EDITAR

La razón segura borrado no está disponible, es que los datos que se utiliza para sobrescribir un archivo no puede ser almacenado en la misma ubicación que los datos que se sobrescribe.

Parece que Microsoft proporciona una herramienta de eliminación segura, pero no parece ser algo que pueda utilizar como reemplazo.

La única buena forma de evitar la recuperación de archivos eliminados, sin destruir el disco, sería encriptar el archivo antes de escribirlo en el disco.

+0

Gracias por la respuesta, he reformulado una pregunta un poco . No importa si el archivo está _totalmente_ borrado, lo único que importa es que utilizo métodos similares a un programa de borrado de archivos estándar de pantano – Chris

+0

@Andrey, no entiendo lo que quiere decir – mikerobi

+0

si el archivo es, digamos, 100mb en tamaño, es completamente impráctico mantener todos los archivos cifrados y originales en la RAM ... – DividedByZero

-1

Primero intento simplemente abrir el archivo y sobrescribir su contenido como normalmente lo haría. Bastante trivial en C#, ni siquiera me molestaré en escribirlo. Sin embargo, no sé cuán seguro sería eso. Por un lado, estoy bastante seguro de que no funcionaría en las unidades de memoria flash y SSD que utilizan algoritmos sofisticados para proporcionar nivelación de desgaste. No sé qué funcionaría allí, tal vez tendría que hacerse a nivel del conductor, quizás sería imposible en absoluto. En las unidades normales, simplemente no sé qué haría Windows. Quizás retendría datos viejos también.

+1

No funcionará en ningún archivo de diario, independientemente del tipo de unidad (para una explicación, consulte mi respuesta). – mikerobi

+0

@mikerobi - Lo sé, pero aparte de eso, esta es la segunda mejor opción. Al menos las utilidades típicas de recuperación serán engañadas. –

1

No sería seguro en absoluto. En su lugar, es posible que desee ver soluciones alternativas como el cifrado.

Una solución sería encriptar el contenido del archivo de datos. Se usará una nueva clave cada vez que se actualice el archivo. Cuando desee "borrar de forma segura" los datos, simplemente "pierda" la clave de cifrado y elimine el archivo. El archivo seguirá estando físicamente en el disco, pero sin la recuperación de la clave de cifrado sería imposible.

Aquí es una explicación más detallada de por qué "seguro" sobrescribe de archivos es la falta de seguridad:

Sin una herramienta de bajo nivel (fuera de tiempo de ejecución de .NET) no tiene acceso a la ubicación del disco físico. Tome una secuencia de archivos en NTFS, cuando "abre un archivo para acceso de escritura" no tiene garantía de que la copia "actualizada" (en este caso, la versión 101010 aleatoria) se almacene en el mismo lugar (sobrescribiendo así el archivo original).De hecho, la mayoría de las veces esto es lo que sucede:

1) El archivo x.dat se almacena comenzando en el cluster 8493489 2) Abre el archivo x.dat para acceso de escritura. Lo que le devuelve el sistema operativo es simplemente un puntero al flujo de archivos abstraído no solo por el sistema operativo sino también por el sistema de archivos subyacente y los controladores de dispositivo (RAID de hardware por ejemplo) y, en ocasiones, el disco físico (SSD). Actualiza los contenidos del archivo con0s aleatorios y cierra el filestream.

3) Es probable que el SO (y probablemente) escriba el nuevo archivo en otro clúster (por ejemplo, el clúster 4384939). A continuación, simplemente actualizará el archivo MFT que indica que el archivo x ahora está almacenado en 4384939.

Para el usuario final, parece que solo existe una copia del archivo y ahora contiene datos aleatorios, pero los datos originales aún existen en el disco.

En su lugar, debe considerar encriptar el contenido del archivo con una clave diferente cada vez que se guarde el archivo. Cuando el usuario quiere que el archivo sea "eliminado", elimine la clave y el archivo. El archivo físico puede permanecer pero sin la recuperación de la clave de cifrado sería imposible.

+0

el archivo no se puede recuperar sin la clave, por lo que básicamente se pierde ¿no? incorrecto. la clave también se puede recuperar de la misma manera que el archivo, a menos que uno sepa exactamente lo que está haciendo – DividedByZero

Cuestiones relacionadas