سؤال

أنا أستخدم HMACSHA512 إلى بيانات التجزئة باستخدام مفتاح مشترك. نظرًا لأن المفتاح مشترك ، أود أن يكون كل الأحرف القابلة للطباعة لسهولة النقل. أتساءل ما هو أفضل طريقة لتوليد هذه المفاتيح.

أنا أستخدم حاليًا طريقة getBytes () لـ rngcryptoserviceprovider لإنشاء مفتاح ، لكن مجموعة البايت التي يعودها تحتوي على أحرف غير قابلة للطباعة. لذلك أنا أتساءل عما إذا كان من الآمن أن يقوم Base64 بتشفير النتيجة أو هل تآكل العشوائية كثيرًا وجعل الأمور أقل أمانًا؟ إذا لم يكن هذا نهجًا جيدًا ، فهل يمكنك اقتراح نقار؟

أنا أفهم أنه من خلال الحد من مفاتيح الشخصيات القابلة للطباعة ، فإنني أقصر اتساع نطاق المساحة الرئيسية (أي: وضع 1 من 8 بت) ، لكنني موافق على ذلك.

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

المحلول

إذا كنت تستطيع التعامل مع عدم توليد المفتاح تلقائيًا ثم http://www.grc.com/passwords هو مصدر جيد للمواد الرئيسية العشوائية للغاية.

لن يقلل BASE64 من الانتروبيا الأساسية لمجموعة البايت. يمكنك إنشاء المفتاح واستخدامه في شكله الخام ، ولكن Base64 يشفره لنقله إلى حيث تحتاجه. يمكنك بعد ذلك base64 decode إلى النموذج الخام قبل استخدامه في الموقع الجديد. لا يوجد خسارة في إنتروبيا في هذه العملية. يقلل ترميز BASE64 من الانتروبيا إلى 6 بتات لكل بايت بدلاً من 8 ، ولكن نتيجة الترميز أطول ، لذلك بشكل عام ، يكون الانتروبيا هو نفسه.

الطريقة الأخرى التي يمكنك من خلالها القيام بذلك هي الحصول على 24 بايت عشوائي بقيمة 192 بت من الانتروبيا. BASE64 تشفير هذا من شأنه أن يمنحك سلسلة أحرف 32 (256 بت) والتي لا تزال لديها العشوائية الأصلية و 192 بت من الانتروبيا. يمكنك استخدام هذا كمفتاح مشترك مباشرة.

نصائح أخرى

يحول BASE64 تسلسل بايت بحيث يستخدم فقط بعض الأحرف القابلة للطباعة.

هذا التحول لا يغير المعلومات بأي شكل من الأشكال ، فقط كيف يتم تخزينه. كما أنه قابل للعكس: يمكنك الحصول على تسلسل البايت الأصلي عن طريق فك تشفير الإخراج Base64.

لذا فإن استخدام BASE64 لا "تآكل العشوائية" أو الحد من مساحة المفتاح بأي شكل من الأشكال.

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