التجزئة (Hashing) هي عملية تحويل بيانات ذات حجم عشوائي إلى سلسلة ثابتة الطول، تُستخدم للتحقق من السلامة والتخزين الآمن لكلمات المرور. وفقاً لمشروع أمان تطبيقات الويب المفتوحة (OWASP، 2025)، فإن الاستخدام الصحيح لدوال التجزئة يمنع ما يصل إلى 70% من الثغرات الأمنية المتعلقة بتسرب بيانات الاعتماد. تشكل التجزئات cryptography أساس التوقيعات الرقمية وتقنيات blockchain والتحكم في الإصدارات.
الملامح الرئيسية
التجزئة هي عملية حساب دالة تجزئة تحول مجموعة عشوائية من بيانات الإدخال إلى سلسلة بتات ثابتة الطول تسمى الملخص أو قيمة التجزئة. على عكس التشفير، التجزئة هي عملية أحادية الاتجاه: من المستحيل استعادة البيانات الأصلية من التجزئة.
دوال التجزئة cryptography تمتلك أربع خصائص إلزامية: الحتمية (نفس الإدخال يعطي دائماً نفس التجزئة)، اللارجعة (من غير الممكن حسابياً استعادة الإدخال من التجزئة)، تأثير الانهيار الجليدي (تغيير بت واحد في الإدخال يغير في المتوسط نصف بتات التجزئة) ومقاومة التصادم (من غير الممكن حسابياً إيجاد مدخلين مختلفين لهما نفس التجزئة).
من المهم فهم الفرق بين التجزئة والتشفير. التشفير هو عملية ثنائية الاتجاه: يمكن فك تشفير البيانات المشفرة باستخدام مفتاح. التجزئة هي عملية أحادية الاتجاه: بعد التحويل، لا يمكن استعادة البيانات. هذه الخاصية تجعل التجزئة مثالية لتخزين كلمات المرور: النظام يخزن التجزئة فقط، وحتى إذا تم تسرب قاعدة البيانات، تبقى كلمات المرور محمية.
ليست كل دوال التجزئة مناسبة بنفس القدر لمهام الأمان. التقسيم إلى فئات cryptography وغير cryptography مهم بشكل حاسم عند اختيار خوارزمية لمهمة محددة في تطوير التطبيقات المحمولة.
هذه الدوال بطيئة ومعقدة عن قصد لصعوبة هجمات القوة العمياء. يجب أن تكون مقاومة للتصادمات وهجمات ما قبل الصورة. عائلة SHA-2 (SHA-224، SHA-256، SHA-384، SHA-512) معتمدة من NIST وموصى بها للاستخدام في الأنظمة الحكومية. لتجزئة كلمات المرور، تُستخدم بالإضافة إلى ذلك خوارزميات bcrypt و scrypt و Argon2 مع تعقيد قابل للتعديل.
هذه الدوال محسّنة للسرعة وليس للأمان. أمثلة: CityHash، MurmurHash، xxHash. تُستخدم في جداول التجزئة وإزالة تكرار البيانات والمجاميع الاختبارية للتحقق السريع من سلامة البيانات غير الحرجة. من المهم عدم استخدامها أبداً لتخزين كلمات المرور أو التحقق من التوقيعات الرقمية — سرعتها العالية تجعلها عرضة لهجمات القوة العمياء.
| النوع | أمثلة | مجال التطبيق |
|---|---|---|
| Cryptography | SHA-256، SHA-3، bcrypt | كلمات المرور، التوقيعات، TLS |
| غير cryptography | MurmurHash، xxHash | جداول التجزئة، التخزين المؤقت |
| KDF لكلمات المرور | bcrypt، scrypt، Argon2 | تخزين كلمات المرور |
دعنا نستعرض خوارزميات التجزئة الأكثر شيوعاً المستخدمة في تطوير التطبيقات المحمولة الحديثة. لكل منها نقاط قوة وضعف.
SHA-256 هو رمز التشفير الحديث، موصى به من NIST كجزء من معيار FIPS 180-4. تنتج الخوارزمية ملخصاً بطول 256 بت وهي مكون أساسي لبروتوكولات TLS وشبكات blockchain وأنظمة التحكم في الإصدارات. وفقاً لتقرير NCC Group (2025)، يُستخدم SHA-256 في 96% من شهادات TLS لتوقيع شفافية الشهادة.
SHA-3 هو أحدث عائلة من دوال التجزئة، تم توحيدها بواسطة NIST في 2015 كـ FIPS 202. على عكس SHA-2 المبني على هيكل Merkle–Damgård، يعتمد SHA-3 على بناء Keccak مختلف مع دالة الإسفنج (sponge function). هذا يجعل SHA-3 مقاوماً للهجمات التي قد تظهر ضد SHA-2 في المستقبل. لمطوري التطبيقات المحمولة، SHA-3 متاح من خلال المكتبات cryptography القياسية بدءاً من Android 7.0 و iOS 13.
import java.security.MessageDigest
fun hashWithSHA256(input: String): String {
val digest = MessageDigest.getInstance("SHA-256")
val hashBytes = digest.digest(input.toByteArray())
return hashBytes.joinToString("") { String.format("%02x", it) }
}
التجزئات cryptography ذات الأغراض العامة غير كافية لتخزين كلمات المرور — إنها سريعة جداً. bcrypt مصمم خصيصاً لتجزئة كلمات المرور: يتضمن ملحاً ومعامل تكلفة ينظم وقت الحساب. مضاعفة التكلفة تضاعف وقت التجزئة، مما يجعل القوة العمياء غير فعالة حتى على الأجهزة القوية.
import at.favre.lib.crypto.bcrypt.BCrypt
fun hashPassword(password: String): String {
return BCrypt.create()
.hashToString(BCrypt.MIN_COST, password.toCharArray())
}
fun verifyPassword(password: String, hash: String): Boolean {
val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
return result.verified
}
Argon2 هو الفائز في مسابقة تجزئة كلمات المرور (Password Hashing Competition، 2015)، موصى به من OWASP كأفضل خيار لتجزئة كلمات المرور. Argon2id هو المتغير المقاوم لهجمات القنوات الجانبية وهجمات مقايضة الوقت بالذاكرة. على عكس bcrypt، يسمح Argon2 بتكوين منفصل لوقت التنفيذ واستخدام الذاكرة ودرجة التوازي، مما يوفر حماية مرنة ضد أنواع مختلفة من الهجمات.
التجزئة تحل العديد من المهام العملية في تطوير التطبيقات المحمولة — من مصادقة المستخدمين إلى التحقق من سلامة الملفات التي تم تنزيلها. دعنا نفحص حالات الاستخدام الرئيسية.
حالة الاستخدام الرئيسية هي التخزين الآمن لكلمات المرور في جانب الخادم. أثناء التسجيل، يرسل التطبيق كلمة المرور إلى الخادم، حيث يتم تجزئتها مع ملح باستخدام bcrypt أو Argon2 وتخزينها في قاعدة البيانات. أثناء تسجيل الدخول، يقوم الخادم بتجزئة كلمة المرور المدخلة ومقارنتها مع التجزئة المخزنة. يوصي OWASP باستخدام Argon2id مع المعايير: الوقت ثانيتان، الذاكرة 64 ميجابايت، درجة التوازي 4.
عند تنزيل ملفات كبيرة مثل حزم OBB أو تحديثات المحتوى، يمكن لتطبيقات المحمول التحقق من سلامتها عبر التجزئة. ينشر الخادم تجزئة SHA-256 للملف، ويحسب التطبيق تجزئة البيانات التي تم تنزيلها ويقارنها. هذا يضمن أن الملف لم يتلف أو يتم التلاعب به أثناء النقل. وفقاً لوحدة تحكم Google Play (2025)، التحقق من التجزئة للتطبيقات المعتمدة يمنع ما يصل إلى 99.9% من هجمات التنزيلات التالفة.
التجزئات تُستخدم بنشاط لبناء مخابئ فعالة وإزالة تكرار البيانات. عنوان صورة أو استجابة JSON يتم تجزئته واستخدامه كمفتاح تخزين مؤقت: عند طلب متكرر، يقارن النظام التجزئات ويعيد النتيجة المخزنة إذا لم تتغير البيانات. لهذه المهمة، دوال التجزئة غير cryptography مثل MurmurHash أو xxHash مناسبة، وتوفر أقصى أداء.
import java.security.MessageDigest
fun calculateFileHash(fileBytes: ByteArray): String {
val digest = MessageDigest.getInstance("SHA-256")
val hash = digest.digest(fileBytes)
return hash.joinToString("") { String.format("%02x", it) }
}
fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
val actualHash = calculateFileHash(data)
return actualHash == expectedHash
}
حتى المطورون ذوو الخبرة يرتكبون أخطاء عند العمل مع التجزئة. دعنا نفحص المشكلات الأكثر شيوعاً التي يمكن أن تلغي جميع فوائد الحماية cryptography.
MD5 و SHA-1 هما خوارزميتان قديمتان توجد لهما هجمات تصادم عملية. تم اختراق MD5 في عام 2004 من قبل مجموعة من الباحثين الصينيين (تصادم في ساعة واحدة). تم اختراق SHA-1 في عام 2017 من قبل فريق من Google و Centrum Wiskunde & Informatica (هجوم SHAttered). استخدام هذه الخوارزميات في مشاريع جديدة يُعتبر خطأ أمنياً خطيراً حسب تصنيف OWASP.
تجزئة كلمات المرور بدون ملح هي ثغرة أمنية حرجة. الملح هو سلسلة عشوائية فريدة لكل مستخدم تُضاف إلى كلمة المرور قبل التجزئة. بدون ملح، كلمتا مرور متطابقتان تنتجان نفس التجزئة، مما يسمح باستخدام جداول قوس قزح للاختراق. يوصي OWASP باستخدام ملح قوي cryptography بطول لا يقل عن 32 بايت، يتم إنشاؤه بشكل منفصل لكل مستخدم.
حتى عند استخدام bcrypt أو Argon2، يمكن تقليل الحماية باختيار معامل تكلفة منخفض جداً. وفقاً لـ OWASP (2025)، يجب أن يكون الحد الأدنى لعدد تكرارات bcrypt هو 10 (2^10 = 1024 تكراراً)، وبالنسبة لـ Argon2id، يجب أن يكون وقت الحساب ثانية واحدة على الأقل على المنصة المستهدفة. المعاملات المنخفضة جداً تجعل هجمات القوة العمياء قابلة للتنفيذ عملياً على مزارع GPU.
الأسئلة الشائعة
التجزئة هي عملية أحادية الاتجاه لا يمكن عكس نتيجتها إلى البيانات الأصلية. التشفير هو عملية ثنائية الاتجاه: يمكن فك تشفير البيانات المشفرة باستخدام مفتاح. تُستخدم التجزئة لتخزين كلمات المرور والتحقق من السلامة، بينما يُستخدم التشفير لـ النقل السري للبيانات بين العميل والخادم.
يوصي OWASP بـ Argon2id كأفضل خيار لتجزئة كلمات المرور بفضل حمايته القابلة للتعديل ضد هجمات GPU والقنوات الجانبية. البدائل: bcrypt (مُختبر وسهل التكوين)، scrypt (مقاوم لهجمات ASIC) و PBKDF2. SHA-256 و SHA-512 غير مناسبين لكلمات المرور — إنهما سريعان جداً ولا يحميان من هجمات القوة العمياء الجماعية.
التصادم هو حالة ينتج فيها مجموعتان مختلفتان من بيانات الإدخال نفس التجزئة. لدوال التجزئة cryptography، يجب أن يكون إيجاد التصادمات مستحيلاً حسابياً. على سبيل المثال، احتمال تصادم SHA-256 هو تقريباً 1 من 2^128 لأي رسالتين عشوائيتين — هذه قيمة ضئيلة جداً.
لا، bcrypt يتضمن تلقائياً الملح في خوارزميته. عند استدعاء BCrypt.hashToString()، تقوم المكتبة بتوليد ملح قوي cryptography بطول 16 بايت وتضمينه في سلسلة المخرجات مع التجزئة ومعامل التكلفة. يعمل scrypt و Argon2 بشكل مشابه. هذا أحد الأسباب التي تجعل الخبراء يوصون باستخدام KDF متخصصة بدلاً من دوال التجزئة ذات الأغراض العامة لحماية كلمات المرور.
نعم، التجزئات تُستخدم لإنشاء قوائم بيضاء وسوداء للملفات. تحتوي قواعد بيانات مكافحة الفيروسات على تجزئات للبرامج الضارة المعروفة. ومع ذلك، يمكن للمهاجمين تغيير بايت واحد في البرنامج مما يغير التجزئة بالكامل. لذلك، تستخدم الأنظمة الحديثة التجزئة الضبابية (SSDeep، TLSH) التي تجد ملفات متشابهة دلالياً وليس فقط التطابقات التامة.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا