سؤال

أريد مناقشة طريقة OpenSSL للكتابة والقراءة.
افترض أن لدي بنية بيانات مثل أدناه:

/-----------------------------------------------------\
|  my_header   |  PAYLOAD                             |
\-----------------------------------------------------/
       |                              |
      \ /                            \ /
 not encrypted                      encrypted

I think the proper algorithm would be like this :
   SEND:
   build my_header with my own header.
   encrypt PAYLOAD with encryption function
   attach my_header and PAYLOAD (encrypted) to one buffer
   send it using common POSIX function just like send or sendto
   RECV:
   using common POSIX function just like recv or recvfrom.
   extract my_header and PAYLOAD(encrypted)
   decrypt PAYLOAD with decryption function
   at last i got my_header and PAYLOAD(decrypted).

كيف هو نهجك إذا واجهت مشكلة كما أعلاه. نظرًا لأن OpenSSL قم بتشفير جميع البيانات التي يتم إرسالها إلى وظيفة SSL_Write (CMIIW).

شكرًا.

ربما ، السؤال المناسب هو ، ما هي وظيفة التشفير وفك التشفير التي يمكن استخدامها لتشفير/فك تشفير الحمولة النافعة في OpenSSL؟.

لا يوجد حل صحيح

نصائح أخرى

يمكنك في الواقع السماح لـ OpenSSL بعمل الكثير من الرفع الثقيل لك.

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

http://www.amazon.com/network-security-openssl-john-viega/dp/059600270x

سيكون مفيدًا جدًا. الكتاب متاح أيضًا عبر الإنترنت ، لكنني أعتقد أنه يتعين عليك الدفع للوصول إليه.

في توزيع OpenSSL ، يمكنك العثور على الكثير من رمز النماذج الذي يوضح بالضبط كيفية القيام بذلك.

حظا طيبا وفقك الله.

يأتي OpenSSL مع مكتبة Libcrypto والتي تُستخدم عادةً لأداء التشفير المستقل خارج سياق SSL.

http://www.openssl.org/docs/crypto/evp.html

بدلاً من ذلك ، قد يكون الجزء الحيوي من المكتبة أقرب إلى ما تريد:http://www.openssl.org/docs/crypto/bio.html

ولكن إذا كنت تنوي حقًا إرسال هذا عبر الشبكة ، فسوف أتساءل عن سلامة ترك الرأس غير المشفر. التشفير يتعلق بأكثر من الخصوصية ، فهو يتعلق أيضًا بتأكد من عدم تعديل البيانات أثناء العبور. إذا كان شخص ما في وضع يسمح له بمراقبة حركة المرور الخاصة بك ، فإنه عادة ما يكون في وضع يسمح له بالعبث معها أيضًا.

إذا كنت تريد الرأس غير محدد حتى تتمكن من قراءته في Wireshark لتصحيح الأخطاء ، فأنا أقترح إجراء علامة في تطبيقك لتمكين/تعطيل التشفير بالكامل لاستخدامه في بيئة تصحيح الأخطاء.

إذا كنت تقوم ببناء بروتوكول مشفر ، فهذا بالضبط ما سأفعله ، على افتراض my_header يحتوي على معلومات كافية ولا شيء يحتاج في حد ذاته إلى الأمان ، مثل مفتاح الجلسة. حزم الشبكة في المستوى المنخفض (انظر TCPDUMP/LIBPCAP) هي مجرد char* ("سلسلة") وتستخرج رؤوسًا مختلفة عن طريق التحرك على المصفوفة بأطوال مختلفة - ما تقترحه الأصوات مثل هذا.

عندما تستخدم TLS/DTLS ، لديك الخيار: تشفور الإطار بأكمله ، أو لا شيء على الإطلاق.

إذا كنت ترغب في الحصول على بعض البيانات غير المنبثقة في الإطار ، فربما لا تحتاج إلى TLS/DTLs. ومع ذلك ، يمكنك استخدام OpenSSL لحساب علامة تجزئة من رأسك (باستخدام SHA أو أي خوارزمية تجزئة أخرى ذات صلة) وإضافتها في نهاية الإطار لتجنب العبث.

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

فقط ضع في اعتبارك أن خوارزميات السماحة عادة ما تكون أسرع ولكنها تتطلب تبادلًا رئيسيًا في البداية. للقيام بذلك ، يمكنك استخدام خوارزمية غير متماثلة ، ولكن بعد ذلك ، تقوم بإعادة اختراع TLS/DTLS ؛)

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