silabs 21Q2 secure device BLE Security Lab
Manuale di laboratorio di sicurezza BLE
In questu labburatoriu, vi vede cumu cuncepisce un dispositivu BLE più sicuru. Cuminciaremu cù un sopraview di cumu utilizà alcune di e funzioni di stack è passanu à qualchi cunsiglii generale nantu à e tecniche per e cunnessione più sicure è, infine, vedemu cumu utilizà i certificati di u dispositivu nantu à BLE per identificà un perifericu cum'è autenticu.
Cuminciatu
U Bluetooth sampl'applicazione chì vi custruite hè destinata à esse usata cù un bootloader. Sè vo avete travagliatu cù un novu EFR32MG21B, ùn hà micca un bootloader. Pudete truvà un bootloader pre-custruitu in a piattaforma \ bootloader \ sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a cartulare di u vostru SDK.
- Cumincià cù un soc-vicu sampl'app. Questu sampl'app hè aduprata cum'è mudellu è face un bonu puntu di partenza per qualsiasi applicazione BLE.
- Aprite u Silicon Labs Project Wizard da Simplicity Studio File menu -> novu.
- Selezziunà u BRD4181C è cliccate nant'à u buttone 'next'.
- Cliccate nantu à a casella "Bluetooth (9)" sottu u tipu di tecnulugia.
- Evidenziate "Bluetooth - SoC Empty" è cliccate dopu.
- Cliccate u buttone 'Finish'.
- Avà pudete aghjunghje alcune caratteristiche per vede cumu e caratteristiche prutette è senza prutezzione sò trattate di manera diversa.
- Aprite u slcp di u prugettu file clicchendu duie volte in a finestra di u Prughjettu Explorer
- Evidenziate a tabulazione "COMPONENTI SOFTWARE" è apre u strumentu di cunfigurazione GATT cum'è mostra quì sottu:
È utilizate l'utillita d'importazione mostrata quì sottu per impurtà u gatt_configuration.btconf file da u cartulare di u servitore in i materiali furniti.
A basa di dati GATT hà un serviziu persunalizatu, chjamatu "Formazione", cù qualchi dati chì sò prutetti è altri chì ùn sò micca. Questu permette di paragunà ciò chì succede quandu pruvate d'accede à una caratteristica prutetta versus una senza prutezzione. Quissa hè una manera rapida di fà un dispusitivu cu assai basi di sicurità.
- Adupremu u portu seriale per stampà à a cunsola in Simplicity Studio per seguità ciò chì succede in l'applicazione. U modu più faciule per truvà questi cumpunenti hè di circà elli in u dialogu COMPONENTI SOFTWARE cum'è mostratu:
-
- Installa u cumpunente IO Stream USART
- Installa u cumpunente IO Stream Retarget STDIO
- Installa u cumpunente I/O Standard
- Installa u cumpunente Log
- Aprite u cumpunente di cuntrollu di u bordu è attivate l'opzione "Abilita Virtual COM UART"
- Cliccate cù u dirittu nantu à l'adattatore in u pannellu "Debug adapters" è selezziunate "Launch Console". Selezziunate a tabulazione "Serial 1" è mette u cursore in u campu di ingressu di testu di a finestra di a cunsola è appughjà enter per svegliate a cunsola.
-
- Crea una variàbile locale in sl_bt_on_event (), truvata in app.c, per salvà u manicu di cunnessione. A variàbile deve esse statica postu chì sta funzione hè chjamata ogni volta chì un avvenimentu hè risuscitatu da a pila è vulemu chì u valore sia persistente. U manicu di cunnessione serà utilizatu in più tardi
sezione di u laboratoriu.
- Inserite qualchi app_log () dichjarazioni per l'avvenimenti per vede quandu simu cunnessi, modi di sicurità, etc.
-
- Includite l'intestazione app_log.h file
- sl_bt_evt_connection_opened - stampate u manicu di ligame è salvà u manicu di cunnessione. Se u manicu di ligame hè 0xFF, ùn esiste micca ligame trà i dispositi cunnessi. Mudificà u gestore di l'eventi esistenti in modu chì pare qualcosa cusì:
- sl_bt_evt_connection_parameters - modu di sicurità. Questu hè fattu in modu chì pudete vede quandu u modu di sicurità cambia. Ci hè una diferenza in a numerazione di i modi di sicurità induve u modu di sicurità 1, hè enumeratu cù u valore 0, etc. Aghjunghjite u seguente gestore di eventi à a vostra applicazione:
- sl_bt_evt_connection_closed_id. Stu gestore di l'avvenimentu hè mudificatu per aghjurnà u handle di cunnessione. U valore 0xFF hè utilizatu per indicà chì ùn ci hè micca una cunnessione attiva. U cumandimu app_log () hè utilizatu per stampà u mutivu di a cunnessione chì hè chjusa, a lista di codici di statutu hè quì. Mudificà u gestore di l'eventi esistenti in modu chì pare qualcosa cusì:
- Includite l'intestazione app_log.h file
-
- Custruite è lampà u prugettu. A stu puntu, correremu u sampl'app per vede cumu si cumporta senza cambiamenti, in più di a basa di dati GATT.
- Cunnettete cù l'app mobile EFRConnect cum'è seguita:
-
- Tap l 'icona 'Bluetooth Browser'.
- Tap l 'icona 'Connect' nant'à u dispusitivu chjamatu 'Training'.
-
- Leghjite a caratteristica senza prutezzione cusì:
-
- Toccate u ligame "More Info" sottu u serviziu scunnisciutu cù UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Leghjite a caratteristica senza prutezzione, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c toccu l'icona "Leggi". Nisuna sorpresa quì. Siccomu a caratteristica ùn hè micca prutetta in ogni modu, serà mandata in testu chjaru.
-
- Avà leghje a caratteristica prutetta, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. U vostru telefuninu duverebbe invià à accoppià è cunnette, u missaghju pò varià secondu u vostru OS mobile. Dopu avè accettatu a dumanda di accoppià, duvete un missaghju nantu à a cunsola cusì:
Nota: L'Appendice A à a fine di stu manuale hà un riassuntu di e capacità I/O è i metudi di accoppiamentu per riferimentu. L'Appendice B riassume i modi di sicurezza Bluetooth.
Configurazione di u Manager di Sicurezza
U gestore di sicurità face parte di a pila Bluetooth chì determina quali funzioni di sicurezza sò aduprate. Queste caratteristiche includenu a prutezzione di l'omu in u mediu (MITM), i cunnessioni LE Secure (aka ECDH), chì necessitanu cunferma per u ligame, etc. U gestore di sicurità gestisce ancu e capacità I / O chì sò usati per determinà quale metudu hè utilizatu per l'accoppiamentu. /bonding (vede l'Appendice A per un riassuntu). In questa sezione, vi vede una cunfigurazione simplice.
- Setup SM cù a cunfigurazione desiderata. U hardware per stu labburatoriu facilita a visualizazione di una passkey in a cunsola. L'entrata di u passkey hè un requisitu per attivà a prutezzione MITM. Aghjunghjite u codice seguente à u vostru gestore di eventi sl_bt_system_boot_id. Questu permette l'omu in u mediu è informa à u dispositivu remotu chì avemu a capacità di vede un passkey, ma questu hè tuttu.
- Per affissà a chjave d'accessu nantu à a cunsola, un gestore di l'eventi hè necessariu cum'è mostra quì sottu:
- Stabilite u modu di ligame, u numeru massimu di ligami, etc. Aduprate u codice seguente per cumincià:
Queste paràmetri ponu esse aduprati per limità a capacità di l'attaccante di ligà cù u vostru dispositivu. Se u vostru pruduttu solu deve avè un utilizatore, pudete limità i ligami massimi à 1. Un bonu postu per aghjunghje sti chjamati hè in u sl_bt_system_boot_id event handler. Ùn permetteremu micca u ligame in questu momentu per fà u restu di u laboratoriu andate più liscia, ma avemu stabilitu una pulitica di ligame per permette solu un ligame. Per riferimentu, a documentazione per queste API si trova quì è quì.
- Aggiungi gestori di eventi per sl_bt_evt_sm_bonded_id è sl_bt_evt_sm_bonding_failed_id. L'usu principale per questi avvenimenti hè informativu attualmente, ma più tardi in u laboratoriu aghjunghje funziunalità.
- Custruite è lampate à u tavulinu di destinazione. Cunnettete cù EFRConnect è leghje a caratteristica prutetta cum'è prima. Sta volta, vi vede un passkey affissatu nantu à a cunsola. Inserite stu passkey in u vostru telefuninu quandu vi dumanda.
- Pruvate a cunferma di ligame. Questa funzione dà à l'utilizatore a capacità di dumandà chì e richieste di ligame sò cunfirmate. Fendu cusì dà u cuntrollu di l'applicazione nantu à quali dispusitivi pari cù u ligame. Una pussibilità hè di dumandà à l'utilizatore per appughjà un buttone prima di permette u ligame.
- Aprite i paràmetri Bluetooth in u vostru telefuninu è sguassate u ligame à u dispositivu EFR32. L'implementazione di u telefuninu mobile varieghja cusì stu passu pò esse micca necessariu. Sè vo ùn vede u dispusitivu 'Training' in i vostri paràmetri Bluetooth, ghjustu viaghjà à u passu prossimu.
- In i cumpunenti di u software, installate una istanza di u gestore di buttone simplice.
- Includite l'intestazione file sl_simple_button_instances.h in app.c
- Aghjunghjite un gestore per l'avvenimentu sl_bt_evt_sm_bonding_confirm_id. U travagliu principale di stu gestore di l'avvenimentu hè di informà l'utilizatori chì un dispositivu remotu dumanda un novu ligame.
- Aghjunghjite una funzione di callback per u gestore di buttone simplice per mandà un signalu à a pila Bluetooth chì indica chì un buttone hè statu pressatu. Questu annulla u callback predeterminatu chì torna solu.
- Aghjunghjite un gestore di eventi di signale esternu. Stu avvenimentu hè risuscitatu in risposta à riceve un signalu, cum'è in u passu precedente. L'avvenimentu di u signale esternu serà utilizatu per cunfirmà u ligame.
- Cambia a chjama à sl_bt_sm_configure per dumandà a cunferma di ligame cum'è
- Ricustruisce è lampà.
- Cunnettete cù EFRConnect è leghje a caratteristica prutetta cum'è prima. Avà vi vede un missaghju nantu à a cunsola cusì:
Press PB0 per cunfirmà u ligame. Avà a cunsola mostrarà u passkey per esse inseritu nantu à u telefuninu per u ligame. Inserite u passkey per compie u prucessu di ligame.
Cunsigliu: Aduprate u casu predeterminatu in u gestore di l'eventi per stampà un missaghju quandu a pila manda un avvenimentu chì ùn hè micca trattatu. A pila pò esse pruvatu à dì qualcosa di impurtante.
Al di là di i principii
À questu puntu, avete pigliatu avanzutage di e funziunalità di sicurità chì a nostra pila hà da offre. Avà migliurà l'implementazione per mezu di l'usu sàviu di e funzioni à a nostra disposizione. I seguenti passi sò opzionali è indipindenti di l'altri, pudete custruisce è lampassi dopu à ognunu per vede u cumpurtamentu o pruvate tutti inseme.
- Disconnect nantu à i tentativi falluti di ligami. Questu hè un bonu postu per detectà e minacce. Se u dispositivu remotu ùn sustene micca a criptografia / autentificazione o solu ùn hà micca e chjave currette, puderia esse un pirate. Allora, rompemu a cunnessione. Pruvate aghjunghje una chjama à sl_bt_connection_close () in l'eventu sl_bt_sm_bonding_failed_id. L'API hè documentata quì.
Pudete pruvà sta funzione inserendu u passkey sbagliatu.
- Solu permettendu a ligame in certi tempi. Questu limita u tempu chì un attaccu hà da furmà un ligame è permette di utilizà a funzione "permette solu cunnessione liate". U designer pò sceglie cumu per attivà o disattivà u modu bondable. Per scopi di dimostrazione quì, attiveremu un "modu di installazione" cù PB1 è aduprà un timer per disattivà dopu à 30 seconde.
- Installa una seconda istanza di l'interfaccia di buttone simplice. Questu permetterà l'usu di PB1.
- Mudificà a callback per mandà un signale diversu à a pila per attivà / disattivà a ligame. U risultatu deve esse simile à questu:
- Mudificà u gestore di l'eventi di u signale esternu in modu chì gestisce stu novu signale. U risultatu deve esse cusì:
- Aghjunghjite un gestore di eventi per l'eventu sl_bt_evt_system_soft_timer_id. Questu serà usatu per disattivà u modu di cunfigurazione.
- U codice seguente pò esse usatu per attivà u modu ligatu è permette tutte e cunnessione o per disattivà u modu ligatu è permette solu cunnessione da i dispositi ligatu:
- Aghjunghjite a seguente chjama in u gestore di eventi sl_bt_system_boot_id
- Custruite u prugettu è lampà à u dispusitivu.
- Pruvate cunnette à u dispusitivu cù EFRConnect. A cunnessione deve falla.
- Avà pruvate à pressu PB1 prima di cunnette cù EFRConnect. Sta volta a cunnessione serà successu. Dopu à 30 seconde, vi vede un missaghju nantu à a cunsola chì indica chì u dispusitivu esce da u modu di configurazione. Questu significa chì u modu bondable hè avà disattivatu.
- Aumentà a sicurità nantu à a furmazione di una cunnessione. Siccomu a sicurità hè facultativa, duvemu dumandà una cunnessione criptata u più prestu pussibule invece di confià in e caratteristiche GATT. L'API hè documentata quì. Un bonu postu per chjamà sta API hè in l'avvenimentu sl_bt_evt_connection_opened_id. U manicu di cunnessione hè dispunibule in a variàbile di cunnessione.
Identità sicura
Avà chì avemu un dispositivu Bluetooth più sicuru, permette di migliurà u passu di autentificazione. Avete digià vistu cumu verificà l'identità sicura di i dispositi di vault cù a linea di cummanda in i laboratori di furmazione precedente. In sta rùbbrica, avemu da vede cumu un dispusitivu BLE pò verificà l 'identità di un altru dispusitivu BLE da dumandà a so catena di certificatu è mandendu una sfida. Tutte e parti di vault sicure tenenu u so propiu certificatu di u dispositivu è u certificatu di batch. I certificati di fabbrica è di radice sò codificati in l'applicazione cliente per attivà a verificazione di tutta a catena di certificati. Vede AN1268 per più dettagli nantu à l'identità sicura.
- Definite un buffer globale per almacenà a firma di attestazione di u dispositivu cum'è quì sottu:
- Stabilite a cunfigurazione di u gestore di sicurità per utilizà l'accoppiamentu JustWorks. Questu hè fattu per chì a cunnessione hè criptata. In pratica, a prutezzione MITM deve esse usata ma per mantene u labburatoriu simplice, useremu JustWorks. Cambia a chjama à sl_bt_sm_configure torna à u seguente:
Inoltre, cummentate a chjama à setup_mode (true) in u gestore di eventi system_boot.
- Open helpers.c da i materiali furniti è copià u cuntenutu in app.c. Queste funzioni di callback realizanu attività cum'è segmentà i certificati in modu chì ponu esse mandati nantu à BLE, verificate a catena di certificati, è generà / verificate a sfida.
- Hè necessariu di determinà a dimensione massima di unità di trasferimentu (MTU) per chì i certificati ponu esse segmentati è riuniti. Definite una variable globale per salvà u MTU cum'è mostra quì:
Allora aghjunghje un gestore di eventi per l'avvenimentu scambiatu GATT MTU cum'è mostratu quì sottu:
- Ci sò trè caratteristiche di dati d'utilizatori chì ponu esse leghje. Sti caratteristiche sò usati per cumunicà u certificatu di u dispusitivu, u certificatu di batch è a sfida. Una funzione di callback hè aduprata per trattà queste richieste di lettura di l'utilizatori. Aghjunghjite un gestore per chjamà sta funzione cum'è mostra quì sottu:
A callback usa u MTU da u passu #2 per segmentà è mandà i certificati cum'è necessariu. Si tratta ancu di mandà a sfida firmata.
- U cliente manda una sfida, un numeru aleatoriu per esse firmatu da u servitore, scrivendu una di e caratteristiche GATT. Per quessa, l'applicazione deve avè un gestore per l'avvenimentu di dumanda di scrittura di l'utilizatori cum'è quì sottu:
- Aghjunghjite un supportu d'identità sicuru files à u prugettu:
- app_se_manager_macro.h, app_se_manager_secure_identity.c è app_se_secure_identity.h da i materiali furniti à u prugettu. Quessi files cuntenenu alcune funzioni d'aiutu per i travaglii cum'è ottene a dimensione di u certificatu, uttene a chjave publica di u dispusitivu è firmà una sfida.
- Includite app_se_manager_secure_identity.h in app.c.
- Importa u gatt_configuration-attest.btconf furnitu da i materiali furniti. Questa basa di dati GATT chjamata attestazione sicura chì include quattru caratteristiche chì saranu aduprate per verificà l'identità di u nostru dispositivu. Questi includenu u certificatu di u dispusitivu, u certificatu di batch, sfida è risposta.
- U cliente, chì hè utilizatu per simulà un dispositivu cum'è gateway, hè furnitu cum'è un prughjettu cumpletu postu chì hè più cumplessu di custruisce. In generale, u funziunamentu di u cliente hè a siguenti:
- Scans per i dispositi chì publicità u serviziu di attestazione sicura è cunnetta à elli.
- Scopre i servizii di basa di dati GATT è e caratteristiche.
- Leghjite i certificati di u dispusitivu è di u batch è verificate a catena di certificati utilizendu u certificatu di fabbrica è root chì hà almacenatu in flash.
- Manda una sfida aleatoria à u servitore.
- Tentativi di verificà a risposta à a sfida.
- Chiude a cunnessione se una verificazione falla.
- Custruite è lampà u prughjettu di u servitore à u vostru servitore WSTK / radioboard.
- Importà u prughjettu di u cliente da u cartulare di u cliente in i materiali furniti. Custruite è lampà u prughjettu di u cliente à u vostru cliente WSTK / radioboard.
- Press reset in u client WSTK è apre a cunsola seriale. U cliente principia a scanning per i dispositi chì publicità u nostru serviziu di identità sicura è si cunnetta quandu trova unu.
- U cliente mostrarà qualchi messagi per indicà chì hà truvatu u servitore cù u serviziu desideratu è i missaghji di statutu nantu à a verificazione di a catena di certificati.
- Se a verificazione passa, u cliente genererà un numeru aleatoriu, chjamatu sfida, è u mandarà à u servitore. U servitore firmarà a sfida cù a so chjave di u dispositivu privatu in modu sicuru è a firma torna à u cliente, questu hè chjamatu risposta di sfida. U cliente poi usa a chjave publica in u certificatu di u dispositivu ricevutu previamente per verificà a firma. Questu hè fattu per cunfirmà chì u servitore hà veramente a chjave privata chì hà dichjaratu d'avè. Se a sfida hè verificata currettamente, un missaghju hè visualizatu à questu effettu; altrimenti, a cunnessione hè chjusa, è un missaghju hè visualizatu chì spiega perchè.
- Avà mandate un certificatu invalidu per cunfirmà chì a verificazione funziona veramente. Pudete mudificà user_read_request_cb () per corrompere i dati di u certificatu o a risposta di sfida.
Appendice A - Capacità I/O è Metudi di Coppiu 
Appendice B - Modi è Livelli di Sicurezza
U modu di sicurezza 1 hè l'unicu modu supportatu per Bluetooth Low Energy in a pila di Silicon Labs. I livelli sò i seguenti:
- Livellu 1 senza sicurità
- Livellu 2 accoppiamentu micca autenticatu cù criptografia
- Coppiu autenticatu di Livellu 3 cù criptografia
- Livellu 4 cunnessioni sicuri autentificate cù criptografia forte (scambiu di chjave ECDH)
Documenti / Risorse
![]() |
silabs 21Q2 secure device BLE Security Lab [pdfManuale d'usu 21Q2 Dispositivu BLE sicuru Laboratoriu di Sicurezza, Dispositivu BLE sicuru Laboratoriu di Sicurezza, Laboratoriu di Sicurezza |