Gebruik maken van de eerste op Arm® Cortex®-M33 gebaseerde MCU op de markt– Deel 2: Levenscyclusbeveiliging beheren

Door Stephen Evanczuk

Bijgedragen door De Noord-Amerikaanse redacteurs van DigiKey

Opmerking van de uitgever: In deel 1 van deze tweedelige reeks werd onderzocht hoe de universele microcontroller LPC55S6x van NXP Semiconductors kan worden geoptimaliseerd voor hoge prestaties bij een laag verbruik. Hier laat deel 2 zien hoe diezelfde microcontroller kan worden geoptimaliseerd voor het beheer van levenscyclusbeveiliging.

Voor ontwikkelaars van systemen op microcontrollerbasis maakt de breedte van de ontwerpvereisten voor snelgroeiende toepassingen, zoals het Internet of Things (IoT), industriële automatisering of persoonlijke elektronica, maar al te vaak een compromis nodig tussen systeemfunctionaliteit, prestaties of energieverbruik. Omdat er steeds meer bedreigingen van de veiligheid zijn, moet de beveiliging in deze ontwerpen worden vergroot, wat een extra uitdaging vormt die ervoor kan zorgen dat ontwerpers zelfs nog minder bruikbare microcontroller-oplossingen overhouden. Ontwikkelaars hebben een microcontroller nodig die niet alleen bekendere eisen voor een lager energieverbruik en hoge prestaties kan ondersteunen, maar ook de toenemende vraag naar veiligheid in alle fasen van de levenscyclus van het ontwerp, zoals provisioning, communicatie, beveiligd booten, veilige firmware-update, enz.

In deel 1 werd de LPC55S6x-microcontrollerfamilie van NXP geïntroduceerd en werd beschreven hoe hun functies voldoen aan de eisen voor prestaties en een laag energieverbruik. Hier in deel 2 wordt besproken hoe de uitgebreide beveiligingsfuncties die in de LPC55S6x-microcontrollers zijn geïntegreerd levenscyclusbeveiliging ondersteunen, van provisioning en communicatie via beveiligd booten tot veilige firmware-updates.

Zoals wordt besproken in deel 1, combineren de single-core LPC55S66 en dual-core LPC55S69 microcontrollers de universele Arm® Cortex®-M33 processor met hardwaremogelijkheden die zijn ontworpen om te voldoen aan meer gespecialiseerde toepassingseisen. Als onderdeel van die mogelijkheden bieden versnellers op hardwarebasis voor symmetrische en asymmetrische cryptografie fundamentele mechanismen die nodig zijn voor beveiligde communicatie. In het verleden werden cryptografieversnellers voldoende geacht voor basis-beveiligingsfuncties, zoals gegevensbescherming. Vandaag de dag hebben de verwachtingen die de gebruikers hebben van uitgebreidere beveiligingsfuncties er echter voor gezorgd dat er meer complexe eisen worden gesteld aan de levenscyclusbeveiliging, van de provisioning tijdens de fabricage via inbedrijfsstelling ter plaatse, samen met beveiligd booten en veilige firmware-updates.

Om die uitgebreide beveiliging te bereiken, is een omvangrijke reeks beveiligingsprotocollen en -beleid nodig die ver boven het hardwareniveau liggen. Toch hangt de effectiviteit van ieder beveiligingsprotocol volledig af van de beschikbaarheid van geschikte mechanismen op hardwarebasis, die zowel de uitvoer versnellen als de bedreigingen die onvermijdelijk optreden in ieder verbonden apparaat opheffen of verminderen.

De architectuur van de LPC55S6x biedt dit soort ondersteuning voor levenscyclusbeveiliging op hardwarebasis met een reeks mogelijkheden, te beginnen bij zijn ondersteuning van Arm TrustZone®-technologie en vervolgens met de meerdere beschermingslagen die nodig zijn om een effectief beveiligingsniveau te behalen.

TrustZone-ondersteuning

TrustZone biedt een basis voor veiligheid via zijn mogelijkheid om uitvoer van code en gegevens te isoleren in specifieke veilige en niet-veilige domeinen. Tijdens de uitvoer van een programma schakelt de primaire Cortex-M33-kern tussen een aantal verschillende uitvoerfasen die samenhangen met verschillende code-uitvoermodi. Deze CPU-fasen en code-uitvoermodi zijn:

  • Beveiligd bevoorrecht, voor het uitvoeren van code op kernelniveau of device handlers
  • Beveiligd niet-bevoorrecht, voor het uitvoeren van veilige gebruikerscode
  • Niet-beveiligd bevoorrecht, voor het uitvoeren van typische systeemaanvragen
  • Niet-beveiligd niet-bevoorrecht, voor het uitvoeren van typische gebruikerstoepassingen

Het onderscheid tussen bevoorrechte en niet-bevoorrechte uitvoer is van cruciaal belang voor de algehele robuustheid van het besturingssysteem. Voor dit artikel kunnen we die uitvoermodi echter samenvoegen en ons alleen richten op het verschil tussen beveiligde en niet-beveiligde werking. In de TrustZone-architectuur activeert de schakeling van beveiligde naar niet-beveiligde CPU-fasen hardware-ondersteunde beperkingen op de kern om programmageheugen of gegevens te openen.

In de beveiligde status heeft de kern zowel in de beveiligde als in de niet-beveiligde regio's van het geheugen toegang tot gegevens, maar niet tot code die is opgeslagen in een niet-beveiligde regio van het geheugen (Afbeelding 1, links). In de niet-beveiligde status heeft de kern alleen toegang tot code en gegevens uit niet-beveiligde regio's van het geheugen (Afbeelding 1, rechts).

Schema van LPC55S6x-microcontrollers van NXP (klik om te vergroten)Afbeelding 1: Met hun ondersteuning van Arm TrustZone garanderen de LPC55S6x-microcontrollers van NXP dat een kern die in de veilige (S) status werkt (links) alleen instructies kan ophalen voor programmageheugen met S-status, terwijl een kern die in niet-beveiligde (NS) status werkt (rechts) niet bij code of gegevens kan komen die in geheugen met S-status is opgeslagen. (Bron afbeelding: NXP Semiconductors)

De architectuur van de LPC55S6x MCU oefent die controle uit op het laagste niveau van bustoegang, om algemene bedreigingen te verminderen, zoals bufferoverloop waar hackers gebruik van maken om niet-beveiligde, niet-bevoorrechte code te veroorzaken om via de achterdeur toegang te krijgen tot "beschermde" regio's. Hier gebruikt NXP de Arm TrustZone Security Attribution Unit (SAU) met zijn eigen Implementation Defined Attribution Unit (IDAU), ontworpen om veilige kernelcode helemaal te isoleren van toepassingscode. De SAU levert de beveiligingsstatus (beveiligd of niet-beveiligd) en identificeert of de instructie uit een toegestane geheugenregio komt. De IDAU communiceert met de device attribution unit (DAU) om verhoogde granulariteit te bieden en werkt samen met de SAU om het beveiligingsattribuut van een specifiek adres te bepalen. Het resultaat is een busverzoek dat op de juiste beveiligings- en bevoorrechtingsniveaus wordt geleverd (Afbeelding 2).

Schema van LPC55S6x-microcontrollers van NXP beschermen toegang op bustransactieniveauAfbeelding 2: De LPC55S6x-microcontrollers van NXP beschermen de toegang op bustransactieniveau, door de Arm TrustZone SAU te gebruiken in combinatie van hun eigen IDAU om te garanderen dat systeembusverzoeken op het juiste beveiligings- en voorrechtsniveau werken. (Bron afbeelding:NXP Semiconductors)

Veilige opslag en randapparatuur

De beschermingsmechanismen van TrustZone isoleren toepassingscode en gegevens tijdens de werking, door de gegevens die in gebruik zijn aan te pakken (één van de klassieke principes van gegevensbeveiliging), waaronder ook gegevens die in rust zijn en gegevens die in overgang zijn. Hoewel ze gewoonlijk worden geassocieerd met gegevensproblemen op bedrijfsniveau, gelden dezelfde principes ook voor code en gegevens in een ingebed systeem. Hier kan het gebruik van een typisch ingebed systeem van het geïntegreerde flashgeheugen van een microcontroller voor het opslaan van firmware-afbeeldingen, code en gegevens een belangrijke aanvalsvector worden. Het LPC55S6x-apparaat verzwakt deze bedreiging via een coderings-/decoderingsalgoritme dat PRINCE heet. [Opmerking voor de lezers: PRINCE is geen acroniem.]

Het PRINCE-algoritme is geschikt voor beveiligingsimplementaties in ingebedde systemen, dankzij zijn snelheid en minimale behoefte aan middelen. Het PRINCE-algoritme is geïmplementeerd in hardware in LPC55S6x-apparaten en werkt in real-time, door gegevens onmiddellijk te decoderen of te coderen wanneer ze worden gelezen of geschreven. Anders dan veel andere crypto-algoritmes, hoeft het PRINCE-algoritme geen RAM te gebruiken om de oorspronkelijke gegevens of tussenresultaten te bewaren, waardoor nog een zwakke plek in de beveiliging wordt opgeheven. Daardoor kunnen ontwikkelaars applicatiecode, firmwarebeelden en zelfs beveiligde code veiliger opslaan in het interne flashgeheugen van de microcontroller.

Hoewel crypto-motoren en veilige flash-opslag de gegevensuitwisseling en -opslag vergrendelen, heeft een veilig ingebed systeem hetzelfde niveau van beveiliging nodig voor zijn interacties met sensors en transducers. Samen met zijn veilige DMA-mogelijkheden levert de architectuur van de LPC55S6x MCU mechanismen die de uitwisseling tussen de kern of andere busmasters en zijn geïntegreerde randapparaten, geheugen of GPIO nog verder beveiligen (Afbeelding 3).

Schema van LPC55S6x-microcontrollers van NXP combineren hun meerlagige busmatrix met MSW'sAfbeelding 3: LPC55S6x-microcontrollers van NXP combineren hun meerlagige busmatrix met MSW's, MPC's en PPC's om transacties tussen de verschillende busmasters en hun randapparaten en geheugen te isoleren en te beveiligen. (Bron afbeelding: NXP Semiconductors)

In dit beschermingsschema beperken memory protection checkers (MPC's) de toegang tot het geheugen door minder veilige toepassingen. Peripheral protection checkers (PPC's) bieden hetzelfde type toegangscontrole voor randapparaten, waardoor ontwikkelaars verschillende toegangsregels kunnen instellen voor verschillende randapparaten. Omdat het SAU/IDU-mechanisme alleen beschikbaar is op de primaire Cortex-M33-kern, worden er master security wrappers ( MSW's) gebruikt om gelijksoortige toegangsbescherming te bieden voor andere busmasters. Aangezien de meerlagige AHB-matrix een speciaal pad creëert tussen busmasters en randapparaten of geheugen, is het resultaat een veilige interne busverbinding die geïsoleerd is van andere bustransacties die in het apparaat kunnen optreden.

De architectuur van de LPC55S6x MCU isoleert bovendien beveiligde en niet-beveiligde toegang tot externe apparaten via zijn beveiligde GPIO-systeem. Dit systeem breidt hetzelfde soort isolatie uit tot GPIO-pennen die de TrustZone-mechanismen creëren tussen beveiligde en niet-beveiligde CPU-statussen en code-uitvoermodi. Veilige GPIO-pennen kunnen dus alleen worden geopend door de primaire Cortex-M33-kern die in een beveiligde status werkt, zodat ontwikkelaars signalen van kritieke externe apparaten kunnen beveiligen.

Beveiligingssleutelbeheer

De diverse beschermingsmechanismen die tot nu toe zijn beschreven in dit artikel, vormen de fundering van een beveiligd ingebed systeem. Om dat systeem veilig te verbinden met een netwerk, smartphone of andere host, moeten ontwikkelaars echter de mogelijkheid hebben om het doel van de verbinding te verifiëren tijdens de eerste inbedrijfstelling en lopende transacties, en de mogelijkheid om een veilig versleuteld communicatiekanaal te behouden. De veiligheid van de asymmetrische en symmetrische cryptografie-algoritmes in het hart van verificatieprotocollen en versleutelingsmechanismen hangt op zijn beurt tenslotte af van de veiligheid van de privésleutels die binnen deze protocollen en mechanismen worden gebruikt.

Met hun geïntegreerde Physical Unclonable Function (PUF) bieden LPC55S6x-microcontrollers een zeer veilig mechanisme om bestaande sleutels veilig op te slaan en om nieuwe te genereren. Deze benadering draait om de mogelijkheid van de PUF-hardware om een unieke PUF-hoofdsleutel te creëren die wordt gebruikt om andere gebruikerssleutels te versleutelen. De uniekheid van de PUF-hoofdsleutel is afkomstig van het gebruik van interne apparaatfuncties samen met SRAM-opstartgegevens, die worden afgeleid van de willekeurige 0 en 1 contents van SRAM-cellen bij het inschakelen. Tijdens de PUF-registratiefase gebruikt het apparaat deze twee bronnen van willekeurige gegevens om een digitale vingerafdruk te creëren met een bijbehorende 1192-byte activeringscode (Afbeelding 4).

Diagram van de geïntegreerde PUF van de NXP LPC55S6x-microcontrollersAfbeelding 4: De geïntegreerde PUF van de LPC55S6x-microcontroller van NXP gebruikt de willekeurige status van SRAM's bij het opstarten en andere interne functies om een digitale vingerafdruk en activeringscode te genereren die vervolgens worden gebruikt voor het genereren van sleutels en voor opslaghandelingen. (Bron afbeelding: NXP Semiconductors)

Tijdens de provisioning van het apparaat in de fabriek of later ter plaatse, wordt deze activeringscode opgeslagen in het in-field programmable area (CFPA) van de klant in de beschermde flash-regio van het apparaat. Steeds wanneer de microcontroller wordt ingeschakeld en de PUF is geactiveerd met het PUF Start-commando, combineert de PUF de bestaande activeringscode met de SRAM-opstartgegevens om de digitale vingerafdruk te reconstrueren.

Na deze PUF Start-procedure zorgt het commando PUF SetKey ervoor dat de PUF gebruikerssleutels codeert, zoals gedeelde mastersleutels die zijn geleverd in de fabriek, of privésleutels die door ontwikkelaars worden geleverd voor hun toepassingen. Hier genereert de PUF een sleutelcode voor de bijbehorende gebruikerssleutel op basis van de sleutelgrootte, een sleutelindex en de gebruikerssleutel zelf (Afbeelding 5).

Schema van LPC55S6x PUF van NXP biedt een SetKey-functieAfbeelding 5: De LPC55S6x PUF van NXP biedt een SetKey-functie die een gebruikerssleutel en sleutelindex codeert met de digitale vingerafdruk, om zo een sleutelcode te leveren die later wordt gebruikt om de originele gebruikerssleutel te openen. (Bron afbeelding: NXP Semiconductors)

Ontwikkelaars kunnen ook nieuwe sleutels genereren met het PUF-commando GenerateKey, wat hetzelfde generatieproces gebruikt als SetKey, maar met unieke, intern gegenereerde gegevens die de KEYIN-functie vervangen die in Afbeelding 5 te zien is. Sleutels die zijn ingesteld of gegenereerd met sleutelindex = 0 krijgen nog meer bescherming, zoals hieronder wordt opgemerkt.

Om sleutels te gebruiken roepen ontwikkelaars het PUF GetKey-commando op om de originele gebruikerssleutel op te halen met twee verschillende uitgangspaden, afhankelijk van de waarde van de sleutelindex die is gebruikt toen de sleutel werd ingesteld of gegenereerd. Als de sleutelindex groter is dan nul, is de gebruikerssleutel beschikbaar via het PUF-register CODEOUTPUT. Als de sleutelindex gelijk is aan nul, wordt de gebruikerssleutel direct naar de AES-motor of naar de drie door de PRINCE-motor ondersteunde flashgeheugenregio's gestuurd, zoals wordt gespecificeerd door de waarde van KEYENABLE (Afbeelding 6). Hoewel het 4-bits PUF KEYMASK-register niet direct betrokken is bij het ophalen van sleutels, ondersteunt het een intern mechanisme dat is ontworpen om side-channel-aanvallen af te zwakken.

Diagram van NXP LPC55S6x PUF GetKey-commando voor het openen van sleutelsAfbeelding 6: Om sleutels te openen gebruiken ontwikkelaars het NXP LPC55S6x PUF GetKey-commando. Dit gebruikt de sleutelindex en de sleutelcode die zijn gegenereerd tijdens SetKey (of GenerateKey) voor het produceren van de originele gebruikerssleutel of verzendt het via een privébus naar de cryptoversnellers van de microcontroller. (Bron afbeelding: NXP Semiconductors)

Nul-indexsleutels helpen om de levenscyclusbeveiliging te versterken, zelfs vanaf de provisioningfase in de fabriek. Na de provisioning via PUF SetKey, verlaat een gedeelde mastersleutel die wordt gebruikt voor symmetrische cryptografie of de privésleutel die wordt gebruikt voor asymmetrische cryptografie nooit het apparaat en komt nooit de systeembus binnen. In plaats daarvan treedt sleuteloverdracht naar de AES- of PRINCE-motoren intern op via een speciale hardware-interface die niet toegankelijk is door software.

Het PUF-sleutelbeheermechanisme en de andere beveiligingsfuncties van de microcontroller komen samen voor andere levenscyclusbeveiligingsfasen, zoals beveiligd booten en firmware-updates. Voor beveiligd booten ondersteunt de LPC55S6x meerdere beschermingsmethoden, inclusief verificatie van met RSA2048 ondertekende beelden met gevalideerde X.509-certificaten of decodering van beelden die zijn opgeslagen in een PRINCE-flashregio. In beide gevallen haalt de bootloader veilig de benodigde sleutels op voor de certificaatvalidatie of afbeeldingsdecodering uit de PUF-sleutelopslag met door PUF gegenereerde sleutelhashes die met de afbeeldingen zijn opgeslagen in de beschermde flashregio.

Firmware-update gebruikt soortgelijke mechanismen om een over-the-air update firmwarebeeld te verifiëren, te decoderen en klaar te maken voor booten.

Buiten de onmiddellijke behoeften van beveiligd booten en firmware-update, ondersteunen de meerdere sleutelopslagslots en sleutelgeneratiemogelijkheden van het apparaat lopende levenscyclusbeveiligingseisen voor intrekking van sleutels en certificaten. Deze sleutelbeheermogelijkheid ondersteunt op zijn beurt weer beveiligingsbeleid van een hoger niveau, zoals intrekking van een firmwarebeeld.

Ontwikkelaars kunnen de mogelijkheden van LPC55S6x-microcontrollers snel verkennen met het NXP LPCXpresso55S69 ontwikkelingsbord in combinatie met het MXUXpresso integrated development environment (IDE) van NXP, IAR of Keil IDE's. MXUXpresso Config Tools zijn geïntegreerd in de MCUXpresso IDE en helpen ontwikkelaars bij het installeren van MCU-hardware en het genereren van initialisatiecode. Binnen deze configuratietoolset laat de trusted execution environment (TEE)-tool ontwikkelaars de toegang met meerlagige beveiliging van de LPC55S6x-MCU eenvoudiger configureren. Met de grafische interface van de TEE-tool kunnen ontwikkelaars toegangsrechten naar geheugen, busmasters en randapparaten verfijnen voor elk van de vier CPU-fasen en uitvoermodi die eerder zijn beschreven (Afbeelding 7).

Afbeelding van NXP MCUXpresso Config Tools gereedschapsset (klik om te vergroten)Afbeelding 7: Binnen de NXP MCUXpresso Config Tools gereedschapsset zorgt de grafische interface van de trusted execution environment tool ervoor dat ontwikkelaars toegangsrechten naar geheugen, busmasters en randapparaten kunnen instellen voor code die wordt uitgevoerd in de vier CPU-fasen en uitvoermodi (Bron afbeelding: NXP Semiconductors).

Voor code-ontwikkeling biedt NXP ook een aantal eenvoudige codevoorbeelden die de basisontwerppatronen bieden voor het gebruik van de beveiligingsfuncties van de microcontroller, zoals beveiligde GPIO, PUF-sleutelbeheer en andere apparaatmogelijkheden. Zelfs in de ontwikkelingsfase helpt de LPC55S6x-MUC echter om levenscyclusbeveiliging te behouden via zijn single wire debug (SWD)

authenticatievermogen. Met deze mogelijkheid kunnen geautoriseerde ontwikkelaars hun beveiligingscode debuggen en alle verdere SWD-toegang uitschakelen om middelen te beveiligen voordat de ontwikkeling wordt overgedragen aan ontwikkelaars van niet-beveiligde-software. Nadat die ontwikkelaars hun code debug hebben voltooid, kunnen ze alle debug-toegang via de SWD-poort uitschakelen.

Conclusie

Ontwikkelaars hebben te maken met een toenemende vraag naar ontwerpen met een laag verbruik en hoge prestaties die de veiligheid kunnen bewaren door de hele levenscyclus heen, vanaf de provisioning in de fabriek tot het veilige gebruik ter plaatse. Zoals hier is beschreven, biedt de NXP LPX55S6x-microcontrollerfamilie een effectieve oplossing die universele verwerkingsmogelijkheden combineert met een uitgebreide reeks gespecialiseerde hardwarefuncties die nodig zijn voor de ondersteuning van levenscyclusbeveiliging.

DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

Achtergrondinformatie over deze auteur

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk heeft meer dan 20 jaar ervaring in het schrijven voor en over de elektronicasector met betrekking tot heel wat onderwerpen, waaronder hardware, software, systemen en toepassingen zoals het IoT. Hij behaalde zijn filosofiediplomain neurowetenschappen over neuronale netwerken en werkte in de ruimtevaartsector op massaal verspreide veilige systemen en algoritmeversnellingsmethoden. Wanneer hij geen artikels over technologie en techniek schrijft, werkt hij aan toepassingen voor “deep learning” voor herkennings- en aanbevelingssystemen.

Over deze uitgever

De Noord-Amerikaanse redacteurs van DigiKey