Vaikka varsinaisia kryptoalgoritmeja ei tarvitsisikaan ohjelmoida itse, turvaohjelmiston toteuttaja voi joutua tekemään niihin läheisesti liittyvää ohjelmointia, esim. avaintenhallintaa varten. Tällaisen ohjelmoinnin turvatarpeet ovat huomattavasti vaativammat kuin tavallisen.

Krypto-ohjelmien ytimenä on salaisena pidettävien avainten käsittely, kun turvataan arkojen tietojen kuljettamista tai pitkäaikaista säilytystä tai rakennetaan luottamusta erilaisten protokollien avulla. Nämä turvaamistehtävät sinänsä ovat haasteellisia, mutta yleensä hyvä kryptografia on oikein toteutettuna niin vahvaa, että hyökkääjän on helpompi etsiä salaisuuksia toteutuksen sellaisista piirteistä, joilla ei ole mitään tekemistä oikean toiminnan kanssa. Eri yhteydessä käsitellään tietoturvallisen ohjelman normaaleja vaatimuksia kuten oikeaa toimintaa sekä virhetoimintojen ja väärinkäyttömahdollisuuksien torjumista.

Tässä jäävät tarkasteltavaksi keinot, joilla krypto-ohjelmat voivat varjella avainten ja niillä operoitavan datan salassapysymistä oman toiminta-aikansa puitteissa. Pitkäkestoinen tallennuskin näet rajattiin edellä pois. Luonnollisesti avainten ja datan eheyteenkin pitäisi kiinnittää huomiota, mutta tämä on toissijainen ongelma tässä yhteydessä.

Perusohje on: Pyyhi jäljet heti kun voit. Pyyhkiminen tarkoittaa nollaamista tai ylikirjoittamista. Tämä vaatii useita tarkennuksia, joiden lähteenä tässä on kirja [ FeSc03] ].
  • Täysin itse tehdyssä ohjelmassa on helppoa tietää milloin tietoja ei enää tarvita. Silti voi olla vaikea varmistaa, meneekö päällekirjoitus keskusmuistiin asti vai pelkästään cache-muistiin.
  • Aliohjelman kirjoittajan täytyy ehdollistaa pyyhintäkoodi kutsujalta tulevaan tietoon. Ongelmana on, muistaako kutsuvan ohjelman kirjoittaja tällaista "pikkuseikkaa", joka ei vaikuta hänen ohjelmansa toiminnallisuuteen.
  • Kieli voi sisältää "destruktorin" (kuten C++), joka saa aikaan pinoon talletetun tiedon pyyhkimisen, mutta pyyhkiytyykö samalla myös heap-muisti?
  • Toiset kielet, kuten Java, luottaa muistin vapautuksessa vain roskien keruuseen. Voi olla vaikea lainkaan hallita tiedon pyyhkimistä.
  • Optimoiko kääntäjä liikaa, eli poistaako päällekirjoituksen (esim. C:n 'memset'), kun sillä kerran ei ole mitään vaikutusta? Käännöstuloskin pitäisi siis tarkistaa.
  • Rekisterien data kopioituu moniajon vaihdoissa muistiin, yleensä ohjelmoijan kontrollin ulkopuolelle. Vastaavasti:
  • Virtuaalimuistin heittovaihtotiedostoja voi olla vaikea hallita, paitsi estämällä levylle kirjoittaminen. Se taas on hankalaa ellei sitten lukitse kaikkea dataa. Käyttöjärjestelmän pitäisi tarjota swap-tiedostojen kryptauspalvelu.
Jos talletus ei ole pitkäaikaista, ei pitäisi olla tarvetta moninkertaisiin päällekirjoituksiin (vrt. Jäännöstieto ). Joissain tapauksissa voi silti olla tarpeen varmistaa, että muistialueella oleva tieto vaihtuu riittävän usein. Melko pienten tietomäärien eli lähinnä avainten tapauksessa tähän voi käyttää esim. salaisuuden halkaisua ja uusien satunnaisbittien XOR-summaamista molempiin puolikkaisiin aika ajoin.

SivuTiedotLaajennettu edit

Vaativuus Jatko
Valmius Valmisteilla
Tyyppi Ydin
Luokitus Uhkat
Mitä Luottamuksellisuus
Miltä Ihmisetön uhka
Missä Organisaatio
Kuka Titu-ammattilainen
Milloin Ennakolta
Miksi Hyvä tapa
Print version |  PDF  | History: r2 < r1 | 
Topic revision: r2 - 19 Nov 2010 - 23:37:14 - AnttiNiskanen
 

TUTWiki

Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TUTWiki? Send feedback