Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Putkaposti 49: MD5-hyökkäys

Sivun loppuun

Antti Laaksonen [22.08.2011 23:55:43]

#

Uusi putkaposti on ilmestynyt:

https://www.ohjelmointiputka.net/postit/tehtava.php?tunnus=md5h

Kuinka hyvä turva MD5 on salasanoille?

Grez [23.08.2011 00:10:32]

#

Ihan hauska tehtävä sikäli, että kukaan tuskin nyt saa parasta mahdollista, mutta ajan kanssa kun md5:stä mahdollisesti löytyy lisää heikkouksia ja koneteho kasvaa saattaa tulokset parantua. Siinä mielessä tässä nimenomaisessa tehtävässä olisi jänskää olla jonkinlainen tuloshistoria.

Itse voisin ehkä laskaista ihan bruterforcella 11 merkkiä pitkän salasanan. Sen laskenta-ajan odote olisi 29 tuntia, eli kustannus olisi noin 10 euroa jos lasken että samassa ajassa laskisin noin yhden bitcoinin. 260 egee olisi jo vähän liian iso investointi siitä ilosta että saisi 12 merkkisen ;D

Näköjään kone jaksaa paahtaa 17,7 miljardia tiivistettä sekunnissa. PCIe 1x -väylien perässä olevissa GPUissa kuormitus tosin nousee vain 79%:iin.

Laitinen [24.08.2011 07:18:50]

#

Grez: Mitä softaa kräkkäämiseen käytit? Itse käytin IGHASHGPU:ta, ja näyttiksellä GTX460 se kraksotti 10-merkkisiä parhaimmillaan 700Mhash/s (en jaksanut odottaa loppuun) - eli aika surkeasti, jos verrataan sinun tuloksiisi, varsinkaan kun näyttikseni ei pitäisi aivan susihuono olla. Onko sulla joku bitcoinien mainaamiseen erityisesti tarkoitettu mylly, parempi softa, vai kenties molemmat?

Edit: Paitsi että ilmeisesti ATI:n tuplacorenäyttikset ovat huikeasti parempia kokonaislukulaskutoimituksissa nVidian näyttiksiin verrattuna, joten tuommoinen 20-30 kertainen ero ei tunnu mitenkään mahdottomalta, varsinkin jos uusi näyttis alla.

tuutti [24.08.2011 09:12:59]

#

Oma gtx 460 paukutteli jonku 1050m/s ja hd 5970 ~8000-10100m/s ighashgpu:lla.

kinnala [24.08.2011 09:41:34]

#

Hmm, joku kyllä mättää. Jätin himaan HD 6950:sen raksuttamaan 5300m/s kymmenen merkin salasanaa. Vaikuttaako ajureiden eri versiot noihin huomattavasti? Itellä on 11.4 catalyst ja 2.4 stream SDK. Pitää kokeilla uudempia kun pääsee takas kotiin.

Edit: Nvm. Vähän lueskeltuani sain selville, että tuo on jo aika lähellä kyseisen näyttiksen maksiminopeutta. Pitäis hommata joku nelisen kappaletta HD 6990 niin johan lähtis. ;-)

User137 [24.08.2011 10:08:19]

#

Jee, ysin ratkasuun meni 2 min 37s. 1.2m/s

Grez [24.08.2011 12:14:45]

#

Laitinen kirjoitti:

Grez: Mitä softaa kräkkäämiseen käytit? Itse käytin IGHASHGPU:ta, ja näyttiksellä GTX460 se kraksotti 10-merkkisiä parhaimmillaan 700Mhash/s (en jaksanut odottaa loppuun) - eli aika surkeasti, jos verrataan sinun tuloksiisi, varsinkaan kun näyttikseni ei pitäisi aivan susihuono olla.

Käytin/käytän oclHashCat-Liteä ja tuutin tulosten perusteella ighashgpu näyttäisi marginaalisesti nopeammalta, joskaan ei ilmeisesti Linuxille saatavilla olevalta. Laskentatehoa vaan on noin tuplasti enenmmän kuin tuo tuutin HD 5970. Ja tosiaan, niinkuin huomasitkin, ATIn näyttikset on aika paljon vikkelämpiä näissä hommissa. ;D

tuutti [24.08.2011 15:59:58]

#

Grez kirjoitti:

Käytin/käytän oclHashCat-Liteä ja tuutin tulosten perusteella ighashgpu näyttäisi marginaalisesti nopeammalta, joskaan ei ilmeisesti Linuxille saatavilla olevalta. Laskentatehoa vaan on noin tuplasti enenmmän kuin tuo tuutin HD 5970. Ja tosiaan, niinkuin huomasitkin, ATIn näyttikset on aika paljon vikkelämpiä näissä hommissa. ;D

Whitepixel (http://whitepixel.zorinaq.com/) niiden mittauste mukaa 8 GPU:lla olis melkee tuplasti nopeempi mitä ighashgpu. Tosin aika erilaisilla korteilla verrattu noita keskenään.

Grez [24.08.2011 17:23:40]

#

tuutti kirjoitti:

Whitepixel niiden mittauste mukaa 8 GPU:lla olis melkee tuplasti nopeempi mitä ighashgpu. Tosin aika erilaisilla korteilla verrattu noita keskenään.

Yksittäistä hashia haettaessa oclHashCat-Lite on paljon nopeampi kuin tuossa esiintyvä oclHashCat. Eli tuolla samalla raudalla saisi suunnilleen saman nopeuden kuin Whitepixel, ellei sekin sitten nopeudu jos haetaan vain yhtä hashia.

Mä en juurikaan voi ymmärtää mitä järkeä noilla on tehdä graafi jossa näkee että Whitepixel laskee tuplasti tehokkaammilla korteilla tuplasti enemmän kuin ighashgpu.

Grez [24.08.2011 19:34:26]

#

Dodih, nyt saa minun puolesta riittää näiden laskeminen. En usko että kukaan menee ohi ihan muutamassa päivässä.

Macro [24.08.2011 20:17:37]

#

Ensimmäinen tehtävä, johon minäkin osaan osallistua. Palvelinkone raksuttaa niitä noin 8,5 miljoonaa kappaletta sekunnissa, sanoo kuutta tuntia vielä kestoksi 8. salasanalle.

Koitin noita keskustelussakin mainittuja ohjelmia, mutta tuntuivat aika kummilta. Pidän tästä graafisen käyttöliittymän takia.

Muuten, miten näytönohjain liittyy salasanojen murtamiseen?

Grez [24.08.2011 20:19:55]

#

Macro kirjoitti:

Muuten, miten näytönohjain liittyy salasanojen murtamiseen?

Käyttämäni näytönohjaimet kävi läpi 17700 miljoonaa salasanaa sekunnissa. Palvelinkoneesi prosessori vastaavasti noin 8,5 miljoonaa sekunnissa. Olisiko tästä pääteltävissä jotain?

Tai toisin sanottuna näytönohjaimeni mursi tuon 8-merkkisen salasanan alle 12 sekunnissa siinä missä itse odottelet 6 tuntia. 11-merkkisen salasanan odotusarvo näytönohjaimillani 1,4 vuorokautta ja palvelimellasi 8 vuotta.

Näytönohjaimet pystyvät ajamaan tietynlaisia laskentatehtäviä hyvin montaa laskutoimitusta rinnakkaisesti. Siinä missä prosessori pystyy esim. 4 ytimellä ja hyperthreadingilla ajamaan parhaimmillaan 8 laskutoimitusta samanaikaisesti, saattaa näytönohjain pystyä tekemään kymmeniä tuhansia laskutoimituksia samanaikaisesti. Sehän niiden yleisin homma onkin, laskea esimerkiksi grafiikkaa prosessoria nopeammin. Tosin on prossuissakin jotain multimediaominaisuuksia jotka saattaa poiketa edellä mainitusta ja esim. AES-salausta rautakiihdytettynä yms.

Macro [24.08.2011 20:40:17]

#

Huhhu. En olekkaan ennen tiennyt, että näytönohjain voi laskeskella muutakin kuin sitä graafista puolta. Kiva kun selvensit.

Ehkä jätän tämän murtamaan vielä tuon kahdeksannen, ja odotan uusia osia muutaman kuukauden ja laitan sen sitten murtamaan uudelleen. En kumminkaan halua odottaa kahdeksaa vuotta yhtä salasananmurtoa.

Chiman [24.08.2011 22:20:13]

#

Pelkkä brute ei oikein houkuta, joten tutkin josko "satunnainen merkkijono" ei olisikaan niin satunnainen, vaan salasanat olisi muodostettu aiemmista putkaposteista tutulla kotus-listalla olevista sanoista jollain yksinkertaisella merkki->merkki -muunnoksella. Käytin muunnokseen 4-7 merkin pituisia murrettuja salasanoja ja rajoitin sillä 8 merkin salasanan vaihtoehtojen laskemista. Eipä osunut.

Grez [24.08.2011 22:32:32]

#

Itsekin mietiskelin, että olisiko jollain pseudorandomilla tehty ja saisiko sopivalla seedillä laskettua samat, mutta en sitten lähtenyt kokeilemaan.

Mielstäni jos tuossa olisi jotain kotuslistaa käytetty eikä salasanat olisikaan satunnaisia, niin tehtävänanto olisi virheellinen.

Antti Laaksonen [24.08.2011 23:10:22]

#

Tehtävän salasanat on muodostettu satunnaisesti, eli sanalistasta ei ole hyötyä.

On ollut kiinnostavaa nähdä, kuinka pitkiä salasanoja pystyy murtamaan kotikonstein. Grezin saavuttama murtonopeus yllätti kyllä minut.

Torgo [24.08.2011 23:36:10]

#

Itse tein ihan perinteisen yhdessä säikeessä toimivan algoritmin. Ensimmäiset 9 se oli saanut runnottua työpäivän aikana. Pidempiä sillä tuskin saa missään järkevässä ajassa. Kokeilin 10 pituiselle tuota IGHASHGPU:ta. Eta näytti yli 4d ja minuutin runnomisen jälkeen mun passiivijäähdytteinen HD 4650 tuumasi, että tarttis lisäjäähdytystä ja jätti homman kesken. :p

Macro [25.08.2011 16:10:09]

#

Pitäisikö näytönohjain laittaa jotenkin erikseen laskemaan tätä tehtävää, kun kone AMD Radeon HD6850 -näytönohjaimella, i7-prosessorilla ja kuudella gigalla muistia laskee vain yhdeksän miljoonaa salasanaa sekunnissa? Vai onko teillä kenties useampi näytönohjaimia käytössä?

Mizou [25.08.2011 16:18:21]

#

Macro kirjoitti:

Pitäisikö näytönohjain laittaa jotenkin erikseen laskemaan tätä tehtävää ...

Tuossahan on tullut muutama ohjelma keskustelussa esille, jotka laskevat näytönohjaimella (esim. IGHASHGPU).

Macro [25.08.2011 16:52:52]

#

Kappas. Sain käsityksen, että järjestelmä itse osaisi antaa tehtävät näytönohjaimelle laskettavaksi, mutta nähtävästi ei.

Valitettavasti minkään koneeni näytönohjain ei täytä noiden mainittujen ohjelmien kriteerejä. Yksikään ei ole CUDA-yhteensopiva, ja Ati-maailmassa uusin on 4200 kun 4650 tarvitaan.

Metabolix [25.08.2011 17:05:13]

#

AMD on ostanut ATI:n jo aikaa sitten, joten kuvittelisin, että se AMD-kortti kelpaa.

vehkis91 [25.08.2011 18:44:41]

#

Pitøøpi laittaa oma radeon hd6950 raksuttaa yæks tota ja kattoo aamull, ettø mikø tilanne... :P

Macro [25.08.2011 20:04:09]

#

Ainakaan tässä keskustelussa mainitut ohjelmat eivät tue Nvidian GeForce 6600:sta tai AMD Radeon HD 4200:sta.

The Alchemist [25.08.2011 20:10:29]

#

Macro kirjoitti:

Ainakaan tässä keskustelussa mainitut ohjelmat eivät tue Nvidian GeForce 6600:sta tai AMD Radeon HD 4200:sta.

GF6600 ei ole GPGPU-näyttis, joten luonnollisestikaan sillä ei tee tässä keississä yhtään mitään. Tuon Ratukan pitäisi kai teknisesti kelvata, minkä lie takia sitten ei ole tuettu.

Metabolix [25.08.2011 20:44:27]

#

Macro kirjoitti:

Ainakaan tässä keskustelussa mainitut ohjelmat eivät tue Nvidian GeForce 6600:sta tai AMD Radeon HD 4200:sta.

Toisessa viestissä mainitsit kuitenkin AMD Radeon HD6850:n. Eikö tue sitäkään? :o

K_L [25.08.2011 20:47:53]

#

Tjooo... IGHASHGPU ratkaisi 6:n sekunnissa, kun taas oma koodi vei 22 min.

Grez [25.08.2011 21:29:39]

#

Macro kirjoitti:

Kappas. Sain käsityksen, että järjestelmä itse osaisi antaa tehtävät näytönohjaimelle laskettavaksi, mutta nähtävästi ei.

No kyllähän se antaakin, jos järjestelmällä tarkoitat esimerkiksi OpenCL:ää. Eli jos OpenCL:lle antaa laskettavaksi hommia, niin se osaa tehdä ne prossulla tai näytönohjaimella. Tietenkin prossulla tehtynä homma on sillä hitaampaa kuin ohjelmalla joka on tehty suoraan prossulle.

Sen sijaan jos käytät ohjelmaa, joka on tehty tietylle prosessori-tyypille (esim. x86-sarja) niin eihän se maagisesti suoritu erilaisella prosessorilla.

Hycke [26.08.2011 18:10:02]

#

Keksin mielenkiintoisen, en niinkään nopean, tavan laskea salasanan MD5-hashista.

Käytin hyväkseni MS SQL serverin hashbytes-funktiota.
Oheinen toimii ainakin SQL server 2008 versiossa, vanhemmissa Convert ei suostu muutamaan hashbytes funktion palauttamaa varbinary:a varchar:ksi.

5 merkkiä pitkän salasanan purkaminen kesti koneellani 12 sekuntia.

--Luodaan väliaikainen taulu
create table #a(a char(1) not null)
go
--Lisätään tauluun aakkoset a-z
insert into #a
select	char(number)
from	master..spt_values
where	type = 'p' and number between 97 and 122
go
--luodaan primary key
alter table #a add constraint pk_a primary key clustered ([a] asc )
go
--Kysely jolla selvitetään 5 pitkä salasana MD5 hashista
select 	top 1 a.a+b.a+c.a+d.a+e.a as [salasana]
from	#a a,#a b,#a c,#a d,#a e
where	convert(varchar(34)
		,hashbytes('md5'
		,a.a+b.a+c.a+d.a+e.a) ,1)
		= '0x49fc455b20e50f22a736048ceba0ad39'
order by 1
--Dropataan väliaikainen taulu
drop table #a

Meitzi [27.08.2011 11:57:48]

#

8 merkkiin asti pääsin netin md5 hakukoneilla.

tesmu [27.08.2011 15:42:20]

#

Sinänsä tämä on erikoinen putkaposti koska tähän periaatteessa ei tarvitse ohjelmointitaitoa lainkaan... Lisää tämäntyylisiä kiitos...

Macro [02.09.2011 12:06:26]

#

Jep, tälläiset ovat ihan hauskoja. Toisaalta päättelytehtävät ovat todella hyviä (kiertopeli, peltojen asettelu jne).

Nykyinen tulos on tällä koneella ihan maksimi mitä voi edes yrittää, koska kymppitason salasanaa se purkaisi puolitoista vuotta. Ysiin meni melkein viikko.

punppis [09.09.2011 03:10:10]

#

Macro kirjoitti:

Palvelinkone raksuttaa niitä noin 8,5 miljoonaa kappaletta sekunnissa

Hmmh. Käytäkö jotain valmista softaa vai teitkö koodin itse? Omalla koodilla lähtee hikiset ~65 000 hashia sekunnissa. Ilmeisesti tuossa valmiissa md5-funktiossa on vielä optimoimisen varaa, sillä pelkkiä hasheja laskee n. 70k sekunnissa ilman mitään bruteforcettamista jne. statistiikkojen keräämistä.

Prossuna Q9300 @ 3GHz.

K_L [09.09.2011 07:55:09]

#

Minä sain tehtyä ~200000 hashia sekunnissa. Käytännössä kuitenkin bruteforcetan samaa salasanaa 4:llä eri tavalla, joten 4 * 200k seukunnissa. Eli hidasta on silti.

L2-K2 [09.09.2011 16:12:59]

#

punppis kirjoitti:

Macro kirjoitti:

Palvelinkone raksuttaa niitä noin 8,5 miljoonaa kappaletta sekunnissa

Hmmh. Käytäkö jotain valmista softaa vai teitkö koodin itse? Omalla koodilla lähtee hikiset ~65 000 hashia sekunnissa. Ilmeisesti tuossa valmiissa md5-funktiossa on vielä optimoimisen varaa, sillä pelkkiä hasheja laskee n. 70k sekunnissa ilman mitään bruteforcettamista jne. statistiikkojen keräämistä.

Prossuna Q9300 @ 3GHz.

K_L kirjoitti:

Minä sain tehtyä ~200000 hashia sekunnissa. Käytännössä kuitenkin bruteforcetan samaa salasanaa 4:llä eri tavalla, joten 4 * 200k seukunnissa. Eli hidasta on silti.

Teillä on melko hitaat toteutukset MD5-funktiolle. Minulla käytössä oleva, Kaunis salasana -putkapostia varten toteutettu, MD5-funktio pääsee noin 7000000 hash/s nopeuteen* yhdellä ytimellä kun prosessorina on Athlon II X4 630 (2.8 GHz). Toki tämä on silti vain noin 1/1000 yhden HD6950-sarjan näytönohjaimen nopeudesta.

*Osana valmista ohjelmaa, oikea yksikkö on siis erilaista salasanaa sekunnissa.

EDIT: 1/100 → 1/1000

Macro [09.09.2011 16:18:10]

#

Valmiilla softalla ratkaisen noita. Odottelen, että saisin joskus lisää tehoja näytönohjaimen avulla, jotta onnistuisi nopeampi työskentely.

Mitäköhön rautaa Greziltä löytyy, kun 17,7mrd hashia menee sekunnissa? L2-K2:n mukaan HD6950 pureskelisi 700 miljoonaa salasanaa sekunnissa, joten niitä tarvitsisi aikas monta tuohon 17,7 miljardiin.

L2-K2 [09.09.2011 16:25:54]

#

Macro kirjoitti:

Valmiilla softalla ratkaisen noita. Odottelen, että saisin joskus lisää tehoja näytönohjaimen avulla, jotta onnistuisi nopeampi työskentely.

Mitäköhön rautaa Greziltä löytyy, kun 17,7mrd hashia menee sekunnissa? L2-K2:n mukaan HD6950 pureskelisi 700 miljoonaa salasanaa sekunnissa, joten niitä tarvitsisi aikas monta tuohon 17,7 miljardiin.

Piti tietenkin olla 1/1000. Pahoittelut. Lähteenä:

kinnala kirjoitti:

Hmm, joku kyllä mättää. Jätin himaan HD 6950:sen raksuttamaan 5300m/s kymmenen merkin salasanaa. Vaikuttaako ajureiden eri versiot noihin huomattavasti? Itellä on 11.4 catalyst ja 2.4 stream SDK. Pitää kokeilla uudempia kun pääsee takas kotiin.

Grezillä on ilmeisesti neljä tällaista (koska sanoi osan olevan PCIe 1x -väylässä).

Macro [09.09.2011 22:42:14]

#

Vähän kumminkin ihmettelen, jos 6950 kävisi 7mrd/s, ja tuutin 5970 8-10mrd/s... Kai 6950:n pitäisi olla parempi, kuin 5970:n?

L2-K2 [09.09.2011 23:27:48]

#

Macro kirjoitti:

Vähän kumminkin ihmettelen, jos 6950 kävisi 7mrd/s, ja tuutin 5970 8-10mrd/s... Kai 6950:n pitäisi olla parempi, kuin 5970:n?

5970 on kahden grafiikkaytimen kortti, 6950 yhden. Siten yksi 6000-sarjan grafiikkaydin on hieman yhtä 5000-sarjan grafiikkaydintä nopeampi.

Macro [10.09.2011 09:22:23]

#

Ovatko kaikki 6000-sarjan (for example 6870) näytönohjaimet yhden ytimen kortteja?

Pystyykö esimerkiksi peleissä hyödyntämään kahta näytönohjainta?

Noita ei nähtävästi saa mistään, noita 5970:ia.

makumaku [10.09.2011 10:36:13]

#

Osta joku HD6990-kortti.

The Alchemist [10.09.2011 10:55:31]

#

Macro kirjoitti:

Ovatko kaikki 6000-sarjan (for example 6870) näytönohjaimet yhden ytimen kortteja?

Pystyykö esimerkiksi peleissä hyödyntämään kahta näytönohjainta?

Noita ei nähtävästi saa mistään, noita 5970:ia.

Yhden suorittimen kortteja*. Ytimiä noissa jokaisessa on satamäärin.

Macro [10.09.2011 12:21:27]

#

Toi 6990 on vähän turhan hintava mun käyttöön. Jollet sä halua ostaa sitä mulle, niin voin jättää väliin.

Joo, kirjotin nähtävästi ytimistä kun tarkoitin suorittimia.

K_L [12.09.2011 07:55:22]

#

L2-K2 kirjoitti:

Teillä on melko hitaat toteutukset MD5-funktiolle. Minulla käytössä oleva, Kaunis salasana -putkapostia varten toteutettu, MD5-funktio pääsee noin 7000000 hash/s nopeuteen* yhdellä ytimellä

Näin on. Testasin huvikseni pelkästään yhtä loopia i = 0 to 200k: Hash time: 1029.6 [ms] avg time 0.005148 [ms]

Metabolix [12.09.2011 14:58:10]

#

Joo, kyllä yhdelle blokille sovellettu C-kielinen MD5-funktio (sekä hyvin toteutettu silmukka) on takuulla paljon nopeampi kuin vaikka PHP:llä väännetty versio, jossa tekstin käsittely kestää pidempään ja MD5-funktio toimii mielivaltaiselle datamäärälle.

Jänniä nopeushavaintoja:

gcc   -O3 -m64:  4,09 Mhash/s (100,0 %)
clang -O3 -m64:  4,38 Mhash/s (107,1 %)
gcc   -O3 -m32:  4,40 Mhash/s (107,6 %)
clang -O3 -m32:  4,46 Mhash/s (109,0 %)

Monessa tapauksessa Clang tuottaa hitaamman koodin kuin GCC, mutta tässä tuli voitto. Erityisen yllättävä on GCC:n huono tulos 64-bittisessä käännöksessä ja se tosiseikka, että 32-bittinen käännös on molemmissa tapauksissa selvästi nopeampi. Läppärissä on 64-bittinen Pentium (T2370).

punppis [15.09.2011 03:21:57]

#

Mielestäni joskus voisi olla sellainen putkaposti, jossa pitäisi optimoida jokin tietty koodi mahd. nopeaksi. Tietysti kaikkien ohjelmat sitten testattaisiin jollain yhdellä koneella, jotta saisi luotettavia tuloksia.

Tästä tulisi mainio optimointitehtävä, mutta tuo MD5-funktion toteutus taitaa olla vähän turhan hankala ja monimutkainen optimoitavaksi suurimmalle osalle putkalaisista. Itse katselin tuota MD5 dokumentaatiota ja kyllä tuossa jonkunverran tarvitsee koodia kuitenkin kirjoitella ja sen takia en itse ainakaan jaksanut luoda omaa md5-funktiota.

Tehtävän tulisi myöskin olla sellainen, johon ei löydy netistä valmiita ratkaisuja, ainakaan helposti.

User137 [15.09.2011 21:44:48]

#

punppis kirjoitti:

Mielestäni joskus voisi olla sellainen putkaposti, jossa pitäisi optimoida jokin tietty koodi mahd. nopeaksi. Tietysti kaikkien ohjelmat sitten testattaisiin jollain yhdellä koneella, jotta saisi luotettavia tuloksia.
..

Toisinsanoen ei voi testata. Putkapostit jää kai yleensä ratkastaviks vuosien päähän, eli sen testauksen pitäis olla aina käytössä. Jos testaus on automaattinen niin joku vois palauttaa sille serverille viruksen käännettäväksi ja ajettavaksi. Manuaaliseen testaukseen ylläpitäjät tuskin haluavat.

Metabolix [15.09.2011 21:56:26]

#

punppis kirjoitti:

Tietysti kaikkien ohjelmat sitten testattaisiin jollain yhdellä koneella, jotta saisi luotettavia tuloksia.

Testaaminen ei ole luotettava tapa nopeuden arviointiin, jos ero on vähäinen. Sitä paitsi nopein ratkaisu riippuu myös testikoneen arkkitehtuurista ja kääntäjän tai tulkin versiosta, joten ratkaisua ei voisi luotettavasti testata omalla koneella.

Esoteerisella kielellä optimointitehtävä olisi toki mahdollinen, mutta en usko, että siitä tulisi oikeasti kiinnostava. Harvoin optimointiin on kovin monta vaihtoehtoa, paitsi tietenkin koko algoritmin muuttaminen, mutta sitähän tehtävät käsittelevät jo nyt.

punppis kirjoitti:

Tästä tulisi mainio optimointitehtävä, mutta tuo MD5-funktion toteutus taitaa olla vähän turhan hankala ja monimutkainen optimoitavaksi suurimmalle osalle putkalaisista.

Mitä ihmettä? MD5-funktio on äärimmäisen yksinkertainen (pyöritellään vain paria lukua) ja lisäksi käytännössä mahdoton optimoida – siihenhän sen teho osittain perustuu.

Grez [15.09.2011 22:20:02]

#

Metabolix kirjoitti:

punppis kirjoitti:

taitaa olla vähän turhan hankala ja monimutkainen ... suurimmalle osalle putkalaisista.

Mitä ihmettä? MD5-funktio on äärimmäisen yksinkertainen

En näe ristiriitaa.

L2-K2 [16.09.2011 16:15:36]

#

Metabolix kirjoitti:

Mitä ihmettä? MD5-funktio on äärimmäisen yksinkertainen (pyöritellään vain paria lukua) ja lisäksi käytännössä mahdoton optimoida – siihenhän sen teho osittain perustuu.

Paitsi että ei, vain lähestulkoon näin. MD5-funktion pitäisi olla "käytännössä mahdoton optimoida", mutta näin ei valitettavasti ole. Funktion 64:stä iteraatiosta viimeiset 14 kyetään poistamaan laskemalla lopputuloksesta taaksepäin ja SSE2-käskyillä nykyprosessorit (alle kymmenen vuotta vanhat) saadaan laskemaan neljän merkkijonon tiivisteet kerrallaan. Toki näillä saadaan vain vakiokertoimen suuruinen nopeutus (luokkaa 6×), mutta silti. Kaiken lisäksi nämä optimoinnit ovat hyvin työläitä (mutta mekaanisia) kirjoittaa ja käytännössä ainoa paikka missä niitä tapaa on tässä ketjussa aiemmin mainitut nopeat MD5-"purkimet". (Tosin niissä käytetään SSE2-käskyjen sijaan näytönohjaimien tukemia vektorioperaatioita, ja ilmeisesti tällaisia löytyy vain AMD:n näytönohjaimista (nopeuseron perusteella).)

Tähän voisi tähdentää että en missään nimessä kannata tämän tyylistä optimointitehtävää Putkapostiksi, sillä se mittaa käytännössä pelkästään tietyn prosessoriarkkitehtuurin tuntemusta eikä varsinaista algoritmien tuntemusta. Eroja on kuitenkin mahdollista tehdä, kuten alla olevasta listan kahdesta viimeisestä kohdasta ilmenee. Mutta listasta nähdään myös, että lopputulos riippuu voimakkaasti käytetystä prosessoriarkkitehtuurista.

GTX 460 1GB GDDR5 (IGHASHGPU, ilmeisimmin iteraatioiden poisto)
(336 × 1350 MHz) / 700Mhash/s = 648 cycles/hash

AMD Radeon™ HD 6950 Graphics (IGHASHGPU, edellinen + vektorioperaatioita (mutta miten toteutettu, sitä en tiedä))
(1408 × 800 MHz) / 5300 Mhash/s = 213 cycles/hash

AMD Athlon II X4 (minun koodini ilman SSE2-käskyjä ja iteraatioiden poistoa)
2800 MHz / 7 Mhash/s = 400 cycles/hash

Core2Duo E2140 @ 3000 MHz (BarsWF, SSE2 + iteraatioiden poisto)
(2 × 3000 MHz) / 100 Mhash/s = 60 cycles/hash

Grez [16.09.2011 16:31:29]

#

L2-K2 kirjoitti:

näytönohjaimien tukemia vektorioperaatioita, ja ilmeisesti tällaisia löytyy vain AMD:n näytönohjaimista (nopeuseron perusteella).)

Itse asiassa "use vectors" valinta tiivisteenlaskentaohjelmissa tuo tyypillisesti vain jonkun 5% nopeutuksen AMD:n korteilla.

Syy miksi AMD:t lyö nVidiat tässä on käsittääkseni se, että nVidian korteilla olisi GPU:n laskentapii jaettu useampaan eri tyyppiseen käyttötarkoitukseen, kun taas AMD:n korteilla olisi huomattavasti suurempi vapaasti ohjelmoitavissa oleva osio, jota AMD:llä pelikäytössä sitten ohjemoidaan tekemään niitäkin juttuja mille nVidialla on erikoistuneet osat. Eli siis tuossa sinun tapauksessasi 336 vs 1408 yksikköä ja kykenisiköhän kukin 1408 yksiköstä vielä laskemaan 4 kertaa leveämpiä lukuja, jolloin saataisiin tuo cycles/hash -parannus.

Metabolix [16.09.2011 16:42:56]

#

L2-K2 kirjoitti:

MD5-funktion pitäisi olla "käytännössä mahdoton optimoida", mutta näin ei valitettavasti ole.

Et puhu nyt ollenkaan MD5-funktion optimoinnista vaan tiivisteen murtamisen optimoinnista, joka on aivan eri asia. Jos tarkoitus on laskea yhdestä salasanasta tiiviste, mikään esittämäsi kikkailu ei auta.

L2-K2 [16.09.2011 16:52:55]

#

Grez kirjoitti:

L2-K2 kirjoitti:

näytönohjaimien tukemia vektorioperaatioita, ja ilmeisesti tällaisia löytyy vain AMD:n näytönohjaimista (nopeuseron perusteella).)

Itse asiassa "use vectors" valinta tiivisteenlaskentaohjelmissa tuo tyypillisesti vain jonkun 5% nopeutuksen AMD:n korteilla.

Syy miksi AMD:t lyö nVidiat tässä on käsittääkseni se, että nVidian korteilla olisi GPU:n laskentapii jaettu useampaan eri tyyppiseen käyttötarkoitukseen, kun taas AMD:n korteilla olisi huomattavasti suurempi vapaasti ohjelmoitavissa oleva osio, jota AMD:llä pelikäytössä sitten ohjemoidaan tekemään niitäkin juttuja mille nVidialla on erikoistuneet osat. Eli siis tuossa sinun tapauksessasi 336 vs 1408 yksikköä ja kykenisiköhän kukin 1408 yksiköstä vielä laskemaan 4 kertaa leveämpiä lukuja, jolloin saataisiin tuo cycles/hash -parannus.

Tuo neljä kertaa leveämpiä lukuja on juurikin tarkoittamani vektorioperaatio. Käytännössä tuollaisilla saadaan laskettua neljän merkkijonon MD5-tiivisteet kerrallaan.

Metabolix kirjoitti:

L2-K2 kirjoitti:

MD5-funktion pitäisi olla "käytännössä mahdoton optimoida", mutta näin ei valitettavasti ole.

Et puhu nyt ollenkaan MD5-funktion optimoinnista vaan tiivisteen murtamisen optimoinnista, joka on aivan eri asia. Jos tarkoitus on laskea yhdestä salasanasta tiiviste, mikään esittämäsi kikkailu ei auta.

Myönnetään olet oikeassa, puhuimme eri asiasta. Jos tavoite on laskea yhdestä merkkijonosta tiiviste, ovat optimointivaihtoehdot huomattavasti vähäisempiä. Nyt jäljelle jää vain tuon kussakin iteraatiossa lisättävän vakiotermin laskeminen etukäteen taulukkoon ja tiettyjen iteraatioiden binäärioperaatioiden vaihtaminen sellaiseen muotoon, jossa ne voidaan laskea yhdessä kellojaksossa kahden sijaan. Nämä ovat molemmat sellaisia optimointeja, jotka hyvin toteutettu kääntäjä tekee automaattisesti. Eli mitään optimoitavaa ei oikeasti ole olemassa.

etsubu [18.09.2011 12:25:08]

#

Omassa koneessa ei tehot kyllä riitä tähän tehtävään, mutta tuli mieleen, että sitähän voisi koodin vääntämisellä saada useamman koneen murtamaan yhdessä yhtä tiivistettä. Tosin saapa nähdä tuleeko valmiiksi ;P


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta