silabs 21Q2 aparat i sigurt BLE Siguria Lab
Manuali BLE Security Lab
Në këtë laborator, do të shihni se si të dizajnoni një pajisje më të sigurt BLE. Ne do të fillojmë me një fundview se si të përdorim disa nga veçoritë e stivës dhe kalojmë te disa këshilla të përgjithshme rreth teknikave për lidhje më të sigurta dhe më në fund do të shohim se si të përdorim certifikatat e pajisjes mbi BLE për të identifikuar një pajisje periferike si autentike.
Fillimi
Bluetooth sampaplikacioni mbi të cilin do të ndërtoni synohet të përdoret me një ngarkues. Nëse jeni duke punuar me një EFR32MG21B krejt të re, ai nuk do të ketë një ngarkues. Mund të gjeni një bootloader të para-ndërtuar në platformën\bootloader\sampdosja le-apps\bootloader-storage-internalsingle\efr32mg21a010f1024im32-brd4181a e SDK-së tuaj.
- Filloni me një s soc-boshample app. Kjo sampaplikacioni le përdoret si shabllon dhe përbën një pikënisje të mirë për çdo aplikacion BLE.
- Hapni Silicon Labs Project Wizard nga Simplicity Studio File menu -> e re.
- Zgjidhni BRD4181C dhe klikoni butonin 'tjetër'.
- Klikoni kutinë e zgjedhjes 'Bluetooth (9)' nën llojin e teknologjisë.
- Theksoni 'Bluetooth – SoC Empty' më pas kliko tjetër.
- Klikoni butonin 'Finish'.
- Tani mund të shtoni disa karakteristika për të parë se si karakteristikat e mbrojtura dhe të pambrojtura trajtohen ndryshe.
- Hapni slcp-në e projektit file duke e klikuar dy herë në dritaren e Project Explorer
- Theksoni skedën 'KOMPONENTET E SOFTWARE' dhe hapni mjetin e konfigurimit GATT siç tregohet më poshtë:
Dhe përdorni mjetin e importit të treguar më poshtë për të importuar gatt_configuration.btconf file nga dosja e serverit në materialet e ofruara.
Baza e të dhënave GATT ka një shërbim personal, të quajtur 'Trajnim', me disa të dhëna që janë të mbrojtura dhe disa jo. Kjo ju lejon të krahasoni se çfarë ndodh kur përpiqeni të përdorni një karakteristikë të mbrojtur kundrejt një karakteristike të pambrojtur. Kjo është një mënyrë e shpejtë për të bërë një pajisje me siguri shumë elementare.
- Ne do të përdorim portën serike për të printuar në tastierë në Simplicity Studio për të gjurmuar se çfarë po ndodh në aplikacion. Mënyra më e lehtë për të gjetur këta komponentë është duke i kërkuar në dialogun KOMPONENTET E SOFTWARE, siç tregohet:
-
- Instaloni komponentin IO Stream USART
- Instaloni komponentin IO Stream Retarget STDIO
- Instaloni komponentin standard I/O
- Instaloni komponentin Log
- Hapni komponentin e kontrollit të bordit dhe aktivizoni "Aktivizo Virtual COM UART"
- Klikoni me të djathtën mbi përshtatësin në panelin "Debug adapters" dhe zgjidhni "Launch Console". Zgjidhni skedën 'Seriali 1' dhe vendoseni kursorin në fushën e futjes së tekstit të dritares së konsolës dhe shtypni enter për të zgjuar tastierën.
-
- Krijo një ndryshore lokale në sl_bt_on_event(), që gjendet në app.c, për të ruajtur dorezën e lidhjes. Ndryshorja duhet të jetë statike pasi ky funksion thirret sa herë që një ngjarje ngrihet nga stack dhe ne duam që vlera të jetë e qëndrueshme. Doreza e lidhjes do të përdoret më vonë
seksioni i laboratorit.
- Futni disa deklarata app_log() për ngjarjet për të parë kur jemi të lidhur, mënyrat e sigurisë, etj
-
- Përfshi kokën app_log.h file
- sl_bt_evt_connection_opened – printoni dorezën e lidhjes dhe ruani dorezën e lidhjes. Nëse doreza e lidhjes është 0xFF, nuk ekziston asnjë lidhje midis pajisjeve të lidhura. Modifiko mbajtësin ekzistues të ngjarjeve në mënyrë që të duket diçka si kjo:
- sl_bt_evt_connection_parameters – mënyra e sigurisë. Kjo është bërë në mënyrë që të mund të shihni kur ndryshon modaliteti i sigurisë. Ka një ndryshim në numërimin e mënyrave të sigurisë ku mënyra e sigurisë 1, numërohet me vlerën 0, etj. Shtoni mbajtësin e mëposhtëm të ngjarjeve në aplikacionin tuaj:
- sl_bt_evt_connection_closed_id. Ky mbajtës i ngjarjeve është modifikuar për të përditësuar dorezën e lidhjes. Vlera 0xFF përdoret për të treguar se nuk ka lidhje aktive. Komanda app_log() përdoret për të printuar arsyen e mbylljes së lidhjes, lista e kodeve të statusit është këtu. Modifiko mbajtësin ekzistues të ngjarjeve në mënyrë që të duket diçka si kjo:
- Përfshi kokën app_log.h file
-
- Ndërtoni dhe ndezni projektin. Në këtë pikë, ne do të ekzekutojmë sampLe app për të parë se si sillet pa asnjë ndryshim, përveç bazës së të dhënave GATT.
- Lidhu me aplikacionin celular EFRConnect si më poshtë:
-
- Prekni ikonën "Bluetooth Browser".
- Prekni ikonën 'Lidhu' në pajisjen me emrin 'Trajnim'.
-
- Lexoni karakteristikën e pambrojtur si më poshtë:
-
- Prekni lidhjen "Më shumë informacion" nën shërbimin e panjohur me UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- Lexoni karakteristikën e pambrojtur, UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c duke shtypur ikonën "Lexo". Nuk ka surpriza këtu. Meqenëse karakteristika nuk mbrohet në asnjë mënyrë, ajo do të dërgohet në tekst të thjeshtë.
-
- Tani lexoni karakteristikën e mbrojtur, UUID d4261dbb-dcd0-daab-ec95-deec088d532b. Telefoni juaj celular duhet t'ju kërkojë të çiftoni dhe lidheni, mesazhi mund të ndryshojë në varësi të sistemit operativ celular. Pasi të pranoni kërkesën për çiftim, duhet të dërgoni një mesazh në tastierë si më poshtë:
Shënim: Shtojca A në fund të këtij manuali ka për referencë një përmbledhje të aftësive I/O dhe metodave të çiftimit. Shtojca B përmbledh mënyrat e sigurisë Bluetooth.
Konfigurimi i Menaxherit të Sigurisë
Menaxheri i sigurisë është pjesë e grupit Bluetooth që përcakton se cilat veçori të sigurisë përdoren. Këto veçori përfshijnë mbrojtjen nga njeriu në mes (MITM), lidhjet LE Secure (aka ECDH), që kërkojnë konfirmim për lidhjen, etj. Menaxheri i sigurisë trajton gjithashtu aftësitë I/O të cilat përdoren për të përcaktuar se cila metodë përdoret për çiftimin /lidhja (shih Shtojcën A për një përmbledhje). Në këtë seksion do të shihni një konfigurim të thjeshtë.
- Konfiguro SM me konfigurimin e dëshiruar. Pajisja për këtë laborator e bën të lehtë shfaqjen e një çelësi kalimi në tastierë. Futja e fjalëkalimit është një kërkesë për të mundësuar mbrojtjen MITM. Shtoni kodin e mëposhtëm te mbajtësi juaj i ngjarjeve sl_bt_system_boot_id. Kjo mundëson "man-in-the-middle" dhe informon pajisjen në distancë se ne kemi mundësinë të shfaqim një çelës, por kjo është e gjitha.
- Për të shfaqur çelësin e kalimit në tastierë, kërkohet një mbajtës ngjarjesh siç tregohet më poshtë:
- Vendosni modalitetin e lidhjes, numrin maksimal të lidhjeve, etj. Përdorni kodin e mëposhtëm për të filluar:
Këto cilësime mund të përdoren për të kufizuar aftësinë e një sulmuesi për t'u lidhur me pajisjen tuaj. Nëse produkti juaj duhet të ketë vetëm një përdorues, atëherë mund të kufizoni bonot maksimale në 1. Një vend i mirë për të shtuar këto thirrje është në mbajtësin e ngjarjeve sl_bt_system_boot_id. Ne nuk do të mundësojmë lidhjen në këtë moment për të bërë që pjesa tjetër e laboratorit të shkojë më mirë, por ne vendosim një politikë lidhjeje për të lejuar vetëm një obligacion. Për referencë, dokumentacioni për këto API gjendet këtu dhe këtu.
- Shto mbajtës të ngjarjeve për sl_bt_evt_sm_bonded_id dhe sl_bt_evt_sm_bonding_failed_id. Përdorimi kryesor për këto ngjarje është informativ aktualisht, por më vonë në laborator do të shtoni funksionalitet.
- Ndërtoni dhe ndezni në bordin e synuar. Lidhuni me EFRConnect dhe lexoni karakteristikën e mbrojtur si më parë. Këtë herë, do të shihni një çelës kalimi të shfaqur në tastierë. Futni këtë çelës kalimi në telefonin tuaj celular kur ju kërkohet.
- Provoni konfirmimin e lidhjes. Kjo veçori i jep përdoruesit mundësinë që të kërkojë që kërkesat e lidhjes të konfirmohen. Duke vepruar kështu, aplikacioni kontrollon se me cilat pajisje homologe lidhet. Një mundësi është që të kërkohet nga përdoruesi të shtypë një buton përpara se të lejojë lidhjen.
- Hapni cilësimet e Bluetooth në telefonin tuaj celular dhe hiqni lidhjen me pajisjen EFR32. Zbatimet e telefonit celular ndryshojnë kështu që ky hap mund të mos jetë i nevojshëm. Nëse nuk e shihni pajisjen 'Trajnimi' në cilësimet tuaja Bluetooth, thjesht vazhdoni në hapin tjetër.
- Në komponentët e softuerit, instaloni një shembull të mbajtësit të thjeshtë të butonave.
- Përfshi kokën file sl_simple_button_instances.h në app.c
- Shto një mbajtës për ngjarjen sl_bt_evt_sm_bonding_confirm_id. Detyra kryesore e këtij mbajtësi të ngjarjeve është të informojë përdoruesin se një pajisje në distancë po kërkon një lidhje të re.
- Shtoni një funksion të kthimit të thirrjes për mbajtësin e thjeshtë të butonave për të dërguar një sinjal në pirgun Bluetooth që tregon se një buton është shtypur. Kjo anashkalon kthimin e parazgjedhur të thirrjes që thjesht kthehet.
- Shto një mbajtës të jashtëm të ngjarjeve të sinjalit. Kjo ngjarje ngrihet në përgjigje të marrjes së një sinjali, si në hapin e mëparshëm. Ngjarja e sinjalit të jashtëm do të përdoret për të konfirmuar lidhjen.
- Ndryshoni thirrjen në sl_bt_sm_configure për të kërkuar konfirmimin e lidhjes si p.sh
- Rindërtoni dhe ndizni.
- Lidhuni me EFRConnect dhe lexoni karakteristikën e mbrojtur si më parë. Tani do të shihni një mesazh në tastierë si më poshtë:
Shtypni PB0 për të konfirmuar lidhjen. Tani tastiera do të shfaq çelësin e kalimit që do të futet në celularin për lidhje. Futni çelësin e kalimit për të përfunduar procesin e lidhjes.
Këshillë: Përdorni rastin e paracaktuar në mbajtësin e ngjarjeve për të printuar një mesazh kur pirgja dërgon një ngjarje që nuk trajtohet. Stafi mund të përpiqet t'ju tregojë diçka të rëndësishme.
Përtej Bazave
Në këtë pikë, ju keni marrë përparësitage nga veçoritë e sigurisë që ka për të ofruar pirgja jonë. Tani le të përmirësojmë zbatimin përmes përdorimit të mençur të veçorive që kemi në dispozicion. Hapat e mëposhtëm janë opsionalë dhe të pavarur nga njëri-tjetri, mund t'i ndërtoni dhe ndezni pas secilit për të parë sjelljen ose t'i provoni të gjitha së bashku.
- Shkëputeni në përpjekjet e dështuara të lidhjes. Ky është një vend i mirë për të zbuluar kërcënimet. Nëse pajisja në distancë nuk mbështet enkriptimin/autentifikimin ose thjesht nuk ka çelësat e duhur, mund të jetë një haker. Pra, le të prishim lidhjen. Provoni të shtoni një thirrje te sl_bt_connection_close() në ngjarjen sl_bt_sm_bonding_failed_id. API është dokumentuar këtu.
Mund ta testoni këtë veçori duke futur çelësin e gabuar të kalimit.
- Lejimi i lidhjes vetëm në periudha të caktuara. Kjo kufizon kohën që një sulmues duhet të krijojë një lidhje dhe bën të mundur përdorimin e veçorisë "lejohen vetëm lidhjet e lidhura". Projektuesi mund të zgjedhë se si të aktivizojë ose çaktivizojë modalitetin e lidhjes. Për qëllime demonstrimi këtu, ne do të aktivizojmë një "modalitet konfigurimi" me PB1 dhe do të përdorim një kohëmatës për ta çaktivizuar atë pas 30 sekondash.
- Instaloni një shembull të dytë të ndërfaqes së thjeshtë të butonit. Kjo do të mundësojë përdorimin e PB1.
- Ndryshoni kthimin e thirrjes për të dërguar një sinjal tjetër në pirg për të aktivizuar/çaktivizuar lidhjen. Rezultati duhet të duket diçka si kjo:
- Modifiko mbajtësin e ngjarjeve të sinjalit të jashtëm në mënyrë që të trajtojë këtë sinjal të ri. Rezultati duhet të jetë ky:
- Shto një mbajtës ngjarjesh për ngjarjen sl_bt_evt_system_soft_timer_id. Kjo do të përdoret për të çaktivizuar modalitetin e konfigurimit.
- Kodi i mëposhtëm mund të përdoret për të aktivizuar modalitetin e lidhjes dhe për të lejuar të gjitha lidhjet ose për të çaktivizuar modalitetin e lidhjes dhe për të lejuar vetëm lidhjet nga pajisjet e lidhura:
- Shtoni thirrjen e mëposhtme në mbajtësin e ngjarjeve sl_bt_system_boot_id
- Ndërtoni projektin dhe ndizni atë në pajisje.
- Provoni të lidheni me pajisjen me EFRConnect. Lidhja duhet të dështojë.
- Tani provoni të shtypni PB1 përpara se të lidheni me EFRConnect. Këtë herë lidhja do të jetë e suksesshme. Pas 30 sekondash do të shihni një mesazh në tastierë që tregon se pajisja po del nga modaliteti i konfigurimit. Kjo do të thotë se modaliteti i lidhjes tani është i çaktivizuar.
- Rritja e sigurisë në krijimin e një lidhjeje. Meqenëse siguria është opsionale, ne duhet të kërkojmë një lidhje të koduar sa më shpejt të jetë e mundur në vend që të mbështetemi në karakteristikat e GATT. API është dokumentuar këtu. Një vend i mirë për të thirrur këtë API është në ngjarjen sl_bt_evt_connection_opened_id. Trajtimi i lidhjes është i disponueshëm në variablin e lidhjes.
Identitet i sigurt
Tani që kemi një pajisje Bluetooth më të sigurt, le të përmirësojmë hapin e vërtetimit. Ju keni parë tashmë se si të verifikoni identitetin e sigurt të pajisjeve të kasafortës me vijën e komandës në laboratorët e mëparshëm të trajnimit. Në këtë seksion, do të shohim se si një pajisje BLE mund të verifikojë identitetin e një pajisjeje tjetër BLE duke kërkuar zinxhirin e saj të certifikatës dhe duke dërguar një sfidë. Të gjitha pjesët e sigurta të kasafortës mbajnë certifikatën e tyre të pajisjes dhe certifikatën e grupit. Certifikatat e fabrikës dhe ato rrënjë janë të koduara në aplikacionin e klientit për të mundësuar verifikimin e të gjithë zinxhirit të certifikatave. Referojuni AN1268 për më shumë detaje mbi identitetin e sigurt.
- Përcaktoni një buffer global për ruajtjen e nënshkrimit të vërtetimit të pajisjes si më poshtë:
- Cakto konfigurimin e menaxherit të sigurisë për të përdorur çiftimin JustWorks. Kjo është bërë në mënyrë që lidhja të jetë e koduar. Në praktikë, duhet të përdoret mbrojtja MITM, por për ta mbajtur laboratorin të thjeshtë, ne do të përdorim JustWorks. Ndrysho thirrjen në sl_bt_sm_configure përsëri në sa vijon:
Gjithashtu, komentoni thirrjen për setup_mode(true) në mbajtësin e ngjarjeve system_boot.
- Hapni helpers.c nga materialet e dhëna dhe kopjoni përmbajtjen në app.c. Këto funksione të kthimit të thirrjes kryejnë detyra të tilla si segmentimi i certifikatave në mënyrë që ato të mund të dërgohen përmes BLE, verifikimi i zinxhirit të certifikatave dhe gjenerimi/verifikimi i sfidës.
- Është e nevojshme të përcaktohet madhësia maksimale e njësisë së transferimit (MTU) në mënyrë që certifikatat të mund të segmentohen dhe rimontohen. Përcaktoni një ndryshore globale për të ruajtur MTU siç tregohet këtu:
Pastaj shtoni një mbajtës të ngjarjeve për ngjarjen e shkëmbyer GATT MTU siç tregohet më poshtë:
- Ekzistojnë tre karakteristika të të dhënave të përdoruesit që mund të lexohen. Këto karakteristika përdoren për të komunikuar certifikatën e pajisjes, certifikatën e grupit dhe sfidën. Një funksion kthimi i thirrjes përdoret për të trajtuar këto kërkesa për lexim nga përdoruesi. Shtoni një mbajtës për të thirrur këtë funksion siç tregohet më poshtë:
Mbështetja e thirrjes përdor MTU nga hapi #2 në segment dhe dërgon certifikatat sipas nevojës. Ai gjithashtu trajton dërgimin e sfidës së nënshkruar.
- Klienti dërgon një sfidë, një numër të rastësishëm për t'u nënshkruar nga serveri, duke shkruar një nga karakteristikat GATT. Për këtë arsye, aplikacioni duhet të ketë një mbajtës për ngjarjen e kërkesës për shkrim të përdoruesit si më poshtë:
- Shto mbështetje të sigurt identiteti files për projektin:
- app_se_manager_macro.h, app_se_manager_secure_identity.c dhe app_se_secure_identity.h nga materialet e ofruara për projektin. Këto filePërmbajnë disa funksione ndihmëse për detyra të tilla si marrja e madhësisë së certifikatës, marrja e çelësit publik të pajisjes dhe nënshkrimi i një sfide.
- Përfshi app_se_manager_secure_identity.h në app.c.
- Importoni gatt_configuration-attest.btconf të dhënë nga materialet e ofruara. Kjo bazë të dhënash GATT quhet vërtetim i sigurt i cili përfshin katër karakteristika të cilat do të përdoren për të verifikuar identitetin e pajisjes sonë. Këto përfshijnë certifikatën e pajisjes, certifikatën e grupit, sfidën dhe përgjigjen.
- Klienti, i cili përdoret për të simuluar një pajisje të tillë si gateway, ofrohet si një projekt i plotë pasi është më kompleks për t'u ndërtuar. Në përgjithësi, funksionimi i klientit është si më poshtë:
- Skanon për pajisje që reklamojnë shërbimin e sigurt të vërtetimit dhe lidhet me to.
- Zbulon shërbimet dhe karakteristikat e bazës së të dhënave GATT.
- Lexon pajisjen dhe certifikatat e grupit dhe verifikon zinxhirin e certifikatave duke përdorur certifikatën e fabrikës dhe certifikatën rrënjë që ajo ka ruajtur në flash.
- Dërgon një sfidë të rastësishme te serveri.
- Përpjekjet për të verifikuar përgjigjen ndaj sfidës.
- Mbyll lidhjen nëse ndonjëri nga verifikimet dështon.
- Ndërtoni dhe ndezni projektin e serverit në serverin tuaj WSTK /radioboard.
- Importoni projektin e klientit nga dosja e klientit në materialet e dhëna. Ndërtoni dhe ndezni projektin e klientit tek klienti juaj WSTK/radioboard.
- Shtypni reset në klientin WSTK dhe hapni tastierën serike. Klienti fillon të skanojë për pajisje që reklamojnë shërbimin tonë të sigurt të identitetit dhe do të lidhet kur ta gjejë një të tillë.
- Klienti do të shfaqë disa mesazhe për të treguar se ka gjetur serverin me shërbimin e dëshiruar dhe mesazhet e statusit në lidhje me verifikimin e zinxhirit të certifikatave.
- Nëse verifikimi kalon, klienti do të gjenerojë një numër të rastësishëm, të quajtur sfidë, dhe do ta dërgojë atë në server. Serveri do të nënshkruajë sfidën me çelësin e pajisjes private të mbajtur në mënyrë të sigurt dhe me nënshkrimin përsëri te klienti, kjo quhet një përgjigje sfide. Më pas klienti përdor çelësin publik në certifikatën e pajisjes së marrë më parë për të verifikuar nënshkrimin. Kjo është bërë për të konfirmuar që serveri ka vërtet çelësin privat që pretendonte se kishte. Nëse sfida verifikohet saktë, shfaqet një mesazh për këtë; përndryshe, lidhja mbyllet dhe shfaqet një mesazh që shpjegon pse.
- Tani dërgoni një certifikatë të pavlefshme për të konfirmuar që verifikimi funksionon vërtet. Ju mund të modifikoni user_read_request_cb() për të korruptuar të dhënat e certifikatës ose përgjigjen e sfidës.
Shtojca A – Aftësitë hyrëse/dalëse dhe metodat e çiftimit 
Shtojca B – Mënyrat dhe nivelet e sigurisë
Modaliteti i sigurisë 1 është i vetmi modalitet i mbështetur për Bluetooth me energji të ulët në grupin e Silicon Labs. Nivelet janë si më poshtë:
- Niveli 1 nuk ka siguri
- Niveli 2 çiftim i paautentikuar me kriptim
- Niveli 3 i vërtetuar çiftimi me kriptim
- Lidhje të sigurta të vërtetuara të nivelit 4 me kriptim të fortë (këmbim i çelësave ECDH)
Dokumentet / Burimet
![]() |
silabs 21Q2 aparat i sigurt BLE Siguria Lab [pdf] Manuali i Përdoruesit 21Q2 i sigurt i pajisjes BLE Laboratori i Sigurisë, i sigurt pajisje BLE Laboratori i Sigurisë, Laboratori i Sigurisë |