Mem-porting pustaka CorePKCS11 - FreeRTOS

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mem-porting pustaka CorePKCS11

Standar Kritografi Kunci Publik #11 mendefinisikan API independen platform untuk mengelola dan menggunakan token kriptografi. PKCS 11mengacu pada standar dan API yang ditentukan olehnya. API kriptografi PKCS #11 mengabstraksi penyimpanan kunci, mendapatkan/mengatur properti untuk objek kriptografi, dan semantik sesi. Ini banyak digunakan untuk memanipulasi objek kriptografi umum. Fungsinya memungkinkan perangkat lunak aplikasi untuk menggunakan, membuat, memodifikasi, dan menghapus objek kriptografi, tanpa mengekspos objek tersebut ke memori aplikasi.

Pustaka FreeRTOS dan integrasi referensi menggunakan subset dari standar antarmuka PCCKS #11, dengan fokus pada operasi yang melibatkan kunci asimetris, pembuatan angka acak, dan hashing. Tabel di bawah ini mencantumkan kasus penggunaan dan API PKCS #11 yang diperlukan untuk mendukung.

Kasus Penggunaan
Kasus Penggunaan Keluarga PKCS #11 API yang diperlukan
Semua Inisialisasi, Selesaikan, Buka/Tutup Sesi, GetSlotList, Masuk
Penyediaan GenerateKeyPair, CreateObject, DestroyObject, InitToken, GetTokenInfo
TLS Acak, Tanda, FindObject, GetAttributeValue
Freertos+TCP Acak, Intisari
OTA Verifikasi, Digest, FindObject, GetAttributeValue

Kapan harus mengimplementasikan modul PKCS #11 lengkap

Menyimpan kunci pribadi dalam memori flash tujuan umum dapat menjadi nyaman dalam evaluasi dan skenario prototipe cepat. Kami menyarankan Anda menggunakan perangkat keras kriptografi khusus untuk mengurangi ancaman pencurian data dan duplikasi perangkat dalam skenario produksi. Perangkat keras kriptografi mencakup komponen dengan fitur yang mencegah kunci rahasia kriptografi diekspor. Untuk mendukung ini, Anda harus menerapkan subset PKCS #11 yang diperlukan untuk bekerja dengan pustaka FreeRTOS seperti yang didefinisikan dalam tabel di atas.

Kapan menggunakan FreeRTOS CorePKCS11

Pustaka CorePKCS11 berisi implementasi berbasis perangkat lunak dari antarmuka (API) PKCS #11 yang menggunakan fungsionalitas kriptografi yang disediakan olehMbed TLS. Ini disediakan untuk skenario prototipe dan evaluasi cepat di mana perangkat keras tidak memiliki perangkat keras kriptografi khusus. Dalam hal ini, Anda hanya perlu mengimplementasikan CorePKCS11 PAL untuk membuat implementasi berbasis perangkat lunak CorePKCS11 berfungsi dengan platform perangkat keras Anda.

Porting CorePKCS11

Anda harus memiliki implementasi untuk membaca dan menulis objek kriptografi ke memori non-volatile (NVM), seperti memori flash on-board. Objek kriptografi harus disimpan di bagian NVM yang tidak diinisialisasi dan tidak dihapus pada pemrograman ulang perangkat. Pengguna pustaka CorePKCS11 akan menyediakan perangkat dengan kredensil, dan kemudian memprogram ulang perangkat dengan aplikasi baru yang mengakses kredensil ini melalui antarmuka CorePKCS11. Port CorePKCS11 PAL harus menyediakan lokasi untuk menyimpan:

  • Sertifikat klien perangkat

  • Kunci pribadi klien perangkat

  • Kunci publik klien perangkat

  • CA root tepercaya

  • Kunci publik verifikasi kode (atau sertifikat yang berisi kunci publik verifikasi kode) untuk boot-loader yang aman dan over-the-air Pembaruan (OTA)

  • Sertifikat penyediaan Just-In-Time

Sertakanfile headerdan mengimplementasikan API PAL yang ditentukan.

PAL API
Fungsi Deskripsi
PKCS11_PAL_inisialisasi

Menginisialisasi layer PAL. Dipanggil oleh pustaka CorePKCS11 pada awal urutan inisialisasi.

PKCS11_PAL_SaveObject

Menulis data ke penyimpanan non-volatile.

PKCS11_PAL_FindObject

Menggunakan PKCS #11CKA_LABELuntuk mencari objek PKCS #11 yang sesuai di penyimpanan non-volatile, dan mengembalikan pegangan objek itu, jika ada.

PKCS11_PAL_GetObjectValue

Mengambil nilai dari sebuah objek, mengingat pegangan.

PKCS11_PAL_GetObjectValueCleanup

Pembersihan untukPKCS11_PAL_GetObjectValuepanggilan. Dapat digunakan untuk membebaskan memori yang dialokasikan dalam aPKCS11_PAL_GetObjectValuepanggilan.

Pengujian

Jika Anda menggunakan pustaka FreerTOS CorePKCS11 atau mengimplementasikan subset API PKCS11 yang diperlukan, Anda harus lulus pengujian FreerTOS PKCS11. Tes ini jika fungsi yang diperlukan untuk pustaka FreerTOS berfungsi seperti yang diharapkan.

Bagian ini juga menjelaskan bagaimana Anda dapat menjalankan tes PKCS11 FreeRTOS secara lokal dengan tes kualifikasi.

Prasyarat

Untuk mengatur tes FreeRTOS PKCS11, berikut ini harus diterapkan.

  • Port API PKCS11 yang didukung.

  • Implementasi fungsi platform tes kualifikasi FreeRTOS yang meliputi:

    • FRTest_ThreadCreate

    • FRTest_ThreadTimedJoin

    • FRTest_MemoryAlloc

    • FRTest_MemoryFree

(LihatREADME.mdfile untuk Tes Integrasi Perpustakaan FreeRTOS untuk PKCS #11 pada GitHub.)

Tes porting

  • MenambahkanFreertos-perpustakaan-integrasi-tessebagai submodul ke dalam proyek Anda. Submodul dapat ditempatkan di direktori proyek apa pun, asalkan dapat dibangun.

  • Salinconfig_template/test_execution_config_template.hdanconfig_template/test_param_config_template.hke lokasi proyek di jalur build, dan ganti namanya menjaditest_execution_config.hdantest_param_config.h.

  • Sertakan file yang relevan ke dalam sistem build. Jika menggunakanCMake,qualification_test.cmakedansrc/pkcs11_tests.cmakedapat digunakan untuk memasukkan file yang relevan.

  • MelaksanakanUNITY_OUTPUT_CHARsehingga log keluaran pengujian dan log perangkat tidak saling bertautan.

  • Integrasikan mBEDTLS, yang memverifikasi hasil operasi cryptoki.

  • PanggilanRunQualificationTest()dari aplikasi.

Mengkonfigurasi tes

Rangkaian pengujian PKCS11 harus dikonfigurasi sesuai dengan implementasi PKCS11. Tabel berikut mencantumkan konfigurasi yang diperlukan oleh pengujian PKCS11 ditest_param_config.hfile header.

Konfigurasi uji PKSC11
Konfigurasi Deskripsi
PKCS11_TEST_RSA_KEY_SUPPORT

Porting mendukung fungsi kunci RSA.

PKCS11_TEST_EC_KEY_SUPPORT

Porting mendukung fungsi kunci EC.

PKCS11_TEST_IMPORT_PRIVATE_KEY_SUPPORT

Porting mendukung impor kunci pribadi. Impor kunci RSA dan EC divalidasi dalam pengujian jika fungsi kunci pendukung diaktifkan.

PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT

Porting mendukung pembuatan keypair. Generasi keypair EC divalidasi dalam pengujian jika fungsi kunci pendukung diaktifkan.

PKCS11_TEST_PREPROVISIONED_SUPPORT

Porting memiliki kredensyal yang telah disediakan sebelumnya.PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS,PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLSdanPKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS, adalah contoh kredensialnya.

PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS

Label kunci pribadi yang digunakan dalam pengujian.

PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS

Label kunci publik yang digunakan dalam pengujian.

PKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS

Label sertifikat yang digunakan dalam tes.

PKCS11_TEST_JITP_CODEVERIFY_ROOT_CERT_SUPPORTED

Porting mendukung penyimpanan untuk JITP. Setel ini ke 1 untuk mengaktifkan JITPcodeverifytes.

PKCS11_TEST_LABEL_CODE_VERIFICATION_KEY

Label kunci verifikasi kode yang digunakan dalam JITPcodeverifytes.

PKCS11_TEST_LABEL_JITP_CERTIFICATE

Label sertifikat JITP yang digunakan dalam JITPcodeverifytes.

PKCS11_TEST_LABEL_ROOT_CERTIFICATE

Label sertifikat root yang digunakan dalam JITPcodeverifytes.

Pustaka FreeRTOS dan integrasi referensi harus mendukung minimal satu konfigurasi fungsi kunci seperti RSA atau tombol kurva Elliptic, dan satu mekanisme penyediaan kunci yang didukung oleh API PKCS11. Tes harus mengaktifkan konfigurasi berikut:

  • Setidaknya salah satu konfigurasi fungsi kunci berikut:

    • PKCS11_TEST_RSA_KEY_SUPPORT

    • PKCS11_TEST_EC_KEY_SUPPORT

  • Setidaknya satu dari konfigurasi penyediaan kunci berikut:

    • PKCS11_TEST_IMPORT_PRIVATE_KEY_SUPPORT

    • PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT

    • PKCS11_TEST_PREPROVISIONED_SUPPORT

Pengujian kredensyal perangkat yang telah disediakan sebelumnya harus berjalan dalam kondisi berikut:

  • PKCS11_TEST_PREPROVISIONED_SUPPORTharus diaktifkan dan mekanisme penyediaan lainnya dinonaktifkan.

  • Hanya satu fungsi kunci, jugaPKCS11_TEST_RSA_KEY_SUPPORTatauPKCS11_TEST_EC_KEY_SUPPORT, diaktifkan.

  • Siapkan label kunci yang telah disediakan sebelumnya sesuai dengan fungsi kunci Anda, termasukPKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS,PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLSdanPKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS. Kredensyal ini harus ada sebelum menjalankan tes.

Pengujian mungkin perlu dijalankan beberapa kali dengan konfigurasi yang berbeda, jika implementasinya mendukung kredensi yang telah disediakan sebelumnya dan mekanisme penyediaan lainnya.

catatan

Objek dengan labelPKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS,PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLSdanPKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLSdihancurkan selama tes jika salah satuPKCS11_TEST_GENERATE_KEYPAIR_SUPPORTatauPKCS11_TEST_GENERATE_KEYPAIR_SUPPORTdiaktifkan.

Menjalankan tes

Bagian ini menjelaskan bagaimana Anda dapat menguji antarmuka PKCS11 secara lokal dengan tes kualifikasi. Atau, Anda juga dapat menggunakan IDT untuk mengotomatiskan eksekusi. LihatAWS IoT Device Testeruntuk FreeRTOSdiPanduan Pengguna FreeRTOSuntuk detailnya.

Petunjuk berikut menjelaskan cara menjalankan tes:

  • Bukatest_execution_config.hdan mendefinisikanCORE_PKCS11_TEST_ENABLEDke 1.

  • Bangun dan flash aplikasi ke perangkat Anda untuk dijalankan. Hasil tes adalah output ke port serial.

Berikut ini adalah contoh hasil uji keluaran.

TEST(Full_PKCS11_StartFinish, PKCS11_StartFinish_FirstTest) PASS TEST(Full_PKCS11_StartFinish, PKCS11_GetFunctionList) PASS TEST(Full_PKCS11_StartFinish, PKCS11_InitializeFinalize) PASS TEST(Full_PKCS11_StartFinish, PKCS11_GetSlotList) PASS TEST(Full_PKCS11_StartFinish, PKCS11_OpenSessionCloseSession) PASS TEST(Full_PKCS11_Capabilities, PKCS11_Capabilities) PASS TEST(Full_PKCS11_NoObject, PKCS11_Digest) PASS TEST(Full_PKCS11_NoObject, PKCS11_Digest_ErrorConditions) PASS TEST(Full_PKCS11_NoObject, PKCS11_GenerateRandom) PASS TEST(Full_PKCS11_NoObject, PKCS11_GenerateRandomMultiThread) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_CreateObject) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_FindObject) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_GetAttributeValue) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_Sign) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_FindObjectMultiThread) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_GetAttributeValueMultiThread) PASS TEST(Full_PKCS11_RSA, PKCS11_RSA_DestroyObject) PASS TEST(Full_PKCS11_EC, PKCS11_EC_GenerateKeyPair) PASS TEST(Full_PKCS11_EC, PKCS11_EC_CreateObject) PASS TEST(Full_PKCS11_EC, PKCS11_EC_FindObject) PASS TEST(Full_PKCS11_EC, PKCS11_EC_GetAttributeValue) PASS TEST(Full_PKCS11_EC, PKCS11_EC_Sign) PASS TEST(Full_PKCS11_EC, PKCS11_EC_Verify) PASS TEST(Full_PKCS11_EC, PKCS11_EC_FindObjectMultiThread) PASS TEST(Full_PKCS11_EC, PKCS11_EC_GetAttributeValueMultiThread) PASS TEST(Full_PKCS11_EC, PKCS11_EC_SignVerifyMultiThread) PASS TEST(Full_PKCS11_EC, PKCS11_EC_DestroyObject) PASS ----------------------- 27 Tests 0 Failures 0 Ignored OK

Pengujian selesai ketika semua tes lulus.

catatan

Untuk secara resmi memenuhi syarat perangkat untuk FreeRTOS, Anda harus memvalidasi kode sumber porting perangkat denganAWS IoT Device Tester. Ikuti instruksi diMenggunakanAWS IoT Device Testeruntuk FreeRTOSdi Panduan Pengguna FreeRTOS untuk mengaturAWS IoT Device Testeruntuk validasi port. Untuk menguji port pustaka tertentu, grup pengujian yang benar harus diaktifkan didevice.jsonberkas diAWS IoT Device Tester configsfolder.