Keluaran Perpustakaan Kriptografi OpenSSL 3.0.0

Selepas tiga tahun pembangunan dan 19 keluaran ujian, perpustakaan OpenSSL 3.0.0 dikeluarkan dengan pelaksanaan protokol SSL/TLS dan pelbagai algoritma penyulitan. Cawangan baharu termasuk perubahan yang memecahkan keserasian ke belakang pada peringkat API dan ABI, tetapi perubahan itu tidak akan menjejaskan pengendalian kebanyakan aplikasi yang memerlukan binaan semula untuk berhijrah daripada OpenSSL 1.1.1. Cawangan OpenSSL 1.1.1 sebelumnya akan disokong sehingga September 2023.

Perubahan ketara dalam nombor versi adalah disebabkan oleh peralihan kepada penomboran "Major.Minor.Patch" tradisional. Mulai sekarang, digit pertama (Major) dalam nombor versi akan berubah hanya jika keserasian rosak pada tahap API/ABI, dan digit kedua (Minor) akan berubah apabila kefungsian ditingkatkan tanpa mengubah API/ABI. Kemas kini pembetulan akan dihantar dengan perubahan kepada digit ketiga (Patch). Nombor 3.0.0 serta-merta selepas 1.1.1 dipilih untuk mengelakkan pertindihan dengan modul FIPS yang sedang dibangunkan untuk OpenSSL, yang mana penomboran 2.x telah digunakan.

Perubahan penting kedua untuk projek itu ialah peralihan daripada lesen dwi (OpenSSL dan SSLeay) kepada lesen Apache 2.0. Lesen OpenSSL proprietari sebelumnya adalah berdasarkan teks lesen Apache 1.0 warisan dan memerlukan sebutan eksplisit OpenSSL dalam bahan pemasaran apabila menggunakan perpustakaan OpenSSL, serta notis khas jika OpenSSL disediakan sebagai sebahagian daripada produk. Keperluan ini menjadikan lesen lama tidak serasi dengan GPL, menjadikannya sukar untuk menggunakan OpenSSL dalam projek berlesen GPL. Untuk mengatasi ketidakserasian ini, projek GPL terpaksa menggunakan perjanjian lesen khusus di mana teks utama GPL telah ditambah dengan klausa yang secara eksplisit membenarkan aplikasi untuk dipautkan dengan perpustakaan OpenSSL dan menyebut bahawa keperluan GPL tidak memohon untuk memaut dengan OpenSSL.

Berbanding dengan cawangan OpenSSL 1.1.1, OpenSSL 3.0.0 menambah lebih daripada 7500 perubahan yang disumbangkan oleh 350 pembangun. Inovasi utama OpenSSL 3.0.0:

  • Modul FIPS baharu telah dicadangkan, termasuk pelaksanaan algoritma kriptografi yang mematuhi piawaian keselamatan FIPS 140-2 (proses pensijilan untuk modul dijadualkan bermula bulan ini, dan pensijilan FIPS 140-2 dijangka tahun depan). Modul baharu lebih mudah digunakan dan menyambungkannya ke banyak aplikasi tidak lebih sukar daripada menukar fail konfigurasi. Secara lalai, modul FIPS dilumpuhkan dan memerlukan pilihan enable-fips untuk didayakan.
  • libcrypto melaksanakan konsep pembekal boleh pasang, yang menggantikan konsep enjin (API ENGINE telah ditamatkan). Dengan bantuan pembekal, anda boleh menambah pelaksanaan algoritma anda sendiri untuk operasi seperti penyulitan, penyahsulitan, penjanaan kunci, pengiraan MAC, penciptaan dan pengesahan tandatangan digital. Adalah mungkin untuk menyambung yang baharu dan mencipta pelaksanaan alternatif bagi algoritma yang telah disokong (secara lalai, penyedia yang terbina dalam OpenSSL kini digunakan untuk setiap algoritma).
  • Menambah sokongan untuk Protokol Pengurusan Sijil (RFC 4210), yang boleh digunakan untuk meminta sijil daripada pelayan CA, mengemas kini sijil dan membatalkan sijil. Bekerja dengan CMP dijalankan menggunakan utiliti openssl-cmp baharu, yang turut menyokong format CRMF (RFC 4211) dan menghantar permintaan melalui HTTP/HTTPS (RFC 6712).
  • Pelanggan penuh untuk protokol HTTP dan HTTPS telah dilaksanakan, menyokong kaedah GET dan POST, permintaan pengalihan, bekerja melalui proksi, pengekodan ASN.1 dan pemprosesan tamat masa.
  • EVP_MAC baharu (API Kod Pengesahan Mesej) telah ditambahkan untuk memudahkan anda menambah pelaksanaan baharu sisipan olok-olok.
  • Antara muka perisian baharu untuk menjana kunci dicadangkan - EVP_KDF (Key Derivation Function API), yang memudahkan penambahan pelaksanaan baharu KDF dan PRF. API EVP_PKEY lama, di mana algoritma scrypt, TLS1 PRF dan HKDF tersedia, telah direka bentuk semula dalam bentuk lapisan yang dilaksanakan di atas EVP_KDF dan EVP_MAC API.
  • Pelaksanaan protokol TLS menyediakan keupayaan untuk menggunakan klien dan pelayan TLS terbina dalam kernel Linux untuk mempercepatkan operasi. Untuk mendayakan pelaksanaan TLS yang disediakan oleh kernel Linux, anda mesti mendayakan pilihan "SSL_OP_ENABLE_KTLS" atau tetapan "dayakan-ktls".
  • Menambah sokongan untuk algoritma baharu:
    • Algoritma penjanaan utama (KDF) ialah "LANGKAH TUNGGAL" dan "SSH".
    • Algoritma sisipan simulasi (MAC) ialah "GMAC" dan "KMAC".
    • RSA Key Encapsulation Algorithm (KEM) "RSASVE".
    • Algoritma penyulitan "AES-SIV" (RFC-8452).
    • Menambahkan panggilan pada API EVP yang menyokong sifir songsang menggunakan algoritma AES untuk menyulitkan kunci (Key Wrap): β€œAES-128-WRAP-INV”, β€œAES-192-WRAP-INV”, β€œAES-256-WRAP-INV ” , "AES-128-WRAP-PAD-INV", "AES-192-WRAP-PAD-INV" dan "AES-256-WRAP-PAD-INV".
    • Menambahkan sokongan untuk algoritma peminjaman teks sifir (CTS) pada API EVP: β€œAES-128-CBC-CTS”, β€œAES-192-CBC-CTS”, β€œAES-256-CBC-CTS”, β€œCAMELLIA-128-CBC -CTS” ", "CAMELLIA-192-CBC-CTS" dan "CAMELLIA-256-CBC-CTS".
    • Menambah sokongan untuk tandatangan digital CAdES-BES (RFC 5126).
    • AES_GCM melaksanakan parameter AuthEnvelopedData (RFC 5083) untuk mendayakan penyulitan dan penyahsulitan mesej yang disahkan dan disulitkan menggunakan mod AES GCM.
  • Fungsi PKCS7_get_octet_string dan PKCS7_type_is_other telah ditambahkan pada API awam.
  • API PKCS#12 menggantikan algoritma lalai yang digunakan dalam fungsi PKCS12_create() dengan PBKDF2 dan AES dan menggunakan algoritma SHA-256 untuk mengira MAC. Untuk memulihkan tingkah laku masa lalu, pilihan "-legacy" disediakan. Menambahkan sejumlah besar panggilan lanjutan baharu kepada PKCS12_*_ex, PKCS5_*_ex dan PKCS8_*_ex, seperti PKCS12_add_key_ex().PKCS12_create_ex() dan PKCS12_decrypt_skey_ex().
  • Untuk platform Windows, sokongan untuk penyegerakan benang menggunakan mekanisme SRWLock telah ditambah.
  • Menambahkan API pengesanan baharu, didayakan melalui parameter dayakan-jejak.
  • Julat kunci yang disokong dalam fungsi EVP_PKEY_public_check() dan EVP_PKEY_param_check() telah diperluaskan: RSA, DSA, ED25519, X25519, ED448 dan X448.
  • Subsistem RAND_DRBG telah dialih keluar, digantikan dengan EVP_RAND API. Fungsi FIPS_mode() dan FIPS_mode_set() telah dialih keluar.
  • Sebahagian besar API telah menjadi usang - menggunakan panggilan usang dalam kod projek akan menghasilkan amaran semasa penyusunan. Termasuk API peringkat rendah yang terikat dengan pelaksanaan algoritma tertentu (contohnya, AES_set_encrypt_key dan AES_encrypt) telah diisytiharkan sebagai usang secara rasmi. Sokongan rasmi dalam OpenSSL 3.0.0 kini hanya disediakan untuk API EVP peringkat tinggi yang disarikan daripada jenis algoritma individu (API ini termasuk, contohnya, fungsi EVP_EncryptInit_ex, EVP_EncryptUpdate dan EVP_EncryptFinal). API yang ditamatkan akan dialih keluar dalam salah satu keluaran utama seterusnya. Pelaksanaan algoritma lama seperti MD2 dan DES, tersedia melalui EVP API, telah dialihkan ke modul "warisan" yang berasingan, yang dilumpuhkan secara lalai.
  • Dokumentasi dan suite ujian telah diperluaskan dengan ketara. Berbanding dengan cawangan 1.1.1, jumlah dokumentasi telah meningkat sebanyak 94%, dan saiz kod suite ujian telah meningkat sebanyak 54%.

Sumber: opennet.ru

Tambah komen