c ++ - Sådan slettes en fil, så sletningen er irreversibel?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil slette en følsom fil (ved hjælp af C ++), på en måde, at filen ikke kan genvindes.


Jeg tænkte på blot at omskrive over filen og derefter slette den, er det nok eller skal jeg udføre flere handlinger?

Bedste reference


Her er et interessant papir:


http://www.filesystems.org/docs/secdel/secdel.html[2]


Det adresserer nogle problemer med overskrivning af filer. Især kan du ikke være sikker på, at de nyligt skrevet data blev skrevet til samme sted, og at det er umuligt at genoprette data, der blev overskrevet kun nogle få gange eller endda én gang (på moderne medier).

Andre referencer 1


Det værste tilfælde kan du ikke være sikker på at have gjort det uden fysisk at ødelægge drevet. Det er muligt at du kører på et journaling-filsystem, der holder originalen, når du ændrer en fil for at tillade katastrofeinddrivelse, hvis ændringen er afbrudt af strømsvigt eller hvad som helst. Det kan betyde, at ændring af en fil bevæger den på det fysiske drev, hvilket efterlader den gamle placering uændret.


Desuden holder nogle filsystemer bevidst den gamle version rundt så længe som muligt for at gøre det muligt at få det tilbage. Overvej f.eks. Skyggeopbevaringseksemplarer på Windows, når du ændrer en diskblok, som er en del af en fil, der er en del af et systemgendannelsespunkt, skrives de nye data til en ny blok, og den gamle gemmes.


Der er API'er for at deaktivere skyggeopbevarings kopier for en fil, mappe eller hele disken (ikke kender detaljerne, kan kræve admin privilegium).


En anden gotcha er kompression på filsystemniveau. Hvis du overskriver en fil med tilfældige data, risikerer du, at den bliver mindre komprimerbar og dermed større på disken, selvom den stadig er den samme logiske størrelse. Derfor kan filsystemet muligvis flytte det. Windows garanterer at fortsætte med at bruge de gamle blokke til starten af ​​den nye, større fil eller ej. Hvis du overskriver med nuller, gør du det mere komprimerbart, de nye data kan muligvis ikke nå så langt som slutningen af ​​de gamle data.


Hvis drevet nogensinde er blevet defragged (IIRC Windows i dag gør dette i baggrunden som standard), så påvirker intet du ikke gør til filen nødvendigvis kopier af dataene på tidligere steder.


shred og lignende værktøjer fungerer simpelthen ikke under disse ret almindelige forhold.


Hvis du strækker et punkt, kan du forestille dig et brugerdefineret filsystem, hvor alle ændringer er lagret, sikkerhedskopieret til fremtidig tilbagekaldelse, og kopieres til off-site backup hurtigst muligt. Jeg er ikke bekendt med et sådant system (selvom der selvfølgelig er automatiske sikkerhedskopieringsprogrammer, der løber over filsystemniveauet med den samme grundlæggende effekt), men Windows har bestemt ikke en API til at sige 'OK, du kan slette off-site backup nu ', fordi Windows ikke har nogen anelse om, at det sker.


Dette er endda før du overvejer muligheden for at nogen har et specielt sæt, der kan registrere data på magnetiske diske, selv efter at det er overskrevet med nye data. Meningerne varierer, hvor sandsynlige sådanne angreb virkelig er på moderne diske, som er meget tæt pakket så der er ikke meget plads til rester af gamle værdier. Men det er akademisk, virkelig, da du i de fleste praktiske situationer ikke selv kan være sikker på at overskrive de gamle data uden at afmontere drevet og overskrive hver sektor ved hjælp af værktøjer på lavt niveau.


Åh ja, flashdrev er ikke bedre, de udfører re-mapping af logiske sektorer til fysiske sektorer, lidt som virtuel hukommelse. Dette er sådan, at de kan klare mislykkede sektorer, gøre slidniveauer, den slags ting. Så selv om det er lavt, er det bare fordi du overskriver en bestemt nummereret sektor, at de gamle data ikke kommer frem i en anden nummereret sektor fremover.

Andre referencer 2


0 's og 1' s aren 't virkelig 0' s og 1 's. Resterende magnetisme og andre teknikker (som jeg tvivler på, bliver brugt af de brugere, du forsøger at holde indholdet fra) kan bruges til at gendanne data efter det blev overskrevet.


Kig på dette indlæg, kunne være det du leder efter. [3]


REDIGERE:


For at sikkerhedskopiere min udtalelse:



  En standard måde at gendanne data, der er overskrevet på en hård
  drev er at fange og behandle det analoge signal opnået fra
  drive 's læse/skrivehoved før dette analoge signal bliver digitaliseret.
  Dette analoge signal vil være tæt på et ideelt digitalt signal, men
  Forskelle vil afsløre vigtige oplysninger. Ved beregning af
  ideelt digitalt signal og derefter trække det fra den aktuelle analog
  signal, er det muligt at forstærke signalet tilbage efter
  subtraktion og brug den til at bestemme, hvad der tidligere var skrevet
  på disken.


Andre referencer 3


Du bør overskrive det ved hjælp af nogle tilfældigt genererede byte, ved hjælp af en anstændig tilfældig talgenerator eller kryptografisk funktion, der genererer skrald.


For at være sikker på, at alt overskrives, kan du overskrive det samme hukommelsesområde af den slettede fil flere gange.

Andre referencer 4


Det er bedre at makulere dataene først før overskrivning. Få hukommelsesadressen og bytt placeringerne. Herefter skriver du dataene.