silabs 21Q2 selamat peranti BLE Makmal Keselamatan
Manual Makmal Keselamatan BLE
Dalam makmal ini, anda akan melihat cara mereka bentuk peranti BLE yang lebih selamat. Kita akan mulakan dengan penamatview tentang cara menggunakan beberapa ciri tindanan dan beralih kepada beberapa nasihat umum tentang teknik untuk sambungan yang lebih selamat dan akhirnya kita akan melihat cara menggunakan sijil peranti melalui BLE untuk mengenal pasti peranti sebagai tulen.
Bermula
Bluetooth sampAplikasi yang anda akan bina bertujuan untuk digunakan dengan pemuat but. Jika anda bekerja dengan EFR32MG21B serba baharu, ia tidak akan mempunyai pemuat but. Anda boleh menemui pemuat but pra-bina dalam platform\bootloader\sampfolder le-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a SDK anda.
- Mulakan dengan soc-kosong sampapl itu. Ini sampapl digunakan sebagai templat dan menjadi titik permulaan yang baik untuk mana-mana aplikasi BLE.
- Buka Silicon Labs Project Wizard daripada Simplicity Studio File menu -> baru.
- Pilih BRD4181C dan klik butang 'seterusnya'.
- Klik kotak semak 'Bluetooth (9)' di bawah jenis teknologi.
- Serlahkan 'Bluetooth – SoC Empty' kemudian klik seterusnya.
- Klik butang 'Selesai'.
- Kini anda boleh menambah beberapa ciri untuk melihat cara ciri yang dilindungi dan tidak dilindungi dilayan secara berbeza.
- Buka slcp projek file dengan mengklik dua kali dalam tetingkap Project Explorer
- Serlahkan tab 'KOMPONEN PERISIAN' dan buka alat konfigurasi GATT seperti yang ditunjukkan di bawah:
Dan gunakan alat import yang ditunjukkan di bawah untuk mengimport gatt_configuration.btconf file daripada folder pelayan dalam bahan yang disediakan.
Pangkalan data GATT mempunyai perkhidmatan tersuai, dipanggil 'Latihan', dengan beberapa data yang dilindungi dan ada yang tidak. Ini membolehkan anda membandingkan perkara yang berlaku apabila cuba mengakses ciri yang dilindungi berbanding ciri yang tidak dilindungi. Ini adalah cara cepat untuk membuat peranti dengan keselamatan yang sangat asas.
- Kami akan menggunakan port bersiri untuk mencetak ke konsol dalam Simplicity Studio untuk menjejaki perkara yang berlaku dalam aplikasi. Cara paling mudah untuk mencari komponen ini adalah dengan mencarinya dalam dialog KOMPONEN PERISIAN seperti yang ditunjukkan:
-
- Pasang komponen IO Stream USART
- Pasang komponen IO Stream Retarget STDIO
- Pasang komponen I/O Standard
- Pasang komponen Log
- Buka komponen Kawalan Papan dan hidupkan 'Dayakan UART COM Maya'
- Klik kanan penyesuai dalam panel 'Penyesuai nyahpepijat' dan pilih 'Konsol Pelancaran'. Pilih tab 'Siri 1' dan letakkan kursor dalam medan entri teks tetingkap konsol dan tekan enter untuk membangunkan konsol.
-
- Cipta pembolehubah setempat dalam sl_bt_on_event(), ditemui dalam app.c, untuk menyimpan pemegang sambungan. Pembolehubah mestilah statik kerana fungsi ini dipanggil setiap kali peristiwa dinaikkan oleh timbunan dan kami mahu nilai itu berterusan. Pemegang sambungan akan digunakan kemudian
bahagian makmal.
- Masukkan beberapa pernyataan app_log() untuk melihat peristiwa apabila kami disambungkan, mod keselamatan, dsb
-
- Sertakan pengepala app_log.h file
- sl_bt_evt_connection_opened – cetak pemegang bon dan simpan pemegang sambungan. Jika pemegang ikatan ialah 0xFF, tiada ikatan antara peranti yang disambungkan wujud. Ubah suai pengendali acara sedia ada supaya kelihatan seperti ini:
- sl_bt_evt_connection_parameters – mod keselamatan. Ini dilakukan supaya anda dapat melihat apabila mod keselamatan berubah. Terdapat perbezaan dalam penomboran mod keselamatan di mana mod keselamatan 1, dikira dengan nilai 0, dsb. Tambahkan pengendali acara berikut pada aplikasi anda:
- sl_bt_evt_connection_closed_id. Pengendali acara ini diubah suai untuk mengemas kini pemegang sambungan. Nilai 0xFF digunakan untuk menunjukkan bahawa tiada sambungan aktif. Arahan app_log() digunakan untuk mencetak sebab sambungan ditutup, senarai kod status ada di sini. Ubah suai pengendali acara sedia ada supaya kelihatan seperti ini:
- Sertakan pengepala app_log.h file
-
- Bina dan kilat projek. Pada ketika ini, kami akan menjalankan sample app untuk melihat bagaimana ia berkelakuan tanpa sebarang perubahan, selain pangkalan data GATT.
- Berhubung dengan aplikasi mudah alih EFRConnect seperti berikut:
-
- Ketik ikon 'Pelayar Bluetooth'.
- Ketik ikon 'Sambung' pada peranti bernama 'Latihan'.
-
- Baca ciri yang tidak dilindungi seperti berikut:
-
- Ketik pautan 'Maklumat Lanjut' di bawah perkhidmatan yang tidak diketahui dengan UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Baca ciri yang tidak dilindungi, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c dengan mengetik ikon 'Baca'. Tiada kejutan di sini. Memandangkan ciri tersebut tidak dilindungi dalam apa jua cara, ia akan dihantar dalam teks biasa.
-
- Sekarang baca ciri yang dilindungi, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Telefon mudah alih anda harus menggesa anda untuk berpasangan dan menyambung, mesej mungkin berbeza-beza bergantung pada OS mudah alih anda. Selepas anda menerima permintaan untuk berpasangan, anda harus menghantar mesej pada konsol seperti berikut:
Nota: Lampiran A di penghujung manual ini mempunyai ringkasan keupayaan I/O dan kaedah berpasangan untuk rujukan. Lampiran B meringkaskan mod keselamatan Bluetooth.
Konfigurasi Pengurus Keselamatan
Pengurus keselamatan adalah sebahagian daripada tindanan Bluetooth yang menentukan ciri keselamatan yang digunakan. Ciri-ciri ini termasuk perlindungan man-in-the-middle (MITM), sambungan LE Secure (aka ECDH), memerlukan pengesahan untuk ikatan, dsb. Pengurus keselamatan juga mengendalikan keupayaan I/O yang digunakan untuk menentukan kaedah yang digunakan untuk berpasangan /ikatan (lihat Lampiran A untuk ringkasan). Dalam bahagian ini anda akan melihat persediaan mudah.
- Sediakan SM dengan konfigurasi yang diingini. Perkakasan untuk makmal ini memudahkan untuk memaparkan kunci laluan pada konsol. Kemasukan kunci laluan adalah keperluan untuk membolehkan perlindungan MITM. Tambahkan kod berikut pada pengendali acara sl_bt_system_boot_id anda. Ini membolehkan lelaki di tengah dan memberitahu peranti jauh bahawa kami mempunyai keupayaan untuk memaparkan kunci laluan, tetapi itu sahaja.
- Untuk memaparkan kunci laluan pada konsol, pengendali acara diperlukan seperti yang ditunjukkan di bawah:
- Tetapkan mod ikatan, bilangan maksimum ikatan, dsb. Gunakan kod berikut untuk bermula:
Tetapan ini boleh digunakan untuk mengehadkan keupayaan penyerang untuk terikat dengan peranti anda. Jika produk anda hanya perlu mempunyai seorang pengguna, maka anda boleh mengehadkan bon maksimum kepada 1. Tempat yang baik untuk menambah panggilan ini ialah dalam pengendali acara sl_bt_system_boot_id. Kami tidak akan mendayakan ikatan pada masa ini untuk menjadikan seluruh makmal berjalan dengan lebih lancar tetapi kami menetapkan dasar ikatan untuk membenarkan hanya satu ikatan. Sebagai rujukan, dokumentasi untuk API ini terdapat di sini dan di sini.
- Tambahkan pengendali acara untuk sl_bt_evt_sm_bonded_id dan sl_bt_evt_sm_bonding_failed_id. Penggunaan utama untuk acara ini adalah bermaklumat pada masa ini tetapi kemudian dalam makmal anda akan menambah fungsi.
- Bina dan kilat ke papan sasaran. Sambung dengan EFRConnect dan baca ciri yang dilindungi seperti sebelum ini. Kali ini, anda akan melihat kunci laluan dipaparkan pada konsol. Masukkan kunci laluan ini pada telefon mudah alih anda apabila digesa.
- Cuba pengesahan ikatan. Ciri ini memberikan pengguna keupayaan untuk menghendaki permintaan ikatan disahkan. Melakukannya memberikan kawalan aplikasi ke atas peranti setara yang diikatnya. Satu kemungkinan adalah meminta pengguna menekan butang sebelum membenarkan bon.
- Buka tetapan Bluetooth dalam telefon mudah alih anda dan keluarkan ikatan pada peranti EFR32. Pelaksanaan telefon mudah alih berbeza-beza jadi langkah ini mungkin tidak diperlukan. Jika anda tidak melihat peranti 'Latihan' dalam tetapan Bluetooth anda, teruskan ke langkah seterusnya.
- Dalam komponen perisian, pasang satu contoh pengendali butang mudah.
- Sertakan pengepala file sl_simple_button_instances.h dalam app.c
- Tambah pengendali untuk acara sl_bt_evt_sm_bonding_confirm_id. Tugas utama pengendali acara ini adalah untuk memaklumkan pengguna bahawa peranti jauh meminta ikatan baharu.
- Tambahkan fungsi panggil balik untuk pengendali butang mudah untuk menghantar isyarat kepada tindanan Bluetooth yang menunjukkan bahawa butang telah ditekan. Ini mengatasi panggilan balik lalai yang hanya kembali.
- Tambah pengendali acara isyarat luaran. Peristiwa ini dibangkitkan sebagai tindak balas untuk menerima isyarat, seperti dalam langkah sebelumnya. Acara isyarat luaran akan digunakan untuk mengesahkan ikatan.
- Tukar panggilan kepada sl_bt_sm_configure untuk memerlukan pengesahan ikatan seperti
- Bina semula dan kilat.
- Sambung dengan EFRConnect dan baca ciri yang dilindungi seperti sebelum ini. Sekarang anda akan melihat mesej pada konsol seperti berikut:
Tekan PB0 untuk mengesahkan ikatan. Kini konsol akan memaparkan kunci laluan untuk dimasukkan pada telefon bimbit untuk ikatan. Masukkan kunci laluan untuk melengkapkan proses ikatan.
Petua: Gunakan kes lalai dalam pengendali acara untuk mencetak mesej apabila tindanan menghantar acara yang tidak dikendalikan. Timbunan mungkin cuba memberitahu anda sesuatu yang penting.
Melangkaui Asas
Pada ketika ini, anda telah mengambil advantage ciri keselamatan yang ditawarkan oleh timbunan kami. Sekarang mari kita perbaiki pelaksanaan melalui penggunaan ciri yang bijak yang ada pada kita. Langkah-langkah berikut adalah pilihan dan bebas antara satu sama lain, anda boleh membina dan berkelip selepas setiap satu untuk melihat gelagat atau mencuba semuanya bersama-sama.
- Putuskan sambungan pada percubaan bon yang gagal. Ini adalah tempat yang baik untuk mengesan ancaman. Jika peranti jauh tidak menyokong penyulitan/pengesahan atau hanya tidak mempunyai kunci yang betul, ia boleh menjadi penggodam. Jadi, mari putuskan hubungan. Cuba tambah panggilan ke sl_bt_connection_close() dalam acara sl_bt_sm_bonding_failed_id. API didokumenkan di sini.
Anda boleh menguji ciri ini dengan memasukkan kekunci laluan yang salah.
- Hanya membenarkan ikatan pada masa tertentu. Ini mengehadkan masa penyerang perlu membentuk ikatan dan memungkinkan untuk menggunakan ciri 'hanya benarkan sambungan terikat'. Pereka bentuk boleh memilih cara untuk mendayakan atau melumpuhkan mod boleh terikat. Untuk tujuan tunjuk cara di sini, kami akan mendayakan 'mod persediaan' dengan PB1 dan menggunakan pemasa untuk melumpuhkannya selepas 30 saat.
- Pasang contoh kedua antara muka butang mudah. Ini akan membolehkan penggunaan PB1.
- Ubah suai panggilan balik untuk menghantar isyarat berbeza kepada timbunan untuk mendayakan/melumpuhkan ikatan. Hasilnya sepatutnya kelihatan seperti ini:
- Ubah suai pengendali peristiwa isyarat luaran supaya ia mengendalikan isyarat baharu ini. Hasilnya sepatutnya seperti ini:
- Tambahkan pengendali acara untuk acara sl_bt_evt_system_soft_timer_id. Ini akan digunakan untuk melumpuhkan mod persediaan.
- Kod berikut boleh digunakan untuk mendayakan mod boleh terikat dan membenarkan semua sambungan atau melumpuhkan mod boleh terikat dan hanya membenarkan sambungan daripada peranti terikat:
- Tambahkan panggilan berikut dalam pengendali acara sl_bt_system_boot_id
- Bina projek dan kilatkannya ke peranti.
- Cuba sambungkan ke peranti dengan EFRConnect. Sambungan harus gagal.
- Sekarang cuba tekan PB1 sebelum menyambung dengan EFRConnect. Kali ini sambungan akan berjaya. Selepas 30 saat, anda akan melihat mesej pada konsol yang menunjukkan bahawa peranti keluar dari mod persediaan. Ini bermakna mod boleh terikat kini dilumpuhkan.
- Tingkatkan keselamatan semasa membuat sambungan. Memandangkan keselamatan adalah pilihan, kami harus meminta sambungan yang disulitkan secepat mungkin dan bukannya bergantung pada ciri GATT. API didokumenkan di sini. Tempat yang baik untuk memanggil API ini ialah dalam acara sl_bt_evt_connection_opened_id. Pemegang sambungan tersedia dalam pembolehubah sambungan.
Identiti Selamat
Memandangkan kami mempunyai peranti Bluetooth yang lebih selamat, mari tingkatkan langkah pengesahan. Anda telah melihat cara untuk mengesahkan identiti selamat peranti peti besi dengan baris arahan dalam makmal latihan sebelumnya. Dalam bahagian ini, kita akan melihat cara satu peranti BLE boleh mengesahkan identiti peranti BLE yang lain dengan meminta rantaian sijilnya dan menghantar cabaran. Semua bahagian peti besi selamat memegang sijil peranti dan sijil kelompok mereka sendiri. Sijil kilang dan akar dikodkan keras ke dalam aplikasi pelanggan untuk membolehkan pengesahan keseluruhan rantaian sijil. Rujuk AN1268 untuk butiran lanjut tentang identiti selamat.
- Tentukan penimbal global untuk menyimpan tandatangan pengesahan peranti seperti di bawah:
- Tetapkan konfigurasi pengurus keselamatan untuk menggunakan pasangan JustWorks. Ini dilakukan supaya sambungan disulitkan. Dalam amalan, perlindungan MITM harus digunakan tetapi untuk memastikan makmal mudah, kami akan menggunakan JustWorks. Tukar panggilan kepada sl_bt_sm_configure kembali kepada yang berikut:
Juga, ulas panggilan ke setup_mode(true) dalam pengendali acara system_boot.
- Buka helpers.c daripada bahan yang disediakan dan salin kandungan ke dalam app.c. Fungsi panggil balik ini melaksanakan tugas seperti membahagikan sijil supaya ia boleh dihantar melalui BLE, mengesahkan rantaian sijil dan menjana/mengesahkan cabaran.
- Ia adalah perlu untuk menentukan saiz unit pemindahan maksimum (MTU) supaya sijil boleh dibahagikan dan dipasang semula. Tentukan pembolehubah global untuk menyimpan MTU seperti yang ditunjukkan di sini:
Kemudian tambahkan pengendali acara untuk acara pertukaran GATT MTU seperti yang ditunjukkan di bawah:
- Terdapat tiga ciri data pengguna yang boleh dibaca. Ciri-ciri ini digunakan untuk menyampaikan sijil peranti, sijil kelompok dan cabaran. Fungsi panggil balik digunakan untuk mengendalikan permintaan baca pengguna ini. Tambah pengendali untuk memanggil fungsi ini seperti yang ditunjukkan di bawah:
Panggilan balik menggunakan MTU dari langkah #2 ke segmen dan menghantar sijil seperti yang diperlukan. Ia juga mengendalikan penghantaran cabaran yang ditandatangani.
- Pelanggan menghantar cabaran, nombor rawak untuk ditandatangani oleh pelayan, dengan menulis salah satu ciri GATT. Atas sebab ini, aplikasi perlu mempunyai pengendali untuk acara permintaan tulis pengguna seperti di bawah:
- Tambahkan sokongan identiti selamat files kepada projek:
- app_se_manager_macro.h, app_se_manager_secure_identity.c dan app_se_secure_identity.h daripada bahan yang disediakan kepada projek. Ini files mengandungi beberapa fungsi pembantu untuk tugas seperti mendapatkan saiz sijil, mendapatkan kunci awam peranti dan menandatangani cabaran.
- Sertakan app_se_manager_secure_identity.h dalam app.c.
- Import gatt_configuration-attest.btconf yang disediakan daripada bahan yang disediakan. Pangkalan data GATT ini dipanggil pengesahan selamat yang merangkumi empat ciri yang akan digunakan untuk mengesahkan identiti peranti kami. Ini termasuk sijil peranti, sijil kelompok, cabaran dan respons.
- Pelanggan, yang digunakan untuk mensimulasikan peranti seperti pintu masuk, disediakan sebagai projek yang lengkap kerana ia lebih kompleks untuk dibina. Secara umum, operasi pelanggan adalah seperti berikut:
- Mengimbas peranti yang mengiklankan perkhidmatan pengesahan selamat dan menyambungkannya.
- Menemui perkhidmatan dan ciri pangkalan data GATT.
- Membaca peranti dan sijil kelompok dan mengesahkan rantaian sijil menggunakan sijil kilang dan akar yang telah disimpan dalam denyar.
- Menghantar cabaran rawak kepada pelayan.
- Percubaan untuk mengesahkan respons kepada cabaran.
- Menutup sambungan jika salah satu pengesahan gagal.
- Bina dan kilat projek pelayan ke pelayan WSTK /papan radio anda.
- Import projek klien daripada folder klien dalam bahan yang disediakan. Bina dan kilat projek klien ke WSTK/radioboard pelanggan anda.
- Tekan set semula pada klien WSTK dan buka konsol bersiri. Pelanggan mula mengimbas peranti yang mengiklankan perkhidmatan identiti selamat kami dan akan menyambung apabila ia menemuinya.
- Pelanggan akan memaparkan beberapa mesej untuk menunjukkan bahawa ia telah menemui pelayan dengan perkhidmatan yang dikehendaki dan mesej status mengenai pengesahan rantaian sijil.
- Jika pengesahan lulus, pelanggan akan menjana nombor rawak, dipanggil cabaran, dan menghantarnya ke pelayan. Pelayan akan menandatangani cabaran dengan kunci peranti peribadi yang dipegang dengan selamat dan tandatangan kembali kepada pelanggan, ini dipanggil respons cabaran. Pelanggan kemudiannya menggunakan kunci awam dalam sijil peranti yang diterima sebelum ini untuk mengesahkan tandatangan. Ini dilakukan untuk mengesahkan bahawa pelayan benar-benar mempunyai kunci peribadi yang didakwanya. Jika cabaran disahkan dengan betul, mesej dipaparkan untuk kesan itu; jika tidak, sambungan ditutup, dan mesej dipaparkan menerangkan sebabnya.
- Sekarang hantar sijil yang tidak sah untuk mengesahkan bahawa pengesahan benar-benar berfungsi. Anda boleh mengubah suai user_read_request_cb() untuk merosakkan sama ada data sijil atau respons cabaran.
Lampiran A – Keupayaan I/O dan Kaedah Berpasangan 
Lampiran B – Mod dan Tahap Keselamatan
Mod keselamatan 1 ialah satu-satunya mod yang disokong untuk Bluetooth Tenaga Rendah dalam timbunan Silicon Labs. Tahapnya adalah seperti berikut:
- Tahap 1 tiada keselamatan
- Tahap 2 gandingan tidak disahkan dengan penyulitan
- Tahap 3 berpasangan disahkan dengan penyulitan
- Tahap 4 mengesahkan sambungan selamat dengan penyulitan yang kuat (pertukaran kunci ECDH)
Dokumen / Sumber
![]() |
silabs 21Q2 selamat peranti BLE Makmal Keselamatan [pdf] Manual Pengguna Makmal Keselamatan peranti BLE 21Q2 selamat, Makmal Keselamatan peranti BLE selamat, Makmal Keselamatan |