سؤال

لدينا شرط للقيام ببعض تطوير ريخندل في جافا.

أي توصيات للمقالات والمكتبات وما إلى ذلك من شأنها أن تساعدنا؟

أي مؤشرات لصيانة Keystore وكيف تخزن المفاتيح بشكل آمن؟

يحرر:

سوف تحتاج إلى أن تكون مفتوحة المصدر. في الأساس، إنه مجرد تشفير / فك تشفير البيانات باستخدام Rijndael.

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

المحلول

تشمل جافا AES خارج الصندوق. rijndael هو AES. لا تحتاج إلى أي مكتبات خارجية. تحتاج فقط إلى شيء مثل هذا:

byte[] sessionKey = null; //Where you get this from is beyond the scope of this post
byte[] iv = null ; //Ditto
byte[] plaintext = null; //Whatever you want to encrypt/decrypt
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//You can use ENCRYPT_MODE or DECRYPT_MODE
cipher.calling init(Cipher.ENCRYPT_MODE, new SecretKeySpec(sessionKey, "AES"), new IvParameterSpec(iv));
byte[] ciphertext = cipher.doFinal(plaintext);

وهذا هو، للتشفير / فك التشفير. إذا كنت تقوم بمعالجة كميات كبيرة من البيانات، فأنت أفضل حالا في قراءة قطع القراءة المضاعف من 16 بايت واستدعاء التحديث بدلا من Dofinal (يمكنك فقط استدعاء Dofinal في الكتلة الأخيرة).

نصائح أخرى

لمكتبة مجانية رائعة، أوصي بشدة نطاط القلعة. يتم الحفاظ عليها بنشاط، جودة عالية، ولديها مجموعة لطيفة من أمثلة التعليمات البرمجية. للوثائق المرجعية، عليك الاعتماد بشكل عام مستندات jce.

لا أستطيع أن أقول ما هي المكتبة التي نستخدمها لتلبية متطلبات شهادة FIPS. ولكن هناك بدائل ل Cryptoj التي هي أرخص بكثير.

بشكل عام، أوصي بإنشاء مفتاح جديد لكل رسالة تشفير مع تشفير متماثل مثل Rijndael، ثم تشفير هذا المفتاح بخوارزمية غير متماثلة مثل RSA. يمكن تخزين هذه المفاتيح الخاصة هذه في متجر مفاتيح محمي بكلمة مرور، ومفتاح مقرها للبرمجيات مثل PKCS # 12 أو Java's "JKS"، أو، لأمان أفضل، على رمز "البطاقة الذكية" أو وحدة تشغيل أجهزة التشفير الأخرى.

كما اكتشفت شركتي مؤخرا، ليس AES ريندايل تماما. لدى AES تقييد أن المفاتيح يجب أن تكون 128 أو 192 أو 256 بت - ومع ذلك، فإن Rijndael يسمح للمفاتيح بأنها 160 و 224 كذلك.

كما هو مبين بواسطة Erickson أعلاه، يوفر BouncyCastle كائن Rijndael يدعم أطوال المفاتيح الإضافية: 128/160/192/224/256 بت. على وجه التحديد، إلقاء نظرة على API خفيفة الوزن.

GNU-CRYPTO هي مكتبة أخرى مفتوحة المصدر - ومع ذلك، فإنه لا يوفر أيضا دعم مفاتيح 160 و 224 بت.

لذلك، إذا كنت تبحث خصيصا عن دعم Rijndael الكامل، فإن Bouncycastle هو الوحيد الذي وجدته حتى الآن.

javax.crypto لديه دعم AES: http://java.sun.com/developer/technicalarticles/security/aes/aes_v1.html.

أما بالنسبة لتخزين مفتاح آمن، فإن الطريقة المعتادة هي استخلاص مفتاح تشفير من إدخال المستخدم (عبارة مرور) باستخدام وظيفة تجزئة تشفير، واستخدم المفتاح المشتق لتشفير المفاتيح. أو، إذا كنت بحاجة فقط إلى مفتاح واحد، يمكنك استخدام المفتاح المشتق نفسه نفسه.

ضع في اعتبارك دائما أن أمن النظام يرتبط مباشرة بقوة وظيفة التجزئة المستخدمة. استخدم وظيفة تجزئة آمنة تشفير، جنبا إلى جنب مع الملح إذا كان ذلك ممكنا، والتجزئة أكثر من مرة (مئات المرات، على سبيل المثال).

ومع ذلك، فإن السؤال غامض للغاية.

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