حماية البيانات والتشفير
احموا الملفات وتعرّفوا على أساسيات CryptoKit
حماية البيانات والتشفير درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
حماية البيانات في iOS
يشفّر iOS الملفات على القرص افتراضيًا، لكن يمكنك اختيار وقت إمكانية فك تشفير محتويات الملف باستخدام فئات Data Protection. وتربط هذه الفئات الوصول إلى الملفات بحالة قفل الجهاز، على نحو يشبه فئات إمكانية الوصول في Keychain بالنسبة إلى الأسرار.
import Foundation
// File-level protection ties decryption to lock state.
// Set a protection class when writing sensitive files.فئات الحماية
مستويات حماية الملفات الرئيسية هي .complete (غير قابلة للقراءة أثناء القفل)، و.completeUnlessOpen (تبقى قابلة للقراءة إذا كانت مفتوحة عند القفل)، و.completeUntilFirstUserAuthentication (قابلة للقراءة بعد أول إلغاء قفل)، و.none.
import Foundation
// FileProtectionType:
// .complete
// .completeUnlessOpen
// .completeUntilFirstUserAuthentication (default)
// .none
let level = FileProtectionType.complete
_ = levelكتابة ملف محمي
مرّر .completeFileProtection ضمن خيارات الكتابة لتمييز الملف بأنه محمي بالكامل. وأثناء قفل الجهاز، يجعل نظام التشغيل محتوياته غير قابلة للوصول حتى من تطبيقك نفسه.
import Foundation
func writeSecure(_ data: Data, to url: URL) throws {
try data.write(
to: url,
options: [.completeFileProtection])
}ضبط الحماية للملفات الموجودة
يمكنك تغيير حماية الملف بعد إنشائه من خلال ضبط السمة FileAttributeKey.protectionKey باستخدام FileManager. وهذا مفيد لتشديد حماية الملفات التي تستلمها أو ترحّلها.
import Foundation
func protect(_ url: URL) throws {
try FileManager.default.setAttributes(
[.protectionKey: FileProtectionType.complete],
ofItemAtPath: url.path)
}CryptoKit للتشفير داخل التطبيق
عندما تحتاج إلى تشفير البيانات بنفسك، قبل رفعها مثلًا أو لإضافة طبقة فوق حماية القرص، استخدم CryptoKit. فهو يوفر بدائيات حديثة مقاومة لسوء الاستخدام، مع إعدادات افتراضية آمنة ودون الحاجة إلى إدارة IV يدويًا مع شفرات AEAD.
import CryptoKit
// CryptoKit offers hashing, symmetric & public-key
// crypto with safe, hard-to-misuse APIs.التجزئة باستخدام SHA-256
لعمليات التحقق من السلامة والبصمات، ينتج SHA256 ملخصًا ثابت الحجم. تذكّر أن التجزئة أحادية الاتجاه وليست بديلًا عن التشفير؛ فلا تُجزّئ كلمة مرور مطلقًا من دون salt وKDF بطيء.
import CryptoKit
import Foundation
func fingerprint(_ data: Data) -> String {
let digest = SHA256.hash(data: data)
return digest.map { String(format: "%02x", $0) }
.joined()
}المفاتيح المتماثلة
يستخدم التشفير المتماثل مفتاحًا مشتركًا واحدًا. وينشئ SymmetricKey(size: .bits256) مفتاحًا عشوائيًا قويًا. خزّن المفتاح في Keychain، ولا تخزّنه مطلقًا إلى جانب النص المشفّر الذي يحميه.
import CryptoKit
let key = SymmetricKey(size: .bits256)
// Persist this key in the Keychain, not in a file.
_ = keyالتشفير باستخدام AES-GCM
يوفر AES.GCM تشفيرًا موثّقًا؛ فهو يشفّر البيانات ويكتشف العبث بها معًا. وتعيد seal صندوقًا مختومًا يحتوي على النص المشفّر وnonce وعلامة المصادقة مجمّعةً معًا.
import CryptoKit
import Foundation
func encrypt(_ data: Data, key: SymmetricKey)
throws -> Data {
let sealed = try AES.GCM.seal(data, using: key)
return sealed.combined! // nonce + ciphertext + tag
}فك التشفير والتحقق
لفك التشفير، أعد إنشاء SealedBox من البيانات المجمّعة ثم استدعِ open. وإذا عُدّل النص المشفّر أو العلامة، ترمي open خطأً؛ إذ تضمن علامة المصادقة سلامة البيانات، ولذلك لا تُفك البيانات التالفة بصمت.
import CryptoKit
import Foundation
func decrypt(_ combined: Data, key: SymmetricKey)
throws -> Data {
let box = try AES.GCM.SealedBox(combined: combined)
return try AES.GCM.open(box, using: key)
}اشتقاق المفاتيح من كلمات المرور
لا تستخدم كلمة مرور خامًا كمفتاح. اشتق مفتاحًا باستخدام HKDF للمدخلات عالية العشوائية أو باستخدام KDF قائم على كلمة المرور. وتعمل HKDF في CryptoKit على تمديد مادة المفتاح وإضافة salt إليها لتكوين مفتاح متماثل سليم.
import CryptoKit
import Foundation
func deriveKey(from secret: Data, salt: Data)
-> SymmetricKey {
return HKDF<SHA256>.deriveKey(
inputKeyMaterial: SymmetricKey(data: secret),
salt: salt,
outputByteCount: 32)
}تكديس طبقات الحماية
تجمع التطبيقات القوية بين عدة طبقات: تشفّر Data Protection الملفات الساكنة مع ربطها بحالة القفل، ويحمي Keychain المفاتيح خلف القياسات الحيوية، ويضيف CryptoKit تشفيرًا على مستوى التطبيق للبيانات أثناء النقل أو في السحابة. وتفشل كل طبقة بأمان بمفردها.
import CryptoKit
import Foundation
// 1. Key lives in Keychain (biometric-gated)
// 2. Plaintext file written with .completeFileProtection
// 3. Uploads encrypted with AES.GCM before leaving device
let layers = "defense in depth"
_ = layersاختبار سريع
تذكّروا سبب تفضيل AES-GCM لتشفير مستوى التطبيق.
مراجعة
تعلّمتم حماية البيانات والتشفير:
- تربط فئات Data Protection للملفات (
.complete،.completeUntilFirstUserAuthentication) فك تشفير القرص بحالة القفل. - يوفّر CryptoKit تجزئة SHA-256، وإنشاء
SymmetricKey، والتشفير الموثّق باستخدام AES-GCM عبرseal/open. - اشتقّوا المفاتيح باستخدام HKDF، وخزّنوا المفاتيح في Keychain، وليس بجانب النص المشفّر مطلقًا.
- اجمعوا بين Data Protection وKeychain وCryptoKit لتطبيق مبدأ الدفاع متعدد الطبقات.
تعلم Swift مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 122
- الدروس
- 409
الأسئلة الشائعة
هل درس «حماية البيانات والتشفير» مجاني؟
نعم — نص درس «حماية البيانات والتشفير» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «حماية البيانات والتشفير»؟
احموا الملفات وتعرّفوا على أساسيات CryptoKit تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «حماية البيانات والتشفير»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تخزين الأسرار في Keychain
- التحكم في الوصول إلى Keychain
- المصادقة البيومترية
- حماية البيانات والتشفير