Arsitektur Strategis OpenSSL

Dalam dokumen ini, Komite Manajemen OpenSSL menguraikan prinsip-prinsip dasar arsitektur strategis OpenSSL. Mulai dengan 3.0.0, beberapa versi akan diperlukan untuk pindah dari arsitektur saat ini (versi 1.1.1) ke masa depan.

Sejumlah perubahan diharapkan dalam arsitektur. Kami menawarkan jalur migrasi yang memungkinkan. Rilis OpenSSL 3.0.0 berdampak minimal terhadap sebagian besar aplikasi yang ada, hampir semua aplikasi melek hanya perlu dikompilasi ulang.

Fungsi saat ini yang disediakan oleh antarmuka mesin akan diganti oleh antarmuka perangkat lunak seiring waktu. OpenSSL 3.0.0 akan mempertahankan dukungan engine. Arsitektur masa depan dapat sepenuhnya diimplementasikan tidak lebih awal dari OpenSSL 4.0.0.

Arsitektur saat ini


OpenSSL saat ini memiliki empat komponen utama:

  1. libcrypto. Perpustakaan utama untuk menyediakan implementasi berbagai primitif kriptografi. Selain itu, ia menyediakan satu set layanan pendukung untuk libssl dan libcrypto, serta implementasi protokol seperti CMS dan OCSP.
  2. Mesinnya. Fungsionalitas libcrypto dapat diperluas melalui API mesin.

    Biasanya, mesin adalah modul yang dimuat secara dinamis terdaftar di libcrypto dan menggunakan kait yang tersedia untuk mengimplementasikan algoritma kriptografi, paling sering implementasi alternatif dari algoritma yang telah disediakan oleh libcrypto (misalnya, dengan dukungan akselerasi perangkat keras), tetapi mereka juga dapat menyertakan algoritma yang tidak diimplementasikan dalam OpenSSL oleh secara default (misalnya, mekanisme GOST mengimplementasikan keluarga algoritma GOST Rusia). Beberapa mesin datang dengan distribusi OpenSSL, sementara yang lain datang dengan pihak ketiga (sekali lagi, GOST).
  3. libssl. Perpustakaan yang bergantung pada libcrypto dan mengimplementasikan protokol TLS dan DTLS.
  4. Aplikasi Seperangkat alat baris perintah yang menggunakan komponen dasar libssl dan libcrypto untuk menyediakan seperangkat fungsi kriptografis dan lainnya, seperti:

    • Pembuatan dan verifikasi kunci dan parameter
    • Pembuatan dan verifikasi sertifikat
    • Alat Pengujian SSL / TLS
    • ASN.1 Verifikasi
    • dan lainnya

    OpenSSL saat ini memiliki fitur-fitur berikut:

    1. EVP Lapisan EVP (amplop) API menyediakan antarmuka abstrak tingkat tinggi untuk fungsionalitas kriptografi, tanpa terikat dengan implementasi tertentu. Penggunaan langsung implementasi khusus algoritma kriptografi yang melewati antarmuka EVP tidak dianjurkan. Ini juga menyediakan operasi gabungan seperti penandatanganan dan verifikasi. Beberapa operasi gabungan juga disediakan sebagai operasi level EVP (misalnya, HMAC-SHA256). EVP juga memungkinkan penggunaan algoritma kriptografi dengan cara algoritmik-agnostik (misalnya, EVP_DigestSign berfungsi untuk algoritma RSA dan ECDSA).
    2. FIPS140 tidak didukung, itu hanya tersedia di OpenSSL-1.0.2, yang sebelum arsitektur saat ini dan tidak kompatibel dengan API atau ABI.

    Konsep Komponen


    Arsitektur yang ada adalah struktur empat tingkat sederhana dengan lapisan kripto di bagian bawah. Lapisan TLS tergantung pada lapisan kriptografi, dan aplikasi tergantung pada lapisan TLS dan lapisan kriptografi.

    Catatan: keberadaan komponen dalam diagram tidak berarti bahwa komponen tersebut adalah API publik atau dimaksudkan untuk akses / penggunaan langsung oleh pengguna akhir.



    Diagram Paket


    Komponen-komponen yang diuraikan di atas dikemas dalam pustaka (libcrypto dan libssl) dan antarmuka kernel yang sesuai, serta baris perintah yang dapat dieksekusi (openssl) untuk meluncurkan berbagai aplikasi. Ini ditunjukkan pada diagram di bawah ini.



    Arsitektur masa depan


    Fitur arsitektur masa depan:

    • Layanan kernel membentuk blok bangunan yang digunakan oleh aplikasi dan penyedia (misalnya, BIO, X509, SECMEM, ASN1, dll.).
    • Pemasok menggunakan algoritma kriptografi dan layanan dukungan. Penyedia mengimplementasikan satu atau lebih fungsi berikut:

      • Primitif kriptografi untuk algoritme: enkripsi, dekripsi, tanda tangan, hashing, dll.
      • Serialisasi untuk algoritma, misalnya, fungsi mengubah kunci pribadi ke file PEM. Serialisasi dapat dalam format atau dari format yang saat ini tidak didukung.
      • Simpan backend loader. OpenSSL saat ini dikirimkan bersama dengan bootloader untuk membaca kunci, parameter, dan elemen lain dari file. Vendor dapat mengimplementasikan pengunduh untuk membaca data dari tempat lain (misalnya, dari direktori LDAP).

      Penyedia dapat sepenuhnya otonom atau menggunakan layanan yang disediakan oleh berbagai penyedia atau layanan kernel. Misalnya, suatu aplikasi dapat menggunakan primitif kriptografi untuk suatu algoritma yang diterapkan oleh vendor akselerator perangkat keras, tetapi menggunakan layanan serialisasi vendor lain untuk mengekspor kunci ke format PKCS # 12.

      Penyedia default (yang berisi inti implementasi saat ini dari algoritma kriptografi OpenSSL) akan menjadi "bawaan", tetapi penyedia lain akan dapat memuat secara dinamis saat dijalankan.

      Modul penyedia legasi akan memberikan implementasi kriptografi untuk algoritma yang lebih lama (mis. DES, MDC2, MD2, Blowfish, CAST). Kami akan memposting aturan tentang bagaimana dan kapan algoritma beralih dari penyedia default ke penyedia usang.

      Penyedia FIPS yang mengimplementasikan modul kriptografis FIPS OpenSSL dapat memuat secara dinamis pada waktu berjalan.
    • Kernel menyediakan akses ke layanan yang ditawarkan oleh penyedia aplikasi (dan lainnya). Vendor memberikan akses kernel ke metode. Kernel adalah mekanisme di mana implementasi spesifik hal-hal seperti algoritma ditemukan.

      Kernel mengimplementasikan fungsi pencarian berbasis properti untuk menemukan algoritma. Misalnya, ini akan menemukan algoritma di mana "fips = true" atau "keysize = 128, constant_time = true". Rinciannya akan dipublikasikan dalam dokumen proyek selanjutnya.
    • Implementasi protokol seperti TLS, DTLS.

    Arsitektur masa depan memiliki karakteristik sebagai berikut:

    • Lapisan EVP menjadi pembungkus tipis untuk layanan yang diterapkan melalui pemasok. Sebagian besar panggilan dilakukan dengan minimal pra-pemrosesan, pasca-pemrosesan, atau tidak ada pemrosesan sama sekali.
    • API EVP baru akan muncul untuk mencari kernel untuk implementasi algoritma yang akan digunakan untuk panggilan EVP apa pun.
    • Informasi akan ditransfer antara perpustakaan utama dan pemasok dengan cara yang sama, terlepas dari implementasinya.
    • API yang tidak digunakan lagi (seperti API kriptografi level rendah yang tidak melewati lapisan EVP) akan dikecualikan. Perhatikan bahwa ada API lawas untuk algoritme yang tidak kedaluwarsa (misalnya, AES bukan algoritme yang ketinggalan zaman, tetapi AES_encrypt adalah API yang kedaluwarsa).
    • Modul kriptografi OpenSSL FIPS akan diimplementasikan sebagai penyedia yang dimuat secara dinamis. Ini akan bersifat otonom (mis., Mungkin hanya bergantung pada pustaka runtime sistem dan layanan yang disediakan oleh kernel).
    • Antarmuka lain juga dapat dikonversi menjadi menggunakan kernel dari waktu ke waktu (misalnya, OSSL_STORE).
    • Menggunakan mesin menuju ke pemasok. "Selamat tinggal, insinyur, halo, pemasok . "

    Konsep Komponen


    Diagram di bawah ini memberikan gambaran umum tentang komponen arsitektur OpenSSL di masa depan.

    Catatan: keberadaan komponen dalam diagram tidak berarti bahwa komponen tersebut adalah API publik atau dimaksudkan untuk akses / penggunaan langsung oleh pengguna akhir.



    Komponen-komponen berikut ditunjukkan di sini:

    • Aplikasi: utilitas baris perintah: ca, cipher, cms, dgst, dll.
    • Protokol: komponen menyediakan kemampuan untuk berkomunikasi antara titik akhir menggunakan protokol standar:
      • Protokol TLS: implementasi semua protokol TLS / DTLS yang didukung dan infrastruktur penyajian:
        • SSL BIO: BIO untuk komunikasi TLS
        • Statem: mesin negara TLS
        • Rekam: Lapisan Rekaman TLS
      • Protokol lain
        • CMS: Menerapkan Standar Sintaksis Pesan Kriptografis
        • OCSP: Implementasi Protokol Status Sertifikat Online
        • TS: Implementasi Protokol Stempel Waktu
      • Layanan Dukungan: Komponen yang dirancang khusus untuk mendukung implementasi kode protokol
        • Paket: komponen internal untuk membaca pesan protokol
        • Wpacket: komponen internal untuk merekam pesan protokol
    • Kernel: Ini adalah komponen mendasar yang menghubungkan permintaan layanan (mis., Enkripsi) ke penyedia layanan. Ini memungkinkan pemasok untuk mendaftarkan layanan mereka bersama dengan properti mereka. Kernel juga menyediakan kemampuan untuk menemukan layanan dengan serangkaian properti yang harus dijalankan oleh layanan. Misalnya, properti layanan enkripsi dapat mencakup "aead", "aes-gcm", "fips", "security-bits = 128", dll.
    • Penyedia Default: Menerapkan seperangkat layanan default yang terdaftar di kernel.
      • Layanan Dukungan
        • Implementasi tingkat rendah: ini adalah seperangkat komponen yang benar-benar mengimplementasikan primitif kriptografi.
    • Penyedia FIPS: mengimplementasikan seperangkat layanan yang diverifikasi dan tersedia untuk inti FIPS. Termasuk layanan dukungan berikut:
      • POST: Power On Self Test
      • KAT: Tes Jawaban yang Diketahui
      • Pemeriksaan integritas
      • Implementasi tingkat rendah: ini adalah seperangkat komponen yang benar-benar menerapkan kriptografi primitif (untuk memenuhi persyaratan FIPS yang berdiri sendiri).
    • Penyedia Algoritma Legacy: Menyediakan implementasi algoritma legacy yang akan disediakan melalui EVP API.
    • Penyedia pihak ketiga: Bukan bagian dari distribusi OpenSSL. Pihak ketiga dapat menjual pemasok mereka sendiri.
    • Layanan umum: membentuk blok bangunan yang digunakan oleh aplikasi dan pemasok (misalnya, BIO, X509, SECMEM, ASN1, dll.).
    • API yang sudah tidak digunakan lagi. API "Tingkat rendah": di sini kata "usang" merujuk secara khusus ke API, dan bukan ke algoritme itu sendiri. Misalnya, AES bukan algoritma yang ketinggalan zaman, tetapi ada API yang ketinggalan zaman untuk itu (misalnya, AES_encrypt).

    Diagram Paket


    Berbagai komponen yang dijelaskan di atas dalam diagram konseptual komponen secara fisik dikemas dalam:

    • Aplikasi yang dapat dieksekusi untuk pengguna
    • Perpustakaan untuk aplikasi
    • Modul yang dapat dimuat secara dinamis untuk kernel.




    Paket aktual berikut ditunjukkan di sini:

    • File yang dapat dieksekusi adalah OpenSSL. Aplikasi baris perintah.
    • Libssl. Berisi semua yang berhubungan langsung dengan TLS dan DTLS. Isinya sama seperti di libssl saat ini. Perhatikan bahwa beberapa layanan dukungan akan dipindahkan ke libcrypto.
    • Libcrypto Perpustakaan ini mengandung komponen-komponen berikut:
      • Implementasi layanan utama: X509, ASN1, EVP, OSSL_STORE, dll.
      • Intinya
      • Protokol Non-TLS atau DTLS
      • Layanan Dukungan Protokol (mis. Paket dan Wpacket)
      • Penyedia default yang berisi implementasi semua algoritma default
    • Libcrypto-legacy. Menyediakan API tingkat rendah yang lama. Implementasi algoritma untuk API ini dapat berasal dari penyedia mana pun.
    • Modul FIPS. Berisi penyedia FIPS yang mengimplementasikan serangkaian layanan yang diverifikasi oleh FIPS dan terdaftar di kernel.
    • Modul warisan. Berisi penyedia yang kedaluwarsa.

Source: https://habr.com/ru/post/id443844/


All Articles