- COMP.SEC.100
- 21. Laitteiston tietoturvallisuus
- 21.1 Suunnitteluprosessin ja laitteiston tietoturvallisuuden yhteys (syventävä)
Laitteistoturvallisuus kattaa laajan joukon aiheita luotettavasta laskennasta troijalaispiireihin. Jäsentämisen helpottamiseksi alla ensimmäisessä alaluvussa esitetään malli laitteiston abstraktiotasoista. Samalla tuodaan laitteistoturvallisuuden kontekstiin tärkeät käsitteet luottamusjuuri ja uhkamallit. Seuraavien alalukujen tarkoituksena ei ole kattaa koko alaa, erityisesti koska useita osa-alueita käsitellään muissa luvuissa (ohjelmistot, käyttöjärjestelmät, kryptografia). Kolmen viimeisen alaluvun aiheet ovat turvalliset alustat, sivukanava- ja vikahyökkäykset sekä alimman abstraktiotason entropialähteet. CyBOK käsittelee lisäksi turvallisuuden mittaamista, laitteistotukea ohjelmistojen turvallisuudelle, rekisterisiirtoja, ja palaa lopuksi laitteiston suunnitteluprosessiin.
Suunnitteluprosessin ja laitteiston tietoturvallisuuden yhteys (syventävä)¶
Laitteistoturvallisuuden monet näennäisen erilliset aiheet jäsennetään laitteistosuunnittelun abstraktiotasojen mukaan käyttäen Gajskin ja Kuhnin Y‑kaaviota soveltamalla sitä laitteistoturvallisuuden näkökulmasta. Samalla se kytketään uhkamalleihin ja niihin liittyvään luottamusjuuren (root of trust) käsitteeseen.
Laitteistosuunnittelun abstraktiotasot (syventävä)¶
Abstraktiotasot ovat keskeinen keino hallita laitteistosuunnittelun monimutkaisuutta. Kuten kuvassa 21.1 on esitetty, alin suunnittelijan tarkastelema abstraktiotaso koostuu yksittäisistä transistoreista. Logiikkatasolla näistä rakennetaan peruslogiikkaportteja, kuten NAND ja NOR, ja (mm.) niistä flip-flopeja.
Rekisterinsiirtotasolla (Register Transfer Level, RTL), logiikkaportteja yhdistetään suuremmiksi kokonaisuuksiksi, kuten rekistereiksi, aritmeettis-loogisiksi yksiköiksi (ALU) ja muiksi moduuleiksi. Näiden toiminta synkronoidaan kellosignaalin avulla. Ylemmillä tasoilla nämä moduulit yhdistetään prosessoreiksi, jotka on määritelty käskyjoukkojen avulla ja joiden päälle voidaan toteuttaa sovelluksia ja algoritmeja.
Siirryttäessä abstraktiotasolta toiselle alemman tason yksityiskohdat piilotetaan. Näin suunnittelun monimutkaisuus pienenee ylemmillä tasoilla. Nämä abstraktiotasot esitetään Gajskin ja Kuhnin Y‑kaaviossa samankeskisinä ympyröinä.
Kuva 21.1 Gajskin & Kuhnin Y-kaavio
Y‑kaavio jäsentää laitteistosuunnittelua kolmen toisiaan leikkaavan akselin avulla:
- käyttäytymisakseli, joka kuvaa mitä järjestelmän tulee tehdä (määrittelyt ja spesifikaatiot)
- rakenteellinen akseli, joka kuvaa, miten toiminnallisuus toteutetaan rakenteellisesti
- fyysinen akseli, joka kuvaa toteutuksen fyysistä muotoa portti-, moduuli-, siru- ja piirilevytasolla
Varsinainen suunnittelutyö voidaan nähdä ”kävelynä” tässä suunnitteluavaruudessa. Suunnittelu alkaa yleensä käyttäytymisakselin yläosasta, eli järjestelmän määrittelyistä. Nämä määrittelyt (“mitä”) puretaan komponentteihin samalla abstraktiotasolla (“miten”), kun siirrytään käyttäytymisakselilta rakenteelliselle akselille. Rakenteellinen komponentti yhdellä tasolla toimii samalla seuraavan alemman abstraktiotason käyttäytymismallina.
Esimerkki suunnitteluavaruuden läpikäynnistä. Oletetaan, että laitteistosuunnittelijaa pyydetään toteuttamaan kevyt ja vähän virtaa kuluttava suojausprotokolla esineiden internetin (IoT) laitteeseen. Suunnittelija saa aluksi vain korkean tason määrittelyt: protokollan tavoitteena on tarjota luottamuksellisuus ja eheys (=mitä) sekä käyttää tiettyjä salausalgoritmeja (=komponentit) näiden tavoitteiden saavuttamiseksi. Salausalgoritmit toimitetaan laitteistosuunnittelijalle käyttäytymiskuvauksena. Hän voi toteuttaa ne esimerkiksi erillisellä apuprosessorilla, ohjelmakoodina tai mukautetuilla käskyillä. Kustannuksista ja tuotantomääristä riippuen valitaan toteutusalustaksi joko CMOS‑teknologia tai FPGA. Tämä käyttäytymistason kuvaus muunnetaan tarkemmaksi rekisterinsiirtotason kuvaukseksi (esimerkiksi VHDL‑ tai Verilog‑kielellä). RTL‑tasolla tehdään keskeisiä suunnittelupäätöksiä: toteutetaanko ratkaisu rinnakkaisena vai peräkkäisenä, kiinteänä vai ohjelmoitavana, sekä sisällytetäänkö siihen vastatoimia sivukanava‑ ja vikahyökkäyksiä vastaan.
Abstraktiotasojen jaottelun ydin on siinä, että kullakin tasolla käytetään tarkoituksenmukaisia malleja komponenttien käyttäytymisestä. Esimerkiksi aritmeettisen yksikön suorituskyvyn tai energiankulutuksen simulointi edellyttää riittävän tarkkoja malleja alemmista tasoista, kuten porttitasosta. Vastaavasti ohjelmoijalle näkyvä käskykanta-arkkitehtuuri (Instruction Set Architecture, ISA) toimii prosessorin mallina ja määrittää, millaisena laitteisto näyttäytyy ohjelmistokehityksessä.
Luottamusjuuri (syventävä)¶
Tietoturvassa luottamusjuuri (root of trust, myös: luottamusankkuri) on malli, jonka avulla jäsennetään, mihin järjestelmän turvallisuuden arviointi viime kädessä perustuu. Se kuvaa komponenttia, johon turvallisuustoiminnot nojaavat, vaikka kyseisen komponentin luotettavuutta ei voida täysin todentaa. Suunnittelija käyttää yhtä tai useampaa tällaista komponenttia rakentaakseen turvallisuustoiminnon, joka muodostaa luotetun laskentapohjan (Trusted Computing Base, TCB). Tavoitteena on, että se käyttäytyy aina odotetulla tavalla aiottuun käyttötarkoitukseen nähden. Siihen voi siis luottaa.
Esimerkiksi sovelluskehittäjälle Trusted Platform Module (TPM) tai Subscriber Identity Module (SIM) toimii luottamujuurena, jonka varaan tietoturvasovellus rakennetaan. TPM-suunnittelijan näkökulmasta TPM ei kuitenkaan ole jakamaton kokonaisuus, vaan useista pienemmistä komponenteista koostuva järjestelmä, joka yhdessä tuottaa turvatoiminnot. Vielä alemmilla laitteiston abstraktiotasoilla luottamusjuuria ovat esimerkiksi salaisen avaimen turvallinen tallennus muistissa tai aidon satunnaislukugeneraattorin (TRNG) laatu.
Laitteistoturvallisuus toimii ohjelmisto- ja järjestelmäturvallisuuden mahdollistajana. Tästä syystä laitteisto tarjoaa perustason turvapalveluita, kuten suojatun tallennuksen, eristyksen ja todistuksen (attestation). Ohjelmisto ja järjestelmä tarkastelevat laitteistoa luotettuna laskentapohjana ja olettavat sen toimivan oikein. Tämä luottamusolettama ei kuitenkaan ole itsestään selvä. Laitteistototeutus voi rikkoa luottamuksen esimerkiksi troijalaispiirien tai sivukanavahyökkäysten kautta, jolloin salaisia avaimia tai muuta arkaluonteista tietoa voi vuotaa hyökkääjälle. Siksi myös itse laitteisto tarvitsee suojaa, eikä kyseessä ole vain yhden tason ongelma, vaan suojaa tarvitaan kaikilla abstraktiotasoilla. Joka tasolla on määritettävä uhkamalli ja siihen liittyvät luottamusoletukset. Tämän mukaisesti määritelmä täsmentyy: ”Luottamusjuuri on alemman abstraktiotason komponentti, jonka turvallisuuteen järjestelmä nojaa. Sen luotettavuutta ei voida varmentaa lainkaan tai se varmistetaan vielä alemmalla abstraktiotasolla.”
Uhkamalli (syventävä)¶
Jokaiseen luottamusjuureen liittyy uhkamalli. Luottamusjuureen tukeutuminen tarkoittaa luottamista uhkamallin pätevyyteen. Tämä kytkee uhkamallin suoraan laitteiston abstraktiotasoihin. Jos luottamusjuurta tarkastellaan tietyllä abstraktiotasolla, oletetaan samalla, että kaikki komponentit, jotka yhdessä muodostavat kyseisen luottamusjuuren, ovat luotettavia kyseisen uhkamallin puitteissa.
Esimerkki 1: Turvallinen avainten talletus. Suojausprotokollat olettavat, että salainen avain on tallennettu turvallisesti eikä hyökkääjällä ole siihen pääsyä. Protokollan luottamusjuuri on tällöin suojattu muisti, joka estää avaimen luvattoman lukemisen tai muokkaamisen. Protokollan suunnittelijalle tämä suojattu muisti näyttäytyy mustana laatikkona. Laitteistosuunnittelijan tehtävänä on kuitenkin purkaa tämä vaatimus alemmalle abstraktiotasolle ja vastata muun muassa seuraaviin kysymyksiin:
- Millaista muistia käytetään?
- Mitä väyliä pitkin avain kulkee järjestelmässä?
- Millä muilla laitteisto- tai ohjelmistokomponenteilla on pääsy kyseiseen tallennustilaan?
- Voiko toteutus aiheuttaa sivukanavavuotoja?
Esimerkki 2: ISA luottamusrajana Ohjelmoitavissa prosessoreissa laitteiston ja ohjelmiston välinen malli on perinteisesti ollut Instruction Set Architecture (ISA). ISA määrittelee, mitä ohjelmoija näkee prosessorista, ja sen toteutus on jätetty laitteistosuunnittelijan vastuulle. Pitkään ISA toimi ohjelmistosuunnittelijan keskeisenä luottamusrajana. Mikroarkkitehtuuristen sivukanavahyökkäysten, kuten Spectren, Meltdownin ja Foreshadow’n, myötä tämä oletus ei kuitenkaan enää pidä. ISA ei ole enää hyökkääjän näkökulmasta musta laatikko, sillä myös mikroarkkitehtuurin ajoitus-, teho- ja muut vuodot voivat olla hyödynnettävissä. Näin hyökkäysmalli siirtyy mustasta laatikosta harmaan laatikon malliin, jossa osa toteutuksen sisäisestä käyttäytymisestä on hyökkääjän havaittavissa.
Abstaktiotasot (syventävä)¶
Suunnittelun hajauttaminen ja pilkkominen eri abstraktiotasoille yhdessä EDA‑työkalujen (Electronic Design Automation) kanssa on ollut keskeinen syy siihen, miksi Moore’n lain mukainen eksponentiaalinen kehitys on ollut mahdollinen ja kestävää viime vuosikymmenten ajan. Tämä lähestymistapa soveltuu erityisen hyvin suorituskyvyn, pinta-alan, energiatehokkuuden ja tehonkulutuksen optimointiin. Vaikka laitteistoturvallisuutta kyllä toteutetaan (ja pitää toteuttaa) eri tasoilla, työn systemaattinen pilkkominen osakokonaisuuksiin ei ole niin yhdenmukaista kuin suorituskykyyn tai energiatehokkuuteen liittyvässä suunnittelussa.
Tässä luvussa laitteistoturvallisuuden (valitut) osa-alueet jäsennetään laitteistosuunnittelun abstraktiotasojen mukaan ja kytketään tason mukaisiin uhkamalleihin ja luottamusjuuriin. Näin voidaan myös hahmottaa eri osa-alueiden nykytilaa ja kypsyyttä. Esimerkiksi salausalgoritmien laitteistototeutusten osalta tekniikka on pitkälle kehittynyttä, ja tehokkaita vastatoimia sivukanavahyökkäyksiä vastaan on olemassa (ks. myöhempi alaluku). Sen sijaan yleiskäyttöisten prosessorien turvallisuuteen liittyen uusia haavoittuvuuksia ja hyökkäysmenetelmiä havaitaan edelleen säännöllisesti. Esimerkkeinä ovat prosessien eristäminen ja turvallinen suoritus, joita on käsitelty hieman käyttöjärjestelmien yhteydessä.
Taulukossa 21.1 esitetään yhteenveto laitteistoturvallisuuden aiheista abstraktiotasojen mukaisesti. Ensimmäinen sarake tunnistaa eri abstraktiotasot laitteiston näkökulmasta. Korkein taso, järjestelmä ja ohjelmisto, sijaitsee varsinaisen laitteistoalustan yläpuolella.
Järjestelmäsuunnittelija olettaa tyypillisesti, että käytettävissä on suojattu alusta, joka toimii luottamuksen juurena ja tarjoaa keskeiset turvatoiminnot. Ne on kuvattu toisessa sarakkeessa. Kolmannessa sarakkeessa esitetään esimerkkejä siitä, miten kyseinen toiminnallisuus voidaan toteuttaa. Ylemmillä abstraktiotasoilla tämä voi tarkoittaa esimerkiksi luotettua suoritusympäristöä tai suojattua moduulia. Neljännessä sarakkeessa kuvataan kyseiseen abstraktiotasoon liittyvät uhkamallit ja hyökkäysluokat, ja viimeinen sarake esittää tyypillisiä suunnittelutoimintoja kyseisellä tasolla.
Taulukko 21.1: Uhkamalleihin liittyvät suunnittelun abstraktiotasot, luottamuksen juuret ja suunnittelutoiminnot
Prosessoritasolla voidaan erottaa yleiskäyttöiset ohjelmoitavat prosessorit ja tehtäväkohtaiset prosessorit. Yleiskäyttöisten prosessorien on tuettava laajaa sovellusjoukkoa, mikä tarkoittaa usein myös ohjelmistopohjaisia haavoittuvuuksia. Näiden lieventämiseksi prosessoreihin on lisätty laitteistotason turvamekanismeja, kuten varjopinoja tai kontrollivuon eheyteen liittyviä suojauksia. Tehtäväkohtaiset prosessorit on suunniteltu rajattuun käyttötarkoitukseen, ja niitä käytetään usein järjestelmäpiireissä apuprosessoreina, esimerkiksi toteuttamaan kryptografisia algoritmeja. Prosessoritasolla aikaa mitataan tyypillisesti käskyjaksoissa.
Sekä yleiskäyttöiset että tehtäväkohtaiset prosessorit rakentuvat laskentayksiköistä, kuten kertojista ja ALU-yksiköistä, muistista sekä liityntärakenteista. Nämä moduulit kuvataan tyypillisesti rekisterinsiirtotasolla. Tällä tasolla turvallisuuden kannalta keskeisiä ovat vakioaikaisuus ja sivukanavahyökkäyksille vastustuskykyinen toiminta. Aikaa mitataan yleensä kellosykleissä.
Logiikkatasolla kertojat, ALU-yksiköt, muistit ja väylärakenteet muodostetaan porteista ja flip-flopeista. Turvallisuuden pääkohteena ovat fyysiset sivukanavat, esimerkiksi vuodot virrankulutuksen, sähkömagneettisen säteilyn ja virheiden (fault attacks) hyödyntämisen kautta. Ajallinen tarkastelu tehdään absoluuttisessa ajassa, esimerkiksi nanosekunneissa, ja viivearvot perustuvat käytettävissä oleviin standardisolukirjastoihin tai FPGA-alustoihin.
Entropialähteiden, kuten todellisten satunnaislukugeneraattorien (TRNG) tai fyysisesti kloonautumattomien funktioiden (PUF), suunnittelu edellyttää syvällistä ymmärrystä transistorien käyttäytymisestä ja CMOS‑teknologiasta. Näin ollen nämä laitteistoturvan perusprimitiivit sijoittuvat piiri‑ ja teknologiatasolle. Samoin antureiden ja suojausten suunnittelu fyysistä peukalointia vastaan vaatii yksityiskohtaista tietoa toteutusteknologiasta. Tällä tasolla suorituskyky ja turvallisuus mitataan esimerkiksi viiveinä (ns) tai kellotaajuuksina (GHz).
Taulukon 21.1 tarkoituksena ei ole esittää kattavaa luetteloa kaikista laitteistoturvallisuuden aiheista, vaan havainnollistaa kunkin abstraktiotason luonnetta esimerkkien avulla.