silabs 21Q2 безбеден BLE уред Security Lab
Прирачник за BLE Security Lab
Во оваа лабораторија, ќе видите како да дизајнирате побезбеден BLE уред. Ќе започнеме со надview за тоа како да користите некои од функциите на стекот и да преминете на некои општи совети за техники за побезбедни врски и конечно ќе видиме како да ги користиме сертификатите на уредот преку BLE за да идентификуваме периферни како автентични.
Почеток
Bluetooth сampАпликацијата на која ќе ја градите е наменета да се користи со подигнувач. Ако работите со сосема нов EFR32MG21B, тој нема да има подигнувач. Можете да најдете однапред вграден подигнувач во платформата\bootloader\sample-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a папка на вашата SDK.
- Започнете со соц-празна сampле апликација. Ова сampLe app се користи како шаблон и е добра почетна точка за секоја апликација BLE.
- Отворете го Silicon Labs Project Wizard од Simplicity Studio File мени -> ново.
- Изберете го BRD4181C и кликнете на копчето „следно“.
- Кликнете на полето за избор „Bluetooth (9)“ под тип технологија.
- Означете „Bluetooth – SoC Empty“, потоа кликнете на следно.
- Кликнете на копчето „Заврши“.
- Сега можете да додадете некои карактеристики за да видите како заштитените и незаштитените карактеристики се третираат поинаку.
- Отворете го slcp на проектот file со двоен клик на него во прозорецот Project Explorer
- Означете го табулаторот „СОФТВЕРСКИ КОМПОНЕНТИ“ и отворете ја алатката за конфигурација на ГАТТ како што е прикажано подолу:
И користете ја алатката за увоз прикажана подолу за да го увезете gatt_configuration.btconf file од папката на серверот во дадените материјали.
Базата на податоци на ГАТТ има сопствена услуга, наречена „Тренинг“, со некои податоци што се заштитени, а некои не. Ова ви овозможува да споредите што се случува кога се обидувате да пристапите до заштитена карактеристика наспроти незаштитена. Ова е брз начин за правење уред со многу основна безбедност.
- Ќе ја користиме сериската порта за печатење на конзолата во Simplicity Studio за да следиме што се случува во апликацијата. Најлесен начин да ги најдете овие компоненти е да ги пребарувате во дијалогот СОФТВЕРСКИ КОМПОНЕНТИ како што е прикажано:
-
- Инсталирајте ја компонентата IO Stream USART
- Инсталирајте ја компонентата IO Stream Retarget STDIO
- Инсталирајте ја стандардната компонента за влез/излез
- Инсталирајте ја компонентата Log
- Отворете ја компонентата за контрола на таблата и вклучете ја „Овозможи виртуелна COM UART“
- Кликнете со десното копче на адаптерот во панелот „Дебаг адаптери“ и изберете „Launch Console“. Изберете ја картичката „Serial 1“ и поставете го курсорот во полето за внесување текст на прозорецот на конзолата и притиснете enter за да се разбуди конзолата.
-
- Креирајте локална променлива во sl_bt_on_event(), пронајдена во app.c, за зачувување на рачката за поврзување. Променливата мора да биде статична бидејќи оваа функција се повикува секогаш кога некој настан ќе се подигне од стекот и сакаме вредноста да биде постојана. Рачката за поврзување ќе се користи подоцна
дел од лабораторијата.
- Вметнете неколку изјави на app_log() за настаните да се видат кога сме поврзани, безбедносните режими итн
-
- Вклучете го заглавието app_log.h file
- sl_bt_evt_connection_opened – отпечатете ја рачката за поврзување и зачувајте ја рачката за поврзување. Ако рачката за поврзување е 0xFF, нема врска помеѓу поврзаните уреди. Изменете го постојниот управувач за настани така што ќе изгледа вака:
- sl_bt_evt_connection_parameters – безбедносен режим. Ова е направено за да можете да видите кога се менува безбедносниот режим. Постои разлика во нумерирањето на безбедносните режими каде што безбедносниот режим 1 е наброен со вредност 0, итн. Додајте го следниов управувач за настани во вашата апликација:
- sl_bt_evt_connection_closed_id. Овој управувач за настани е изменет за да се ажурира рачката за поврзување. Вредноста 0xFF се користи за да покаже дека нема активна врска. Командата app_log() се користи за да се испечати причината поради која врската е затворена, списокот со статусни кодови е тука. Изменете го постојниот управувач за настани така што ќе изгледа вака:
- Вклучете го заглавието app_log.h file
-
- Изградете го и блицирајте го проектот. Во овој момент, ќе го извршиме sampLe апликацијата за да видите како се однесува без никакви промени, покрај базата на податоци ГАТТ.
- Поврзете се со мобилната апликација EFRConnect на следниов начин:
-
- Допрете ја иконата „Bluetooth Browser“.
- Допрете ја иконата „Поврзи“ на уредот со име „Тренинг“.
-
- Прочитајте ја незаштитената карактеристика на следниов начин:
-
- Допрете ја врската „Повеќе информации“ под непознатата услуга со UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Прочитајте ја незаштитената карактеристика, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c со допирање на иконата „Прочитај“. Тука нема изненадувања. Бидејќи карактеристиката не е заштитена на кој било начин, таа ќе биде испратена во обичен текст.
-
- Сега прочитајте ја заштитената карактеристика, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Вашиот мобилен телефон треба да ве поттикне да се спарите и поврзете, пораката може да се разликува во зависност од вашиот мобилен оперативен систем. Откако ќе го прифатите барањето за спарување, треба да испратите порака на конзолата како што следува:
Забелешка: Додатокот А на крајот од овој прирачник има резиме на можностите за влез/излез и методите за спарување како референца. Додатокот Б ги сумира безбедносните режими на Bluetooth.
Конфигурација на менаџерот за безбедност
Управувачот за безбедност е дел од стекот Bluetooth што одредува кои безбедносни карактеристики се користат. Овие карактеристики вклучуваат заштита од човек во средината (MITM), LE Secure врски (познато како ECDH), кои бараат потврда за поврзување, итн. /врзување (види Додаток А за резиме). Во овој дел ќе видите едноставно поставување.
- Поставете SM со саканата конфигурација. Хардверот за оваа лабораторија го олеснува прикажувањето на лозинка на конзолата. Внесувањето на лозинка е услов за да се овозможи MITM заштита. Додадете го следниов код во вашиот управувач за настани sl_bt_system_boot_id. Ова овозможува човек во средината и го информира далечинскиот уред дека имаме можност да прикажеме лозинка, но тоа е сè.
- За да се прикаже лозинката на конзолата, потребен е управувач за настани како што е прикажано подолу:
- Поставете го режимот на поврзување, максималниот број на сврзувања итн. Користете го следниов код за да започнете:
Овие поставки може да се користат за ограничување на способноста на напаѓачот да се поврзе со вашиот уред. Ако вашиот производ треба да има само еден корисник, тогаш можете да ги ограничите максималните обврзници на 1. Добро место за додавање на овие повици е во управувачот за настани sl_bt_system_boot_id. Во овој момент нема да овозможиме поврзување за остатокот од лабораторијата да оди понепречено, но поставуваме политика за поврзување за да дозволиме само една обврзница. За повикување, документацијата за овие API се наоѓаат овде и овде.
- Додајте ракувачи со настани за sl_bt_evt_sm_bonded_id и sl_bt_evt_sm_bonding_failed_id. Главната употреба за овие настани е информативна моментално, но подоцна во лабораторијата ќе додадете функционалност.
- Изградете и трепкајте до целната табла. Поврзете се со EFRConnect и прочитајте ја заштитената карактеристика како порано. Овој пат, ќе видите клуч за пристап прикажан на конзолата. Внесете ја оваа лозинка на вашиот мобилен телефон кога ќе биде побарано.
- Пробајте ја потврдата за поврзување. Оваа функција му дава на корисникот можност да бара да се потврдат барањата за поврзување. Со тоа, апликацијата ѝ дава контрола на тоа со кои врснички уреди се поврзува. Една од можностите е да се бара од корисникот да притисне копче пред да ја дозволи врската.
- Отворете ги поставките за Bluetooth во вашиот мобилен телефон и отстранете ја врската со уредот EFR32. Имплементациите на мобилните телефони се разликуваат, така што овој чекор можеби не е неопходен. Ако не го гледате уредот „Тренинг“ во поставките за Bluetooth, само продолжете на следниот чекор.
- Во софтверските компоненти, инсталирајте еден примерок од едноставниот управувач со копчиња.
- Вклучете го заглавието file sl_simple_button_instances.h во app.c
- Додајте управувач за настанот sl_bt_evt_sm_bonding_confirm_id. Главната работа на овој управувач со настани е да го информира корисникот дека далечинскиот уред бара нова врска.
- Додајте функција за повратен повик за едноставниот управувач со копчиња за да испрати сигнал до стек Bluetooth што покажува дека е притиснато копче. Ова го отфрла стандардниот повратен повик кој едноставно се враќа.
- Додајте надворешен управувач со настани за сигнали. Овој настан се подига како одговор на примање сигнал, како на пример во претходниот чекор. Настанот на надворешниот сигнал ќе се користи за да се потврди спојувањето.
- Променете го повикот во sl_bt_sm_configure за да барате потврда за поврзување како на пр
- Обнова и блиц.
- Поврзете се со EFRConnect и прочитајте ја заштитената карактеристика како порано. Сега ќе видите порака на конзолата како што следува:
Притиснете PB0 за да го потврдите поврзувањето. Сега на конзолата ќе се прикаже лозинката што треба да се внесе на мобилниот телефон за поврзување. Внесете ја лозинката за да го завршите процесот на поврзување.
Совет: Користете ги стандардните букви во управувачот за настани за да отпечатите порака кога стекот испраќа настан што не се ракува. Магацинот можеби се обидува да ви каже нешто важно.
Надвор од основите
Во овој момент, вие сте напредналеtagе од безбедносните карактеристики што ги нуди нашиот оџак. Сега да ја подобриме имплементацијата преку мудро користење на функциите што ни се на располагање. Следниве чекори се опционални и независни еден од друг, можете да ги изградите и трепкате по секој за да го видите однесувањето или да ги испробате сите заедно.
- Исклучете се при неуспешни обиди за поврзување. Ова е добро место за откривање закани. Ако далечинскиот уред не поддржува шифрирање/автентикација или едноставно ги нема точните клучеви, тоа може да биде хакер. Значи, да ја прекинеме врската. Обидете се да додадете повик до sl_bt_connection_close() во настанот sl_bt_sm_bonding_failed_id. API-то е документирано овде.
Можете да ја тестирате оваа функција со внесување на погрешна лозинка.
- Дозволете лепење само во одредени периоди. Ова го ограничува времето кога напаѓачот треба да формира врска и овозможува да се користи функцијата „само дозволени врзани врски“. Дизајнерот може да избере како да го овозможи или оневозможи режимот за поврзување. За демонстративни цели овде, ќе овозможиме „режим на поставување“ со PB1 и ќе користиме тајмер за да го оневозможиме по 30 секунди.
- Инсталирајте втор пример од интерфејсот со едноставни копчиња. Ова ќе овозможи користење на PB1.
- Изменете го повратниот повик за да испратите различен сигнал до оџакот за да овозможите/оневозможите поврзување. Резултатот треба да изгледа отприлика вака:
- Изменете го управувачот со настани за надворешни сигнали така што ќе се справи со овој нов сигнал. Резултатот треба да биде вака:
- Додајте управувач за настани за настанот sl_bt_evt_system_soft_timer_id. Ова ќе се користи за оневозможување на режимот за поставување.
- Следниот код може да се користи за да се овозможи режим на поврзување и да се дозволат сите врски или да се оневозможи режимот за врзување и да се дозволат само врски од поврзани уреди:
- Додајте го следниов повик во управувачот со настани sl_bt_system_boot_id
- Изградете го проектот и трепкајте го на уредот.
- Обидете се да се поврзете со уредот со EFRConnect. Врската треба да пропадне.
- Сега обидете се да притиснете PB1 пред да се поврзете со EFRConnect. Овој пат врската ќе биде успешна. По 30 секунди ќе видите порака на конзолата што покажува дека уредот излегува од режимот за поставување. Ова значи дека режимот за поврзување сега е оневозможен.
- Зголемете ја безбедноста при формирање врска. Бидејќи безбедноста е изборна, треба да побараме шифрирана врска што е можно поскоро наместо да се потпираме на карактеристиките на ГАТТ. API-то е документирано овде. Добро место за повикување на овој API е во настанот sl_bt_evt_connection_opened_id. Рачката за поврзување е достапна во променливата за поврзување.
Безбеден идентитет
Сега кога имаме побезбеден уред со Bluetooth, да го подобриме чекорот за автентикација. Веќе видовте како да го потврдите безбедниот идентитет на уредите за свод со командната линија во претходните лаборатории за обука. Во овој дел, ќе видиме како еден BLE уред може да го потврди идентитетот на друг BLE уред со барање на неговиот синџир на сертификати и испраќање предизвик. Сите безбедни делови од сводот имаат сопствен сертификат за уред и сериски сертификат. Фабричките и коренските сертификати се хард кодирани во клиентската апликација за да се овозможи верификација на целиот синџир на сертификати. Погледнете во AN1268 за повеќе детали за безбедниот идентитет.
- Дефинирајте глобален бафер за складирање на потписот за атестирање на уредот како подолу:
- Поставете ја конфигурацијата на менаџерот за безбедност да користи спарување JustWorks. Ова е направено така што врската е шифрирана. Во пракса, треба да се користи MITM заштита, но за да биде едноставна лабораторијата, ќе користиме JustWorks. Променете го повикот на sl_bt_sm_configure назад на следново:
Исто така, коментирајте го повикот до setup_mode(true) во управувачот со настани system_boot.
- Отворете helpers.c од дадените материјали и копирајте ја содржината во app.c. Овие функции за повратен повик извршуваат задачи како што се сегментирање на сертификатите за да можат да се испратат преку BLE, потврдување на синџирот на сертификати и генерирање/верификација на предизвикот.
- Неопходно е да се одреди максималната големина на единицата за пренос (MTU) за да може сертификатите да се сегментираат и повторно да се соберат. Дефинирајте глобална променлива за зачувување на MTU како што е прикажано овде:
Потоа додадете управувач за настани за разменетиот настан GATT MTU како што е прикажано подолу:
- Постојат три карактеристики на кориснички податоци кои можат да се читаат. Овие карактеристики се користат за да се соопштат сертификатот на уредот, серискиот сертификат и предизвикот. Функцијата за повратен повик се користи за справување со овие барања за читање од корисници. Додајте управувач за да ја повикате оваа функција како што е прикажано подолу:
Повратниот повик го користи MTU од чекор #2 до сегмент и испраќа сертификати по потреба. Се справува и со испраќање на потпишаниот предизвик.
- Клиентот испраќа предизвик, случаен број што треба да го потпише серверот, со запишување на една од карактеристиките на ГАТТ. Поради оваа причина, апликацијата треба да има управувач за настанот за барање за пишување на корисникот како подолу:
- Додајте сигурна поддршка за идентитет files на проектот:
- app_se_manager_macro.h, app_se_manager_secure_identity.c и app_se_secure_identity.h од обезбедените материјали на проектот. Овие files содржи некои помошни функции за задачи како што се добивање на големината на сертификатот, добивање на јавниот клуч на уредот и потпишување предизвик.
- Вклучете app_se_manager_secure_identity.h во app.c.
- Увезете го обезбедениот gatt_configuration-attest.btconf од обезбедените материјали. Оваа база на податоци на ГАТТ наречена безбедна потврда која вклучува четири карактеристики кои ќе се користат за да се потврди идентитетот на нашиот уред. Тие вклучуваат сертификат за уредот, серија сертификат, предизвик и одговор.
- Клиентот, кој се користи за симулирање на уред како што е портата, е обезбеден како целосен проект бидејќи е покомплексен за изградба. Општо земено, работата на клиентот е како што следува:
- Скенира уреди што ја рекламираат безбедната услуга за атестирање и се поврзува со нив.
- Ги открива услугите и карактеристиките на базата на податоци на ГАТТ.
- Ги чита сертификатите на уредот и сериите и го потврдува синџирот на сертификати користејќи го фабричкиот и коренскиот сертификат што ги има зачувано во блиц.
- Испраќа случаен предизвик до серверот.
- Обиди да се потврди одговорот на предизвикот.
- Ја затвора врската ако било која потврда не успее.
- Изградете го и блицирајте го серверскиот проект на вашиот сервер WSTK /radioboard.
- Увезете го клиентскиот проект од клиентската папка во дадените материјали. Изградете го и блицирајте го клиентскиот проект на вашиот клиент WSTK/radioboard.
- Притиснете ресетирање на клиентот WSTK и отворете ја сериската конзола. Клиентот започнува со скенирање за уреди кои ја рекламираат нашата безбедна услуга за идентитет и ќе се поврзе кога ќе ја најде.
- Клиентот ќе прикаже некои пораки за да покаже дека го нашол серверот со саканата услуга и статусните пораки за верификацијата на синџирот на сертификати.
- Ако потврдата помине, клиентот ќе генерира случаен број, наречен предизвик, и ќе го испрати до серверот. Серверот ќе го потпише предизвикот со неговиот безбедно чуван приватен клуч на уредот и потписот назад до клиентот, ова се нарекува одговор на предизвикот. Клиентот потоа го користи јавниот клуч во претходно примениот сертификат на уредот за да го потврди потписот. Ова е направено за да се потврди дека серверот навистина го има приватниот клуч што тврдеше дека го има. Ако предизвикот е правилно потврден, се прикажува порака за тоа; во спротивно, врската е затворена и се прикажува порака која објаснува зошто.
- Сега испратете неважечки сертификат за да потврдите дека потврдата навистина функционира. Може да го измените user_read_request_cb() за да ги оштети податоците за сертификатот или одговорот на предизвикот.
Додаток А – В/И способности и методи на спарување 
Додаток Б – Безбедносни режими и нивоа
Безбедносниот режим 1 е единствениот режим поддржан за Bluetooth ниска енергија во стекот на Silicon Labs. Нивоата се како што следува:
- Ниво 1 нема безбедност
- Ниво 2 неавтентицирано спарување со шифрирање
- Ниво 3 автентицирано спарување со шифрирање
- Ниво 4 автентицирани безбедни врски со силна шифрирање (размена на клучеви ECDH)
Документи / ресурси
![]() |
silabs 21Q2 безбеден BLE уред Security Lab [pdf] Упатство за користење 21Q2 безбеден BLE уред Лабораторија за безбедност, безбеден BLE уред за безбедност Лабораторија, лабораторија за безбедност |