في ممارستي الصغيرة في مجال أمن المعلومات ، كان عليّ مواجهة بعض مشكلات التشفير ، أو بالأحرى التشفير ، الذي بالكاد وجدته إجابات واضحة. لذلك ، قررت كتابة مقالة قصيرة حول أساسيات العمل مع OpenSSL.
ستناقش هذه المقالة مشكلات إنشاء المفاتيح المعروفة ، بالإضافة إلى المشكلة الأقل شهرة المتمثلة في تشفير أحجام الملفات الكبيرة. الشهادة غير واردة هنا.
دعنا نبدأ. في الواقع ، كل شيء بسيط حتى الآن.
قم بإنشاء مفتاح خاص باستخدام الأمر.
openssl genrsa -out key.pem -aes-256-cfb -rand /var/log/messages 4096

هنا:
genrsa - معلمة تشير إلى إنشاء مفتاح بواسطة خوارزمية تشفير RSA.
خارج - مكان إنشاء المفتاح.
4096 هو طول المفتاح.
بشكل عام ، هذا يكفي لإنشاء مفتاح. ولكن من الأفضل تشفير المفتاح الخاص.
aes-256-cfb - الخوارزمية ووضع التشفير.
راند / فار / سجل / رسائل - قيم عشوائية من أي مجلد ، فمن الأفضل أن تأخذ السجلات ، لأنه مع / dev / عشوائي أو / dev / urandom كل شيء يمكن أن يتم تعليقه بإحكام ، كان لدي.
عند إنشاء مفتاح ، سيتم طلب كلمة مرور. كلمة المرور هي أساس أي حماية ، لذا حاول التطفل عليها. وتذكر.
لدينا مفتاح. خاص لا تظهر أبدًا ولا تختبئ لأي شخص وفقًا لمبدأ Koshchei الخالد.
بناءً على ذلك ، سننشئ واحدة عامة يمكن عرضها على الشاشة العامة ، على الأقل على الجبهة.
openssl rsa -in privatkey.pem -pubout -out publickey.pem

الآن لدينا زوج من المفاتيح. يمكنك تحميل الملف العام إلى الخادم للاتصال به عبر ssh باستخدام مفتاحك الخاص. أو لتشفير كمية صغيرة من البيانات ، على سبيل المثال ، رمز مميز أو عبارة مرور ، إلخ.
مهمة تشفير ملف كبير لها حل مختلف.
لتشفير كمية كبيرة من البيانات ، نستخدم ، على سبيل المثال ، ملف pdf هذا بحجم 1.8 ميجابايت.

يتم تشفير كمية كبيرة من البيانات باستخدام خوارزمية تشفير متناظرة ، مثل AES. هنا سنستخدم التشفير غير المتماثل لإرسال مفتاح متماثل ، والذي سنقوم بتشفير النص به.
دعنا نبدأ.
إنشاء مفتاح جلسة متماثل (لمرة واحدة) بتسلسل عشوائي من الأحرف وكتابته إلى ملف في تمثيل base64.
openssl rand -base64 32 > key.bin
بعد ذلك ، نقوم بتشفير الملف باستخدام هذا المفتاح:
openssl enc -aes-256-cfb -salt -in OWASP_Top_10-2017_\(en\).pdf -out OWASP_Top_10-2017_\(en\).pdf.enc -pass file:./key.bin
aes-256-cfb - الخوارزمية ووضع التشفير. لن أتحدث عن الأوضاع هنا. هذا هو الأفضل.
ملح - ملح لزيادة قوة التشفير.
تمرير الملف: ./ key.bin - مفتاح التشفير.
بعد ذلك ، نقوم بتشفير المفتاح المتماثل باستخدام مفتاحنا العام "غير المتماثل".
openssl rsautl -encrypt -inkey publickey.pem -pubin -in key.bin -out key.bin.enc

حصلت على ملف مشفر ومفتاح متماثل. يمكنك إرسالها إلى صديقك لفك التشفير. لكننا سوف نرسلها لأنفسنا ، لأن هذا واجب منزلي مع أنفسنا.
الآن احذف المفتاح المتماثل الأصلي! حتى لا يجده أحد.
shred -u key.bin
في الصورة أدناه لم يعد هناك.

الآن نقوم بفك تشفير المفتاح المتماثل باستخدام مفتاحنا غير المتماثل الخاص.
openssl rsautl -decrypt -inkey privatkey.pem -in key.bin.enc -out key.bin
ولدينا ، المحظوظون ، مرة أخرى مفتاح متماثل لفك تشفير نصنا ، الذي لا يزال مشفرًا.
الصورة أدناه مرة أخرى ، هناك مفتاح مرة أخرى.

الآن نقوم بفك تشفير الملف المشفر باستخدام تشفير التشفير المتماثل بواسطة تشفيرنا المشفر حديثًا ، ولكن بعد ذلك يتم فك تشفيره باستخدام تشفير التشفير غير المتماثل ، المفتاح المتماثل.
openssl enc -d -aes-256-cfb -in OWASP_Top_10-2017_\(en\).pdf.enc -out OWASP_Top_10-2017_\(en\)decrypt.pdf -pass file:./key.bin
إثبات أدناه.

الآن: لماذا هو معقد للغاية؟ لماذا لا تستطيع أن تفعل كل شيء مع التشفير غير المتماثل؟
نحاول ، نذهب مباشرة إلى أشعل النار ؛)
لقد فعلنا!
الملف والمفاتيح.

نقوم بتشفير.
openssl rsautl -encrypt -inkey publickey.pem -pubin -in OWASP_Top_10-2017_\(en\).pdf -out OWASP_Top_10-2017_\(en\).pdf.enc
الأسرى - الأسرى - POOOOOOOOOOOOH. الخطأ. الكثير من البيانات لحجم المفتاح. بالنسبة للتشفير غير المتماثل ، يجب أن يكون حجم المفتاح أكبر من النص العادي أو مساويًا له.
OpenSSL ، كما في صفقة مع الشيطان ، أعطاك ما طلبته ، ولكن ليس ما تريد. صحيح أن الملف المشفر كان فارغًا.

ولكن يمكنك تشفير ملف أصغر من المفتاح. لنجربها.
قم بإنشاء ملف صغير.
على سبيل المثال ، فعلت هذا:
echo "hellow world my name is admin is a secret text nobody know it hahahahaahah" > text.txt

سنقوم بتشفيره بمفتاحنا العام ، والذي يعرفه الجميع في العالم!
openssl rsautl -encrypt -inkey publickey.pem -pubin -in text.txt -out text.txt.enc
كما ترى في الصورة السفلية ، الملف مشفر. لا شيء واضح! من يفهم من أنت؟

الآن نقوم بفك التشفير ، بعد حذف الملف المصدر من أجل نقاء التجربة.
openssl rsautl -decrypt -inkey privatkey.pem -in text.txt.enc -out text.txt

لدينا ملف تم فك تشفيره. كل شيء رائع.
لنقل كل هذه السلعة المشفرة ، من الأفضل ترميز الأخير في base64. وفقًا لذلك ، قبل فك التشفير ، يجب عليك أولاً فك التشفير.
مشفر.
openssl enc -base64 -in text.txt.enc -out text.txt.bs64

تم فك الشفرة.
openssl enc -base64 -d -in text.txt.bs64 -out text.txt.enc

ومرة أخرى لدينا beleberd لا يفهمها أحد! إذا فهمت ، فهذه الوثيقة ليست لك!
هذه هي الطريقة التي يعمل بها التشفير عند إنشاء المفاتيح وتشفير البيانات باستخدام أداة OpenSSL كمثال.
سأصف فيما بعد أوضاع التشفير للأصفار المتناظرة.