روش‌های پاکسازی داده‌ها در استاندارد US DoD 5220 22 M

استاندارد US DoD 5220.22-M که به آن "مقررات امنیتی ملی صنایع دفاعی" نیز گفته می‌شود، یک روش رسمی برای حذف داده‌ها از دستگاه‌های ذخیره‌سازی داده است. این استا...

انتشار: , زمان مطالعه: 13 دقیقه
روش‌های پاکسازی داده‌ها در استاندارد US DoD 5220.22-M
دسته بندی: امنیت سایبری تعداد بازدید: 180

روش‌های پاکسازی داده‌ها در استاندارد US DoD 5220.22-M

استاندارد US DoD 5220.22-M که به آن "مقررات امنیتی ملی صنایع دفاعی" نیز گفته می‌شود، یک روش رسمی برای حذف داده‌ها از دستگاه‌های ذخیره‌سازی داده است. این استاندارد توسط وزارت دفاع ایالات متحده (Department of Defense یا DoD) تدوین شده و برای اطمینان از حذف کامل و غیرقابل بازیابی داده‌ها از هارد دیسک‌ها و سایر دستگاه‌های ذخیره‌سازی مورد استفاده قرار می‌گیرد.

روش‌های پاکسازی داده‌ها در استاندارد US DoD 5220.22-M

این استاندارد چندین روش مختلف برای پاکسازی داده‌ها ارائه می‌دهد که در زیر به توضیح برخی از این روش‌ها پرداخته شده است:

  1. روش سه‌پاسه (3-Pass Overwrite):

    • پاس اول: نوشتن یک کاراکتر ثابت (مثلاً صفر).
    • پاس دوم: نوشتن کاراکتر مکمل (مثلاً یک).
    • پاس سوم: نوشتن یک کاراکتر تصادفی.
  2. روش هفت‌پاسه (7-Pass Overwrite):

    • پاس اول: نوشتن کاراکتر ثابت (مثلاً صفر).
    • پاس دوم: نوشتن کاراکتر ثابت دیگر (مثلاً یک).
    • پاس سوم: نوشتن یک کاراکتر تصادفی.
    • پاس چهارم: نوشتن کاراکتر ثابت (مثلاً صفر).
    • پاس پنجم: نوشتن کاراکتر ثابت دیگر (مثلاً یک).
    • پاس ششم: نوشتن یک کاراکتر تصادفی.
    • پاس هفتم: نوشتن یک کاراکتر تصادفی.
  3. روش N-Pass Overwrite:

    • نوشتن داده‌های تصادفی بر روی داده‌های موجود به تعداد پاس‌های مشخص شده.

اهمیت استاندارد US DoD 5220.22-M

این استاندارد به‌ویژه در محیط‌های نظامی و امنیتی بسیار اهمیت دارد، زیرا اطمینان حاصل می‌کند که اطلاعات حساس و محرمانه به هیچ وجه قابل بازیابی نیستند. استفاده از این روش‌ها باعث می‌شود تا اطلاعات حذف شده با روش‌های پیشرفته بازیابی داده قابل بازیابی نباشد.

موارد استفاده

استاندارد US DoD 5220.22-M به طور گسترده‌ای در سازمان‌های دولتی، نظامی، و همچنین شرکت‌های خصوصی که با اطلاعات حساس سر و کار دارند، استفاده می‌شود. این استاندارد یکی از استانداردهای مورد اعتماد در زمینه امنیت داده و حذف امن اطلاعات است.

استفاده از این استاندارد می‌تواند تضمین کند که داده‌های حساس شما به طور کامل و غیرقابل برگشت از دستگاه‌های ذخیره‌سازی حذف شوند.

نمونه کد پیاده‌سازی US DoD 5220.22-M در سی‌شارپ

برای پیاده‌سازی استاندارد US DoD 5220.22-M با استفاده از زبان برنامه‌نویسی سی‌شارپ، می‌توانیم از توابعی برای نوشتن داده‌های مختلف بر روی فایل‌های موجود استفاده کنیم. در زیر مثالی از یک برنامه سی‌شارپ ارائه شده است که روش سه‌پاسه (3-Pass Overwrite) را پیاده‌سازی می‌کند:

using System;
using System.IO;
using System.Security.Cryptography;
// Programmer : Ebrahim Shafiei (EbraSha)
class Program
{
    static void Main(string[] args)
    {
        string filePath = "yourfile.txt";
        OverwriteFileDoD5220_22M(filePath);
    }

    static void OverwriteFileDoD5220_22M(string filePath)
    {
        if (!File.Exists(filePath))
        {
            Console.WriteLine("File does not exist.");
            return;
        }

        long fileSize = new FileInfo(filePath).Length;

        // Pass 1: Overwrite with 0x00
        OverwriteFile(filePath, fileSize, 0x00);

        // Pass 2: Overwrite with 0xFF
        OverwriteFile(filePath, fileSize, 0xFF);

        // Pass 3: Overwrite with random bytes
        OverwriteFileWithRandom(filePath, fileSize);

        // Optionally, delete the file after overwriting
        // File.Delete(filePath);
        
        Console.WriteLine("File overwritten using DoD 5220.22-M (3-Pass) standard.");
    }

    static void OverwriteFile(string filePath, long fileSize, byte overwriteByte)
    {
        byte[] data = new byte[fileSize];
        for (long i = 0; i < fileSize; i++)
        {
            data[i] = overwriteByte;
        }

        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Write))
        {
            fs.Write(data, 0, data.Length);
        }
    }

    static void OverwriteFileWithRandom(string filePath, long fileSize)
    {
        byte[] data = new byte[fileSize];
        using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
        {
            rng.GetBytes(data);
        }

        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Write))
        {
            fs.Write(data, 0, data.Length);
        }
    }
}

توضیحات کد

  1. پاس اول: در روش OverwriteFile، فایل را با بایت‌های 0x00 بازنویسی می‌کنیم.
  2. پاس دوم: در همان روش، فایل را با بایت‌های 0xFF بازنویسی می‌کنیم.
  3. پاس سوم: در روش OverwriteFileWithRandom، فایل را با بایت‌های تصادفی بازنویسی می‌کنیم.

این کد سه‌پاسه ساده از استاندارد US DoD 5220.22-M را پیاده‌سازی می‌کند. می‌توانید این کد را به‌صورت کتابخانه‌ای گسترش داده و یا روش‌های بیشتری را اضافه کنید. اگر نیاز به تعداد پاس‌های بیشتر داشتید، می‌توانید به راحتی این روش‌ها را در کد خود اضافه کنید.

نمونه کد پیاده‌سازی روش 7-پاسه در سی‌شارپ

برای پیاده‌سازی روش 7-پاسه (7-Pass Overwrite) بر اساس استاندارد US DoD 5220.22-M، می‌توانیم کد را به گونه‌ای تغییر دهیم که به جای سه پاس، هفت پاس انجام شود. در این روش، فایل به ترتیب با بایت‌های ثابت و بایت‌های تصادفی بازنویسی می‌شود.

using System;
using System.IO;
using System.Security.Cryptography;
// Programmer : Ebrahim Shafiei (EbraSha)
class Program
{
    static void Main(string[] args)
    {
        string filePath = "yourfile.txt";
        OverwriteFileDoD5220_22M(filePath);
    }

    static void OverwriteFileDoD5220_22M(string filePath)
    {
        if (!File.Exists(filePath))
        {
            Console.WriteLine("File does not exist.");
            return;
        }

        long fileSize = new FileInfo(filePath).Length;

        // Pass 1: Overwrite with 0x00
        OverwriteFile(filePath, fileSize, 0x00);

        // Pass 2: Overwrite with 0xFF
        OverwriteFile(filePath, fileSize, 0xFF);

        // Pass 3: Overwrite with random bytes
        OverwriteFileWithRandom(filePath, fileSize);

        // Pass 4: Overwrite with 0x00
        OverwriteFile(filePath, fileSize, 0x00);

        // Pass 5: Overwrite with 0xFF
        OverwriteFile(filePath, fileSize, 0xFF);

        // Pass 6: Overwrite with random bytes
        OverwriteFileWithRandom(filePath, fileSize);

        // Pass 7: Overwrite with random bytes
        OverwriteFileWithRandom(filePath, fileSize);

        // Optionally, delete the file after overwriting
        // File.Delete(filePath);
        
        Console.WriteLine("File overwritten using DoD 5220.22-M (7-Pass) standard.");
    }

    static void OverwriteFile(string filePath, long fileSize, byte overwriteByte)
    {
        byte[] data = new byte[fileSize];
        for (long i = 0; i < fileSize; i++)
        {
            data[i] = overwriteByte;
        }

        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Write))
        {
            fs.Write(data, 0, data.Length);
        }
    }

    static void OverwriteFileWithRandom(string filePath, long fileSize)
    {
        byte[] data = new byte[fileSize];
        using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
        {
            rng.GetBytes(data);
        }

        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Write))
        {
            fs.Write(data, 0, data.Length);
        }
    }
}

توضیحات کد

  1. پاس اول: بازنویسی فایل با بایت‌های 0x00.
  2. پاس دوم: بازنویسی فایل با بایت‌های 0xFF.
  3. پاس سوم: بازنویسی فایل با بایت‌های تصادفی.
  4. پاس چهارم: بازنویسی فایل با بایت‌های 0x00.
  5. پاس پنجم: بازنویسی فایل با بایت‌های 0xFF.
  6. پاس ششم: بازنویسی فایل با بایت‌های تصادفی.
  7. پاس هفتم: بازنویسی فایل با بایت‌های تصادفی.

این کد فایل را به صورت 7-پاسه بازنویسی می‌کند تا اطمینان حاصل شود که داده‌های قبلی به طور کامل حذف شده و قابل بازیابی نیستند.

نمونه کد  پیاده‌سازی پاکسازی فضای خالی یک درایو با استاندارد US DoD 5220.22-M در سی‌شارپ

یکی از  موارد بسیار مهم حذف فضای خالی برای زمانی است که شما می خواهید فایل هایی که به صورت عادی حذف کرده اید باز رکاوری نشود ، اگر بخواهید این کار را با استفاده از زبان برنامه‌نویسی سی‌شارپ پیاده‌سازی کنید، می‌توانید به شکل زیر عمل کنید:

مراحل پیاده‌سازی:

  1. شناسایی فضای خالی: باید فضای خالی موجود در دیسک را شناسایی کرده و بر روی آن بنویسید. این کار معمولاً به‌وسیله‌ی ایجاد فایل‌های موقتی تا پر شدن کامل فضای خالی انجام می‌شود.
  2. بازنویسی داده‌ها: بازنویسی فضای خالی با استفاده از روش‌های مختلف مانند 0x00، 0xFF و داده‌های تصادفی.
using System;
using System.IO;
using System.Security.Cryptography;
// Programmer : Ebrahim Shafiei (EbraSha)
class Program
{
    static void Main(string[] args)
    {
        string driveLetter = "C"; // Change to the desired drive letter
        WipeFreeSpace(driveLetter);
    }

    static void WipeFreeSpace(string driveLetter)
    {
        DriveInfo drive = new DriveInfo(driveLetter);
        if (!drive.IsReady || drive.DriveType != DriveType.Fixed)
        {
            Console.WriteLine("Drive is not ready or is not a fixed drive.");
            return;
        }

        long freeSpace = drive.TotalFreeSpace;
        string tempFilePath = Path.Combine(drive.RootDirectory.FullName, "tempWipeFile.dat");

        try
        {
            // Pass 1: Overwrite with 0x00
            OverwriteFile(tempFilePath, freeSpace, 0x00);

            // Pass 2: Overwrite with 0xFF
            OverwriteFile(tempFilePath, freeSpace, 0xFF);

            // Pass 3: Overwrite with random bytes
            OverwriteFileWithRandom(tempFilePath, freeSpace);

            // Pass 4: Overwrite with 0x00
            OverwriteFile(tempFilePath, freeSpace, 0x00);

            // Pass 5: Overwrite with 0xFF
            OverwriteFile(tempFilePath, freeSpace, 0xFF);

            // Pass 6: Overwrite with random bytes
            OverwriteFileWithRandom(tempFilePath, freeSpace);

            // Pass 7: Overwrite with random bytes
            OverwriteFileWithRandom(tempFilePath, freeSpace);

            // Delete the temporary file
            File.Delete(tempFilePath);

            Console.WriteLine("Free space wiped using DoD 5220.22-M (7-Pass) standard.");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }

    static void OverwriteFile(string filePath, long fileSize, byte overwriteByte)
    {
        using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
        {
            byte[] data = new byte[1024 * 1024]; // 1MB buffer
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = overwriteByte;
            }

            long totalWritten = 0;
            while (totalWritten < fileSize)
            {
                long remaining = fileSize - totalWritten;
                int toWrite = remaining < data.Length ? (int)remaining : data.Length;
                fs.Write(data, 0, toWrite);
                totalWritten += toWrite;
            }
        }
    }

    static void OverwriteFileWithRandom(string filePath, long fileSize)
    {
        using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
        {
            byte[] data = new byte[1024 * 1024]; // 1MB buffer
            using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
            {
                long totalWritten = 0;
                while (totalWritten < fileSize)
                {
                    rng.GetBytes(data);
                    long remaining = fileSize - totalWritten;
                    int toWrite = remaining < data.Length ? (int)remaining : data.Length;
                    fs.Write(data, 0, toWrite);
                    totalWritten += toWrite;
                }
            }
        }
    }
}

توضیحات کد

  1. شناسایی فضای خالی: از کلاس DriveInfo برای شناسایی فضای خالی استفاده می‌شود.
  2. ایجاد فایل موقتی: فایل موقتی در ریشه درایو ایجاد می‌شود و با استفاده از بایت‌های 0x00، 0xFF و داده‌های تصادفی پر می‌شود.
  3. حذف فایل موقتی: بعد از بازنویسی، فایل موقتی حذف می‌شود تا فضای خالی پاکسازی شود.

این روش به شما اجازه می‌دهد تا فضای خالی دیسک را به‌صورت امن و غیر قابل بازیابی پاکسازی کنید. البته در نظر داشته باشید که استفاده از این روش نیاز به فضای خالی کافی در دیسک دارد و ممکن است زمان‌بر باشد.


دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)