Pustaka CorePKCS11 - FreeRTOS

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

Pustaka CorePKCS11

catatan

Konten pada halaman ini mungkin tidakup-to-date. Silakan lihat halaman perpustakaan FreeRtos.org untuk pembaruan terbaru.

Gambaran Umum

Standar Kriptografi Kunci Publik #11 mendefinisikan API independen platform untuk mengelola dan menggunakan token kriptografi. PKCS #11 mengacu pada API yang ditentukan oleh standar dan standar itu sendiri. API kriptografi PKCS #11 abstrak penyimpanan kunci, mendapatkan/mengatur properti untuk objek kriptografi, dan semantik sesi. Ini banyak digunakan untuk memanipulasi objek kriptografi umum, dan itu penting karena fungsi yang ditentukannya memungkinkan perangkat lunak aplikasi untuk menggunakan, membuat, memodifikasi, dan menghapus objek kriptografi, tanpa pernah mengekspos objek tersebut ke memori aplikasi. Misalnya, integrasi AWS referensi FreeRTOS menggunakan subset kecil API PKCS #11 untuk mengakses kunci rahasia (pribadi) yang diperlukan untuk membuat koneksi jaringan yang diautentikasi dan diamankan oleh protokol Transport Layer Security (TLS) tanpa aplikasi pernah 'melihat' kuncinya.

Pustaka CorePKCS11 berisi implementasi tiruan berbasis perangkat lunak dari antarmuka PKCS #11 (API) yang menggunakan fungsionalitas kriptografi yang disediakan oleh Mbed TLS. Menggunakan tiruan perangkat lunak memungkinkan pengembangan dan fleksibilitas yang cepat, tetapi diharapkan Anda akan mengganti tiruan dengan implementasi khusus untuk penyimpanan kunci aman yang digunakan dalam perangkat produksi Anda. Umumnya, vendor untuk cryptoprocessors aman, seperti Trusted Platform Module (TPM), Hardware Security Module (HSM), Secure Element, atau jenis kantong perangkat keras aman lainnya, mendistribusikan implementasi PKCS #11 dengan perangkat keras. Tujuan dari perangkat lunak CorePKCS11 hanya perpustakaan tiruan karena itu untuk menyediakan implementasi PKCS #11 khusus perangkat keras non yang memungkinkan untuk prototyping cepat dan pengembangan sebelum beralih ke cryptoprocessor tertentu PKCS #11 implementasi dalam perangkat produksi.

Hanya subset dari standar PKCS #11 yang diimplementasikan, dengan fokus pada operasi yang melibatkan kunci asimetris, pembuatan angka acak, dan hashing. Kasus penggunaan yang ditargetkan mencakup manajemen sertifikat dan kunci untuk otentikasi TLS, dan verifikasi tanda tangan tanda tangan kode, pada perangkat kecil yang disematkan. Lihat file pkcs11.h (diperoleh dari OASIS, badan standar) di repositori kode sumber FreeRTOS. Dalam implementasi referensi FreeRTOS, panggilan API PKCS #11 dilakukan oleh antarmuka pembantu TLS untuk melakukan otentikasi klien TLS selama. SOCKETS_Connect Panggilan API PKCS #11 juga dilakukan oleh alur kerja penyediaan pengembang satu kali kami untuk mengimpor sertifikat klien TLS dan kunci pribadi untuk otentikasi ke broker MQTT. AWS IoT Kedua kasus penggunaan, penyediaan dan otentikasi klien TLS, memerlukan implementasi hanya sebagian kecil dari standar antarmuka PKCS #11.

Fitur

Subset berikut dari PKCS #11 digunakan. Daftar ini kira-kira dalam urutan di mana rutinitas dipanggil untuk mendukung penyediaan, otentikasi klien TLS, dan pembersihan. Untuk penjelasan rinci tentang fungsi, lihat dokumentasi PKCS #11 yang disediakan oleh panitia standar.

Pengaturan umum dan meruntuhkan API

  • C_Initialize

  • C_Finalize

  • C_GetFunctionList

  • C_GetSlotList

  • C_GetTokenInfo

  • C_OpenSession

  • C_CloseSession

  • C_Login

API Penyediaan API Penyediaan API

  • C_CreateObject CKO_PRIVATE_KEY(untuk kunci pribadi perangkat)

  • C_CreateObject CKO_CERTIFICATE(untuk sertifikat perangkat dan sertifikat verifikasi kode)

  • C_GenerateKeyPair

  • C_DestroyObject

Autentikasi Klien

  • C_GetAttributeValue

  • C_FindObjectsInit

  • C_FindObjects

  • C_FindObjectsFinal

  • C_GenerateRandom

  • C_SignInit

  • C_Sign

  • C_VerifyInit

  • C_Verify

  • C_DigestInit

  • C_DigestUpdate

  • C_DigestFinal

Dukungan kriptografi asimetris

Implementasi referensi FreeRTOS menggunakan PKCS #11 2048-bit RSA (hanya penandatanganan) dan ECDSA dengan kurva NIST P-256. Petunjuk berikut menjelaskan cara membuat AWS IoT sesuatu berdasarkan sertifikat klien P-256.

Pastikan Anda menggunakan versi OpenSSL AWS CLI dan OpenSSL berikut (atau yang lebih baru):

aws --version aws-cli/1.11.176 Python/2.7.9 Windows/8 botocore/1.7.34 openssl version OpenSSL 1.0.2g 1 Mar 2016

Prosedur berikut mengasumsikan bahwa Anda menggunakan aws configure perintah untuk mengkonfigurasi. AWS CLI Untuk informasi selengkapnya, lihat Konfigurasi cepat dengan aws configure di Panduan AWS Command Line Interface Pengguna.

Untuk membuat AWS IoT sesuatu berdasarkan sertifikat klien P-256
  1. Buat AWS IoT sesuatu.

    aws iot create-thing --thing-name thing-name
  2. Gunakan OpenSSL untuk membuat kunci P-256.

    openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -outform PEM -out thing-name.key
  3. Buat permintaan pendaftaran sertifikat yang ditandatangani oleh kunci yang dibuat pada langkah 2.

    openssl req -new -nodes -days 365 -key thing-name.key -out thing-name.req
  4. Kirimkan permintaan pendaftaran sertifikat ke. AWS IoT

    aws iot create-certificate-from-csr \ --certificate-signing-request file://thing-name.req --set-as-active \ --certificate-pem-outfile thing-name.crt
  5. Lampirkan sertifikat (direferensikan oleh output ARN oleh perintah sebelumnya) ke benda itu.

    aws iot attach-thing-principal --thing-name thing-name \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"
  6. Buat kebijakan. (Kebijakan ini terlalu permisif. Ini harus digunakan untuk tujuan pengembangan saja.)

    aws iot create-policy --policy-name FullControl --policy-document file://policy.json

    Berikut ini adalah daftar file policy.json ditentukan dalam perintah. create-policy Anda dapat menghilangkan greengrass:* tindakan jika Anda tidak ingin menjalankan demo FreeRTOS untuk konektivitas dan penemuan Greengrass.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:*", "Resource": "*" }, { "Effect": "Allow", "Action": "greengrass:*", "Resource": "*" } ] }
  7. Lampirkan kepala sekolah (sertifikat) dan kebijakan untuk hal itu.

    aws iot attach-principal-policy --policy-name FullControl \ --principal "arn:aws:iot:us-east-1:123456789012:cert/86e41339a6d1bbc67abf31faf455092cdebf8f21ffbc67c4d238d1326c7de729"

Sekarang, ikuti langkah-langkah di bagian AWS IoTMemulai panduan ini. Jangan lupa untuk menyalin sertifikat dan kunci pribadi yang Anda buat ke aws_clientcredential_keys.h file Anda. Salin nama benda Anda ke dalamaws_clientcredential.h.

catatan

Sertifikat dan kunci pribadi dikodekan keras untuk tujuan demonstrasi saja. Aplikasi tingkat produksi harus menyimpan file-file ini di lokasi yang aman.

Porting

Untuk informasi tentang porting pustaka CorePkCS11 ke platform Anda, lihat Memindahkan Pustaka CorePkCS11 di Panduan Porting FreeRTOS.

Penggunaan memori

Ukuran Kode CorePKCS11 (contoh yang dihasilkan dengan GCC untuk ARM Cortex-M)
File Dengan Optimasi -O1 Dengan Optimasi -Os
core_pkcs11.c 0.8K 0.8K
core_pki_utils.c 0.5K 0,3K
core_pkcs11_mbedtls.c 8.9K 7.5K
Total perkiraan 10.2K 8.6K