في هذا المستند ، تحدد لجنة إدارة OpenSSL المبادئ الأساسية للهيكل الاستراتيجي لـ OpenSSL. بدءًا من الإصدار 3.0.0 ، ستكون هناك حاجة إلى العديد من الإصدارات للانتقال من البنية الحالية (الإصدار 1.1.1) إلى المستقبل.العديد من التغييرات المتوقعة في الهندسة المعمارية. نحن نقدم مسار الهجرة ممكن. يؤثر الإصدار 3.0.0 من OpenSSL إلى الحد الأدنى على الغالبية العظمى من التطبيقات الحالية ، وسوف تحتاج فقط إلى إعادة ترجمة جميع تطبيقات القراءة والكتابة.
سيتم استبدال الوظيفة الحالية التي توفرها واجهة المحرك بواجهة البرنامج مع مرور الوقت. سوف OpenSSL 3.0.0 تحتفظ دعم المحرك. لا يمكن تطبيق البنية المستقبلية بشكل كامل قبل الإصدار 4.0.0 من OpenSSL.
العمارة الحالية
يحتوي OpenSSL حاليًا على أربعة مكونات رئيسية:
- ليبكريبتو. المكتبة الرئيسية لتوفير تطبيقات العديد من بدائية التشفير. بالإضافة إلى ذلك ، توفر مجموعة من الخدمات الداعمة لـ libssl و libcrypto ، بالإضافة إلى تطبيقات البروتوكول مثل CMS و OCSP.
- المحرك. يمكن تمديد وظيفة libcrypto من خلال واجهة برمجة تطبيقات المحرك.
عادةً ما تكون المحركات عبارة عن وحدات محملة ديناميكيًا مسجلة في libcrypto وتستخدم السنانير المتاحة لتنفيذ خوارزميات التشفير ، وغالبًا ما تكون هناك تطبيقات بديلة للخوارزميات التي توفرها بالفعل libcrypto (على سبيل المثال ، مع دعم تسريع الأجهزة) ، ولكنها قد تتضمن أيضًا خوارزميات لا يتم تنفيذها في OpenSSL بواسطة بشكل افتراضي (على سبيل المثال ، تطبق آلية GOST عائلة الخوارزميات GOST الروسية). تأتي بعض المحركات بتوزيع OpenSSL ، بينما تأتي محركات أخرى مع أطراف ثالثة (مرة أخرى ، GOST).
- libssl. مكتبة تعتمد على libcrypto وتنفذ بروتوكولي TLS و DTLS.
- التطبيقات مجموعة من أدوات سطر الأوامر التي تستخدم المكونات الأساسية في libssl و libcrypto لتوفير مجموعة من وظائف التشفير وغيرها ، مثل:
- الجيل والتحقق من المفاتيح والمعلمات
- توليد الشهادة والتحقق منها
- أدوات اختبار SSL / TLS
- التحقق من ASN.1
- وغيرها
يحتوي OpenSSL حاليًا على الميزات التالية:
- EVP يوفر API EVP layer (envelope) واجهة تجريدية عالية المستوى لوظيفة التشفير ، دون ربطها بتنفيذ معين. لا ينصح باستخدام مباشر للتطبيقات المحددة من خوارزميات التشفير تجاوز واجهات EVP. كما يوفر عمليات مركبة مثل التوقيع والتحقق. يتم توفير بعض العمليات المركبة أيضًا كعملية على مستوى EVP (على سبيل المثال ، HMAC-SHA256). يتيح EVP أيضًا استخدام خوارزميات التشفير بطريقة حسابية (على سبيل المثال ، يعمل EVP_DigestSign لكل من خوارزميات RSA و ECDSA).
- FIPS140 غير مدعوم ، وهو متوفر فقط في OpenSSL-1.0.2 ، والذي يسبق الهيكل الحالي وغير متوافق مع API أو ABI.
مفهوم المكون
الهيكل الحالي عبارة عن هيكل بسيط من أربعة مستويات مع طبقة تشفير في الأسفل. تعتمد طبقة TLS على طبقة التشفير ، والتطبيقات تعتمد على طبقة TLS وطبقة التشفير.
ملاحظة: لا يعني وجود مكون في المخطط أن المكون هو واجهة برمجة تطبيقات عامة أو مخصص للوصول المباشر / الاستخدام من قبل المستخدم النهائي.

حزمة الرسم
يتم حزم المكونات الموضحة أعلاه في المكتبات (libcrypto و libssl) وواجهات kernel المقابلة ، وكذلك سطر الأوامر القابل للتنفيذ (openssl) لتشغيل التطبيقات المختلفة. ويظهر هذا في الرسم البياني أدناه.

العمارة المستقبلية
ملامح العمارة المستقبلية:
- تشكل خدمات Kernel اللبنات الأساسية التي تستخدمها التطبيقات ومقدمو الخدمات (مثل BIO و X509 و SECMEM و ASN1 وما إلى ذلك).
- يستخدم الموردون خوارزميات التشفير وخدمات الدعم. يقوم المزود بتنفيذ واحد أو أكثر من الوظائف التالية:
- بدائل التشفير للخوارزمية: التشفير ، فك التشفير ، التوقيع ، التجزئة ، إلخ.
- تسلسل الخوارزمية ، على سبيل المثال ، وظيفة تحويل المفتاح الخاص إلى ملف PEM. يمكن أن يكون التسلسل بالتنسيقات أو التنسيقات غير المدعومة حاليًا.
- تخزين محمل الخلفية. يأتي OpenSSL حاليًا مع أداة تحميل التشغيل لقراءة المفاتيح والمعلمات والعناصر الأخرى من الملفات. يمكن للموردين تنفيذ برامج التنزيل لقراءة البيانات من أماكن أخرى (على سبيل المثال ، من دليل LDAP).
يمكن أن يكون المزود مستقلًا تمامًا أو يستخدم الخدمات المقدمة من مختلف مقدمي الخدمات أو خدمات kernel. على سبيل المثال ، قد يستخدم التطبيق بدائل تشفير لخوارزمية يتم تنفيذها من قبل بائع مسرّع الأجهزة ، ولكن يستخدم خدمات التسلسل الخاصة بمورد آخر لتصدير المفاتيح إلى تنسيق PKCS # 12.
سيكون الموفر الافتراضي (الذي يحتوي على جوهر التطبيقات الحالية لخوارزمية تشفير OpenSSL) "مضمنًا" ، ولكن سيتمكن الموفرون الآخرون من التحميل ديناميكيًا في وقت التشغيل.
ستوفر الوحدة (الوحدات) الخاصة بموفري الخدمات القديمة تطبيقات تشفير للخوارزميات الأقدم (مثل DES ، MDC2 ، MD2 ، Blowfish ، CAST). سننشر قواعد حول كيفية وتوقيت انتقال الخوارزميات من مزود افتراضي إلى مزود قديم.
يمكن لمزود FIPS ، الذي ينفذ وحدة تشفير OpenSSL FIPS ، أن يتم تحميله ديناميكيًا في وقت التشغيل.
- توفر النواة الوصول إلى الخدمات التي يقدمها مزودي التطبيقات (وغيرهم). يمنح البائعون نواة الوصول إلى الأساليب. النواة هي آلية يتم من خلالها اكتشاف تطبيقات محددة لأشياء مثل الخوارزميات.
يقوم kernel بتنفيذ وظيفة البحث المستندة إلى خاصية للعثور على الخوارزميات. على سبيل المثال ، سيجد هذا خوارزمية حيث "fips = true" أو "keysize = 128 ، constant_time = true". سيتم نشر التفاصيل في وثائق المشروع اللاحقة.
- تطبيقات البروتوكول مثل TLS و DTLS.
العمارة المستقبلية لها الخصائص التالية:
- تصبح طبقة EVP غلافًا رقيقًا للخدمات التي يتم تنفيذها من خلال الموردين. تمر معظم المكالمات بأدنى حد من المعالجة المسبقة أو المعالجة اللاحقة أو بدون معالجة على الإطلاق.
- ستظهر واجهات برمجة التطبيقات EVP الجديدة للبحث في النواة عن تنفيذ الخوارزمية التي سيتم استخدامها لأي مكالمة EVP.
- سيتم نقل المعلومات بين المكتبة الرئيسية والموردين بنفس الطريقة ، بغض النظر عن تنفيذها.
- سيتم استبعاد واجهات برمجة التطبيقات المهملة (مثل واجهات برمجة التطبيقات المشفرة ذات المستوى المنخفض والتي لا تمر عبر طبقة EVP). لاحظ أن هناك واجهات برمجة التطبيقات التي عفا عليها الزمن للخوارزميات التي لم تعد قديمة (على سبيل المثال ، AES ليست خوارزمية قديمة ، ولكن AES_encrypt هو واجهة برمجة تطبيقات قديمة).
- سيتم تنفيذ وحدة تشفير OpenSSL FIPS كمزود تم تحميله ديناميكيًا. ستكون مستقلة (على سبيل المثال ، قد تعتمد فقط على مكتبات وقت تشغيل النظام والخدمات التي يوفرها kernel).
- يمكن أيضًا تحويل واجهات أخرى إلى استخدام kernel بمرور الوقت (على سبيل المثال ، OSSL_STORE).
- باستخدام محرك يذهب إلى الموردين. "وداعا ، والمهندسين ، مرحبا ، الموردين . "
مفهوم المكون
يوفر الرسم البياني أدناه نظرة عامة على مكونات بنية OpenSSL المستقبلية.
ملاحظة: لا يعني وجود مكون في المخطط أن المكون هو واجهة برمجة تطبيقات عامة أو مخصص للوصول المباشر / الاستخدام من قبل المستخدم النهائي.

المكونات التالية معروضة هنا:
- التطبيقات: الأدوات المساعدة لسطر الأوامر: ca ، الأصفار ، cms ، dgst ، إلخ.
- البروتوكولات: يوفر المكون القدرة على التواصل بين نقاط النهاية باستخدام البروتوكولات القياسية:
- بروتوكولات TLS: تنفيذ جميع بروتوكولات TLS / DTLS المدعومة والبنية التحتية للخدمة:
- SSL BIO: BIO للاتصالات TLS
- Statem: آلة الحالة TLS
- سجل: طبقة السجل TLS
- بروتوكولات أخرى
- CMS: تطبيق معيار بناء جملة الرسائل المشفرة
- OCSP: تنفيذ بروتوكول حالة الشهادة عبر الإنترنت
- TS: تنفيذ بروتوكول الطابع الزمني
- خدمات الدعم: مكونات مصممة خصيصًا لدعم تنفيذ كود البروتوكول
- الحزمة: مكون داخلي لقراءة رسائل البروتوكول
- Wpacket: مكون داخلي لتسجيل رسائل البروتوكول
- Kernel: هذا هو المكون الأساسي الذي يربط طلبات الخدمة (مثل التشفير) بمزود الخدمة. أنها تمكن الموردين لتسجيل خدماتهم جنبا إلى جنب مع ممتلكاتهم. يوفر kernel أيضًا القدرة على العثور على خدمة مع مجموعة معينة من الخصائص التي يجب أن تنفذها الخدمة. على سبيل المثال ، قد تتضمن خصائص خدمة التشفير "aead" و "aes-gcm" و "fips" و "security-bits = 128" ، وما إلى ذلك.
- الموفر الافتراضي: ينفذ مجموعة من الخدمات الافتراضية المسجلة في النواة.
- خدمات الدعم
- تطبيقات منخفضة المستوى: هذه مجموعة من المكونات التي تقوم بالفعل بتنفيذ بدايات التشفير.
- مزود FIPS: ينفذ مجموعة من الخدمات التي تم التحقق منها ومتاحة لب FIPS الأساسية. يشمل خدمات الدعم التالية:
- وظيفة: السلطة في الاختبار الذاتي
- KAT: اختبارات الإجابة المعروفة
- تحقق النزاهة
- تطبيقات منخفضة المستوى: هذه هي مجموعة من المكونات التي تقوم بالفعل بتطبيق بدايات التشفير (لتلبية متطلبات FIPS المستقلة).
- موفر الخوارزميات القديمة: يوفر تطبيقات الخوارزميات القديمة التي سيتم توفيرها من خلال واجهة برمجة تطبيقات EVP.
- موفر الطرف الثالث: ليس جزءًا من توزيع OpenSSL. يجوز للأطراف الثالثة بيع مورديها.
- الخدمات العامة: تشكل لبنات البناء المستخدمة من قبل التطبيقات والموردين (على سبيل المثال ، BIO ، X509 ، SECMEM ، ASN1 ، إلخ).
- واجهات برمجة التطبيقات المهملة. واجهة برمجة التطبيقات "منخفضة المستوى": هنا تشير كلمة "عفا عليها الزمن" إلى واجهة برمجة التطبيقات على وجه التحديد ، وليس إلى الخوارزمية نفسها. على سبيل المثال ، لا تعد AES خوارزمية قديمة ، ولكن هناك واجهات برمجة تطبيقات قديمة لها (على سبيل المثال ، AES_encrypt).
حزمة الرسم
المكونات المختلفة الموضحة أعلاه في المخطط المفاهيمي للمكونات يتم تعبئتها فعليًا في:
- التطبيقات القابلة للتنفيذ للمستخدمين
- مكتبة (مكتبات) للتطبيقات
- وحدة (وحدات) قابلة للتحميل ديناميكيًا للنواة.

الحزم الفعلية التالية معروضة هنا:
- الملف القابل للتنفيذ هو OpenSSL. تطبيق سطر الأوامر.
- Libssl. يحتوي على كل ما يرتبط مباشرة بـ TLS و DTLS. محتوياته هي نفسها كما هو الحال في libssl الحالي. لاحظ أنه سيتم نقل بعض خدمات الدعم إلى libcrypto.
- Libcrypto تحتوي هذه المكتبة على المكونات التالية:
- تطبيقات الخدمات الرئيسية: X509 ، ASN1 ، EVP ، OSSL_STORE ، إلخ.
- جوهر
- بروتوكولات غير TLS أو DTLS
- خدمات دعم البروتوكول (مثل الحزمة و Wpacket)
- مزود افتراضي يحتوي على تطبيقات لجميع الخوارزميات الافتراضية
- Libcrypto إرث. يوفر واجهات برمجة التطبيقات منخفضة المستوى القديمة. قد يأتي تنفيذ الخوارزميات لواجهات برمجة التطبيقات هذه من أي مزود.
- وحدة FIPS. يحتوي على موفر FIPS يقوم بتنفيذ مجموعة من الخدمات التي تم التحقق منها بواسطة FIPS ومسجلة في النواة.
- الوحدة القديمة. يحتوي على مزود قديم.