لماذا تقوم بالكتابة فوق ملف أكثر من مرة لحذف جميع آثار الملف بشكل آمن؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

توصي برامج المسح مثل Eraser بالكتابة فوق البيانات ربما 36 مرة.

كما أفهم، يتم تخزين كافة البيانات على القرص الصلب كـ 1 أو 0.

إذا تم إجراء الكتابة فوق 1 و0 عشوائيًا مرة واحدة على الملف بأكمله، فلماذا لا يكون ذلك كافيًا لإزالة جميع آثار الملف الأصلي؟

هل كانت مفيدة؟

المحلول

إن بت القرص الصلب الذي كان في السابق 0، ثم تم تغييره إلى "1"، لديه مجال مغناطيسي أضعف قليلاً من ذلك الذي كان في السابق 1 ثم تمت كتابته إلى 1 مرة أخرى.باستخدام المعدات الحساسة، يمكن تمييز المحتويات السابقة لكل لقمة بدرجة معقولة من الدقة، عن طريق قياس الفروق الطفيفة في القوة.لن تكون النتيجة صحيحة تمامًا وستكون هناك أخطاء، ولكن يمكن استرجاع جزء لا بأس به من المحتويات السابقة.

بحلول الوقت الذي تقوم فيه بالخربشة على الأجزاء 35 مرة، سيكون من المستحيل فعليًا تمييز ما كان موجودًا هناك.

يحرر: تحليل حديث يُظهر أنه يمكن استرداد بتة واحدة مكتوبة بدقة تبلغ 56% فقط.إن محاولة استرداد بايت كامل تكون دقيقة بنسبة 0.97% فقط من الوقت.لذلك كنت فقط أكرر أسطورة حضرية.قد تكون الكتابة الفوقية عدة مرات ضرورية عند العمل باستخدام الأقراص المرنة أو بعض الوسائط الأخرى، لكن الأقراص الثابتة لا تحتاج إليها.

نصائح أخرى

يدعي دانييل فينبيرج (خبير اقتصادي في المكتب الوطني الخاص للأبحاث الاقتصادية) أن فرص استعادة البيانات المكتوبة من القرص الصلب الحديث تصل إلى "أسطورة حضرية":

هل تستطيع وكالات الاستخبارات قراءة البيانات المكتوبة؟

لذا من الناحية النظرية، فإن الكتابة فوق الملف مرة واحدة بالأصفار ستكون كافية.

بالمصطلحات التقليدية، عندما يتم كتابة واحد على القرص، تسجل الوسائط واحدًا، وعندما يتم كتابة صفر، تسجل الوسائط صفرًا.ومع ذلك، فإن التأثير الفعلي أقرب إلى الحصول على 0.95 عند استبدال الصفر بواحد، و1.05 عند استبدال الواحد بواحد.يتم إعداد دوائر القرص العادية بحيث تتم قراءة هاتين القيمتين كقيمة واحدة، ولكن باستخدام دوائر متخصصة، من الممكن معرفة ما تحتويه "الطبقات" السابقة.لا يعد استرداد طبقة أو طبقتين على الأقل من البيانات المكتوبة أمرًا صعبًا للغاية من خلال قراءة الإشارة من إلكترونيات الرأس التناظرية باستخدام راسم ذبذبات رقمي عالي الجودة لأخذ العينات، وتنزيل شكل الموجة الذي تم أخذ عينات منه إلى جهاز كمبيوتر، وتحليله في البرنامج لاستعادة الإشارة المسجلة مسبقًا.ما يفعله البرنامج هو إنشاء إشارة قراءة "مثالية" وطرحها مما تمت قراءته بالفعل، تاركًا ما تبقى من الإشارة السابقة كفرق.نظرًا لأن الدوائر التناظرية الموجودة في محرك الأقراص الثابتة التجاري ليست قريبة من جودة الدوائر الموجودة في راسم الذبذبات المستخدم لأخذ عينات من الإشارة، فإن القدرة موجودة على استعادة الكثير من المعلومات الإضافية التي لا تستغلها إلكترونيات القرص الصلب (على الرغم من وجود أحدث تقنيات تشفير القنوات مثل PRML (سيتم شرحها لاحقًا) والتي تتطلب كميات كبيرة من معالجة الإشارات، لم يعد استخدام أدوات بسيطة مثل راسم الذبذبات لاستعادة البيانات مباشرة ممكنًا)

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

تخيل قطاعًا من البيانات على القرص الفعلي.يوجد داخل هذا القطاع نمط مغناطيسي (شريط) يقوم بتشفير أجزاء البيانات المخزنة في القطاع.تتم كتابة هذا النمط بواسطة رأس كتابة يكون ثابتًا إلى حد ما أثناء دوران القرص تحته.الآن، لكي يعمل محرك الأقراص الثابتة لديك بشكل صحيح كجهاز تخزين بيانات في كل مرة تتم فيها كتابة شريط نمط مغناطيسي جديد إلى قطاع ما، يجب عليه إعادة تعيين النمط المغناطيسي في هذا القطاع بما يكفي ليكون قابلاً للقراءة لاحقًا.ومع ذلك، ليس من الضروري أن تمحو كل الأدلة على النمط المغناطيسي السابق تمامًا، بل يجب فقط أن تكون جيدة بما فيه الكفاية (ومع مقدار تصحيح الأخطاء المستخدم اليوم جيدًا بما فيه الكفاية، لا يجب أن يكون جيدًا بما فيه الكفاية).ضع في اعتبارك أن رأس الكتابة لن يسلك دائمًا نفس المسار الذي سلكه التمرير السابق فوق قطاع معين (يمكن أن ينحرف قليلاً إلى اليسار أو اليمين، ويمكن أن يمر فوق القطاع بزاوية طفيفة بطريقة أو بأخرى بسبب للاهتزاز، الخ.)

ما تحصل عليه هو سلسلة من طبقات الأنماط المغناطيسية، مع أقوى نمط يتوافق مع آخر بيانات تمت كتابتها.باستخدام الأجهزة المناسبة، قد يكون من الممكن قراءة هذه الطبقات من الأنماط بتفاصيل كافية لتتمكن من تحديد بعض البيانات في الطبقات الأقدم.

من المفيد أن تكون البيانات رقمية، لأنه بمجرد استخراج البيانات الخاصة بطبقة معينة، يمكنك تحديد النمط المغناطيسي الذي كان سيتم استخدامه لكتابتها على القرص وطرح ذلك من القراءات (ثم القيام بذلك في اليوم التالي) الطبقة، والتي تليها).

السبب وراء رغبتك في ذلك هو لا الأقراص الصلبة، ولكن محركات أقراص الحالة الصلبة.يقومون بإعادة تعيين المجموعات دون إخبار نظام التشغيل أو برامج تشغيل نظام الملفات.يتم ذلك لأغراض تسوية التآكل.لذلك، هناك احتمال كبير جدًا أن ينتقل البت 0 المكتوب إلى مكان مختلف عن البت 1 السابق.تعد إزالة وحدة تحكم SSD وقراءة شرائح الفلاش الأولية في متناول أيدي حتى التجسس على الشركات.ولكن مع 36 عملية استبدال كاملة للقرص، من المحتمل أن يتم تدوير تسوية التآكل عبر جميع الكتل الاحتياطية عدة مرات.

"Remanence" هناك مجموعة جيدة من المراجع فيما يتعلق بالهجمات المحتملة وجدوذها الفعلية على ويكيبيديا.هناك معايير وتوصيات وزارة الدفاع و NIST مذكورة هناك أيضًا.خلاصة القول، من الممكن، ولكن أصبح من الصعب جدًا استعادة البيانات المكتوبة من الوسائط المغناطيسية.ومع ذلك، لا تزال بعض المعايير (الحكومة الأمريكية) تتطلب عمليات استبدال متعددة على الأقل.وفي الوقت نفسه، تستمر الأجزاء الداخلية للجهاز في أن تصبح أكثر تعقيدًا، وحتى بعد الكتابة الفوقية، قد يكون لمحرك الأقراص أو جهاز الحالة الصلبة نسخ غير متوقعة (فكر في المعالجة السيئة للكتل أو تسوية تآكل الفلاش (انظر بيتر جوتمان).لذا فإن القلقين حقًا ما زالوا يدمرون محركات الأقراص.

ما ننظر إليه هنا يسمى "Remanence". في الواقع ، فإن معظم التقنيات التي تكتب مرارًا وتكرارًا (بشكل غير ضار) تفعل أكثر من ما هو ضروري بالفعل.كانت هناك محاولات لاستعادة البيانات من الأقراص التي تم استبدال البيانات بها، وباستثناء بعض الحالات المعملية، لا توجد أمثلة على نجاح هذه التقنية.

عندما نتحدث عن طرق الاسترداد، سترى في المقام الأول أن الفحص المجهري للقوة المغناطيسية هو الحل السحري للتغلب على الكتابة الفوقية غير الرسمية، ولكن حتى هذا لم يحقق أي نجاحات مسجلة ويمكن سحقه على أي حال عن طريق كتابة نمط جيد من البيانات الثنائية عبر المنطقة على الوسائط المغناطيسية الخاصة بك (على عكس 0000000000s البسيطة).

أخيرًا، تم التعرف على عمليات الكتابة الفوقية الـ 36 (في الواقع 35) التي تشير إليها على أنها قديمة وغير ضرورية اليوم حيث تم تصميم التقنية (المعروفة باسم طريقة جوتمان) لاستيعاب طرق التشفير المختلفة - وغير المعروفة عادةً للمستخدم - المستخدمة في التقنيات مثل RLL وMFM والتي من غير المحتمل أن تصادفها بأي حال من الأحوال.حتى إرشادات حكومة الولايات المتحدة تنص على أن الكتابة الفوقية كافية لحذف البيانات، على الرغم من أنها لا تعتبر هذا مقبولًا لأغراض "التطهير" لأغراض إدارية.السبب المقترح لهذا التفاوت هو أن القطاعات "التالفة" يمكن تمييزها على أنها سيئة بواسطة أجهزة القرص ولا يتم الكتابة فوقها بشكل صحيح عندما يحين وقت الكتابة الفوقية، وبالتالي يترك الاحتمال مفتوحًا بأن الفحص البصري للقرص سيكون قادرًا على استرداد هذه الأجزاء المناطق.

في النهاية - الكتابة بنمط 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 عشوائية مرة واحدة لا تكفي إذا كنت بحاجة حقًا إلى مسح شيء ما بشكل آمن.

أود أن أقول إن هذا أكثر من كافٍ بالنسبة للمستخدم العادي، ولكن إذا كنت في بيئة أمنية عالية (حكومية، عسكرية، وما إلى ذلك) فأنت بحاجة إلى مستوى أعلى بكثير من "الحذف" الذي يمكن أن يضمن بشكل فعال ذلك لن تكون هناك بيانات قابلة للاسترداد من محرك الأقراص.

لدى الولايات المتحدة متطلبات محددة فيما يتعلق بمحو المعلومات الحساسة (أي المعلومات الحساسة).معلومات سرية للغاية) هو تدمير محرك الأقراص.في الأساس، تم وضع محركات الأقراص في آلة ذات مغناطيس ضخم ومن شأنها أيضًا تدمير محرك الأقراص فعليًا للتخلص منه.وذلك لأن هناك إمكانية لقراءة المعلومات الموجودة على محرك الأقراص، بل وحتى الكتابة فوقها عدة مرات.

انظر الى هذا: ورقة جوتمان

ما عليك سوى عكس البتات بحيث تتم كتابة 1 إلى كل 0 و0 إلى كل 1 ثم يتم صفرها بالكامل والتي يجب أن تتخلص من أي متغير في المجال المغناطيسي وتستغرق تمريرتين فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top