Siden det er mange kinesiske selskaper som enkelt kan omforme PCB-designet og trekke ut .hex-filen ut av mikrokontrollerne (selv fra den sikre flashen), må innebygde utviklere legge til litt mer beskyttelse på produktene sine. I mitt tilfelle bruker jeg en STM32F103, og jeg vil legge til krypto IC ATSHA204A på PCB-en for å beskytte IP-en min. Ved å gjøre dette håper jeg selv om de kan få .hex ut av MCU og klone brettet, vil hex-filen nekte å fungere hvis den ikke kan gjenkjenne kryptobrikke på PCB.
Denne krypto-ICen har et unikt serienummer som ble skrevet mens den ble produsert, og den kan alltid leses. Den har også noen funksjoner som et sikkert område for å holde noen hemmelige data, muligheten til å generere tilfeldige tall og sende det til verten via I2C eller en-ledning, muligheten til å beregne SHA-256 hash av en gitt streng og så videre. / p>
Nå prøver jeg å forstå hvordan jeg skal jobbe med det, ettersom jeg er en slags noob om autentiseringsemnet. Fra det jeg har forstått fra å lese databladet er, vil arbeidsflyten være slik:
Personalisering av krypto IC:
-
Det sikre området i krypto brikken vil bli fylt av verten (STM32F103 i mitt tilfelle) med noen tilfeldig hemmelig nøkkel for hvert produkt, bare en gang.
-
Den hemmelige nøkkelen vil også være til stede i vertenes blits minne.
Autentisering av tavlen (Min forståelse, som sannsynligvis er feil):
-
Verten ber om et tilfeldig tall fra krypto-IC. Deretter genererer verten en sammenkoblet streng med den hemmelige nøkkelen og det tilfeldige tallet (nonce?), Og beregner SHA-256-hasjen av den.
-
Nå skal verten sende tilfeldig nøkkel tilbake til crypto-IC og forvent fra den å generere den samme strengen med den hemmelige nøkkelen inne i crypto-IC og beregne SHA-256 hash av den.
-
Crypto-IC sender den beregnede hasjen tilbake til verten, og verten sammenligner hashene.
-
Hvis hashene stemmer overens, valider. Hvis de ikke gjør det, nekter verten å jobbe.
Arbeidsflyten er sannsynligvis feil, men hovedideen burde være noe i nærheten av det. Kan noen forklare dette?
Svar
Arbeidsflyten er sannsynligvis feil, men hovedideen bør være noe i nærheten av det.
Nei, dette er i utgangspunktet ubrukelig. Dette ville være greit hvis du for eksempel bruker din crypto IC for å validere ektheten til en tilleggsenhet (si, en skriver som bekrefter patronen ble laget av samme firma).
Det hjelper ikke deg , fordi " nekter å jobbe " vil ikke fly hvis noen har maskinvarekoden din: å finne avkrysningen i den demonterte maskinkoden er vanligvis ikke at hardt. Så er det like mye som å erstatte en " hoppe til «stopp og ikke gjør noe» " med en " hopp til «start av nyttig funksjonalitet «"; vanligvis innebærer det å bytte byte.
Du må kryptere den interessante delen av fastvaren i den permanente lagringen (vanligvis MCUs innebygde flash). Bare en bootloader som bruker kryptobrikken for å dekryptere hovedfastvaren vil ikke være kryptert. Ved oppstart dekrypterer bootloader firmwaren til RAM.
Lite problem der: Du trenger å være ganske smart, maskinvaremessig, slik at du ikke kan det er bare å feste en logisk analysator mellom MCU-en din og krypto-IC-en, og snuse de dekrypterte byte. hemmelig om det, er det bare litt mer arbeid å forstå hvordan det å hoppe rundt gjøres fra maskinkode. (Og hvis du klarer å sette inn et enkelt stykke maskinkode på den bussen som får MCU til å streame ut hele RAM-en via en eller annen pin, så er det også spillet over, det betyr ikke noe for deg om du vet hvor den delen av koden havner i RAM, du finner den senere i dumpen, det er bare viktig at den blir utført på et eller annet tidspunkt.)
Med andre ord, hvis du virkelig tror firmware er det kommersielt interessant (folk overvurderer det veldig! For ting som ikke hovedsakelig er firmware, for eksempel for enhver forbruksenhet og enhver industriell kontroll, er det vanligvis vanskelig å finne alle delene og bygge samme / lignende enhet billigere enn originalen, og fullstendig omskriving av fastvaren er ofte lett sammenlignet med det), så er den eneste sjansen din å integrere hemmelig oppbevaring, kryptert lagring og sikker kjøring (slik at RAM-dumping er umulig).
Det er mikrokontrollere som gjør det. De er vanligvis litt dyrere.Men som du kan gjette, hvis du for eksempel befinner deg i et forsvarsmiljø der du trenger å sertifisere, kan ikke firmwaren tukles med, vel, det er din vei å gå.
Nintendo lager enheter der det økonomiske incitamentet til å ikke la noen lese firmware eller til og med endre den er sterk:
Brukernes manglende evne til å kjøre programvare som ikke var lisensiert av Nintendo på konsollene, er avgjørende for forretningsmodellen. Derfor er det å være ute av stand til å omgå kontrollen av spillets signaturer, og det er derfor en Nintendo Switch går ut med flere lag med beskyttelse. Som du kan gjette, er det ingen garanti – det var ganske enkelt hobbyister (ikke engang personer med en kriminell / kommersiell interesse!) At fant en vei rundt det.
Men du vil legge merke til en ting: Bare fordi det er vanskelig å gjøre perfekt, betyr det ikke at det ikke er verdt det, noe som gjør det vanskeligere å klone enheten. I min ydmyke opplevelse kapitulerer vanligvis kloner så snart du trenger forståelse for hvordan en enhet fungerer for å kopiere den – ellers ville de være i posisjon til å ha ingeniører som kan gjøre jobben din, mer eller mindre, og de ingeniørene jobber vanligvis i din sektor, ikke i noe forfalsket laboratorium. En god avskrekkende virkning er derfor å sette firmwaren kryptert i flash. Det er ikke perfekt, men i det øyeblikket de trenger å komme seg ut av logikkanalysatoren og bruke uker på å reversere in-RAM dekrypteringsprotokoll, bare for å få noe de kanskje kan kopiere, kan være nok til at de anser den økonomiske risikoen for høy og går for noen ting annet.
Kommentarer
- " folk overvurderer vilt at ", men folk overvurderer like vill kostnadene ved reverse engineering.
- Takk for det gode svaret, kan ikke anbefale for ikke å ha nok rykte. Ja det er ' i utgangspunktet umulig å gjøre det 100% sikkert, men å legge til et veldig enkelt sikkerhetstiltak med en $ 0,3 kryptobrikke kan øke kostnadene for reverse engineering fra noen 3-talls $ kanskje 5-figur, mens du øker den nødvendige tiden fra noen dager til noen måneder hvis sikkerheten er designet smart nok. Og det kan avvise hackerne (avhengig av produktets økonomiske potensiale) Jeg tror jeg vil gå videre ved å kryptere " interessant del " av hovedfastvaren.
- Jeg ' Skaler estimatet ditt ned til " øker tiden fra en time til kanskje noen dager ", og kostnadene er i utgangspunktet irrelevante i begge tilfeller. Kostnadene ville være " i det vesentlige gratis " for alle som ' har de elektroniske verktøyene liggende rundt uansett, og selv om ikke, 200 € pluss en bærbar datamaskin gir deg en rimelig start.
- Så skal jeg gi opp og ikke bruke noen beskyttelse i det hele tatt? 🙂
- @NotReallyaMaster at ' er opp til deg; Jeg ' har viet hele siste avsnitt i svaret mitt på det spørsmålet.