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
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 | 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.
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
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 |
PKCS11_PAL_ GetObjectValue |
Mengambil nilai dari sebuah objek, mengingat pegangan. |
PKCS11_PAL_ GetObjectValueCleanup |
Pembersihan untuk |
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
Tes porting
Tambahkan FreeRTOS-Libraries-Integration-Tests
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 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.
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 |
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 JITP |
PKCS11_TEST_LABEL_CODE_VERIFICATION_KEY |
Label kunci verifikasi kode yang digunakan dalam pengujian JITP |
PKCS11_TEST_LABEL_JITP_CERTIFICATE |
Label sertifikat JITP yang digunakan dalam tes |
PKCS11_TEST_LABEL_ROOT_CERTIFICATE |
Label sertifikat root yang digunakan dalam uji 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. 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_SUPPORT
harus 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, termasuk
PKCS11_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.