انتشار کتابخانه رمزنگاری OpenSSL 3.0.0

پس از سه سال توسعه و 19 نسخه آزمایشی، کتابخانه OpenSSL 3.0.0 با پیاده سازی پروتکل های SSL/TLS و الگوریتم های رمزگذاری مختلف منتشر شد. شاخه جدید شامل تغییراتی است که سازگاری به عقب را در سطح API و ABI برهم می‌زند، اما این تغییرات بر عملکرد اکثر برنامه‌هایی که برای مهاجرت از OpenSSL 1.1.1 نیاز به بازسازی دارند، تأثیری نخواهد داشت. شاخه قبلی OpenSSL 1.1.1 تا سپتامبر 2023 پشتیبانی می شود.

تغییر قابل توجه در شماره نسخه به دلیل انتقال به شماره گذاری سنتی "Major.Minor.Patch" است. از این پس، رقم اول (Major) در شماره نسخه تنها در صورتی تغییر می‌کند که سازگاری در سطح API/ABI شکسته شود، و رقم دوم (Minor) با افزایش عملکرد بدون تغییر API/ABI تغییر می‌کند. به روز رسانی های اصلاحی با تغییر رقم سوم (پچ) ارائه می شود. شماره 3.0.0 بلافاصله بعد از 1.1.1 برای جلوگیری از همپوشانی با ماژول FIPS در حال توسعه برای OpenSSL انتخاب شد که برای آن از شماره گذاری 2.x استفاده شد.

دومین تغییر مهم برای پروژه، انتقال از مجوز دوگانه (OpenSSL و SSLeay) به مجوز Apache 2.0 بود. مجوز انحصاری OpenSSL قبلی بر اساس متن مجوز Apache 1.0 قدیمی بود و نیاز به ذکر صریح OpenSSL در مواد بازاریابی هنگام استفاده از کتابخانه‌های OpenSSL داشت، و همچنین در صورت ارائه OpenSSL به عنوان بخشی از محصول، یک اخطار ویژه داشت. این الزامات مجوز قدیمی را با GPL ناسازگار کرد و استفاده از OpenSSL را در پروژه های دارای مجوز GPL دشوار کرد. برای دور زدن این ناسازگاری، پروژه‌های GPL مجبور شدند از توافق‌نامه‌های مجوز خاصی استفاده کنند که در آن متن اصلی GPL با یک بند تکمیل شده بود که صراحتاً اجازه می‌داد برنامه با کتابخانه OpenSSL مرتبط شود و ذکر می‌کرد که الزامات GPL وجود ندارد. برای پیوند با OpenSSL اعمال شود.

در مقایسه با شاخه OpenSSL 1.1.1، OpenSSL 3.0.0 بیش از 7500 تغییر توسط 350 توسعه دهنده اضافه کرد. نوآوری های اصلی OpenSSL 3.0.0:

  • یک ماژول FIPS جدید پیشنهاد شده است، از جمله اجرای الگوریتم‌های رمزنگاری که با استاندارد امنیتی FIPS 140-2 مطابقت دارند (فرآیند صدور گواهینامه برای ماژول قرار است در ماه جاری آغاز شود و انتظار می‌رود گواهینامه FIPS 140-2 در سال آینده ارائه شود). استفاده از ماژول جدید بسیار ساده تر است و اتصال آن به بسیاری از برنامه ها دشوارتر از تغییر فایل پیکربندی نخواهد بود. به طور پیش فرض، ماژول FIPS غیرفعال است و باید گزینه enable-fips را فعال کنید.
  • libcrypto مفهوم ارائه دهندگان قابل اتصال را پیاده سازی می کند که جایگزین مفهوم موتورها شده است (ENGINE API منسوخ شده است). با کمک ارائه دهندگان، می توانید پیاده سازی های خود را از الگوریتم ها برای عملیات هایی مانند رمزگذاری، رمزگشایی، تولید کلید، محاسبه MAC، ایجاد و تأیید امضای دیجیتال اضافه کنید. هم می توان الگوریتم های جدید را متصل کرد و هم پیاده سازی های جایگزینی از الگوریتم های پشتیبانی شده قبلی ایجاد کرد (به طور پیش فرض، ارائه دهنده ساخته شده در OpenSSL اکنون برای هر الگوریتم استفاده می شود).
  • پشتیبانی از پروتکل مدیریت گواهی (RFC 4210)، که می تواند برای درخواست گواهی از سرور CA، به روز رسانی گواهی ها و لغو گواهی ها استفاده شود. کار با CMP با استفاده از ابزار جدید openssl-cmp انجام می شود که از فرمت CRMF (RFC 4211) و ارسال درخواست ها از طریق HTTP/HTTPS (RFC 6712) نیز پشتیبانی می کند.
  • یک کلاینت تمام عیار برای پروتکل‌های HTTP و HTTPS پیاده‌سازی شده است که از روش‌های GET و POST، هدایت مجدد درخواست، کار از طریق یک پروکسی، رمزگذاری ASN.1 و پردازش مهلت زمانی پشتیبانی می‌کند.
  • یک EVP_MAC جدید (API کد احراز هویت پیام) اضافه شده است تا اجرای جدید درج‌های ساختگی را آسان‌تر اضافه کنید.
  • یک رابط نرم افزاری جدید برای تولید کلیدها پیشنهاد شده است - EVP_KDF (API تابع مشتق کلید)، که افزودن اجرای جدید KDF و PRF را ساده می کند. API قدیمی EVP_PKEY، که از طریق آن الگوریتم‌های رمزگذاری، TLS1 PRF و HKDF در دسترس بودند، به شکل لایه‌ای که در بالای APIهای EVP_KDF و EVP_MAC پیاده‌سازی شده‌اند، دوباره طراحی شده است.
  • پیاده سازی پروتکل TLS امکان استفاده از سرویس گیرنده و سرور TLS را که در هسته لینوکس تعبیه شده است برای افزایش سرعت عملیات فراهم می کند. برای فعال کردن اجرای TLS ارائه شده توسط هسته لینوکس، باید گزینه "SSL_OP_ENABLE_KTLS" یا تنظیمات "enable-ktls" را فعال کنید.
  • پشتیبانی از الگوریتم های جدید اضافه شده است:
    • الگوریتم های تولید کلید (KDF) "SINGLE STEP" و "SSH" هستند.
    • الگوریتم های درج شبیه سازی شده (MAC) "GMAC" و "KMAC" هستند.
    • الگوریتم کپسوله سازی کلید RSA (KEM) "RSASVE".
    • الگوریتم رمزگذاری "AES-SIV" (RFC-8452).
    • تماس‌های اضافه شده به API EVP با پشتیبانی از رمزهای معکوس با استفاده از الگوریتم AES برای رمزگذاری کلیدها (Key Wrap): "AES-128-WRAP-INV"، "AES-192-WRAP-INV"، "AES-256-WRAP-" INV" ، "AES-128-WRAP-PAD-INV"، "AES-192-WRAP-PAD-INV" و "AES-256-WRAP-PAD-INV".
    • پشتیبانی از الگوریتم‌های قرض‌گیری متن رمزی (CTS) به API EVP: "AES-128-CBC-CTS"، "AES-192-CBC-CTS"، "AES-256-CBC-CTS"، "CAMELLIA-128-CBC" -CTS"، "CAMELLIA-192-CBC-CTS" و "CAMELLIA-256-CBC-CTS".
    • پشتیبانی از امضای دیجیتال CAdES-BES (RFC 5126) اضافه شده است.
    • AES_GCM پارامتر AuthEnvelopedData (RFC 5083) را برای فعال کردن رمزگذاری و رمزگشایی پیام هایی که با استفاده از حالت AES GCM احراز هویت و رمزگذاری شده اند، پیاده سازی می کند.
  • توابع PKCS7_get_octet_string و PKCS7_type_is_other به API عمومی اضافه شده اند.
  • PKCS#12 API الگوریتم های پیش فرض استفاده شده در تابع PKCS12_create() را با PBKDF2 و AES جایگزین می کند و از الگوریتم SHA-256 برای محاسبه MAC استفاده می کند. برای بازیابی رفتار گذشته، گزینه "-legacy" ارائه شده است. تعداد زیادی تماس توسعه یافته جدید را به PKCS12_*_ex، PKCS5_*_ex و PKCS8_*_ex اضافه کرد، مانند PKCS12_add_key_ex().PKCS12_create_ex() و PKCS12_decrypt_skey_ex().
  • برای پلتفرم ویندوز، پشتیبانی از همگام سازی رشته ها با استفاده از مکانیزم SRWLock اضافه شده است.
  • یک API ردیابی جدید اضافه شده است که از طریق پارامتر enable-trace فعال شده است.
  • دامنه کلیدهای پشتیبانی شده در توابع EVP_PKEY_public_check() و EVP_PKEY_param_check() گسترش یافته است: RSA، DSA، ED25519، X25519، ED448 و X448.
  • زیرسیستم RAND_DRBG حذف شده و با EVP_RAND API جایگزین شده است. توابع FIPS_mode() و FIPS_mode_set() حذف شده اند.
  • بخش قابل توجهی از API منسوخ شده است - استفاده از فراخوانی های منسوخ در کد پروژه منجر به اخطارهایی در طول کامپایل می شود. از جمله API های سطح پایین مرتبط با پیاده سازی های خاصی از الگوریتم ها (به عنوان مثال، AES_set_encrypt_key و AES_encrypt) رسما منسوخ اعلام شده اند. پشتیبانی رسمی در OpenSSL 3.0.0 اکنون فقط برای APIهای EVP سطح بالا ارائه می‌شود که از انواع الگوریتم‌های جداگانه انتزاع شده‌اند (این API برای مثال شامل توابع EVP_EncryptInit_ex، EVP_EncryptUpdate و EVP_EncryptFinal است). APIهای منسوخ شده در یکی از نسخه های اصلی بعدی حذف خواهند شد. پیاده‌سازی الگوریتم‌های قدیمی مانند MD2 و DES، که از طریق API EVP در دسترس هستند، به یک ماژول "میراث" جداگانه منتقل شده‌اند که به طور پیش‌فرض غیرفعال است.
  • اسناد و مجموعه آزمایشی به طور قابل توجهی گسترش یافته است. در مقایسه با شاخه 1.1.1، حجم اسناد 94 درصد افزایش یافته است و اندازه کد مجموعه آزمایشی 54 درصد افزایش یافته است.

منبع: opennet.ru

اضافه کردن نظر