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 11
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 | 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
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 header
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 #11 |
PKCS11_PAL_GetObjectValue |
Mengambil nilai dari sebuah objek, mengingat pegangan. |
PKCS11_PAL_GetObjectValueCleanup |
Pembersihan untuk |
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.md
Tes porting
MenambahkanFreertos-perpustakaan-integrasi-tes
sebagai submodul ke dalam proyek Anda. Submodul dapat ditempatkan di direktori proyek apa pun, asalkan dapat dibangun. Salin
config_template/test_execution_config_template.h
danconfig_template/test_param_config_template.h
ke lokasi proyek di jalur build, dan ganti namanya menjaditest_execution_config.h
dantest_param_config.h
.Sertakan file yang relevan ke dalam sistem build. Jika menggunakan
CMake
,qualification_test.cmake
dansrc/pkcs11_tests.cmake
dapat digunakan untuk memasukkan file yang relevan.Melaksanakan
UNITY_OUTPUT_CHAR
sehingga log keluaran pengujian dan log perangkat tidak saling bertautan.Integrasikan mBEDTLS, yang memverifikasi hasil operasi cryptoki.
Panggilan
RunQualificationTest()
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.h
file header.
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 |
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 JITP |
PKCS11_TEST_LABEL_CODE_VERIFICATION_KEY |
Label kunci verifikasi kode yang digunakan dalam JITP |
PKCS11_TEST_LABEL_JITP_CERTIFICATE |
Label sertifikat JITP yang digunakan dalam JITP |
PKCS11_TEST_LABEL_ROOT_CERTIFICATE |
Label sertifikat root yang digunakan dalam JITP |
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_SUPPORT
harus diaktifkan dan mekanisme penyediaan lainnya dinonaktifkan.Hanya satu fungsi kunci, juga
PKCS11_TEST_RSA_KEY_SUPPORT
atauPKCS11_TEST_EC_KEY_SUPPORT
, diaktifkan.Siapkan label kunci yang telah disediakan sebelumnya sesuai dengan fungsi kunci Anda, termasuk
PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS
,PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS
danPKCS11_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_TLS
danPKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS
dihancurkan selama tes jika salah satuPKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
atauPKCS11_TEST_GENERATE_KEYPAIR_SUPPORT
diaktifkan.
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:
Buka
test_execution_config.h
dan 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.json
berkas diAWS IoT Device Tester configs
folder.