الخوارزمية المتقدمة للمسح الآمن (ASDA)
الجيل التالي من محو البيانات الآمن.

تُمكّن ASDA من محو بيانات عالي الفعالية وقابل للتحقّق مع حد أدنى من استهلاك الموارد. صُمِّمت التمريرات الأربع لتحقيق الكفاءة والشفافية: التحقّق بالقراءة بعد الكتابة وسجلات الحذف يوثّقان كل خطوة. تُصعِّب AES-256 والأرقام العشوائية القوية تشفيريًا إعادة البناء الجنائي بصورة مستدامة. يمكن دمج التنفيذ بسلاسة ضمن العمليات القائمة.
يتجاوز ASDA أيضًا متطلبات NIST SP 800-88 Rev. 1 (Clear / Purge / Destroy). وبحسب وسيط التخزين (HDD/SSD/Flash) قد تكون آليات تطهير إضافية مناسبة – مثل Block Erase أو Cryptographic Erase.
نظرة عامة على التمريرات الأربع للحذف
يُعاد كتابة نطاق البيانات بالكامل بقيمة 0xFF – فتغدو المحتويات الأصلية غير قابلة للتعرّف.
يُشفَّر المحتوى الأصلي الموجود في المخزن المؤقت باستخدام AES-256 ثم يُعاد كتابته – كـ حاجز تشفيري ضد إعادة البناء الجنائي. (يُحتفَظ بالمفتاح مؤقتًا في ذاكرة RAM فقط؛ ثم يُمحى بأمان.)
يُكتب نمط بتّات مُحدد (مثل
10010010 01001001 00100100
)؛ ثم تُجرى عملية التحقّق بالقراءة بعد الكتابة. تُعاد الكتابة فوق أي انحرافات وتُوثَّق في تقرير الحذف. ختامًا، يعيد ASDA الكتابة على النطاق باستخدام أرقام عشوائية قوية تشفيريًا (CSPRNG وفق NIST SP 800-90A).
الوثائق الخاصة بالشيفرة المصدرية:
تُستخدم دالة ASDAErase في الفئة DataShredder لحذف البيانات من الملف بأمان. تتضمن هذه العملية أربع خطوات تُنفذ بشكل تسلسلي.
الخطوة الأولى هي الكتابة فوق جميع البيانات في الملف بنمط معين باستخدام الدالة memset، التي تقوم بضبط كتلة من الذاكرة على قيمة محددة.
في الخطوة الثانية، يتم تشفير البيانات الأصلية باستخدام خوارزمية AES 256-bit، وذلك من خلال الفئة AES التي تحتوي على دالة StartEncryption والتي تستقبل مصفوفة من نوع unsigned char.
الخطوة الثالثة تشمل التحقق من البيانات التي تمت كتابتها، عن طريق قراءتها مرة أخرى ومقارنتها مع البيانات الأصلية باستخدام memcmp. إذا لم تتطابق البيانات، يتم إرجاع الرمز 0xC0000719L (STATUS_CONTEXT_MISMATCH).
أخيرًا، تُستخدم الدالة DoRandomErase للكتابة فوق البيانات بنمط عشوائي. تستقبل هذه الدالة ثلاثة معطيات: حجم البيانات، مؤقت البيانات، وقيمة البايت التي تمثل رقم التكرار.
إذا تم تنفيذ جميع الخطوات بنجاح، تُرجع الدالة ASDAErase القيمة 0. وإذا فشلت أي خطوة، يتم إرجاع رمز الخطأ المناسب.
الشيفرة المصدرية:
long DataShredder::ASDAErase(DWORD size, byte *buf, byte iteration)
{
long status=0;
LARGE_INTEGER nCurrentFilePointer = {0};
this->m_pLowLevelIO->GetFilePointer(&nCurrentFilePointer);
// working buffer
byte *buf1 = (byte*)malloc(size);
// read file content
if(iteration == 0) {
status=this->m_pLowLevelIO->Read(buf1, size, NULL);
this->m_pLowLevelIO->SetFilePointer(&nCurrentFilePointer);
}
// wipe with 0xFF
if(status == 0)
{
memset(buf, 0xFF, size);
status=this->m_pLowLevelIO->Write(buf, size, NULL);
if(!m_noBuffering)
this->m_pLowLevelIO->Flush();
this->m_pLowLevelIO->SetFilePointer(&nCurrentFilePointer);
}
// encrypt original file content
if(status == 0)
{
ULONG K[8];
ULONG seed;
seed=GetTickCount();
K[0]=LowLevel::IO::Random(&seed);
K[1]=LowLevel::IO::Random(&seed);
...
AES aes;
aes.SetParameters(256);
aes.StartEncryption((const unsigned char *)K);
...
}
if(status == 0)
{
byte bData[] = {
0x92, 0x49, 0x24
};
for(DWORD i = 0; i < size; i++)
{
buf[i] = bData[i%3];
}
status=this->m_pLowLevelIO->Write(buf, size, NULL);
...
if(memcmp(buf1, buf, size))
{
status=0xC0000719L;
}
}
if(status == 0)
{
status = this->DoRandomErase(size, buf, 0);
}
free(buf1);
return status;
}
شرح الشيفرة المصدرية:
تعرف هذه الشيفرة دالة تُدعى ASDAErase، تستقبل ثلاث معطيات: عدد صحيح يمثل الحجم، ومؤشر buf لمصفوفة من البايت، وعدد صحيح يمثل رقم التكرار.
تبدأ الدالة بإعلان وتعيين بعض المتغيرات، ثم تقرأ مؤشر الملف الحالي باستخدام GetFilePointer، وتخصص الذاكرة المؤقتة buf1، ثم تقرأ محتوى الملف.
بعدها، تقوم بمسح البيانات من الملف بالقيمة 0xFF، ثم تشفر البيانات الأصلية باستخدام AES بعد إنشاء مفتاح عشوائي وتحديد الإعدادات.
ثم تتم إعادة كتابة البيانات المشفرة إلى الملف، ويُكتب فوقها نمط من القيم 0x92, 0x49, 0x24 بشكل متكرر. ويتم التحقق من الكتابة باستخدام memcmp.
أخيرًا، إذا تمت جميع الخطوات بنجاح، يتم استدعاء دالة DoRandomErase، ثم يتم تحرير الذاكرة وإرجاع حالة التنفيذ.