Mem-porting perpustakaan inti PKCS11 - FreeRTOS

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

Mem-porting perpustakaan inti PKCS11

Standar Kriptografi Kunci Publik #11 mendefinisikan API independen platform untuk mengelola dan menggunakan token kriptografi. PKCS 11 mengacu pada standar dan yang APIs 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 PKCS #11 yang diperlukan APIs untuk mendukung.

Kasus penggunaan
Kasus Penggunaan Keluarga API PKCS #11 yang Diperlukan
Semua Inisialisasi, Selesaikan, Buka/Tutup Sesi,, Login GetSlotList
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 pembuatan 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 inti FreeRTOS PKCS11

PKCS11 Pustaka inti berisi implementasi berbasis perangkat lunak dari antarmuka (API) PKCS #11 yang menggunakan fungsionalitas kriptografi yang disediakan oleh Mbed 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 PKCS11 PAL inti untuk membuat implementasi PKCS11 berbasis perangkat lunak inti untuk bekerja dengan platform perangkat keras Anda.

Porting inti PKCS11

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 PKCS11 pustaka inti akan menyediakan perangkat dengan kredensi, dan kemudian memprogram ulang perangkat dengan aplikasi baru yang mengakses kredensional ini melalui antarmuka inti. PKCS11 Port PKCS11 PAL inti 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 pembaruan boot-loader dan (OTA) yang aman over-the-air

  • Just-In-TimeSertifikat penyediaan

Sertakan file header dan implementasikan PAL yang APIs ditentukan.

PAL APIs
Fungsi Deskripsi
PKCS11_PAL_inisialisasi

Menginisialisasi layer PAL. Disebut oleh PKCS11 perpustakaan inti pada awal urutan inisialisasi.

PKCS11_PAL_ SaveObject

Menulis data ke penyimpanan non-volatile.

PKCS11_PAL_ FindObject

Menggunakan PKCS #11 CKA_LABEL untuk 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 untuk PKCS11_PAL_GetObjectValue panggilan. Dapat digunakan untuk membebaskan memori yang dialokasikan dalam PKCS11_PAL_GetObjectValue panggilan.

Pengujian

Jika Anda menggunakan pustaka PKCS11 inti FreeRTOS atau mengimplementasikan subset PKCS11 APIs yang diperlukan, Anda harus lulus tes 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 diimplementasikan.

  • Port yang didukung dari PKCS11 APIs.

  • Implementasi fungsi platform tes kualifikasi FreeRTOS yang meliputi:

    • FRTest_ThreadCreate

    • FRTest_ThreadTimedJoin

    • FRTest_MemoryAlloc

    • FRTest_MemoryFree

(Lihat file README.md untuk Pengujian Integrasi Pustaka FreerTOS untuk PKCS #11 pada.) GitHub

Tes porting

  • Tambahkan FreeRTOS-Libraries-Integration-Testssebagai submodul ke dalam proyek Anda. Submodul dapat ditempatkan di direktori proyek apa pun, asalkan dapat dibangun.

  • Salin config_template/test_execution_config_template.h dan config_template/test_param_config_template.h ke lokasi proyek di jalur build, dan ganti namanya menjadi test_execution_config.h dantest_param_config.h.

  • Sertakan file yang relevan ke dalam sistem build. Jika menggunakanCMake, qualification_test.cmake dan src/pkcs11_tests.cmake dapat digunakan untuk menyertakan file yang relevan.

  • Terapkan UNITY_OUTPUT_CHAR agar log keluaran pengujian dan log perangkat tidak saling bertautan.

  • Integrasikan mBEDTLS, yang memverifikasi hasil operasi cryptoki.

  • Panggilan RunQualificationTest() dari aplikasi.

Mengkonfigurasi tes

PKCS11 Test suite harus dikonfigurasi sesuai dengan PKCS11 implementasi. Tabel berikut mencantumkan konfigurasi yang diperlukan oleh PKCS11 tes dalam file test_param_config.h header.

PKSC11 konfigurasi uji
Konfigurasi Deskripsi
PKCS11_TEST_RSA_KEY_DUKUNGAN

Porting mendukung fungsi kunci RSA.

PKCS11_TEST_EC_KEY_DUKUNGAN

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_TLS danPKCS11_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_DIDUKUNG

Porting mendukung penyimpanan untuk JITP. Setel ini ke 1 untuk mengaktifkan tes JITPcodeverify.

PKCS11_TEST_LABEL_CODE_VERIFICATION_KEY

Label kunci verifikasi kode yang digunakan dalam pengujian JITPcodeverify.

PKCS11_TEST_LABEL_JITP_CERTIFICATE

Label sertifikat JITP yang digunakan dalam tes codeverify JITP.

PKCS11_TEST_LABEL_ROOT_CERTIFICATE

Label sertifikat root yang digunakan dalam uji JITPcodeverify.

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. PKCS11 APIs Tes harus mengaktifkan konfigurasi berikut:

  • Setidaknya satu dari konfigurasi fungsi kunci berikut:

    • PKCS11_TEST_RSA_KEY_DUKUNGAN

    • PKCS11_TEST_EC_KEY_DUKUNGAN

  • Setidaknya satu dari konfigurasi penyediaan kunci berikut:

    • PKCS11_TEST_IMPORT_PRIVATE_KEY_SUPPORT

    • PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT

    • PKCS11_TEST_PREPROVISIONED_SUPPORT

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

  • PKCS11_TEST_PREPROVISIONED_SUPPORTharus diaktifkan dan mekanisme penyediaan lainnya dinonaktifkan.

  • Hanya satu fungsi tombol, salah satu PKCS11_TEST_RSA_KEY_SUPPORT atauPKCS11_TEST_EC_KEY_SUPPORT, yang diaktifkan.

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

Pengujian mungkin perlu dijalankan beberapa kali dengan konfigurasi yang berbeda, jika implementasi mendukung kredensyal 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_TLS dan PKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS dihancurkan selama pengujian jika salah satu PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT atau PKCS11_TEST_GENERATE_KEYPAIR_SUPPORT diaktifkan.

Menjalankan tes

Bagian ini menjelaskan bagaimana Anda dapat menguji PKCS11 antarmuka secara lokal dengan tes kualifikasi. Atau, Anda juga dapat menggunakan IDT untuk mengotomatiskan eksekusi. Lihat AWS IoT Device Tester FreeRTOS di Panduan Pengguna FreeRTOS untuk detailnya.

Instruksi berikut menjelaskan cara menjalankan tes:

  • Buka test_execution_config.h dan tentukan CORE_ PKCS11 _TEST_ENABLED ke 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 dengan. AWS IoT Device Tester Ikuti petunjuk dalam Menggunakan FreeRTOS di Panduan Pengguna FreerTOS AWS IoT Device Tester untuk mengatur validasi port. AWS IoT Device Tester Untuk menguji port pustaka tertentu, grup pengujian yang benar harus diaktifkan dalam device.json file di AWS IoT Device Tester configs folder.