Täydellinen luettelointi (tai "raaka voima" -menetelmä , eng. brute force ) - menetelmä matemaattisten ongelmien ratkaisemiseksi . Viittaa menetelmäluokkaan, jonka avulla voidaan löytää ratkaisu käyttämällä kaikki mahdolliset vaihtoehdot . Kattavan haun monimutkaisuus riippuu ongelman kaikkien mahdollisten ratkaisujen määrästä. Jos ratkaisuavaruus on erittäin suuri, tyhjentävä haku ei välttämättä anna tuloksia useisiin vuosiin tai jopa vuosisatoja.
Mikä tahansa luokan NP ongelma voidaan ratkaista kattavalla haulla. Samaan aikaan, vaikka tavoitefunktion laskenta kustakin tietystä mahdollisesta ongelman ratkaisusta voidaan suorittaa polynomiajassa , kaikkien mahdollisten ratkaisujen lukumäärästä riippuen, tyhjentävä luettelointi voi vaatia eksponentiaalisen suoritusajan.
Salaustekniikassa tyhjentävän haun laskennallista monimutkaisuutta käytetään salausten kryptografisen vahvuuden arvioimiseen . Erityisesti salauksen sanotaan olevan turvallinen, jos ei ole olemassa "krakkausmenetelmää", joka on huomattavasti nopeampi kuin raakavoimahaku . Raakavoimaiset salaushyökkäykset ovat monipuolisimpia, mutta myös pisimpiä.
Englannin kielessä tässä artikkelissa käsitelty termi " raaka voima " viittaa yleensä hakkerihyökkäysten luokkaan . Samaan aikaan yleisempi käsite, matemaattinen menetelmä käyttää kaikki mahdolliset vaihtoehdot ratkaisun löytämiseksi ongelmaan, vastaa termiä " todistaminen loppuun ".
"Ummentumismenetelmä" sisältää koko luokan erilaisia menetelmiä. Yleensä ongelmalauseessa otetaan huomioon tietyn loogisen järjestelmän äärellinen määrä tiloja loogisen lauseen totuuden tunnistamiseksi kunkin tilan riippumattoman analyysin avulla [1] . Väitettä todistava menetelmä koostuu kahdesta osasta:
Vaikka tyhjentävää hakua ei käytetä käytännössä useimmissa sovelletuissa ongelmissa (etenkään ei liity salausten rikkomiseen ), on olemassa useita poikkeuksia. Erityisesti silloin, kun tyhjentävä haku kuitenkin osoittautuu optimaaliseksi tai edustaa algoritmin kehittämisen alkuvaihetta , sen käyttö on perusteltua. Esimerkki tyhjentävän haun optimaalisuudesta on matriisien ketjutulojen laskenta-ajan estimointialgoritmi, jota ei voida kiihdyttää "raakavoima"-menetelmään perustuvaan algoritmiin verrattuna [2] . Tätä algoritmia käytetään dynaamisen ohjelmoinnin klassisen ongelman ratkaisemiseen - prioriteettien määrittämiseen seuraavan muodon matriisitulojen laskemiseksi: .
Lähtötehtävänä on laskea annettu ketju (matriisitulo) mahdollisimman lyhyessä ajassa. On mahdollista toteuttaa triviaali peräkkäinen algoritmi, joka laskee halutun tuotteen. Koska matriisitulo on assosiatiivinen operaatio , ketjutulo voidaan laskea valitsemalla mielivaltaisesti ketjun elementtipari ja korvaamalla se tuloksena olevalla matriisilla . Jos toistat kuvatut toimenpidekerrat , jäljelle jäävä tuloksena oleva matriisi on vastaus: . Tämä kaava voidaan havainnollistaa seuraavasti. Harkitse matriisiketjua: . On olemassa 5 tapaa laskea tätä ketjua vastaava tuote :
Valitsemalla oikean laskentajärjestyksen voit saavuttaa huomattavan kiihtyvyyden laskelmissa. Nähdäksesi tämän, harkitse yksinkertaista esimerkkiä 3 matriisin ketjusta. Oletetaan, että niiden koot ovat vastaavasti yhtä suuret . Vakioalgoritmi kahden matriisin kertomiseksi koolla vaatii laskenta-aikaa, joka on verrannollinen määrään (laskettavien sisätulojen lukumäärä) [3] . Siksi, arvioimalla merkkijono järjestyksessä , saamme laskettavat pistetulot sekä lisäpistetulot toisen matriisitulon laskemiseksi. Skalaaritulojen kokonaismäärä: 7500. Laskentajärjestyksen erilaisella valinnalla saadaan plusskalaaritulot , eli 75000 skalaarituloa [3] .
Siten tämän ongelman ratkaisu voi vähentää merkittävästi matriisiketjun laskemiseen käytettyä aikaa. Tämä ratkaisu voidaan saada tyhjentävällä luettelolla: on otettava huomioon kaikki mahdolliset laskentasarjat ja valita niistä se, joka ketjua laskettaessa vie vähiten skalaarituloja. On kuitenkin otettava huomioon, että tämä algoritmi itsessään vaatii eksponentiaalista laskenta-aikaa [2] , joten pitkillä matriisiketjuilla voitto ketjun laskemisesta tehokkaimmalla tavalla (optimaalinen strategia ) voi menettää kokonaan sen ajan kuluessa. löytää tämä strategia [4] .
Algoritmien teoriassa on useita laajalti sovellettavia yleiskäsitteitä . Raaka voima -menetelmä on yksi niistä. Itse asiassa tyhjentävää hakua voidaan käyttää niissä tapauksissa, kun kyseessä on diskreetti deterministinen järjestelmä, jonka tilat ovat helposti analysoitavissa [5] .
Toinen loistava esimerkki algoritmien teorian peruskäsitteestä on " hajota ja hallitse " -periaate. Tätä käsitettä voidaan soveltaa, kun järjestelmä voidaan jakaa useisiin osajärjestelmiin, joiden rakenne on samanlainen kuin alkuperäisen järjestelmän rakenne [6] . Tällaisissa tapauksissa osajärjestelmät ovat myös erotettavissa tai ne ovat triviaaleja [6] . Tällaisissa järjestelmissä alun perin esitetty ongelma on triviaali. Siten "hajoita ja hallitse" -käsitteen toteutus on rekursiivinen .
Rekursio puolestaan on eräänlainen tyhjentävä haku. Joten rekursio on sovellettavissa vain diskreeteille järjestelmille [7] . Tämä vaatimus ei kuitenkaan koske tietyn järjestelmän tiloja, vaan sen alirakennetta . Kaikkien tasojen johdonmukainen huomioiminen antaa tyhjentävän ratkaisun koko diskreetille järjestelmälle esitettyyn ongelmaan.
Muihin täydellisen numeroinnin esimerkkeihin verrattuna rekursiomenetelmän ominaisuus on, että lopullinen ratkaisu perustuu useampaan kuin yhteen triviaaliin osajärjestelmään. Yleensä ratkaisu muodostetaan kokonaisen osajärjestelmän perusteella.
Seuraavissa esimerkeissä klassisista hajota ja hallitse -ongelmista raaka voima on joko ainoa tunnettu ratkaisu tai alkuperäinen toteutus, jota on edelleen optimoitu:
Salaustekniikassa brute-force kryptografinen hyökkäys tai brute force [12] ( eng. Brute-force attack ) perustuu brute force -hyökkäykseen - salasanan murtamiseen etsimällä kaikki mahdolliset avainvaihtoehdot. Sen ominaisuus on kyky käyttää sitä mitä tahansa käytännössä käytettyä salausta vastaan [13] ( poikkeukset eli tietoteorian kannalta tietoturva , katso myös salausalusta ja Tietoteoreettinen turvallisuus ). Tämä mahdollisuus on kuitenkin olemassa vain teoreettisesti, mikä vaatii usein epärealistisia aika- ja resurssikustannuksia. Jos päätöstila on liian suuri, tämäntyyppinen hyökkäys voi epäonnistua useita vuosia tai jopa vuosisatoja. Raakavoimahyökkäyksen käyttö on oikeutetuimmin tapauksissa, joissa hyökkäyksen kohteena olevasta salausjärjestelmästä ei ole mahdollista löytää heikkoja kohtia (tai kyseessä olevassa salausjärjestelmässä ei ole heikkoja kohtia). Kun tällaisia puutteita havaitaan, kehitetään krypta -analyysitekniikoita niiden ominaisuuksien perusteella, mikä auttaa yksinkertaistamaan hakkerointia.
Raakavoiman vastustuskyky määrittää salausjärjestelmässä käytettävän salausavaimen . Joten avaimen pituuden kasvaessa tällä menetelmällä tapahtuvan murtamisen monimutkaisuus kasvaa eksponentiaalisesti. Yksinkertaisimmassa tapauksessa N - bittinen salaus rikkoutuu, pahimmassa tapauksessa 2 N :ään verrannollisessa ajassa [14] [15] . Keskimääräinen hakkerointiaika on tässä tapauksessa kaksi kertaa lyhyempi ja on 2 N -1 . On olemassa tapoja lisätä salauksen vastustuskykyä "raakaa voimaa" vastaan, esimerkiksi salattujen tietojen hämärtäminen ( obfuskaatio ), mikä tekee salatun tiedon erottamisesta salaamattomasta tiedosta epätriviaalia.
"Raaka voima" -menetelmään perustuvat kryptografiset hyökkäykset ovat monipuolisimpia, mutta samalla hitaimpia. Käyttää pääasiassa aloittelevia hakkereita . Tehokas yksinkertaisille salausalgoritmeille ja jopa 64 bitin pituisille avaimille. Nykyaikaisille avaimille, joiden pituus on vähintään 128 bittiä (joskus avaimelle kerrotaan suuri määrä 200 numeroa), ne ovat tehottomia. Mikä tahansa salasana voidaan arvata kattavalla haulla. Samaan aikaan, vaikka tavoitefunktion laskenta kustakin tietystä mahdollisesta ongelman ratkaisusta voidaan suorittaa polynomiajassa, kaikkien mahdollisten ratkaisujen lukumäärästä riippuen hyökkäys voi vaatia eksponentiaalisen suoritusajan.
Näppäinvalinnan nopeuttamiseksi käytetään laskelmien rinnastamista. Rinnakkaisua on kahta tyyppiä:
Prosessori suorittaa kolme toimintoa samaan aikaan:
Tämä toimenpide voi kestää vain sekunnin sadasosan. Sitten rinnakkain ja synkronisesti kytketyt prosessorit toimivat nopeudella (koska operaatioita on vain kolme), missä on yhden toiminnon suorittamisen nopeus yhdellä prosessorilla.
Käänteisessä brute force -hyökkäyksessä yksi (yleensä jaettu) salasana testataan useilla käyttäjätunnuksilla. Tässä tapauksessa myös rinnakkaistoiminto pätee, mutta prosessorien on tarkistettava, onko toisella käyttäjällä tällainen salasana. Tällaisessa strategiassa hyökkääjä ei yleensä yritä murtautua yhden tietyn käyttäjän tiliin. Käänteisiä hyökkäyksiä vastaan on laadittu salasanakäytäntö, joka kieltää identtisten salasanojen käytön.
Taulukossa näkyy arvioitu aika salasanojen raa'an voiman etsimiseen niiden pituuden mukaan. Oletetaan, että salasanassa voidaan käyttää 36 eri merkkiä ( yhden tapauksen latinalaiset kirjaimet + numerot), ja raa'an voiman nopeus on 100 000 salasanaa sekunnissa ( hyökkäysluokka B , tyypillinen salasanan palautukselle Windowsin välimuistista ( .PWL- tiedostot) Pentium 100 : ssa ) [16] .
Merkkien määrä | Vaihtoehtojen määrä | Rohkeus | Hakuaika |
---|---|---|---|
yksi | 36 | 5 bittiä | alle sekunti |
2 | 1296 | 10 bittiä | alle sekunti |
3 | 46 656 | 15-bittinen | alle sekunti |
neljä | 1 679 616 | 21 bittiä | 17 sekuntia |
5 | 60 466 176 | 26-bittinen | 10 minuuttia |
6 | 2176782336 | 31-bittinen | 6 tuntia |
7 | 78 364 164 096 | 36-bittinen | 9 päivää |
kahdeksan | 2.821 109 9x10 12 | 41 bittinen | 11 kuukautta |
9 | 1,015 599 5x10 14 | 46-bittinen | 32 vuotta |
kymmenen | 3.656 158 4x10 15 | 52 bittiä | 1162 vuotta |
yksitoista | 1.316 217 0x10 17 | 58-bittinen | 41 823 vuotta |
12 | 4 738 381 3x10 18 | 62 bittiä | 1 505 615 vuotta |
Näin ollen enintään 8 merkin pituiset salasanat eivät yleensä ole turvallisia. Nykyaikaisissa tietokoneissa tämä luku on paljon suurempi. Joten 64-bittinen avain (salasana) selviää nykyaikaisella tietokoneella noin 2 vuodessa ja haku voidaan helposti jakaa useiden tietokoneiden kesken.
Nykyaikaiset henkilökohtaiset tietokoneet mahdollistavat salasanojen murtamisen raa'alla voimalla yllä olevan taulukon mukaisella tehokkuudella. Rinnakkaislaskentaan perustuvalla raakavoiman optimoinnilla hyökkäyksen tehokkuutta voidaan kuitenkin lisätä merkittävästi [18] . Tämä saattaa edellyttää monisäikeiseen laskemiseen mukautetun tietokoneen käyttöä . Viime vuosina grafiikkasuoritteita käyttävät laskentaratkaisut , kuten Nvidia Tesla , ovat yleistyneet . Sen jälkeen kun Nvidia loi CUDA - arkkitehtuurin vuonna 2007, on ilmestynyt monia ratkaisuja (katso esimerkiksi Cryptohaze Multiforcer , Pyrit arkistoitu 20. marraskuuta 2012 Wayback Machinessa ), jotka mahdollistavat nopeutetun avainten arvauksen käyttämällä teknologioita, kuten CUDA, FireStream , OpenCL . .
Tietoturvajärjestelmän parantamisprosessissa raa'an voiman hyökkäyksen suhteen voidaan erottaa kaksi pääsuuntaa:
Näin ollen on mahdotonta saavuttaa korkeaa suojaustasoa parantamalla vain yhtä näistä parametreista [19] . On esimerkkejä siitä, kuinka optimaaliseen salasanan monimutkaisuuteen perustuva todennusjärjestelmä osoittautui alttiiksi kopioida tietokanta hyökkääjän paikalliselle tietokoneelle, minkä jälkeen se joutui raa'an voiman hyökkäykseen käyttämällä paikallisia optimointeja ja laskentatyökaluja, jotka eivät ole käytettävissä etäsalausanalyysi [20] . Tämä tilanne on saanut jotkin tietoturva-asiantuntijat suosittelemaan kriittisempää lähestymistapaa turvastandardien käytäntöihin, kuten mahdollisimman pitkiin salasanoihin [21] . Alla on luettelo käytännön menetelmistä [22] [23] [24] kryptojärjestelmän luotettavuuden lisäämiseksi suhteessa raa'an voiman hyökkäykseen:
Laskennan nopeuttamiseksi haara ja sidottu menetelmä eliminoi toteutettavissa olevien ratkaisujen osajoukot, jotka eivät ilmeisesti sisällä optimaalisia ratkaisuja [25] .
Yksi tapa nopeuttaa avainten valintaa on laskelmien rinnakkaistaminen . Rinnakkaisussa on kaksi lähestymistapaa [26] :
Tietokonejärjestelmien, jotka käyttävät salasanoja todentamiseen , on jotenkin määritettävä, onko syötetty salasana oikea. Triviaali ratkaisu tähän ongelmaan on pitää luettelo kaikista kelvollisista salasanoista jokaiselle käyttäjälle, mutta tämä lähestymistapa ei ole immuuni tietokantavuodoille. Yksinkertainen mutta virheellinen tapa suojautua perusvuodolta on laskea salaushajautusfunktio salasanasta.
Menetelmä on virheellinen siinä mielessä, että on mahdollista suorittaa haku etukäteen, ja kun haluat murtaa salasanan, katso tulosta. Sateenkaaritaulukko on tämän menetelmän optimointi [27] . Sen tärkein etu on käytetyn muistin määrän merkittävä väheneminen [28] [27] .
KäyttöSateenkaaritaulukko luodaan rakentamalla mahdollisten salasanojen ketjuja. Jokainen ketju alkaa satunnaisella mahdollisella salasanalla, jonka jälkeen sille suoritetaan hash- ja vähennystoiminto. Tämä funktio muuntaa hajautusfunktion tuloksen joksikin mahdolliseksi salasanaksi (esim. jos oletetaan, että salasana on 64 bittiä pitkä, niin pelkistysfunktio voi ottaa tiivisteen ensimmäiset 64 bittiä, bittikohtaisesti kaikki 64-bitit hash-lohkot jne.) Ketjun välissä olevat salasanat hylätään ja vain ketjun ensimmäinen ja viimeinen elementti kirjoitetaan taulukkoon. Tällaisten taulukoiden luominen vaatii enemmän aikaa kuin tavallisten hakutaulukoiden luominen, mutta paljon vähemmän muistia (jopa satoja gigatavuja, kun tavallisten N sanan taulukoiden tilavuus, sateenkaaritaulukot tarvitsevat vain noin N 2/3 ) [28 ] . Samaan aikaan, vaikka ne vaativat enemmän aikaa (perinteisiin menetelmiin verrattuna) alkuperäisen salasanan palauttamiseen, ne ovat käytännössä toteuttamiskelpoisempia (tavallisen taulukon rakentaminen 6-merkkiselle salasanalle tavumerkeillä, 256 6 = 281 474 976 Tarvitaan 710 656 muistilohkoa, kun taas sateenkaarelle - vain 256 6 ⅔ \u003d 4 294 967 296 lohkoa).
Salasanan palauttamiseksi tätä hash-arvoa pienennetään ja se etsitään taulukosta. Jos vastaavuutta ei löydy, hajautustoimintoa ja vähennystoimintoa käytetään uudelleen. Tämä toiminto jatkuu, kunnes osuma löytyy. Kun osuma on löydetty, sen sisältävä ketju palautetaan etsimään hylätty arvo, joka on haluttu salasana.
Tuloksena on taulukko, joka voi suurella todennäköisyydellä palauttaa salasanan lyhyessä ajassa [29] .
Vaikka kaiken tietojärjestelmän suojauksen tulee ennen kaikkea olla luotettavaa raa'an voiman hyökkäyksessä, tapaukset, joissa tunkeilijat käyttävät tätä hyökkäystä onnistuneesti, ovat melko yleisiä.
Vuonna 1918 keksittyä Enigma-salauskonetta käytti laajalti Saksan laivasto vuodesta 1929 lähtien. Seuraavien vuosien aikana järjestelmää muutettiin, ja vuodesta 1930 lähtien Saksan armeija ja hallitus käytti sitä aktiivisesti toisen maailmansodan aikana [31] .
Ensimmäiset Enigma-koodilla salattujen viestien sieppaukset ovat peräisin vuodelta 1926. He eivät kuitenkaan pystyneet lukemaan viestejä pitkään aikaan. Koko toisen maailmansodan ajan puolalaisten ja saksalaisten kryptografien välillä oli vastakkainasettelu. Puolalaiset, jotka saivat toisen tuloksen murtaessaan saksalaisen kryptojärjestelmän, kohtasivat uusia vaikeuksia, jotka saksalaiset insinöörit esittelivät, jotka jatkuvasti päivittivät Enigma-järjestelmää. Kesällä 1939 , kun Puolan hyökkäyksen väistämättömyys kävi selväksi, toimisto luovutti työnsä tulokset Britannian ja Ranskan tiedustelupalveluille [32] .
Lisämurtotyötä järjestettiin Bletchley Parkissa . Kryptanalyytikkojen päätyökalu oli Bomba- salauksenpurkukone . Sen prototyypin loivat puolalaiset matemaatikot toisen maailmansodan aattona Puolan puolustusministeriölle. Tämän kehityksen perusteella ja sen tekijöiden suoralla tuella Englannissa suunniteltiin "edistyneempi" yksikkö.
Työn teoreettisen osan teki Alan Mathison Turing [33] . Hänen työnsä Enigma-salauskoneeseen toteutetun algoritmin kryptografisessa analyysissä perustui tämän koneen aikaisempien versioiden aiempaan kryptoanalyysiin, jonka puolalainen kryptanalyytikko Marian Rejewski suoritti vuonna 1938 . Turingin kehittämän salauksenpurkulaitteen toimintaperiaate oli luetella mahdollisia salausavaimen vaihtoehtoja ja yrittää purkaa tekstiä, jos salauksen purkamisen tai osan selkeästä tekstistä tiedettiin [34] .
Nykyajan näkökulmasta Enigma-salaus ei ollut kovin luotettava, mutta vain tämän tekijän yhdistelmä monien siepattujen viestien, koodikirjojen, tiedusteluraporttien, sotilaallisten ponnistelujen tulosten ja jopa terrori -iskujen kanssa mahdollisti " avaa" salaus [32] .
Sodan jälkeen Churchill määräsi turvallisuussyistä tuhoamaan nämä koneet.
Vuonna 2007 joukko yrityksiä, jotka ovat Wi-Fi Alliance -organisaation jäseniä, alkoi myydä kotiverkkoihin tarkoitettuja langattomia laitteita, jotka tukevat uutta Wi-Fi Protected Setup -standardia. Tätä tekniikkaa tukevien langattomien reitittimien valmistajien joukossa olivat sellaiset suuret yritykset kuin Cisco/Linksys , Netgear , Belkin ja D-Link . WPS-standardin tarkoituksena oli yksinkertaistaa huomattavasti langattoman verkon perustamisprosessia ja sen käyttöä ihmisille, joilla ei ole laajaa tietoa verkkoturvallisuudesta. Vuoden 2011 loppuun mennessä kuitenkin julkaistiin tieto WPS:n vakavista haavoittuvuuksista, joiden ansiosta hyökkääjä pystyi arvaamaan langattoman verkon PIN-koodin [35] vain muutamassa tunnissa, kun hänellä oli tavallisen henkilökohtaisen tietokoneen laskentaresurssit [36] . ] .
Tällä hetkellä CERT-koordinointikeskus ei suosittele valmistajia julkaisemaan uusia tätä tekniikkaa tukevia laitteita. [37]
Vuonna 2010 DEFCON18- konferenssissa esiteltiin miehittämätön ilma -alus WASP , joka on suunniteltu laajaan tilastojen keräämiseen kodin Wi-Fi-verkoista. UAV on varustettu kompaktilla ajotietokoneella, jossa on käytössä BackTrack Linux.Yksi sen ominaisuuksista oli kyky murtaa langattoman verkon salasanat automaattisesti raa'alla voimalla [38] [39] .