2010-12-30 9 views
7

Eventuali duplicati:
C# - Deleting a file permanentlyCancellazione sicura di un file con metodi semplici?

Ciao,

Sto usando C# .NET Framework 2.0. Ho una domanda relativa alla distruzione dei file.

I miei sistemi operativi di destinazione sono Windows 7, Windows Vista e Windows XP. Forse Windows Server 2003 o 2008, ma suppongo che dovrebbero essere uguali ai primi tre.

Il mio obiettivo è cancellare in modo sicuro un file.

Non credo che l'uso di File.Delete sia sicuro. Ho letto da qualche parte che il sistema operativo contrassegna semplicemente i dati grezzi del disco rigido per la cancellazione quando elimini un file - i dati non vengono cancellati del tutto. Ecco perché esistono così tanti metodi di lavoro per recuperare file apparentemente "cancellati". Leggo anche, ecco perché è molto più utile sovrascrivere il file, perché in realtà i dati sul disco devono essere effettivamente modificati. È vero? Questo è generalmente ciò che è necessario?

Se è così, credo di poter semplicemente scrivere il file completo di 1 e 0 alcune volte.

ho letto: http://www.codeproject.com/KB/files/NShred.aspx http://blogs.computerworld.com/node/5756 Securely deleting a file in C#.NET

+0

Questo dovrebbe fare il trucco: http://www.ameri-shred.com/equipment/industrial/hard-drive.html – Flipster

+2

@FlipScript: lo penseresti, ma anche quello potrebbe non essere abbastanza buono. Un sacco di dati si inserisce in una striscia da 3/4 ". [Il DOD utilizza parole come" incenerire "," polverizzare "e" fondere ".] (Http://www.zdelete.com/dod.htm) –

risposta

5

Ho paura di trovarsi di fronte a un problema complesso. Suggerirei di non provare a risolverlo da solo.

Nota che oltre a garantire una sovrascrittura fisica del file (che può essere su LAN, flash o qualsiasi altra cosa), dovrai occuparti di eventuali cache delle applicazioni, file di sospensione di Windows, file di ripristino di Windows, file di scambio di Windows e tutte le copie o versioni precedenti di questo file (scambia tutto lo spazio vuoto o, peggio, lo spazio che prima conteneva la cache, e potrebbe essere stato assegnato ad altri file da allora) - tutto nell'ordine corretto.

Penso che le tue possibilità possano essere migliori se riesci a memorizzare i tuoi file su un'unità logica (o persino fisica) dedicata, che non viene utilizzata dal sistema operativo o da altre applicazioni e se riuscirai a convincere Windows non scambiare la memoria che si sta utilizzando per tenere il file, mentre nella RAM (usando VirtualLock()). Tuttavia, è necessario cancellare swap, cache, ecc.

Inoltre, è necessario integrare un prodotto come Eraser nell'applicazione (Eraser è software libero e il relativo codice sorgente è rilasciato sotto Licenza pubblica generale GNU).

+1

Riutilizzare una soluzione esistente è un buon consiglio, ma non sceglierei nulla che pretenda di cancellare in modo sicuro singoli file - semplicemente non è possibile. –

+0

@ Ben Voigt: Leggendo il registro delle modifiche di Eraser, puoi vedere quanti sforzi ci hanno messo nel corso degli anni, occupandosi di diverse unità e scenari. Immagino che ci possano essere alcune configurazioni molto speciali in cui la cancellazione sicura è impossibile, tuttavia, probabilmente funzionerà bene per i sistemi standard. –

0

si potrebbe aprire il file e sovrascrivere utilizzando un flusso di cifratura più volte. Sovrascriverlo 7 volte e quindi eliminarlo sembra essere la norma :)

+1

Sovrascrittura il file non sovrascrive necessariamente la sezione del disco che conteneva i vecchi dati –

+0

Né sovrascrive alcuna copia temporanea o memorizzata nella cache che l'applicazione o il sistema operativo potrebbero aver apportato come quelli nel file di scambio ecc. che Lior ha sottolineato. – NotMe

2

Da quello I've read, la soluzione per rendere effettivamente i dati non più visibili sembra sovrascrivere il file con 0 e 1.

+2

Not solo sovrascrivere con zero non cancella i dati oltre il recupero, ma non c'è motivo di pensare che questo sovrascriva effettivamente i dati. Se si trova su una chiavetta, c'è quasi sicuramente un algoritmo di livellamento della scrittura attivo e il blocco su cui hai scritto è diverso da quello che contiene il contenuto precedente.E se non è un flash drive, il file è stato probabilmente spostato dalla deframmentazione, lasciando copie del contenuto in altri blocchi sul disco. –

1

Se il file che stai cancellando in modo sicuro era il tuo inizio, puoi prendere in considerazione la possibilità di crittografarlo in primo luogo. Quindi, anche se viene ripristinato dopo la cancellazione, le informazioni non saranno divulgate (assumendo che tu possa controllare le chiavi).

+1

Non ho menzionato questo perché io pensato che w potrebbe non essere correlato alla domanda. Sì, mi sento al sicuro già dal momento che il file è crittografato (sto scegliendo AES 256 bit utilizzando un algoritmo SHA 512). Tuttavia, l'amico che sto programmando per questo richiede ancora che io faccia tutto il possibile per cancellarlo. Dopo tutta questa ricerca, sembra che dovrei semplicemente chiamare SDelete.exe da SysInternals e lasciare che gestisca tutto il lavoro. – Jason

+0

Pertanto, è necessario concentrarsi sulla distruzione del file di scambio, che potrebbe contenere copie dei dati decrittografati e file contenenti la chiave di decrittografia. Ma, per le ragioni menzionate nei miei commenti, le domande collegate, ecc., Che eseguono il comando di cancellazione sicura del produttore del disco o la distruzione fisica del disco sono gli unici due modi per essere sicuri. –