Jos on tietokoneille vaikeaa selvittää, mistä alkuluvuista on lähdetty, miksei lasketa valmiiksi kaikkia mahdollisia vaihtoehtoja ja sitten vain verrata niitä lopputulokseen?
3x5=15, jos sinulla on 15 valmiiksi laskettuna, ei tarvi ruveta pähkäilemään, mistä se koostuu.
Anteeksi, en ole opiskellut kuin oppikoulumatikkaa 50 vuotta sitten. Hommassa täytyy olla jokin muukin jippo.
3x5=15, jos sinulla on 15 valmiiksi laskettuna, ei tarvi ruveta pähkäilemään, mistä se koostuu.
Anteeksi, en ole opiskellut kuin oppikoulumatikkaa 50 vuotta sitten. Hommassa täytyy olla jokin muukin jippo.
Vastaukset 14
Vanhimmat
Nimenomaan lasketaankin, sitä sanotaan brute force, eli raa'alla voimalla murtamiseksi.
Mutta ongelma on se, että niitä vaihtoehtoja on niin käsittämätön määrä, että vaikka kaikki maailman tietokoneet laskisivat niitä 24/7, siltikkään tehokkaimmat salaukset eivät purkautuisi ihan hetkessä.
Salaukset pyritään tekemään siis aina niin vahvalla tekniikalla, että yleisesti käytössä olevalla laskentakapasiteetilla ei pysty kovin lyhyessä ajassa laskemaan kaikkia mahdollisia vaihtoehtoja.
Valmiiksi laskemisesta, no varmaan sitäkin tehdään, mutta siinä tulee äkkiä vastaan tallennustilan rajoitukset.
Esim MD5 ja SHA tiivisteiksi sanakirjasanoista muunnoksia on laskettu valmiiksi.
Eli monissa vanhemmissa sivustoissa, salasanasi tallennetaan sinne palvelimelle MD5 tiivisteen laskevan algoritmin läpi laitettuna, eikä selväkielisenä.
MD5 luku on aina täysin sama, samalle sanalle. Eli vaikka sanaa kissa vastaa aina täysin sama MD5 tiiviste.
https://fi.wikipedia.org/wiki/MD5
Näitä tiivisteitä on sanakirjasanoille laskettu valmiiksi ja taulukoitu.
Tästäkin syystä turvallisen salasanan valinnassa aina sanotaan, että älkää käyttäkö sanakirjasta tuttuja sanoja.
Toki todellisuudessa ne salasanat tallennetaan ns. suolattuina. Joka tarkoittaa sitä, että palvelimella siihen käyttäjän salasanaan lisätään vielä jotain muuta, jotta juuri esim. kissa sanaa vastaava MD5 tiiviste ei olisi suoraan mistää taulukosta katsottavissa.
"MD5+luku+on+aina+täysin+sama,+samalle+sanalle.+Eli+vaikka+sanaa+kissa+vastaa+aina+täysin+sama+MD5+tiiviste."
Pitää+useimmiten+paikkansa+(mutta+ei+tässäkään+ihan+aina).
MUTTA:
MD5+luku+on+aina+täysin+sama,+samalle+sanalle.+Eli+vaikka+sanaa+kärpänen+EI+vastaa+aina+täysin+sama+MD5+tiiviste,+vaan+sanalle+kärpänen+on+olemassa+useita+eri+tiivisteitä.
Miksi+sitten+kärpänen+on+tässä+niin+erilainen+sana+kuin+kissa+?
Yksinkertaista:
Alla+on+laitettu+koodausmenetelmiä,+ja+tähdellä+merkitty+ne,+joissa+myös+sanan+kissa+MD5+-tiiviste+poikkeaa+totutusta:
Sensijaan+sanalle+kärpänen+kaikki+allaolevat+tuottavat+keskenään+eri+arvon:
Windows-1252+(ja+sen+osajoukko+ISO-8859-1)
OEM+(eli+toisin+sanoen+alkluperäisen+IBM+PC:n+BIOSissa+käytetty+merkkikoodaus,+sama+oli+sellaisenaan+käytössä+ensimäisissä+MS-DOS+-versioissa,+ja+hieman+muunnettuna+myöhemmissäkin+MS-DOS+-versioissa)
UTF-8
UTF-16LE*
UTF-16BE*
UTF-32LE*
UTF-32BE*
Eli+sanalla+kissa+on+keskenään+sama+MD5+-tiiviste+näissä+enkoodauksissa:+Windows-1252,+OEM,+UTF-8,+US-Ascii+(eli+lyhyemmin+Ascii).
Sensijaan+sanalle+kärpänen+ei+ole+olemassa+US-Ascii+-esitysmuotoa+johtuen+sen+sisältämästä+ä+-kirjaimesta.
Eli+lyhyesti:
Sanalla+tai+merkkijonolla+ei+ole+yksikäsitteisesti+määriteltyä+MD%+tai+muutakaan+HASHia.
Mutta+sanan+tai+merkkijonon+esitysmuodolla+on.
Jos+yksikäsitteisyyttä+halutaan,+täytyy+lukita+esitysmuoto+aina+yhteen+ja+samaan+esitysmuotoon.
Oma+suositukseni:+muunna+merkkijono+AINA+ensin+UTF-8+-esitysmuotoon+ja+laske+ko.+UTF-8+-esitysmuodolle+se+hash+eli+esim.+MD5.
(MD5:ttä+muuten+pidetään+murrettuna,+eli+jos+HASHin+pitää+olla+oikeasti+ns.+kryptografisesti+turvallinen+hash,+niin+SHA-2+tai+SHA-3+eli+Kekkac+).
JOS+halutaan+mahdollistaa+HASHin+laskeminen+myös+niistä+merkkijonoista,+joihin+sisältyy+1+tai+useampi+NUL+-merkki+(eli+merkki,+jonka+ascii+-koodi+on+nolla),+niin+silloin+kannattaa+laatia+se+merkkijonon+käsittely+ja+laskenta+-algoritmi+niin,+ettei+tuo+NUL+-merkki+aiheuta+mitään+ongelmia.
Kyllä, koodaus merkitsee. Eli MD5:n näkökulmasta kyse on eri syötteestä ei niinkään siitä että samalle syötteelle olisi monta eri tulosta. Periaate siis silti pätee, saman syötteen tarkistussumma on aina sama.
Sanalle kissa on monta summaa vain siksi, että tietokone ei ymmärrä kirjaimia ja kirjaimet on tietokoneella tallennettuna numeroiksi.
Joka tarkoittaa, että eri kirjaimille on sopimuksenvaraisesti sovittu, mitä numeroarvoa se vastaa tietokoneelle tallennettuna. Ja kuten yleensä ihmisten tekemissä sopimuksiin perustusivssa systeemeissä, tietysti näitä systeemejä on monia, eli on monta eri merkistökoodausjärjestelmää joita käytetään.
Ei tartte kokeilla kaikkia vaihtoehtoja eri alkuluvuilla. Kyllä tämä onnistuu laskemalla lähtöluvusta. Vaatii tämäkin laskentaa, 20 numeroisen luvun alkutekijöiden selvittäminen vie mun läppärillä n. 10 minuuttia, 18 numeroinen aukeaa sekunneissa.
Löytyi stackexchangesta aika hyvä laskelmakin aiheesta.
512 bittisen RSA salauksen murtaminen siis yksinekertaisella menetelmällä voisi viedä tämän laskun mukaan erittäin paljon pidempään kuin mitä on universumin ikä:
http://crypto.stackexchange.com/questions/3043/how-much-computing-resource-is-required-to-brute-force-rsa
Vaikka tietokoneen prosessoreita olisi yhtä paljon käytettävissä kuin havaittavassa universumissa on atomeita, ja jokainen laskisi laskun millisekunnissa . . .
Korjaus 1024 bittisen.
Seuraava kysymys: mitä tarkoittaa 1024 -bittinen? Tarkoittaako se, että salasanassa on 128 merkkiä? Yleensähän ihmisillä pakkaa olla tuollaisia kahdeksanmerkkisiä salasanoja.
1024 bittiä on binääriluvun pituus.
Esim, 2 bitin binääriluku näyttäisi tältä:
00 tai 01 tai 10 tai 11
Nuo kaikki neljä edellämainittua ovat kahden bitin binäärilukuja. Bittimäärä asettaa ylärajan sille, miten iso luku on mahdollista esittää tietyllä määrällä bittejä. Aivan kuten kymmenjärjestelmässäkin, jos sinulle annettaisiin vain kolme numeroa väliltä 1-9, niin suurin luku minkä niillä voisit esittää olisi 999. :)
1024 bitillä voi esittää sen kokoisen binääriluvun, jonka suuruus on normaali kymmenjärjestelmä lukuna
2 potenssiin 1024 - 1
Tarkalleen ottaen:
1,797693134862315907729305190789 kertaa 10 potenssiin 308
Joka on erittäin suuri luku.
Jos salasanan pituuden haluaa tietää bitteinä, niin täytyy ensin tietää paljonko yksi kirjain on bitteinä. Tietokoneelle kaikki asiat ovat numeroita. Yleensä yksi kirjain tietokoneella vie tavun verran tilaa. Tavu = 8 bittiä.
8 bitillä pystyy tällöin esittämään tietokoneella 256 erilaista kirjainta.
8 bittiä kertaa salasanan pituus, niin siitä saa salasanan bittimäärän.
Tietokoneella kirjaimet ovat binäärilukuina, vasta siinä vaiheessa kun kirjain pitää piirtää koneen näytölle, haetaan jostakin taulukosta, että minkäs näköinen on vaikka a kirjain, ja sytytetään näytöltä vaikka a kirjainta vastaavat pikselit. :)
Ja kyllä, se ilmeisesti tarkoittaisi 128 merkkiä pitkää merkkijonoa.
Kiitos, nyt tajuan, miksei brute force onnistu, ennenkuin kvanttitietokone on todellisuutta. Heaven forbid...
Juu, haluan minäkin kommentoida jotakin.
Kyllä brute force on RSA:ssa aivan realistinen nykyiselläkin kalustolla, vaikkakin työläs. Eli kokeilemalla voi löytyä ratkaisu, mutta se on luultavasti erilainen kuin alkuperäinen, vaikka se avaakin salakirjoituskoodin samalla tavalla. Eli niitä toimivia yhdistelmiä on kuitenkin melko suuri joukko.
RSA:sta vielä kannattaa huomata että ihan perus oppikirja-toteutus on jokseenkin turvaton. Jos haluaa RSA:n toteuttaa niin kannattaa seurata asiantuntijoiden neuvoja yksityiskohtaisesti, sillä "devil is in the details".
Ensinnäkin:
käytetään hyvin suuria alkulukuja ( ei ole jaollinen muulla luvuilla kuin itsellään ja ykkösellä) eli niistä laskettu tulo ei voi päättyä numeroon 5, koska mikä tahansa numeroa 5 suurempi numeroon p5 päättyvä luku ei ole alkuluku eli on jaollinen 5.
Tulon kumpikin tekijä on hyvin suuri alkuluku
Ei ainakaan vielä ole tiedossa mitään algoritmiä millä selvitetään annetun tulon tekijät jos molemmat ovat alkulukuja eli jää vain ratkaisuksi kokeilla jakaa tulo kaikilla mahdollisilla alkuluvuilla joissa on vähintään esimerkiksi 50 numeroa (yleensä enemmän). Eli tämä on mahdollista vain jos ensinnäkin on tiedossa kaikki alkuluvut.
eli pienenä harjoituksena 624945200692847 on kahden alkuluvun tulo ja tuosta voi päätellä, että toinen niistä päättyy numeroon 7 ja toinen numeroon 1, koska kahden alkuluvun tulona viimeinen numero 7 voi olla vain 1 ja 7 päättyvien lukujen tulon viimeinen numero tai numerot voivat olla 3 ja 9 päättyviä.
Tuo on vain pieni harjoitusnumero todellisissa on vähintään 150 numeroa tai yleensä yli 200 numeroa eli mahdollisten alkulukujen määrä on todella suuri. Koko systeemi perustuu siihen etsittävä alkulukujen määrä on riittävän suuri ja jo aluksi siihen, että on iso työ jo etsiä tarvittavat alkuluvut
Kehittämälläni systeemillä tulos aukesi alle sekunnissa.
Luvut 24999617 ja 24998191
Vanhalla läppärillä tämmösiä tuloksia