لست بحاجة إلى الرياضيات لاستخدام التشفير بشكل صحيح. أنت بحاجة إلى معرفة ما يعِد به كل أسلوب تشفيري، وما لا يعِد به.
أربعة وعود
- التشفير يعِد بالسرية. لا يقول شيئاً عن كون الرسالة قد عُدِّلت أم لا.
- الاختزال (Hashing) يعِد ببصمة ثابتة. هو ليس تشفيراً ولا يمكن عكسه — لكن يمكن تخمينه، ولهذا السبب تحتاج كلمات المرور إلى اختزال بطيء.
- التوقيع يعِد بإثبات المصدر وسلامة المحتوى. لا يخفي شيئاً.
- تبادل المفاتيح يعِد بأن يصل الطرفان إلى سر مشترك من دون إرساله.
معظم الإخفاقات الحقيقية تحدث عند استخدام أسلوب في مكان كان يحتاج إلى أسلوب آخر.
الإخفاقات التي ستواجهها فعلاً
- كلمة مرور مخزَّنة باختزال سريع مثل SHA-256. السرعة هنا هي الخاصية الخاطئة: استخدم Argon2id أو bcrypt، فهما بطيئان عن قصد.
- تشفير من دون توثيق، بحيث يستطيع المهاجم تعديل النص المشفَّر من دون أن يُكتشف ذلك. استخدم نمط AEAD.
- مفتاح تم رفعه إلى مستودع (repository). الخوارزمية تصبح غير مهمة بمجرد أن يصبح المفتاح معروفاً للعلن.
⟦> Every primitive is a promise about one property. Confusing which is which causes more breaches than broken maths.⟧
ما يجب أن تخرج به
عندما ترى تشفيراً ضمن تصميم ما، اسأل عن الخاصية التي يُفترض أن يوفرها، وتحقق من أن الأسلوب المُختار يوفرها فعلاً.