سؤال

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

  • قم بإنشاء 128 بت من تجزئة اسم الملف ووقت النظام ، واكتب هذا إلى بداية الملف.
  • قم بإنشاء مفتاح 256 بت من عبارة المرور باستخدام SHA256.
  • قم بتشفير البيانات (بدءًا من توقيع ثابت 32 بت) مع هذا المفتاح باستخدام AES في وضع CBC ، واكتبها إلى الملف.

عند فك التشفير ، تتم قراءة IV ، ثم قاعدة المرور المستخدمة لإنشاء المفتاح بنفس الطريقة ، وتتم مقارنة أول 32 بت بما يجب أن يكون التوقيع لمعرفة ما إذا كان المفتاح صالحًا.

ومع ذلك كنت أنظر إلى مثال AES المقدمة في polarssl (المكتبة التي أستخدمها للقيام بالتجزئة والتشفير) ، وتستخدم طريقة أكثر تعقيدًا:

  • قم بإنشاء 128 بت من تجزئة اسم الملف وحجم الملف ، واكتب هذا إلى بداية الملف.
  • قم بإنشاء مفتاح 256 بت من التجزئة (SHA256) عبارة PASSPHRASE و IV معًا 8192 مرة.
  • تهيئة HMAC مع هذا المفتاح.
  • قم بتشفير البيانات باستخدام هذا المفتاح باستخدام AES في وضع CBC ، واكتبها للملف ، مع تحديث HMAC مع كل كتلة مشفرة.
  • اكتب HMAC إلى نهاية الملف.

لدي انطباع بأن الطريقة الثانية أكثر أمانًا ، لكن ليس لدي ما يكفي من المعرفة لدعم ذلك ، بخلاف أنها تبدو أكثر تعقيدًا.

  • إذا كان أكثر أمانًا ، فما هي أسباب هذا؟
  • هل إلحاق HMAC بنهاية الملف أكثر أمانًا من التوقيع في بداية البيانات المشفرة؟
  • هل يزيد Hashing 8192 مرة من الأمن؟

ملحوظة: هذا مشروع مفتوح المصدر ، لذا مهما كانت الطريقة التي أستخدمها ، فسيكون متاحًا مجانًا لأي شخص.

هل كانت مفيدة؟

المحلول

الخيار الثاني أكثر أمانًا.

طريقتك ، لا توفر أي سلامة رسالة. هذا يعني أن المهاجم يمكنه تعديل أجزاء من النص المشفر وتغيير ما يفككه النص العادي. طالما أنها لا تعدل أي شيء من شأنه أن يغير توقيعك الثابت 32 بت ، فستثق به. يوفر HMAC على الطريقة الثانية تكامل الرسائل.

من خلال تجزئة المفتاح 8192 مرة ، يضيف خطوات حسابية إضافية لشخص ما لمحاولة Butionforce المفتاح. افترض أن المستخدم سيختار كلمة مرور القاموس. مع طريقتك يجب أن تؤدي المهاجم SHA256(someguess) ثم حاول فك التشفير. ومع ذلك ، مع إصدار polarssl ، سيتعين عليهم حساب SHA256(SHA256(SHA256...(SHA256(someguess))) لمدة 8192 مرة. سيؤدي ذلك إلى إبطاء المهاجم فقط ، لكنه قد يكون كافياً (في الوقت الحالي).

لما يستحق ، يرجى استخدام مكتبة موجودة. التشفير صعب وعرضة للأخطاء الدقيقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top