انتقل إلى المحتوى
HexaTransfer
العودة إلى المدونة
التشفير والأمان

ما هو التشفير من جانب العميل؟ متصفحك يقوم بالعمل

التشفير من جانب العميل يعني أن ملفاتك تُشفر في متصفحك قبل الرفع. أقصى خصوصية وتحكم.

التشفير من جانب العميل يعني أن متصفحك أو تطبيقك يُشفّر الملفات على جهازك قبل أن يصل أي شيء إلى الشبكة. لا يتلقى الخادم إلا نصاً مشفّراً — مخرجات AES-256-GCM لا يمكن تمييزها عن الضوضاء العشوائية — ومفتاح فكّ التشفير لا يغادر العميل أبداً. هذا نقيض التشفير من جانب الخادم حيث يحتفظ المزوّد بالمفاتيح ويستطيع تقنياً قراءة ملفاتك. تجعل Web Crypto API المعروفة بـ window.crypto.subtle هذا ممكناً في أي متصفح حديث بدون إضافات، بسرعة تبلغ 2-3 جيجابايت/ثانية على معالجات AES-NI. خدمات مثل HexaTransfer وSwissTransfer وTresorit Send وProton Drive تستخدم هذا النموذج لضمان بقاء الملفات خاصة حتى لو اخترق أحدهم الخدمة نفسها.

المتصفح بوصفه محرّكاً تشفيرياً

قبل خمس سنوات، كان التشفير الحقيقي يستلزم تثبيت تطبيق سطح مكتب أو استخدام PGP عبر سطر الأوامر. Web Crypto API الموحّدة من W3C عام 2017 غيّرت هذا. توفّر AES-GCM وRSA-OAEP وECDH وHMAC وPBKDF2 وSHA-256 مباشرةً لـ JavaScript في أي متصفح رئيسي — Chrome وFirefox وSafari وEdge.

الأداء لم يعد عائقاً. تصل تعليمات Intel AES-NI إلى 3-5 جيجابايت/ثانية لكل نواة لـ AES-256-GCM. تُقدّم امتدادات التشفير ARMv8 على رقائق Apple M-series وQualcomm Snapdragon إنتاجية مماثلة. تشفير ملف بحجم 1 جيجابايت في المتصفح يستغرق 300-500 ميلي ثانية على حاسوب محمول متوسط المستوى.

التحدي المتبقي هو التعامل مع الملفات الأكبر من ذاكرة المتصفح. تتيح Streams API وReadableStream معالجة الملفات في أجزاء بحجم 4 ميجابايت، مع تشفير كل جزء بشكل مستقل بمتجّه تهيئة فريد في نمط العداد. هكذا ترفع الخدمات السقف إلى 10 جيجابايت وأكثر.

تدفق تشفير بسيط من جانب العميل

إليك التسلسل الذي تُجريه خدمة معتمدة على المتصفح:

// 1. إنشاء مفتاح AES عشوائي بـ 256 بتاً
const key = await crypto.subtle.generateKey(
  { name: "AES-GCM", length: 256 }, true, ["encrypt", "decrypt"]
);

// 2. قراءة الملف في أجزاء
const file = fileInput.files[0];
const chunkSize = 4 * 1024 * 1024;

// 3. تشفير كل جزء بمتجّه تهيئة فريد بـ 12 بايت
for (let offset = 0; offset < file.size; offset += chunkSize) {
  const chunk = file.slice(offset, offset + chunkSize);
  const iv = crypto.getRandomValues(new Uint8Array(12));
  const ciphertext = await crypto.subtle.encrypt(
    { name: "AES-GCM", iv }, key, await chunk.arrayBuffer()
  );
  // 4. رفع [iv || ciphertext] إلى الخادم
}

// 5. تصدير المفتاح وتضمينه في جزء رابط المشاركة
const keyBytes = await crypto.subtle.exportKey("raw", key);
const shareUrl = `https://example.com/d/${fileId}#k=${base64url(keyBytes)}`;

يرى الخادم بايتات تبدو عشوائية ومعرّف ملف ولا شيء آخر. المفتاح موجود فقط في ذاكرة متصفح المستخدم وجزء URL.

لماذا يتفوّق هذا على التشفير من جانب الخادم

التشفير من جانب الخادم يعني أن المزوّد يفكّ التشفير عند الطلب — لتوليد الصور المصغّرة، أو إجراء فحص الفيروسات، أو معالجة استعلامات البحث، أو الاستجابة للطلبات القانونية. كشف إفصاح Apple عام 2023 أن نسخ iCloud الاحتياطية التي لم تكن مشفّرة من طرف إلى طرف حتى إطلاق Advanced Data Protection كانت في متناول Apple وبالتالي في متناول جهات إنفاذ القانون الأمريكية بموجب طلبات صحيحة.

التشفير من جانب العميل يعكس هذا. لأن المفتاح لا يصل إلى المزوّد:

  • الموظفون المارقون لا يرون شيئاً. المهندس الذي يملك صلاحية الوصول إلى قاعدة البيانات يحصل على نص مشفّر.
  • أوامر التفتيش تنتج نصاً مشفّراً. يستطيع المزوّد الامتثال لأوامر المحكمة بتسليم الكتلة المشفّرة، وهي عديمة الفائدة بدون المفتاح.
  • الاختراقات تُسرّب نصاً مشفّراً. أثبتت حادثة LastPass عام 2021 أهمية هذا — الخزائن المسروقة كانت مشفّرة، ولم يواجه خطراً حقيقياً إلا المستخدمون الذين يملكون كلمات مرور رئيسية ضعيفة.
  • انقطاعات الخادم لا تُخطّر البيانات. حتى لو أفلست الشركة، يظل نسخك المحلية من المفتاح (URL) قادرة على فكّ تشفير الملف.

ما يستطيع الخادم رؤيته رغم ذلك

يحمي التشفير من جانب العميل محتوى الملفات لكن ليس كل شيء. يرصد الخادم عادةً:

  • حجم الملف — طول النص المشفّر يقارب طول النص الصريح (يضيف AES-GCM 16 بايتاً لكل عملية بالإضافة إلى 12 بايتاً لمتجّه التهيئة).
  • عناوين IP الرفع والتنزيل مع التوقيتات.
  • بيانات وصفية للجلسة من مصافحات TLS، بما في ذلك بصمة TLS للعميل.
  • أسماء الملفات المشفّرة — ما لم تُدرج في البيانات المشفّرة قد تتسرّب.

تُشفّر الخدمات الجيدة أسماء الملفات كجزء من رأس النص المشفّر وتُضيف حشواً لأحجام دلو لإخفاء الحجم. توثّق Tresorit وProton Drive كشف البيانات الوصفية لديهما صراحةً.

التشفير من جانب العميل المحمي بكلمة مرور

تتيح كثير من الخدمات للمستخدمين إضافة كلمة مرور فوق جزء URL. التدفق:

  1. يُنشئ المتصفح قيمة تهيئة عشوائية بـ 128 بتاً ويشتق مفتاحاً بـ PBKDF2-HMAC-SHA-256 مع 600,000 تكرار (توصية OWASP 2023) أو Argon2id مع memory=64 MB, iterations=3.
  2. يُشفَّر الملف بالمفتاح المشتقّ.
  3. تذهب قيمة التهيئة في جزء URL؛ تُوصَّل كلمة المرور بقناة خارجية.
  4. يكتب المستلم كلمة المرور التي تُعيد اشتقاق المفتاح محلياً.

هذا يحوّل المشاركة أحادية القناة إلى عاملَين: يحتاج المهاجم إلى الرابط وكلمة المرور معاً. يجعل PBKDF2 بـ 600,000 تكرار تكلفة هجمات القوة الغاشمة غير المتصلة ما يقارب 10 ثوانٍ لكل تخمين على GPU حديث، لذا تحتاج كلمات المرور 40+ بتاً من الإنتروبيا لمقاومة المهاجمين المصمّمين.

تحوّل الثقة: من الخدمة إلى رمز العميل

ينقل التشفير من جانب العميل حدود الثقة. الآن تثق بـ JavaScript التي تشحنها الخدمة إلى متصفحك في كل تحميل صفحة. تحديث ضار يمكنه تسريب المفتاح قبل التشفير أو أثناءه.

ثلاثة تدابير وقائية بمستويات مختلفة من الصرامة:

  • Subresource Integrity (SRI) لعلامات الكود يضمن تطابق بصمة JS مع قيمة معروفة.
  • عمليات تدقيق الرمز من شركات كـ Cure53 وNCC Group وTrail of Bits تُثبت سلامة منطق التشفير.
  • البنى القابلة للاستنساخ تتيح لأطراف مستقلة التأكد من تطابق الرمز المشحون مع المصدر المنشور.
  • رؤوس Content Security Policy (CSP) تحجب النصوص البرمجية الخارجية التي قد تتلاعب بالتشفير.

النهج الأكثر صرامة يشحن ملفات ثنائية موقّعة بدلاً من JavaScript جديدة في كل زيارة. تتداول الخدمات المعتمدة على المتصفح بعض هذه الصرامة مقابل راحة عدم الحاجة إلى التثبيت.

حالات الاستخدام حيث يتألّق التشفير من جانب العميل

سيناريوهات يستحق فيها هذا النهج وقت التحميل الأول الأطول قليلاً:

  • المستندات القانونية والطبية. HIPAA 45 CFR § 164.312 وسرية المحامي والموكّل كلاهما يستفيد من البنى التي لا يرى فيها المزوّد شيئاً.
  • الصحافة وحماية المصادر. إرسال مستندات غير منقّحة حيث حتى كشف البيانات الوصفية ينطوي على خطر.
  • الملكية الفكرية للشركات. مستندات مجالس الإدارة والنماذج المالية ومواد الاستحواذات حيث التهديدات الداخلية مخاوف واقعية.
  • السجلّات الشخصية. المستندات الضريبية وجوازات السفر والاختبارات الطبية — ملفات تضايقك رؤيتها في عناوين أخبار الاختراقات.

للملفات منخفضة الحساسية كصور الاجتماعات والوصفات، التشفير التقليدي من جانب الخادم كافٍ.

كيف تتعرّف على التشفير الحقيقي من جانب العميل

أربعة مؤشرات على أن الخدمة تطبّق التشفير من جانب العميل فعلاً:

  1. أجزاء URL تحمل مفاتيح. رابط المشاركة يحتوي على نص بعد # يبدو كبايتات مشفّرة بـ base64.
  2. عمليات الرفع نصوص مشفّرة. افتح DevTools ثم Network أثناء الرفع؛ يجب أن يبدو جسم الطلب كبايتات عشوائية لا اسم ملفك.
  3. الملفات الكبيرة تعمل بسرعة. التدفق من جانب العميل الحقيقي يعالج الأجزاء؛ لا يُعيد الرفع إلى بوابة تشفير جانب الخادم.
  4. سياسة الخصوصية تقول "لا نستطيع فكّ تشفير ملفاتك." مقرونة بورقة بيضاء تقنية لا مجرد نصوص تسويقية.

الخدمات التي تجتاز: SwissTransfer في مستوى E2EE، وTresorit Send، وProton Drive روابط المشاركة، وMega.nz، وHexaTransfer. الخدمات التي لا تجتاز: WeTransfer الخطة الأساسية، وGoogle Drive، وروابط مشاركة Dropbox.

تطبيق ذلك الآن

لتجربة التشفير من جانب العميل اليوم، افتح DevTools وراقب علامة Network أثناء رفع ملف. يجب أن ترى كتلة مشفّرة تذهب إلى الخادم ومفتاحاً في شريط عنوانك لا يظهر في أي طلب. هذا هو الوعد كاملاً.

جرّبها على hexatransfer.com — مجاني، بدون حساب، حتى 10 جيجابايت.

أرسل ملفات كبيرة بأمان مع تشفير من طرف إلى طرف

انقل ملفات حتى 10 جيجابايت مجاناً مع تشفير من طرف إلى طرف. لا حاجة لحساب. يتم تشفير ملفاتك في متصفحك قبل الرفع — لا أحد آخر يستطيع قراءتها.

إرسال ملف