왜 덮어 파일을 두 번 이상 안전하게 삭제 모든의 흔적은 파일입니까?

StackOverflow https://stackoverflow.com/questions/59656

  •  09-06-2019
  •  | 
  •  

문제

지 프로그램을 지우개와 같은 추천 데이터를 덮어 어쩌면 36 시간.

나는 그것을 이해하는 모든 데이터에 저장 하드 드라이브로 1s 또는 0s.

는 경우에는 덮어 임의의 1 과 0 을 수행한 후 전체 파일이 다 되지 않는 이유는 충분히 제거하는 모든의 흔적이는 원본 파일은?

도움이 되었습니까?

해결책

하드 드라이브는 비트가 될하는 데 사용됩 0,다음 변경하는'1',약간 약한 자기장을보다 하나로 사용하는 1 다음 작성을 다시 1.으로 민감한 장비는 이전의 내용이 각 비트를 식별할 수 있는 합리적인 수준의 정확도로 측정하여 약간의 차이에서 힘이 있습니다.결과를 정확하게 일치하는 것은 아니지만 정확하고있을 것이다,하지만 여러 좋은 부분의 이전 내용을 검색할 수 있습니다.

에 의해 시간을 남겼을 통해 35 비트 시간,그것은 효과적으로 불가능한 것을 식별하는 데 사용할 수 있다.

편집: 현대 분석 는 단 하나 덮어 쓰기금으로 복구 할 수 있습니다 만 56%정확도.를 복구하려는 전체 바이트만 정확한 0.97%의 시간입니다.그래서 나는 단지 반복하는 도시다.덮어쓰기는 여러 번 수도 있었을 때 필요한 작업 플로피 디스크 또는 기타 매체이지만,하드 디스크는 필요하지 않습니다.

다른 팁

다니엘 Feenberg(에서 경제학자 프라이빗 국가의 경제 연구소)주장의 기회를 덮어쓰고 있는 데이터 복구에서 현대적인 하드 드라이브 양해"도시의 전설":

할 수 있는 정보 기관을 읽고 덮어 데이터가?

그래서 이론적으로 덮어쓰면 파일이 영 것 충분.

에서 기존의 약관을 때,하나는 디스크에 기록된 매체 레코드나 때로 기록된 미디어를 기록한다.그러나 실제 효과는 가까운을 얻기 0.95 때로 덮어쓰고 하나,그리고 1.05 때 하나 덮어와 하나입니다.일반적인 디스크 회로는 설정하도록 모두 이러한 값을 읽는 것과 같지만,사용하는 전문화된 회로를 사용하는 것이 가능하다 어떤 이전의"layers"포함되어 있습니다.의 회복에 적어도 하나 또는 두 개의 층을 덮어 데이터를 어렵지 않을 수행하여 읽에서 신호를 아날로그 헤드 전자공학은 고품질의 디지털 샘플링 오실로스코프 다운로드,파형 샘플링을 PC,그리고 분석에서 그것을 복구 소프트웨어는 이전에 기록된 신호입니다.소프트웨어가는 생성에는"이상적인"읽는 신호와 그것을 빼는 것에서 실제로 읽으로 떠나,차이 남은 이전의 신호입니다.이후 아날로그 회로에서 상업적인 하드 드라이브 근처의 품질은 회로가 오실로스코프에 사용되는 샘플을 신호,능력이 존재하는 복구하는 많은 추가 정보 없에 의해 악용 하드 드라이브는 전자공학(지만 새로운 채널 코딩과 같은 기술을 PRML(추가 설명서)에 필요한 광범위한 금액의 신호 처리,사용이 간단한 도구와 같은 오실로스코프를 직접 복구하는 데이터가 더 이상 가능)

http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html

상상 부문에 데이터의 물리적 디스크에 있습니다.이 부문은 자기어(스트립)인코딩하는 비트 데이터에 저장된 분야이다.이 패턴에 의해 쓰여 쓰기 머리는 더 많거나 적은 정지되는 동안 디스크 회전 합니다.하기 위해서는 지금,하드 드라이브를 제대로 기능으로 데이터 저장 장치의 각 시간에 새로운 자기 패턴 스트립에 기록하는 부문에 그것을 다시 설정 패턴 자기 분야에서 충분을 읽을 수 있다.그러나,그것은 필요가 없을 완전히 삭제 모든 증거를 이전의 자석 패턴,그것은 단지 충분히 좋은(과 금액의 오류 수정 오늘날 사용되는 충분해야 하지 않는 모든 좋은).는 쓰리지 않을 것이 항상적으로 이전을 통과하여 지정된 분야(그것은 될 수 있는 비뚤어진 작은 왼쪽이나 오른쪽으로,그것은 통과할 수 있었을 통해 부문에서 약간 각 방법 중 하나 또는 다른 때문에 진동,등.)

당신이 무엇을 얻은 층의 시리즈의 자석 패턴으로,강한 패턴에 해당하는 마지막 데이터를 작성합니다.오른쪽 그것은 계측이 가능할 수 있을 읽고 이렇게 계층의 패턴에 충분 한 세부사항을 확인할 수 있는 데이터의 일부에서는 오래된 레이어입니다.

그리는 데 도움이는 데이터는 디지털 방식으로,때문에 한 번 데이터를 추출해 주는 레이어 정확하게 확인할 수 있는 자기는 패턴을 사용되는 것 그것을 쓰는 디스크 및 빼기에서 독서(그리고 그 다음에 레이어 및 다음).

이유는 당신이 하드디스크,하지만 Ssd.그들은 클러스터 매핑을 말하지 않고 OS 또는 파일시스템 드라이버가 있습니다.이렇게 착용에 대한 수평하게 하는 목적이다.그래서 가능성이 매우 높 0 비트 쓰가 다른 장소로 이전보다 1.을 제거하 SSD 컨트롤러의 읽기 원 flash 칩은 범위에서의 기업 간첩.그러나 36 전체 디스크를 덮어,착용 수평하게 하는 가능성이 있을 통해 순환한 모든 예비 품목록 몇 번입니다.

"Data 잔류" 거기에 아주 좋은 설정 참조에 대한 가능한 공격과 그들의 실제적인 타당성에 Wikipedia. 가 있 DoD 및 NIST 기준과 권장 사항을 인용합니다.하단 라인,그것은 가능하지만 되는 이제까지 열심히 덮어 데이터를 복구에서 자기 매체.그럼에도 불구하고,몇 가지(미국 정부)기준이 필요 적어도 여러를 덮어쓰.한편,장치의 내부가 계속하여 더 복잡,그리고 후에도,덮어 쓰기,드라이브 또는 고체 상태의 장치에서 복사본을 예기치 않은(에 대해 생각을 나타냅니다.취급 또는 플래시 착용 수평(베드로를 참조하십시오 Gutmann).그래서 정말 걱정이 여전히 파괴 드라이브입니다.

우리가 무엇을 찾고 여기에 호출"데이터 잔류." 사실,대부분의 기술을 덮어쓰는 반복적으로는(소득)하는 것보다 더 많은 실제로 필요합니다.가 있었 복구를 시도하는 데이터에서 디스크에 있는 데이터를 덮어을 제외하고 몇 가지의 실험실 경우,거기에는 정말 없는 이러한 기술을 성공적으로하고있다.

에 대해 이야기 할 때 우리는 복구 방법,주로 볼 것을 자기 힘을 현미경으로버의 주위에 얻을 캐주얼 덮어쓰지만 이것도가 없음 기록된 성공과될 수 있습에 어떤 경우를 작성하여 좋은 패턴의 바이너리에 걸쳐 데이터 영역에 당신의 자기 매체(반대하는 간단하 0000000000s).

마지막으로,36(실제로 35)을 덮어쓰고 있는 참조로 인식되고 불필요한 오늘날의 기술(으로 알려진 Gutmann 방법)도록 설계되었을 수용할 수 있는 다양한-그리고 일반적으로 알 수없는 사용자가 인코딩에 사용되는 방법 기술은 다음과 같 RLL 및 MFM 는 당신이하지 않으로 실행 가능성이 있습니다.심지어는 우리 정부 지침은 국가의 하나 덮어쓰기는 충분한 데이터를 삭제하지만,관리 목적으로 그들은 이것을 고려하지 않는 허용"삭제".추천 이유로 이러한 차이를 발생시키는"나쁜 것"섹터에 표시 될 수 있습니다 나쁜여 디스크 하드웨어와 제대로 덮어쓰시지는 덮어쓰기,따라서 가능성을 떠나 오픈 visual inspection 의 디스크를 복구할 수 있을 것입니다 이러한 영역입니다.

결국-쓰 1010101010101010 또는 상당히 임의 패턴은 충분한 데이터를 삭제하는 알려진 기술을 복구할 수 없습니다.

나는 항상 이유를 궁금해 가능성이 파일 이전에 저장되는 다른 물리적 위치에서 디스크에서 고려되지 않습니다.

는 경우,예를 들어,조각모음에는 그냥 발생했을 수 있습에 쉽게 파일 복사본을 쉽게 복구할 수 있는 다른 곳에서 디스크에 있습니다.

여기에 Gutmann 삭제 구현에 나가 함께 넣을 수 있습니다.그것을 사용하여 암호화 임의의 번호 생성기를 생산하는 강력한 블록을 임의의 데이터입니다.

public static void DeleteGutmann(string fileName)
{
    var fi = new FileInfo(fileName);

    if (!fi.Exists)
    {
        return;
    }

    const int GutmannPasses = 35;
    var gutmanns = new byte[GutmannPasses][];

    for (var i = 0; i < gutmanns.Length; i++)
    {
        if ((i == 14) || (i == 19) || (i == 25) || (i == 26) || (i == 27))
        {
            continue;
        }

        gutmanns[i] = new byte[fi.Length];
    }

    using (var rnd = new RNGCryptoServiceProvider())
    {
        for (var i = 0L; i < 4; i++)
        {
            rnd.GetBytes(gutmanns[i]);
            rnd.GetBytes(gutmanns[31 + i]);
        }
    }

    for (var i = 0L; i < fi.Length;)
    {
        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x92;
        gutmanns[7][i] = 0x49;
        gutmanns[8][i] = 0x24;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0x6D;
        gutmanns[29][i] = 0xB6;
        gutmanns[30][i++] = 0xDB;
        if (i >= fi.Length)
        {
            continue;
        }

        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x49;
        gutmanns[7][i] = 0x24;
        gutmanns[8][i] = 0x92;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0xB6;
        gutmanns[29][i] = 0xDB;
        gutmanns[30][i++] = 0x6D;
        if (i >= fi.Length)
        {
            continue;
        }

        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x24;
        gutmanns[7][i] = 0x92;
        gutmanns[8][i] = 0x49;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0xDB;
        gutmanns[29][i] = 0x6D;
        gutmanns[30][i++] = 0xB6;
    }

    gutmanns[14] = gutmanns[4];
    gutmanns[19] = gutmanns[5];
    gutmanns[25] = gutmanns[6];
    gutmanns[26] = gutmanns[7];
    gutmanns[27] = gutmanns[8];

    Stream s;

    try
    {
        s = new FileStream(
            fi.FullName,
            FileMode.Open,
            FileAccess.Write,
            FileShare.None,
            (int)fi.Length,
            FileOptions.DeleteOnClose | FileOptions.RandomAccess | FileOptions.WriteThrough);
    }
    catch (UnauthorizedAccessException)
    {
        return;
    }
    catch (IOException)
    {
        return;
    }

    using (s)
    {
        if (!s.CanSeek || !s.CanWrite)
        {
            return;
        }

        for (var i = 0L; i < gutmanns.Length; i++)
        {
            s.Seek(0, SeekOrigin.Begin);
            s.Write(gutmanns[i], 0, gutmanns[i].Length);
            s.Flush();
        }
    }
}

거기에는"디스크리"유형의 애플리케이션 및 서비스할 수 있는 여전히 읽기 데이터를 하드 드라이브 후에도 그것은 형식,그래서 단순히 덮어 임의의 1 과 0 을 하나의 시간이 충분하지 않는 경우에 당신은 정말 필요가 안전하게 삭제 무언가이다.

내가 말할 것에 대한 평균적인 사용자,두 개 이상의 충분,하지만 당신은 높은 수준의 보안 환경(정부,군사,etc.) 그렇다면 훨씬 더 높은 수준의 삭제""수 있는 매우 효과적으로 보장하는 데이터가 없는 것에서 복구 할 수 있습니다.

미국은 요구 사항에 대하여 삭제의 민감한 정보(예:최고의 비밀 정보)을 파괴하는 것입니다.기본적으로 드라이브에 넣고 기계를 가진 거대한 자석은 또한 육체적으로 파괴 드라이브에 대한 처분에 있습니다.이것은 가능성이 있기 때문에 독서의 정보 드라이브에,심지어는 덮어쓰기는 많은 시간.

See this: 구트의 종이

그냥 반전의 비트는 1 기록된 모든 0 0 의 기록되는 모든 1 개의 그로 그 모든 것을 제거한의 어떤 변수에서 자기 분야만 2 전달합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top