Valós példa az MD5 hibájára

A Slashdot-on jelent meg egy cikk arról, hogy a CodeProject oldalon demonstrálták, hogy milyen problémákat okozhat az MD5 hash használata például eredetiség-ellenőrzéskor.

A cikk írója két programot írt. Egy goodexe és egy evilexe névre hallgató programot. Az egyik egy egyszerű, veszélytelen program, míg a másik egy (szimulált) kárt okozó anyag.A cikk szerzője arra mutat rá, hogy noha a két kódból generált két exe jelentősen különbözik, az MD5 ellenőrző-összegük azonos.

MD5(good.bin) == MD5(evil.bin)

C:TEMP>md5clone goodexe.exe evilexe.exe

MD5 Hash for good.bin is 1D8EE13FBA00DD022F002AAD0E3EF9C7

MD5 Hash for evil.bin is 1D8EE13FBA00DD022F002AAD0E3EF9C7

A cikk írója azt szeretné bizonyítani, hogy az MD5-nek súlyos hiányossága van. Mivel számos helyen alkalmazzák az MD5-öt a biztonságtechnikában, annak további használata kockázatot rejt magában.

A Microsoft már döntött: a fejlesztők számára jelezte, hogy a DES, MD4, MD5 és bizonyos esetekben az SHA1 algoritmusok nem kívánatosak a továbbiakban.

A CodeProject cikke a példákkal itt.

Hozzászólások

1. script kiddik szamara nem kihasznalhato: nincs hozza megirt exploit, amit csak le kell tolteni, es mukodik.

2. titkosszolgalatok szamara nyitott ajto: a titkosszolgalatok milliardos eroforrasokkal rendelkeznek, rendkivul kepzett emberek tomegei dolgoznak legalabb is ideiglenesen nekik. szamukra az informacio szerzese a legfontosabb, es az, hogy mas ne tudja megszerezni az infot, amihez ok hozzajutnak. tehat amint felmerult hogy elvileg konnyen is torheto az MD5 szerintem raallitottak jonehany kutatot, es szuperszamitogepet. azota sok ido telt el, most mar "amatorok" is ernek el eredmenyeket egyszeruen specialis esetekben. ugy gondolom sok eroforrassal ennel joval tobbet el lehetett erni.

azt is gondolom, hogy minden oprendszergyartonal lefizettek "gyenge" jellemu embereket, hogy epitsenek be hatsoajtokat. Az opensource-nal legalabb megtalalhato...

persze elsosorban nem a magyar titkosszolgalatokra gondoltam:)

>Mondjuk nem értem, hogy az MS akkor miért nem rögtön SHA 512-re vált?

mikroökonomia: hogyan hasznaljuk ki a monopoliumunkat.

mindig kell valami az atlagos felhasznalo szamara ujdonsagnak hato dolgot mutatni. nem baj, hogy 10 eves, ha eddig nem hallot rola megfelel. majd 3 ev mulva lesz 384, es utana 3 evvel 512. es vakitja a parasztokat, hogy mennyire innovativ, es ad a biztonsagra.

Oks. Egyetértek. Csak azért kérdeztem rá erre a dologra, mert valami nem volt világos.

Értem hogy a szokásos "script kiddie" kategóriába eső, letöltömazüberoldalról az exploitot, aztán megnézegetek pár gépet, emberek nem fognak tudni mit csinálni. Míg a titkosszolgálatok a már általad is említett szürkeállomány és hardver erőforrásaikkal komoly eredményekre számíthatnak. Meg amint írtad, anyagi háttere is biztosított a kutatásaiknak.

Csak engem az nem hagyott nyugodni, hogy esetleg pár jól felkészült civil emberke is akár kreálhat (ha úgytetszik _véletlenül_) valami innovatív 5letet a tárggyal kapcsolatban, akár még úgy is, hogy nekik nincs meg az a hatalmas erőforrás háttér, mint az említetett szolgálatoknak, és megszületik az az eredmény, amitől szerintem már sokunk most is fél.

Tehát biztos én vagyok kicsit túl paranoiás,

de azért egy kicsit tartok ettől, készültek már elég mélyenszántó áttörések, eldugott külvárosi panellakások kisszobáiban :)

Szóval én minél előbb más alternatíva után néznék, és akkor talán nyugodtan fogok tudni aludni...

Üdv!

> Ez nekem ganyolas szagu ahhoz kepest, hogy hasznaljak valami mast, ami by
> design jobb. De biztos igazad van.

Egyáltalán nem gányolás, sőt. Nem tudhatod, hogy by design jobb, amit
most jobbnak tartunk, lehet, hogy egyszerűen még nem került eléggé
reflektorfényben. Ha netán az SHA256-ban is találnak egy hibát, akkor
azt is eldobjuk, annak ellenére, hogy a két algoritmus együttes
használata gyakorlatilag kihasználhatatlanná tenné a hibákat?

--
--- Friczy ---
'Death is not a bug, it's a feature'

> Akkor nem hibás, csak régi.

Tévedés, az MD5 hibás. Nem brute-force módon állítható elő ugyanis a
fake file. Ez van. Mellesleg ha csak a számítási teljesítményen múlna a
dolog, akkor semmi gond, meg kell növelni a hash méretét, ahogy a
kulcsokkal is teszik.

> Csak nevezzük nevén a dolgokat, és ne jöjjünk már az MD5 hibájával.

Nevén nevezik.

--
--- Friczy ---
'Death is not a bug, it's a feature'

A biztonsagi kerdesek kezelese nem ilyen jo-rossz kerdes.

fel kell merni a veszelyt jelento tenyezoket (a kulfoldi titkosszolgalatoktol, a rendszergazdakon keresztul, a script kiddik-ig), es minden tenyezohoz hozzarendelni a szamara elerheto forrasok/eszkozoket, valamint a motivaciojat.

az MD5 hiba meg a script kiddik szamara nem kihasznalhato, de pl: a titkosszolgalatok szamara szerintem mar nyitott ajto.

attol fuggoen te kiktol akarod megvedeni a cuccaidat. ha csak a script kiddiktol felsz, akkor meg raersz addig, amig nem lesz olyan program a neten, ami tetszoleges MD5 kulcshoz, es binarishoz general olyan a binarishoz hozzafuzendo bytesorozatot, amivel az uj binairs MD5-je meg fog egyezni az alore megadottal.

Na ez nem ma lesz:)

Kevés az esélye, hogy mondjuk a debian.org-ról nem eredeti package-t töltenék le, sőt még soha nem találkoztam azzal, hogy az md5 jelezte volna: fiam, ez fake!

MD5(good.bin) == MD5(evil.bin)

SZINTE HIHHETETLEN, pedig mar eppen kezdtem azt hinni, hogy ilyen nem is letezik.... ;-D

remelem, az SHA hash-e csak kizarolag a goodexe-knek van :-) De legalabbis az osszes evilexe-nek E-vel kezdodik az SHA hash-e.

Zsiraf

p.s.: meg ilyet, hogy letezhet ket kulonbozo file, aminek azonos a hash-e???????

;-) ;-0

Ebben a példában mindkét egyszerű programot ugyanaz az iró (azaz codegenerator program) írta. Ha egy másik programjához (valódi tevékenységet végző koplex programhoz) akarna egy cracker olyan rosszindulató kódot tartalmazó programot írni, amit ki is tud használni és emellett még az MD5 hashe is azonos, más sokkal nehezebb dolga lenne. Bár sajnos a valós veszély lehetősége adott.

Egyébként semmilyen hash algoritmus nem ad teljes biztosnágot, ez könnyen belátható, hash függvények értelmezési tartománya nagyságrendekkel nagyobb mint az értékkészlete. Igy biztosan van több olyan binary, vagy bármilyen file, amiknek azonos hashe van. Brute force probálgatással ezt meg lenet oldani, csak nincs olyan ismert computer ami ezt belátható időn belül végigpróbálgatná. Egy kivétel van, a Quantum Computerek, ezek elvileg nem lézetnek, de ki tudja mi minden van a titkosszolgálatok laborjaiban :-)

Az MD5tel az a baj, hogy itt már nem kell quantumconputer azonos hashű programkódok készítéséhez. De azért még nincs tetszőleges programhoz tetszőleges kártevő kódot injektáló generátorprogram, azonos MD5tel.

Ezt eddig értem, de...

Az MD5 esetében azért nem kell quantum computer, mert rossz az algoritmus, vagy a gépek fejlődtek annyit, hogy a brute force is végez belátható időn belül?

Mert ha ez utóbbi, akkor nincs értelme, sőt egyenesen hatásvadász ezt úgy nevezni, mint az MD5 hibája. Ezzel az erővel minden hash függvénynek van ilyen hibája...

Maga a példa program nem igazán szemléltet semmit. Gyakorlati felhasználhatósága 0. A postcriptes hamisítás már érdekesebb, de azért még az sem vészes /hiszen a hamisított rész már eleve benne volt a dokumentumban, amit Ceasar digitálisan aláír/.

Az egész MD5-ös hókusz-pókusz ebből az egy sorból ered:

If MD5(x) == MD5(y) then MD5(x+q) == MD5(y+q)

Magyarán, ha létezik olyan x és y vektor /lehetnek akár különböző hosszúak is/, amelyek MD5 hashe ugyanaz, akkor mögéjük írva tetszőleges q vektort az új x+q és y+q vektorok hashe is egyenlő lesz. A most előforduló példákban x és y vmi előre kiszámolt tetszőleges vektor sor, aminek semmi köze az adott példához /kivéve, hogy az MD5 hashük egyenlő/. Gyakorlatilag dummy bájt sorok, amik jelzésként szerepelnek. A q pedig tartalmazza a good és evil tartalmat is, ami az x v. y előfordulásának függvényében kerül elő /x esetén a good, y esetén az evil aktiválódik/.

Tehát annyira nem vészes a helyzet, hogy most mindenki elkezdjen parázni, hogy az MD5 nem biztonságos vagy hogy régi.

Persze azért ez elég ok lehet rá, hogy lassan átálljunk valami másra. Mondjuk nem értem, hogy az MS akkor miért nem rögtön SHA 512-re vált? Miért kell minden lépcsőt egyesével szedni és elősször 256-ra áttérni /utána meg gondolom a 384-re és csak utána az 512-re/?