Cryptology Academy · Pelajaran

API OpenSSL: Struktur Teras dan Perangkap

Pelajari penggunaan API EVP, abstraksi BIO dan corak salah guna API OpenSSL yang paling lazim.

Pelajaran 2 daripada 413 langkah

API OpenSSL: Struktur Teras dan Perangkap ialah pelajaran Cryptology Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Cryptology Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Cryptology Academy merangkumi sejumlah 4 pelajaran.

API EVP: Antara Muka Aras Tinggi

API EVP (Envelope) ialah antara muka aras tinggi OpenSSL untuk operasi kriptografi dan merupakan API yang betul untuk digunakan dalam kod aplikasi. API ini mengabstrakkan butiran khusus algoritma melalui antara muka yang konsisten, menyokong pecutan perkakasan melalui ENGINE dan provider secara automatik, serta mengendalikan butiran pelapisan dan mod dengan betul. API khusus algoritma aras rendah OpenSSL tidak lagi digunakan dalam versi moden dan harus dielakkan.

EVP_CIPHER_CTX untuk Penyulitan Simetri

Penyulitan simetri dalam OpenSSL menggunakan objek konteks EVP_CIPHER_CTX. Urutan operasinya ialah: EVP_CIPHER_CTX_new untuk memperuntukkan konteks, EVP_EncryptInit_ex untuk memulakannya dengan sifir dan kunci, EVP_EncryptUpdate berulang kali untuk memproses data, EVP_EncryptFinal_ex untuk melengkapkan blok akhir dan mendapatkan baki hasil, serta EVP_CIPHER_CTX_free untuk melepaskan memori. Melangkau EncryptFinal_ex ialah kesilapan biasa yang menghasilkan hasil terpotong.

EVP_MD_CTX untuk Pencincangan

Pencernaan mesej menggunakan EVP_MD_CTX dengan cara yang sama: EVP_MD_CTX_new, EVP_DigestInit_ex dengan algoritma (EVP_sha256(), EVP_sha3_256() dan sebagainya), EVP_DigestUpdate dengan cebisan data, serta EVP_DigestFinal_ex untuk mendapatkan cincangan. Operasi HMAC menggunakan HMAC_CTX berasingan atau API EVP_MAC yang lebih baharu. Abstraksi EVP membolehkan algoritma cincangan ditukar hanya dengan mengubah satu panggilan fungsi.

EVP_PKEY untuk Kunci Asimetri

EVP_PKEY ialah objek kunci asimetri bersatu dalam OpenSSL yang menyokong RSA, ECDSA, Ed25519, DH dan algoritma lain melalui satu antara muka. Kunci dicipta daripada fail PEM atau DER menggunakan PEM_read_PrivateKey dan PEM_read_PUBKEY, atau dijana menggunakan EVP_PKEY_keygen. EVP_PKEY_sign dan EVP_PKEY_verify melaksanakan penandatanganan serta pengesahan untuk apa-apa jenis kunci menggunakan panggilan fungsi yang sama.

Abstraksi BIO untuk Input/Output

BIO (Basic I/O) ialah lapisan abstraksi input/output OpenSSL yang membolehkan data yang dilindungi TLS atau data mentah dibaca dan ditulis melalui rantaian objek BIO. Rantaian BIO mungkin terdiri daripada BIO_new_ssl (lapisan TLS) yang disambungkan kepada BIO_new_connect (sambungan TCP). Penulisan kepada BIO SSL akan menyulitkan dan menghantar data secara automatik; pembacaan pula menyahsulitkan data yang diterima. Objek BIO menyokong fail, soket, penimbal memori dan penapis (base64, penimbalan).

Objek SSL_CTX dan SSL

Sambungan TLS dalam OpenSSL menggunakan dua objek: SSL_CTX (konteks) menyimpan konfigurasi dikongsi: sijil, kunci peribadi, himpunan CA, had versi protokol dan senarai sifir. SSL mewakili satu sambungan individu yang diterbitkan daripada konteks tersebut. Cipta satu SSL_CTX bagi setiap aplikasi, kemudian cipta objek SSL daripadanya untuk setiap sambungan. SSL_read dan SSL_write memindahkan teks biasa; OpenSSL mengendalikan semua pembingkaian dan penyulitan TLS secara dalaman.

Perangkap Kritikal: Mengabaikan Nilai Pulangan

Kesilapan OpenSSL yang paling berbahaya ialah mengabaikan nilai pulangan. EVP_EncryptFinal_ex, SSL_read dan SSL_write semuanya mengembalikan nilai negatif atau sifar untuk menunjukkan ralat. Memanggil SSL_read dalam gelung tanpa memeriksa SSL_get_error boleh menyebabkan gelung tanpa penghujung atau menyebabkan ralat terlepas pandang. Nilai pulangan setiap fungsi OpenSSL yang boleh gagal mesti diperiksa; kegagalan sering menunjukkan keadaan yang berkaitan dengan keselamatan seperti kegagalan jabat tangan atau ralat pengesahan sijil.

Perangkap: Tidak Memeriksa SSL_get_error

SSL_read dan SSL_write boleh mengembalikan SSL_ERROR_WANT_READ atau SSL_ERROR_WANT_WRITE, yang menunjukkan bahawa operasi tersebut perlu dicuba semula selepas menunggu input/output. Ini bukan ralat sebenar, sebaliknya pemberitahuan input/output tidak menyekat. Kod yang tidak memanggil SSL_get_error dan membuat percabangan dengan betul berdasarkan keadaan ini akan sama ada mengalami gelung sibuk atau menganggap keadaan tersebut sebagai ralat. Sentiasa gunakan SSL_get_error untuk mentafsir nilai pulangan negatif daripada operasi input/output TLS.

API Aras Rendah yang Tidak Lagi Digunakan

OpenSSL mengandungi banyak fungsi aras rendah yang tidak lagi digunakan dan tidak sepatutnya muncul dalam kod baharu: panggilan terus kepada DES_encrypt1, penggunaan terus fungsi cincangan SHA1 atau MD5 tanpa lapisan EVP, RSA_private_encrypt dan bukannya EVP_PKEY_sign, serta AES_encrypt (AES ECB tanpa pengesahan). API ini memintas pemeriksaan keselamatan, menggunakan algoritma yang tidak lagi disokong atau sememangnya kurang selamat berbanding padanan EVP-nya. Amaran pengkompil sering menandakan penggunaan API yang tidak lagi disokong.

Kebocoran Memori dalam Kod OpenSSL

OpenSSL menggunakan pengurusan memori eksplisit; setiap objek yang diperuntukkan mesti dilepaskan secara eksplisit. Kebocoran memori yang biasa berlaku termasuk terlupa memanggil EVP_CIPHER_CTX_free selepas penyulitan, tidak memanggil SSL_free selepas menutup sambungan, atau tidak memanggil X509_free selepas pengesahan sijil. Dalam pelayan yang berjalan lama, kebocoran ini menyebabkan kehabisan memori secara beransur-ansur. Gunakan alat seperti valgrind atau AddressSanitizer untuk mengesan kebocoran memori OpenSSL semasa pembangunan.

Model Provider OpenSSL 3.0

OpenSSL 3.0 memperkenalkan model provider yang menggantikan API ENGINE lama untuk pecutan perkakasan. Provider ialah modul yang boleh dimuatkan dan melaksanakan algoritma kriptografi: provider lalai (perisian), provider legasi (algoritma lama), provider FIPS (disahkan FIPS 140-2), serta provider pihak ketiga untuk HSM. Provider FIPS membolehkan operasi yang mematuhi piawaian dengan mengehadkan algoritma yang tersedia kepada algoritma yang diluluskan oleh FIPS 140-2, tanpa mengubah kod aplikasi.

Kepentingan API EVP

Mengapakah API EVP OpenSSL lebih diutamakan berbanding API aras rendah khusus algoritma?

Ringkasan API OpenSSL

Ringkasan API OpenSSL: sentiasa gunakan API aras tinggi EVP, EVP_CIPHER_CTX untuk operasi simetri, EVP_MD_CTX untuk pencincangan, EVP_PKEY untuk kunci asimetri, rantaian BIO untuk abstraksi input/output, SSL_CTX dan SSL untuk sambungan TLS, sentiasa semak nilai pulangan dan panggil SSL_get_error, lepaskan semua objek yang diperuntukkan untuk mencegah kebocoran, elakkan fungsi aras rendah yang tidak lagi digunakan, serta gunakan provider OpenSSL 3.0 untuk pematuhan FIPS atau pecutan perkakasan.

Percuma untuk bermula

Pelajari Cryptology Academy dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
67
Pelajaran
261

Soalan Lazim

Adakah pelajaran “API OpenSSL: Struktur Teras dan Perangkap” percuma?

Ya — teks penuh “API OpenSSL: Struktur Teras dan Perangkap” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Cryptology Academy, tingkat taraf kepada CoddyKit PRO. Kursus Cryptology Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “API OpenSSL: Struktur Teras dan Perangkap”?

Pelajari penggunaan API EVP, abstraksi BIO dan corak salah guna API OpenSSL yang paling lazim. Anda berlatih Cryptology Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Cryptology Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Cryptology Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “API OpenSSL: Struktur Teras dan Perangkap” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Cryptology Academy ini?

Ya. Setiap pelajaran Cryptology Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. libsodium: Pustaka Kripto Tahan Salah Guna
  2. API OpenSSL: Struktur Teras dan Perangkap
  3. Google Tink: Kripto Tahap Tinggi yang Selamat
  4. Mengaudit dan Memilih Kebergantungan Kriptografi
← Kembali ke Cryptology Academy