سؤال

عندما تقوم ببناء متجر رئيسي مع أداة Java Keytool ، كيف يتم حماية المفاتيح؟ لقد قرأت من خلال الوثائق ، وأدرك أن كل مفتاح خاص يحتوي على كلمة مرور رئيسية ، ثم يحتوي المتجر على كلمة مرور للمخزن.

ولكن ما هي الآلية المستخدمة لحماية البيانات؟ هل هو تشفير تشفير؟ إذا كان الأمر كذلك ، فما هي الخوارزمية؟ أنا أركز بشكل خاص على كيفية قيام KeyTool بالحماية عندما يقوم ببناء ملف JKS.

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

المحلول

يستخدم JKS Keystore الافتراضي من Sun خوارزمية خاصة ، في المقام الأول للتغلب على قيود التصدير على الخوارزميات القياسية. يتم تنفيذ الخوارزمية في هذه الفئة ،

  sun.security.provider.KeyProtector

هو وصف الخوارزمية ،

هذا هو تنفيذ خوارزمية شمس قابلة للتصدير مخصصة للاستخدام عند حماية (أو استعادة إصدار النص الواضح من) المفاتيح الحساسة. هذه الخوارزمية غير المقصود منها كشفير للأغراض العامة. هذه هي الطريقة التي تعمل بها الخوارزمية من أجل حماية المفاتيح: P - كلمة مرور المستخدم - الملح العشوائي X - Key Key P - مفتاح محمي y - مفتاح محمي R - ما يتم تخزينه في Keystore Step 1: خذ كلمة مرور المستخدم ، قم بإلحاق الملح العشوائي (بحجم ثابت) إليه ، وتجزئة: D1 = Digest (P ، S) Store D1 في X. الخطوة 2: خذ كلمة مرور المستخدم ، وإلحاق نتيجة Digest من الخطوة السابقة ، وتجمعها: DN = Digest (P ، DN-1). تخزين DN في x (إلحاقها بالهضم المخزنة مسبقًا). كرر هذه الخطوة حتى يتطابق طول X مع طول المفتاح الخاص P. الخطوة 3: xor x و p ، وتخزين النتيجة y: y = x xor p. الخطوة 4: المتجر S و Y و Digest (P ، P) في المخزن المؤقت للنتيجة r: r = s + y + digest (p ، p) ، حيث يشير " +" إلى التسلسل. (ملاحظة: يتم تخزين Digest (P ، P) في المخزن المؤقت للنتيجة ، بحيث عندما يتم استرداد المفتاح ، يمكننا التحقق مما إذا كان المفتاح المسترد يطابق بالفعل المفتاح الأصلي.) R يتم تخزين R في Keystore. يتم استرداد المفتاح المحمي على النحو التالي: Step1 و Step2 هما نفسه كما هو مذكور أعلاه ، باستثناء أن الملح لا يتم إنشاؤه عشوائيًا ، ولكنه مأخوذ من نتيجة R الخطوة 4 (بطول الطول الأول (البايتات)). الخطوة 3 (عملية XOR) تعطي مفتاح النص العادي. ثم تسلسل كلمة المرور باستخدام المفتاح الذي تم استرداده ، ومقارنة مع الطول الأخير (Digest (P ، P)) بايت R. إذا كانت متطابقة ، فإن المفتاح المسترد هو في الواقع نفس مفتاح المفتاح الأصلي.

نصائح أخرى

تعتمد الخوارزمية المستخدمة على keystore التي تستخدمها (يمكن أن تكون بطاقة ذكية ، على سبيل المثال).

keystore الافتراضي الذي تشحنه الشمس مع JDK ينشئ رمزًا ناعمًا (على ملف القرص) مع ثلاثة خيارات تشفير:

  1. الافتراضي: "JKS" ، نوع keystore الملكية (تنسيق). لست متأكدا من الخوارزمية.

  2. "jceks" ، تنسيق ملكي بديل ، باستخدام 3 ديس

  3. "PKCS12" ، وهو تنسيق قياسي (يمكن لـ OpenSSL قراءته) ، مع العديد من الخيارات ، ولكن عادةً 3-DES للمفاتيح الخاصة و RC2-40 للشهادات.

في جميع الحالات الثلاث ، يكون لديك البيانات الخاصة المشفرة (بشكل متماثل ، باستخدام كلمات المرور الفردية) ، وسلامة متجر المفاتيح بالكامل المحمي من خلال هضم تشفير (باستخدام كلمة مرور KeyStore).

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