Aika- ja muistikompromissi _ _ _ _ Kompromissilähestymistapa useiden tietojenkäsittelytieteen ongelmien tarvittavankäytetäänjossa, ratkaisemiseen muistin määrän ja ohjelman suoritusnopeuden käänteistä suhdetta: laskenta-aikaa voidaan pidentää vähentämällä käytettyä muistia tai päinvastoin vähentää lisäämällä käytetyn muistin määrää.
RAM- muistin (RAM) ja kiintolevymuistin suhteellisten kustannusten laskun vuoksi (jonkin ajanjakson aikana kiintolevytilan hinta tuli halvemmaksi paljon nopeammin kuin muiden tietokoneen komponenttien kustannukset ), tekniikoita, jotka käyttävät laskenta-ajan lyhentämiseen käytettävät muistit ovat vähitellen levinneet. Samaan aikaan tekniikat, kuten tietojen pakkaus , osoittavat vaihtoehtoisen lähestymistavan - taloudellista muistin käyttöä, koska tiedot muunnetaan tiedostomuodosta toiseen.
Monet hakuongelmat, kuten jatkuva selkäreppuongelma , diskreetti logaritmiongelma tai yksisuuntaisen funktion invertointiongelma , jotka ratkaistaan itse asiassa luetteloimalla, mahdollistavat samalla ns. hakutaulukot (englanniksi lookup tables ) [1] . Ajatuksena on tämä: sen sijaan, että iteroitaisiin kaikki mahdolliset ratkaisut ilman lisämuistia tai laskettaisiin ne kaikki kerran etukäteen ja tallennettaisiin muistiin (usein ei ole ensimmäistä eikä toista mahdollisuutta), voit laskea osan toteutettavissa olevasta. arvot, ja organisoituaan ne erityiseen tietorakenteeseen - hakutaulukkoon - käyttää sitä lisälaskennan suorittamiseen suoraan ongelmaa ratkaistaessa.
Tämän artikkelin erillinen osa on omistettu tämän lähestymistavan soveltamiselle kryptografiassa.
Optimaalisen "paikka-aika" -suhteen valintaa voidaan soveltaa tiedon tallennusongelmaan. Tietojen tallentaminen pakkaamattomassa muodossa vaatii enemmän muistia, mutta sen hakeminen vie vähemmän aikaa kuin pakatussa muodossa tallennettujen tietojen hakeminen. Tehtävästä riippuen toinen tai toinen vaihtoehto voi olla parempi.
Klassinen esimerkki kompaktista dataesityksestä on esimerkiksi tieteellisten artikkeleiden kirjoittamiseen käytetty Τ Ε Χ -kaavaesitysmuoto . Käyttäjän työn tuloksena on erikoismuotoinen tiedosto, joka on tarvittaessa helposti muunnettavissa paljon "raskaampi" pdf -tiedostoksi, jota puolestaan voi jo käyttää dokumentin katseluun suosituimmissa katseluohjelmissa kuin ne, jotka ovat ominaisia Τ Ε Χ .
Loop purkaus on erittäin suosittu koodin optimointitekniikka, jota käytetään monissa kääntäjissä. Ajatuksena on lisätä silmukan yhden iteraation aikana suoritettavien käskyjen määrää. Tämän seurauksena iteraatioiden määrä vähenee (yhteen rajassa: kaikki käskyt suoritetaan peräkkäin), mikä puolestaan lisää datavälimuistin tehokkuutta .
Tässä osiossa käsitellään klassista esimerkkiä Space-Time Trade-Off -lähestymistavan käyttämisestä kryptografiassa - hakutaulukoiden käyttöä salausteknisen hajautusfunktion kääntämisen salausongelman ratkaisemisessa .
Kryptanalyyttinen laskenta vaatii huomattavia laskentakustannuksia. Siinä tapauksessa, että salausjärjestelmä joudutaan murtamaan toistuvasti, olisi loogista suorittaa tyhjentävä luettelo etukäteen ja tallentaa lasketut arvot muistiin. Kun olet tehnyt tämän kerran, voit luetella lisää lähes välittömästi [2] . Todellisuudessa tätä menetelmää ei kuitenkaan voida soveltaa valtavien muistikustannusten vuoksi.
Vuonna 1980 Martin Hellman ehdotti kompromissilähestymistapaa kryptoanalyysin ongelmaan, joka mahdollistaa salausjärjestelmän analysoinnin, jossa on avaimia toiminnassa, myös muistikustannuksilla [1] . Tämä tulee mahdolliseksi, kun mahdollisten avainten O(n)-esihankinta on suoritettu kerran.
Idea on seuraava.
Salli salausalgoritmin käyttää yksisuuntaista toimintoa . Yksisuuntaisen funktion ominaisuuksien mukaan käytetyn avaimen johtaminen tunnetusta parista on vaikea tehtävä, kun taas funktion laskeminen tietystä selväkielisestä on yksinkertainen tehtävä.
Kryptanalyytikko käyttää valittua selkeää tekstiä koskevaa hyökkäystä ja hankkii yhden salatekstin , joka vastaa selkeää tekstiä :
Tehtävänä on löytää avain , jota käytettiin salaukseen. Tätä varten sinun on löydettävä tapa laskea mahdolliset avaimet. Otetaan käyttöön ns. vähennystoiminto , joka määrittää salatekstille tietyn avaimen (avaimen pituus on yleensä pienempi kuin salatekstin pituus, tästä syystä termi):
Vähennysfunktion laskeminen on yksinkertainen toimenpide.
Toiminto
yhdistää avaimen toiseen avaimeen . Nyt saamme mielivaltaisen pitkän avaimenperän:
Hakutaulukon rakentamiseksi kryptanalyytikolle annetaan satunnaisia avaintilan elementtejä. Jokaisesta avaimesta saadaan edellä kuvatulla menetelmällä avainketju, jonka pituus on . Kirjoitamme muistiin vain kunkin ketjun alku- ja loppuavaimet (lajittelemme avainparit viimeisen avaimen mukaan ). Siten valmis taulukko vie muistisoluja. Taulukon luominen vaatii operaatioita.
Kun taulukko on muodostettu, kryptanalyytikko voi luetella seuraavalla tavalla. Lähdemme siitä, että salauksessa käytetty avain löytyi taulukon luomisen yhteydessä. Tässä tapauksessa yksi viimeisistä muistiin tallennetuista avaimista voidaan saada siitä enintään t funktion käyttöoperaatiolla .
Jokaisen vähennysoperaation sovelluksen jälkeen kryptanalyytikko etsii taulukosta seuraavan vastaanotetun avaimen (voit löytää sen tai varmistaa, että sitä ei ole olemassa binäärihakua käyttäville toiminnoille , koska taulukko lajitellaan lopullisen avaimen mukaan). Kun yksi viimeisistä avaimista on tavattu, on mahdollista palauttaa koko vastaava ketju sitä vastaavasta alkuperäisestä avaimesta; haluttu avain on sen toiseksi viimeinen avain.
Avaimen löytäminen kestää siis [3] ; Logaritmisen tekijän huomioimatta meillä on . Tässä tapauksessa muistikustannukset taulukon tallentamisesta ovat .
Algoritmin analysoinnissa on kuitenkin otettava huomioon, että onnistuneen salauksen purkamisen todennäköisyys on itse asiassa pienempi kuin yksi ja salauksen purkuaika voi osoittautua ilmoitettua pidemmäksi alla mainituista syistä.
[1] alaraja onnistuneen salauksen todennäköisyydelle voidaan johtaa :
Yllä oleva lauseke vastaa approksimaatiota, että funktio on satunnaismuuttuja, jolla on tasainen jakautuminen avainjoukolle. Vakaan kryptojärjestelmän tulisi kuitenkin olla hyvä näennäissatunnainen generaattori [1] .
Tämän lausekkeen arviointi johtaa seuraavaan tulokseen: ei ole mitään järkeä ottaa tuotetta suurempaa kuin : muuten onnistumisen todennäköisyyden alaraja putoaa nopeasti.
Kun saamme
Kryptanalyytikko voi nyt luoda ei vain yhtä, vaan taulukoita jokaiseen taulukkoon käyttämällä omaa pelkistystoimintoaan (joka välttää ketjujen yhdistämisen eri taulukoista). Tässä tapauksessa onnistuneen salauksen purkamisen todennäköisyyden alaraja on:
Valitsemalla , kryptanalyytikko saa muisti- ja aikakustannukset (jokainen taulukko käyttää omaa vähennystoimintoaan, joten salauksen purkamisen yhteydessä on hankittava oma ketju jokaiselle taulukolle) onnistumistodennäköisyydellä, joka on lähellä yhtä [alaviite, jossa selitetään, miksi väärien hälytysten määrä ole pieni ja linkitä Hellman]. Ottamalla , saamme tarvittavat aika- ja muistikustannukset.
Muut algoritmit, jotka käyttävät myös "optimaalista paikka-ajan valintaa":