Kezdőoldal » Számítástechnika » Programozás » A XOR titkosítást miért...

A XOR titkosítást miért tartják hatástalannak, könnyen törhetőnek? Miért nem használható érdemleges munkákban/programokban/implementációkban és miért csak jóval bonyolultabb titkosításokat fogadnak el használhatónak?

Figyelt kérdés

Ha ilyen egyszerű - mármint hogy hatékonytalan - a XOR titkosítás, akkor mi is az a triviális törési mód, ami használhatatlanná teszi?

Csomószor már kinevettek, amikor szóba került, "középkori" tudománytalan "gyerekjátéknak" tartották/tartják. Valóban, abszolút egyszerűnek tűnik, hogy még egy kisiskolás is megérti, ennél egyszerűbb s könnyebb talán nem is létezhet.

De mármost az, hogy egyszerű, feltétlenül azt vonja maga után, hogy a feltörhetősége is nyilvánvaló?

Merthogy én szókimondóan mindig rákérdeztem - amikor gyerekjátékként titulálták -, hogy akkor hogyan is törné fel az illető. Mutassa meg azt a triviális feltörési módot, ha több van, elég egy is. Akár folyamatábrában, vagy ahogy könnyű elmagyarázni.

Ilyenkor persze mindig hallgatás lett a vége, meg demagóg módon visszatértek arra, hogy nem gyerek-technológiákkal kéne bohóckodni, ha akarok is valamit.


FONTOS! : Most ne értse félre senki, NEM arra gondolok, hogy fogunk egy félmaroknyi bitsorozatot, és azt alkalmazzuk minden adatsoron tapétaszerűen!!

Célszerűen adja magát, hogy legalább valami véletlenszerűnek ható, de akár generatív módon előállított nem periódikus bitfolyamot készítünk az adott méretre, és azzal keverjük össze a digitális adatsort. Olyan bitsorozattal, amiben nincsenek ismétlődések, s látszólag semmilyen minta, értelmezhető/azonosítható sorozat sem, de mégis valami procedurális minta szerint lettek legenerálva - értem ezt úgy, hogy létezik egy "zagyva" függvény, ami ezt a bitsorozatot adja, hogy ne magát a XOR titkosításhoz használt bitsorozatot, a teljes kulcsot kelljen tárolni, hanem csak egy függvényt, algoritmust, úgyszólván egy determinisztikus előállítási procedúrát a kulcshoz.


Ez miért nem járható út? Miért támadható, s mi az a támadás.

-- mert ha ilyesmivel nincs gond, miért ne lenne használható : az implementáció is könnyebb, hardveresen is jobban futna (p. a kevesebb számolás miatt) --


2016. júl. 9. 23:10
1 2
 11/15 anonim ***** válasza:
Meg még annyi jutott eszembe, hogy igazából vissza se kell forditani az algoritmust, elég csak belehivni a kódba, és gyakorlatilag a te leforditott binárisod segitségével fogják feltörni...
2016. júl. 10. 11:15
Hasznos számodra ez a válasz?
 12/15 2*Sü ***** válasza:
100%

Itt az is fontos kérdés, hogy pontosan mit akarunk titkosítani, milyen körülmények között.


Pl. helyben akarsz titkosítani, vagy kommunikációt akarsz titkosítani?


Kommunikáció esetén problémás lehet, hogy a kulcsot el kell juttatni nem titkosított csatornán a fogadó oldalra. Erre találták ki a kétkulcsos titkosítási algoritmusokat, amivel ez elkerülhető. De ha valahogy sikerül is, gyakorisággal, egyebekkel mégis lehet következtetni a kulcsra. Pl. ha üzenetváltást titkosítasz, akkor sokszor kerülhet átküldésre egy webcím, ami gyakran úgy kezdődik, hogy „ [link] Ezt könnyű kiszúrni, hiszen ugyanazzal a kulccsal mindig ugyanaz lesz a titkosított adat eleje is. Mindjárt megvan a kulcsból az első 11 karakter. Ha tudod, hogy egy adott nyelven kommunikálnak, és sok üzenet van, akkor a nyelv karaktereinek gyakoriságából következtetni lehet a kulcsra is. Normál szövegben pl. a szóköz esetleg adott nyelven egy bizonyos betű a leggyakoribb. Ha több száz, több ezer titkosított szöveged van, egyszerűen megvizsgálod, hogy mondjuk a 16. bájtnál melyik a leggyakoribb karakter. Valószínű az egy szóközt, magyar nyelv esetén esetleg egy e betűt titkosít. Így mindjárt tudsz következtetni, hogy mi lehet a kulcs 16. bájtja. Ha már megvan néhány, hasonló módszerrel lehet folytatni. (Pl. a két szóköz között a leggyakoribb a magyar nyelvben az „a” karakter, mint névelő, szóközök között lévő két karakter valószínű, hogy az „az” vagy az „és”, „ha” szövegeket jelenti.)


Egy programmal akarod titkosítva tárolni az adatokat? A probléma, hogy a visszafejtéshez a programnak tartalmaznia kell a kulcsot, az benne van a programban, kinyerhető.


Helyben akarsz titkosítani? Itt is kérdés, hogy valaki hozzáférhet-e az általa titkosított adatokhoz. Ha igen, akkor megint könnyű kitalálni a kulcsot. (Lásd: 0 bájtok titkosítása.)


De mondjuk egy webszerveren történhet olyan támadás, amit nem tudsz elhárítani, és valaki meg tudja szerezni az adatbázist, a kódot is. Ez problémás lehet, mert a kód segítségével vissza tud fejteni adatokat. Persze itt kérdés, hogy visszafejthető formában akarod-e az adatokat tárolni. Pl. egy jelszó esetén nem szükséges. Nem kell tudnod visszafejteni a jelszót, neked csak azt kell tudnod ellenőrizni, hogy ha valaki megad egy jelszót, akkor az „titkosítva” megegyezik-e az eredeti jelszó „titkosított” adatsorával. Itt jönnek be a hash algoritmusok, de – mindenféle trükközéssel együtt is – már ezek is elavultak bizonyos szempontból. A hash algoritmusok ereje abban van, hogy a kód és az adatbázis ismerete mellett sem egyszerű a jelszavakat visszafejteni.


Még egy probléma lehet a XOR-ral való titkosítással – ami egyébként a hash-el történő jelszó kódolás kvázi elavultságának is oka –, hogy a XOR nagyon gyorsan végrehajtható művelet. Ergo bizonyos kritériumoknak megfelelő vizsgálat esetén nagyon gyorsan lehet rengeteg kulcsot végigpróbálni.


De a kérdés további boncolgatásához jó lenne pontosan tisztázni, hogy most pontosan mit értünk titkosítás alatt, mi a konkrét példa. Azon keresztül meg lehet tárgyalni, hogy mit szoktak használni, és miért jobb, mint a XOR-ral való titkosítás.

2016. júl. 10. 16:00
Hasznos számodra ez a válasz?
 13/15 anonim ***** válasza:

Azt nem látod hogy a legtöbb egykulcsos titkosítás pont úgy működik ahogy leírtad. A jó titkosítás viszont olyan hogy minden kulcsra és minden adatra egyformán jól teljesít, ezért a nehézség pont ennek a "zagyva" függvények a megírásában van, tehát pl. abban hogy akkor se lehessen kitalálni a kulcsot ha ismerjük az adatnak egy részét. (ne felejtsd el hogy még akkor is ha nem ismered az eredeti fájlt, a fejlécét ismerheted mert a legtöbb fájltípusnak van kitalálható fejléce, illetve vannak bájt minták és gyakoriságok amiket statisztikai alapon meg lehet ismerni) Nézz utána az AES titkosításnak.


Ez persze még így sem elég, mert ha a hálózaton át kell tudni küldeni a kulcsot akkor bajban vagy. Itt jönnek be az aszimmetrikus kulcsú titkosítások, pl. az RSA. RC4 és XOR alapú titkosításoknál ha a támadó az elejétől kezdve ismeri az adatfolyamot akkor vissza is tudja fejteni.

2016. júl. 10. 16:12
Hasznos számodra ez a válasz?
 14/15 A kérdező kommentje:

"Még egy probléma lehet a XOR-ral való titkosítással – ami egyébként a hash-el történő jelszó kódolás kvázi elavultságának is oka –, hogy a XOR nagyon gyorsan végrehajtható művelet."


Hát, ez az én elméleti okfejtésemre valóban kapásból egy negatívum, mivel én pont arra apelláltam, hogy gyorsan, könnyedén elvégezhető legyen a műveletsor.


Az AES-nek már párszor utánaolvastam - igaz, a legutóbbi is már régebben volt, szóval nem lenne hátrány felfrissítenem az emlékeket; De pont abból jött a felvetés emlékeim szerint, hogy az AES nagyon-nagyon komplex műveletsor volt.

2016. júl. 10. 19:36
 15/15 2*Sü ***** válasza:

> Hát, ez az én elméleti okfejtésemre valóban kapásból egy negatívum, mivel én pont arra apelláltam, hogy gyorsan, könnyedén elvégezhető legyen a műveletsor.


Azért mondom, hogy nem mindegy, hogy mit értünk titkosítás alatt. Ha több száz MB-os fájlokat kell gyorsan dekódolni, akkor jó, ha az algoritmus gyors. Ha jelszavakat titkosítunk, akkor meg nem jó, hogy gyors.


Pont ez a probléma a jelszavak MD5-el, SHA-val való titkosításával. Ezek általános célú hash algoritmusok, amit pl. ellenőrzőösszegekre is használnak. Ott fontos, hogy gyors legyen, hogy egy több száz MB-os fájlból gyorsan lehessen hasht gyártani. Ezek az algoritmusok kimondottan úgy vannak megalkotva, hogy elemi műveleteket használjanak, jól párhuzamosítható legyen.


A jelszavaknál ez viszont kimondottan hátrány. A PHP 5.5-től vezettek is be új függvénycsomagot – password_hash, password_verify, stb… –, ami kimondottan ezt a problémát orvosolja, olyan algoritmust használ – alapértelmezetten a bcrypt-et –, ami időigényes, nem párhuzamosítható, CPU, GPU esetén nem elemi műveleteket használ. Ha valaki ezt próbálja nyers erővel a saját gépén törni, annak egy erőmű is kevés lesz. Ha a szerveren próbál valaki bruteforce-olni, akkor inkább feküdjön meg a szerver, minthogy sikerüljön neki. A próbálkozó is észre fogja venni, hogy ezzel a módszerrel nem nagyon fog menni semmire.

2016. júl. 11. 01:07
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!