سؤال

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

بعض يتم تشفير الملفات الفردية داخل الأرشيف مع مفاتيح الأسطوانات والتشفير المتماثل بالنسبة لهم يتم تخزينها داخل مؤشر الأرشيف (رأس). وهذا هو السبب في أنني أرغب في تشفير رأس الأرشيف غير متناظرة.

متطلبات الأسهم:
1) يجب أن يكون تنفيذ الخوارزمية منصة مستقلة.
2) يجب أن تكون الخوارزمية سهلة تنفيذ نفسي أو يجب أن تكون متاحة في المكتبة (مع شفرة المصدر) التي تسمح ثابتة الارتباط بتطبيق الملكية، مما يعني أنه لا يمكن استخدام التراخيص GPL / LGPL / الفيروسية. رمز MIT / BSD المرخص، أو رمز المجال العام مقبول.
3) إذا كان Cypher متاح في المكتبة، من الناحية المثالية، يجب أن يكون لها بصمة الذاكرة الصغيرة، وينبغي أن يكون التنفيذ مضغوطا. أفضل أن أستخدم مكتبة C / C ++ التي تنفذ تشفيرا واحدا فقط بدلا من مجموعة التشفير الكاملة للأغراض بالكامل.

في الأصل كنت أرغب في استخدام RSA، ولكن يبدو أنه ببساطة بطيئة للغاية في أن تكون مفيدا، وليس هناك العديد من البدائل.

لذلك، أي نصيحة بشأن ما الذي يمكنني استخدامه؟

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

المحلول

حسنا، لقد وجدت ما كنت أبحث عنه، وأعتقد أنه أفضل من Openssl (لأغراضي، على الأقل).

هناك مكتبتان:
libtomcrypt., ، والتي تنفذ العديد من السلفات (بما في ذلك RSA)، و libtommath., ، أن تنفذ الحسابي في برعاية. كلا المكتبات موجودة في المجال العام، من السهل الاختراق / تعديل واجهة برمجة أبسط من Openssl و (الكثير) وثائق أفضل من Openssl.
على عكس كود RSA المجال القديم الذي وجدته من قبل, ، يمكن libtomcrypt إنشاء مفاتيح جديدة بسرعة كبيرة، ويمكن استيراد مفاتيح Openssl التي تم إنشاؤها، ويدعم الحشو. شيء جيد آخر حول libtomcrypt هو أنه لا يحتوي على تبعيات إضافية (openssl ل Windows يريد gdi32، على سبيل المثال) وأصغر من openssl.

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

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

مما يعني، سؤال الحلول. الحل هو RSA + libtomcrypt. RSA - لأنه لا يوجد العديد من البدائل RSA، و libtomcrypt - لأنه صغير وفي المجال العام.

نصائح أخرى

يجب أن تفعل openssl المهمة لك. إنه مفتوح المصدر (ترخيص Apache، لذلك يلبي متطلبات الترخيص الخاصة بك).

انها تستخدم على نطاق واسع واختبارها جيدا.

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

تحقق من المنحنى 25519، وهو منحنى إهليلجية Cryphography المنفذة بكفاءة، وحول مشاكل براءة الاختراع.

يجتمع كل متطلباتك. انظر هنا.

يمكنك استخدامه لتشفير، أو ببساطة تسجيل.

كملاحظة جانبية:

لفحص النزاهة، يجب أن يكفي MAC إلا إذا كنت بحاجة حقا إلى تشفير الأحداث.

ماذا عن MD5؟

نعم أنا أدرك أنه تم كسر MD5؛ - ولكن معظم التطبيقات العملية هذا غير ذي صلة.
خاصة إذا كانت البيانات المعدلة يجب أن تكون سارية جدا بتنسيق البيانات المعين وكذلك لديك MD5 الصحيح

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

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