Kérdés:
A ccrypt 'AES 256' fájl titkosítása alapvetően hibás
Chris Green
2015-10-08 12:54:24 UTC
view on stackexchange narkive permalink

Az unix / linux segédprogram ccrypt állítása szerint biztonságosabb helyettesítő a régi unix kriptának. Számomra azonban úgy tűnik, hogy alapvető hibája van.

Amikor egy fájlt a ccrypt segítségével titkosít, akkor az Ön által megadott jelszóval hozza létre az AES-hez használandó véletlenszerű 256 bites kulcsot. A jelszó újbóli visszafejtéséhez a ccrypt a jelszót használja az AES kulcs megszerzéséhez és a fájl visszafejtéséhez.

OK, a fájl biztonságosan van titkosítva 256 bites AES használatával, de biztonsága teljes mértékben attól függ, hogy a kulcs biztonságos - és a kulcs nem biztonságos.

Amikor a visszafejtés során a ccrypt megmondja, hogy a kulcs visszafejtéséhez használt jelszó helyes-e, és ha nem rossz kulcsot ad meg, akkor nem próbálja meg visszafejteni. Így triviális lenne a kulcsot durván erőltetni, amint az elmondja, amikor jól sejtette.

Ez a probléma minden olyan fájl titkosításra vonatkozik, amely ezt a megközelítést használja, ez a kulcs biztonsága, az algoritmus számít a tényleges adatok kódolásához szinte lényegtelen.

Ahol az üzenetek és ilyenek titkosításra kerülnek, hogy megvédjék őket, míg a tranzitkulcson alapuló titkosításnak van értelme, de az „álló” fájl titkosítás más. Még a GPG-fájlok titkosítása, ahol a kulcsot külön tárolják, nem sokat segít, általában nyilvánvaló, hogy a GPG-t használták, és a kulcsokat „jól ismert” helyeken tárolták. Ismét a kulcsbiztonság a lényeg, és a fájl titkosítása nem releváns.

OK, az egyik meg tudná külön választani a kulcsot USB-memóriakártyára vagy valami másra téve, de a legtöbb fájltitkosításhoz ez egy kicsit OTT, és egyébként a bot elvesztése az adatok elvesztését jelentené. A fájlok olyan dolgok, amelyeket általában hosszú távon meg kell őrizni, a kulcsoknak biztonsági másolatot kell készíteniük a fájlokról.

Arra gondolok, hogy az egyszerű, helyben történő fájl titkosításhoz a régi DES alapú kripták jobbak. A durva erőltetés sokkal nehezebb.

Teljesen rosszul értem ezt, vagy sem? :-)

http://crypto.stackexchange.com/questions/24163/ccrypt-and-its-security
Miért gondolja, hogy a 256 bites AES kulcs durva kikényszerítése könnyebb, mint a durva kényszerítése 56 bites DES-sel? 2 ^ 256 lehetséges kulcsot szinte lehetetlen durva erővel alkalmazni, ha kriptográfiailag biztonságos forrás generálja őket.
Mivel * NEM * nyersen kényszeríted a 256 bites AES kulcsot, nyersen kényszeríted a meglehetősen gyenge algoritmust, amelyet a 256 bites AES kulcs * létrehozásához használnak. Ez az egész, a 256 bites AES titkosítás erős, de a fájl dekódolásához nem kell feltörni.
Milyen blokk üzemmódot használ a ccrypt?CBC?(EDIT: úgy néz ki, mintha CFB módot használna)
Kettő válaszokat:
Thomas Pornin
2015-10-08 13:58:47 UTC
view on stackexchange narkive permalink

A jelszó alapú titkosítás eredendően kiszolgáltatott a szótár támadásainak. Valóban, ha megvan a titkosított fájl, akkor mindig megpróbálhatja visszafejteni (vagy annak egyes részeit) egy adott jelszóval, és megnézheti, van-e értelme az eredménynek. Így egy támadó, aki kezébe kerülhet a titkosított fájl (és feltételezzük, hogy ez lehetséges, mivel különben nincs értelme a titkosításnak), "megpróbálhatja a jelszavakat" a saját gépén, amíg egyezést nem találnak. Meg kell jegyezni, hogy a támadónak nincs szüksége 100% -osan megbízható tesztre az "értelme az eredménynek" részhez: ha a támadó tesztje elegendő a rossz jelszavak 99,9999% -ának elutasításához, akkor a jelszavak listáját mégis kétszer ellenőrizte egymilliószorosával.

Az, hogy egy olyan eszköz, mint a ccrypt tesztet nyújt a rossz jelszavak elutasítására, nem változtat ezen a tényen. Persze, a támadó ezután is használhatja a tesztet, de ez nem jelent neki különösebb előnyt. A támadó már kényelmesen dolgozhatna anélkül, hogy ezt a tesztet elvégezné, mert a valós adatok sok felépítésűek (a legtöbb fájlformátum nagyon jól felismerhető fejlécekkel rendelkezik), és ha a támadó érdekelt a jelszó feltörésében, akkor az adatoknak értékeseknek kell lenniük, tehát "valósaknak" -life ".

Két módszerrel erősítheti a jelszó alapú titkosítást; kumulatívak, és mindkettőt használniuk kell. Az első módszer egy erős jelszó használata, amely sok véletlenszerűséggel rendelkező jelszót jelent (a szokásos módon lásd a témáról folytatott megbeszéléseket ebben a kérdésben). A második módszer az, hogy a jelszót titkosítási kulcsgá alakítja át egy jó, megfelelően konfigurált jelszó-kivonatoló funkcióval; a "megfelelő konfiguráció" azt jelenti, hogy egy sót használnak a párhuzamos támadások megakadályozására (amikor több, külön jelszóval ellátott titkosított fájl van, és a támadó egy vagy többet meg akarna szakítani), és hogy a jelszó kivonási funkció megtörténik szándékosan drága sok iteráción keresztül, hogy megnehezítse a szótári támadásokat.

Az utóbbi ponton a ccrypt hibásnak tűnik. Hamisítja a jelszót azzal, amit a GYIK leír:

A Ccrypt AES-en alapuló (azaz a Rijndael blokk-rejtjelen) kivonatoló algoritmust használ. Nem tartozik a szokásos hash algoritmusok közé, mint például az SHA1. Így az alkalmazásodhoz rendben kell lenned. A biztonság szempontjából nem sokat számít, hogy melyik kivonatoló algoritmust használják, amennyiben ütközésmentes.

ami nem sok jót ígér. Először is, a szerző saját szavával, egy egyedi házi készítésű funkció, amely soha nem jó jel. Ezenkívül a szerző arról beszél, hogy a funkciónak "ütközésmentesnek" kell lennie, ami teljesen lényegtelen a jelszóalapú kulcsok levezetése szempontjából, és így jelzi az ilyen dolgok követelményeinek viszonylag rossz megértését; ez sem jó jel, főleg ha házi készítésű funkcióval kombináljuk.

A forráskódot nézve (ez az a kedves dolog az opensource-nál: magad is meggyőződhetsz arról, amit a szerző nem látott megfelelőnek a dokumentáláshoz) ), úgy tűnik, hogy az egyéni kivonat a következő módon működik: 0x00.

  • Minden jelszó karakterhez c (egyetlen bájt; itt ASCII-kompatibilis kódolást használunk, például UTF-8) tegye a következőket:
    • XOR a K minden bájtját a c.
    • Cserélje le a H t a H titkosításával a Rijndael használatával a K kulccsal és a blokk méretével 256 bit.
  • A H végső értéke a "hash jelszó ".
  • Ehhez a következő megjegyzések szükségesek:

    • A GYIK szerint" AES "van, de nem AES. Az AES egy három funkcióból álló család, amely a Rijndael néven ismert funkciócsalád részhalmaza. Az AES mindig 128 bites blokkokat használ; itt a Rijndaelt 256 bites blokkokkal használják, tehát nem AES stricto sensu .

    • Hash függvényként szívás. A folyamat lényegében egyetlen blokk ismételt titkosítását jelenti, minden egyes alkalommal 256 lehetséges kulcs felhasználásával (az egyes titkosítási kulcsok 32 bájtja mindig megegyezik egymással). Mivel ez szimmetrikus titkosítás, a szimmetrikus visszafejtés is működik, ami lehetővé teszi a találkozást a középen történő támadást. Alapvetően a kimeneti méret 256 bit, de a preimage ellenállás legfeljebb 2 128 , nem pedig 2 256 ; bár ez nem jelenti a jelszó-kivonás közvetlen problémáját, mégis megmutatja az egyéni sémák alapvető hibáját.

    • Jelszó-elosztó funkcióként büdös . Nem csak sótlan, de rendkívül gyors is. Az alap PC-vel rendelkező támadó az AES-NI utasítások alapján kiszámítja a Rijndael titkosítást néhány tucat óraciklus alatt (az AES-NI utasítások kifejezetten az AES-t támogatják, de ezek továbbra is felhasználható a 256 bites blokkok hatékony támogatásához; lásd ennek a cikknek a 2.1. szakaszát). Sőt, mivel a jelszó byte-ok egyenként vannak feldolgozva, a számítási költségek nagy része megosztható az egymást követő jelszó-próbák között: a "foo" hash jelszóból, a "fooA", "fooB", "fooC" hash-okból. .. kiszámítható egy-egy Rijndael-256 meghívással.

      Becslések szerint egy olcsó, polcos PC legalább 100 millió millió hash-ra képes em> potenciális jelszavak másodpercenként. Nagyon kevés, az ember által választott jelszó ellenáll egy ilyen támadásnak, legfeljebb pár percnél tovább. Ami a jelszó kivonását illeti, ez szörnyű.


    Összefoglaló: a ccrypt indokolatlanul gyenge a szótárak támadásai ellen, de nem azért, mert teszteli a jelszó helyességét. Gyenge, mert a jelszó-elosztási eljárás egy házi készítésű konstrukció, amely hibákat halmoz fel, ami rendkívül hatékonyabbá teszi a szótári támadásokat. Megfelelően konfigurált jelszó-kivonó funkcióval (pl. bcrypt) szó szerint milliószor erősebbé tehetné (az iterációs számot úgy állítanák be, hogy egy számítógép 100 helyett csak 100 jelszót hasíthasson el 100 helyett) millió; ez még mindig nagyon használatos lenne, mert a másodperc 1/100 része nem nagy késleltetés emberi értelemben).

    Köszönöm, sok mindent megerősítettél abban, amire gondoltam, sokkal mélyebb ismeretekkel, mint amilyen van. Ez egy általános hiba, amely szinte minden olyan fájlt titkosít, amely egy pillanat alatt megtalálható. Úgy tűnik, hogy ritkán törődnek sokat a jelszó-elosztó algoritmus biztonságával. Kérdeztem a parancssori parancsfájlokról egy másik szálban.
    Re: az első bekezdésed, a támadónak nem kell tudnia, hogyan titkosították a fájlt a könnyű támadás érdekében? Például. Ha egy fájlt közvetlenül titkosítanak (nincs köztes kulcs) valamilyen kivonatoló algoritmussal, akkor végül nem véletlenszerű adatoknak tűnik, és nincs nyom arra, hogy miként lehet feloldani?
    A támadó általában jól ismeri a _környezetet_. Végül is azért akarja feltörni a fájljait, mert érdekli őket a tartalmuk, ami azt jelenti, hogy ismer téged. Sőt, az eszközök mindenhol kiszivárogtatják létezésük nyomát (fájlkiterjesztések, fejlécek, használati szkriptek ...). Mindenképpen nem biztonságos azt feltételezni, hogy a támadó nem tudja pontosan, milyen eszközöket használ és hogyan működnek.
    Rendben, ezért kérdeztem (másutt itt) a titkosításhoz használt eszközök elrejtését. Köszönöm.
    @ThomasPornin Esetleg frissítheti válaszát, hogy figyelembe vegye a ccrypt szerző alábbi válaszát?
    Thomas - Töröltem Peter válaszának ezt a részét, de akkor is el tudja olvasni.
    A só használata azt jelenti, hogy a fájlok sérülése, amely befolyásolja a sótároló bájtokat, az egész fájlt helyrehozhatatlanná teszi.Sótlan kivonatolással a korrupció csak a sérült bájttal rendelkező blokkot érinti (64 bájt a ccrypt számára).Ha a titkosítás célja a hosszú távú archív tárolás, akkor a titkosítási algoritmus nagy pluszának tekinthetjük a sérült fájlból való részleges helyreállítás képességét.
    @IgorBukanov Ugyanez igaz gyakran a IV-re is (módtól függően), amely kötelező.
    Peter Selinger
    2018-03-03 08:08:35 UTC
    view on stackexchange narkive permalink

    Eredeti válasz, amely elmagyarázza, hogy a ccrypt nem használ sót, nem használ valódi AES-t és nem használ szabványos KDF-et: https://www.mathstat.dal.ca/~selinger/downloads/ccrypt- answer.txt


    A ccrypt szerzője vagyok. Sajnálom, hogy ilyen későn válaszoltam erre a témára, de csak a közelmúltban értesültem róla. Mint mindig, a titkosítással kapcsolatos kérdések is rám irányíthatók (és valószínűleg gyorsabb választ fognak kapni) a SourceForge-on található ccrypt fórumokon.

    Az eredeti kérdés megválaszolásához: hadd mondjam meg egyértelműen, hogy a titkosítás, minden más mellett jelszó alapú titkosító program, durva erőszakos támadásoknak van alávetve, beleértve a szótári támadásokat is. Ahogy ThomasPornin találóan megfogalmazta: "A jelszó alapú titkosítás eredendően sebezhető a szótári támadások számára". Semmi sem akadályozza meg a támadót abban, hogy minden lehetséges jelszót megadjon. Ez nem hiba, hanem az élet alapvető ténye, és amelyet a kriptográfia minden felhasználójának meg kell értenie. Ha gyenge jelszót használ, például "uszkár", akkor a támadó képes lesz kitalálni a jelszavát és visszafejteni az adatait. Ha olyan erős jelszót használ, mint a "hVztmdz28fNemDZnxj5YLjXz", akkor az adatai a belátható jövőben a jelenlegi ismeretek legjobbak szerint biztonságban maradnak. a válaszok és megjegyzések.

    Az eredeti bejegyzésben látszik, hogy félreértés van a whatccrypt helyettesítője kapcsán. Ez valószínűleg annak tudható be, hogy a dokumentáció ezen részét sokáig nem frissítettem. Amikor Iwrote (2001-ben), hogy a ccrypt a régi unixcrypt program helyettesítője, a crypt (1) programra utaltam, nem pedig a crypt (3) library funkcióra. A Crypt (1) egy jelszó alapú fájlkódoló program volt, amely legalább 1979 óta létezik a Unixban (a 7. verzióban volt: http://man.cat-v.org/unix_7th/1/crypt ), és jól ismert volt az 1980-as és 1990-es években. Egy közismerten weakalgorithmust használt az Enigma rejtjel alapján, amelyet már megtörtek Második világháború. Másrészt a crypt (3) egy olyan könyvtárfunkció, amely a jelszavakat az / etc / password formátumban használja. Tudomásom szerint a (3) kriptával nincs különösebben baj, és ma is használatos. A Ccrypt (1) a crypt (1) helyettesítője, nem a forcrypt (3). Nincs értelme megkérdezni, hogy a ccrypt "jobb", mint a crypt (3), mivel teljesen más dolgokat csinálnak. Valószínűleg frissítenie kell a dokumentáció ezen részét, tekintettel arra, hogy szerencsére senki sem emlékszik ma a crypt (1) programra.

    Az eredeti bejegyzés kérdést vet fel azzal kapcsolatban is, hogy a ccryptwill tájékoztatja a felhasználót, ha rossz jelszót írtak be , és hogy ez gyorsabbá teszi-e a szótár támadásokat. A válasz az, hogy ez nem teszi gyorsabbá a szótár támadásokat, kivéve talán egy kis állandó tényezőt. Thomas ezt már válaszában jól elmagyarázta, de csak a lényeg hangsúlyozása érdekében vegye fontolóra ezt: tegyük fel, hogy a titkosított fájl JPEG fájl. Minden JPEG fájl ugyanazon 3 bájttal kezdődik, nevezetesen ff d8 ff. Tehát már létezik egy nagyon egyszerű teszt a kulcs valószínű helyességének ellenőrzésére: csak dekódolja az első blokkot, és ellenőrizze, hogy a fájl ff d8 ff kezdetű-e. A legtöbb más fájlformátum is tartalmazza ezt a típusú ismert sima szöveget, például minden PDF fájl "% PDF" -vel kezdődik. Azt is könnyű ellenőrizni, hogy a fájl egyszerű szöveges fájl-e. Tehát az a tény, hogy a ccrypt biztosítja a jelszóillesztési funkciót, nem teszi könnyebbé a támadásokat, mint általában. Ami azt illeti, a ccrypt "megfelelő" kulcs ellenőrzése szintén nem 100% -os pontos. 1/4 milliárd esély van arra, hogy bármelyik véletlenszerű kulcs átmegy a teszten, még akkor is, ha ez nem a megfelelő kulcs. A funkció azért van, hogy megakadályozza az embereket abban, hogy véletlenül megfejtik a fájlokat egy rossz kulccsal (és ezzel felülírják a benne lévő összes adatot szeméttel).

    Összefoglaló: Mint minden jelszó alapú titkosító szoftver, a ccrypt szótár támadások tárgya. A felhasználóknak tisztában kell lenniük ezzel és választaniuk kell erős jelszavak. Viszont kontraproduktív lenne, ha a jelszavak bizonytalanságát csak kissé kevésbé bizonytalanná tennénk, ha a támadások költségeit állandó tényezővel növelnénk, amint az javasolt. Ehelyett az egyetlen helyes válasz arra, hogy először biztonságos jelszavakat használjon. A Thomas Pornin válaszában bemutatott további elemzések nagy része hibás, és a ccrypt tényleges gyengeségeit nem fedezték fel.

    Sajnálom, de a következtetései azt mutatják, hogy nem ismeri jól a rejtjelezést.A sók és az ilyen _dob_ javítja a biztonságot, csakúgy, mint egy erős hash algoritmus.Ha nem veszi fel őket, lehetővé teszi olyan előszámítási támadások (pl. Szivárvány asztali támadások) elvégzését, amelyek egyébként lehetetlenek lennének.Még az NSA sem számítási szempontból nem kötött ellenfél.Az egy dolog, hogy nem adunk hozzá sózást és nem használunk gyors KDF-et, mert nem tudunk jobbat._ Szándékosan_ az ön által elmondott okokból megtenni kissé ijesztő.
    "Ha a kivonatolási funkció kiszámítható ütközéseket tartalmaz, az mindig csökkenti a durva erő támadásainak költségeit, mert kevesebb kulcsot kell tesztelni." Ez helytelen, csakúgy, mint a következő példák.Az ütközéseknek kiszolgáltatott funkció két olyan üzenetet talál, amelyekben _f (m1) = f (m2) _, összehasonlítva az előképpel, ahol _m_ adott _ _ (f) = f (m ') _."Tehát nyilvánvaló ütközések történnének, mivel a" jelszó "és a" PaSSwOrD "ugyanazon belső kulcsra hash." ** Nem ez az ütközési támadás. **
    Végül, ahelyett, hogy csak kritikus lenne, íme néhány tanács: 1) Használjon szabványos titkosítást.Nincs ok arra, hogy a Rijndael-256-ot használja, mivel az AES a 128 bites blokkmérettel rendben van.2) ** Sózd meg az átkozott dolgot! ** Ez egyszerű, és csak összefűzheted a sót a kivonatolandó jelszóval.3) ** Használjon lassú KDF-et **, például bcrypt, scrypt vagy PBKDF2.Ha a kiszivárgott adatbázisokat nézzük, a sótlan hash-okat használók hatalmas százalékban repedeznek, míg a sózott bcryptet használók gyakran csak néhány tucat törött jelszót tartalmaznak.Thomas Pornin teljesen igaza van.Hivatásos kriptográfus.Hallgass rá.
    Félreérted Thomas Pornint.A preimage támadások _ a jelszó-hasítás szempontjából relevánsak.Ha van _f (m) = h_, és csak _h_ van, akkor az első előkép azt jelentené, hogy megtalálja _f (m ') = h_, ami teljesen megszakítja a jelszót.Amit mondott, az az, hogy a hash-sémájához bevezetett, a középen való találkozás által okozott 2 ^ 128 előtti ellenállás nem elég rossz ahhoz, hogy azonnal aggodalomra adjon okot, de az előkép a támadások osztályaként aggódik a hasításért.Úgy tűnik, félreérted, mi az a preimage.Továbbá a véletlenszerű IV-k nem védenek a szivárványos asztalok ellen ...
    Ha a titkosító eszköz nem biztonságos, hacsak a felhasználók nem választanak olyan jelszót, mint a "hVztmdz28fNemDZnxj5YLjXz", akkor nem kellett volna engednie, hogy a felhasználók kiválasszák a saját jelszavukat.A legtöbb felhasználó nem fogja megjegyezni és nem tudja megjegyezni a 256 bites jelszót, és a használók jelszókezelőt használnak, vagy valahova felírják a jelszót.Ebben a forgatókönyvben nincs értelme engedélyezni a felhasználóknak, hogy saját jelszavukat válasszák, kivéve, hogy a felhasználók saját lábukat lőhessék.Ha meg akarja engedni a felhasználóknak, hogy maguk választhassák meg a jelszavukat, akkor számolni kell a kulcs megerősítésének szükségességével, vagyis egy megfelelő, szándékosan lassú KDF használatával.
    Helló, Peter, a válaszposztod nem az a hely, ahol megvitatnál egy másik válaszposztot.Kérjük, tegye meg a [chat] alatt - most törlöm ezt a részt.
    Peter, a (most linkelt) válaszban kijelenti, hogy egyéni hash-t használ, mert `a ccrypt már létezett az AES szabványosított, és minden bizonnyal jóval azelőtt, hogy bármilyen hash függvény működne szabványosítva az AES használatával ".Eltekintve az AES / Rijndael megkülönböztetéstől, nem kell "szabványosítani" egy hash-t, amelyet titkosítással használhatunk.Az SHA-2 család (beleértve az SHA-256-ot is) csak 2001 januárjában jelent meg vázlatként, de a RIPEMD-256 ** 1996-ból származik **, a GOST-ot pedig 1994-ben visszaminősítették. Mindegyik 256 bites emésztést tartalmaz (még sok más van)ha más hosszúságot is elfogad) szimmetrikus titkosítási kulcsként használható.
    @forest Ahogy megértem, a jelszó kivonatának kimenetét soha nem tárolják sehol, így nincs értelme a szivárványtáblázatban keresgélni (és egyébként is értelmetlen lenne, hiszen ami a fontos, nem a jelszó, amely előállította)azt).Ez a különbség a * kulcsszármazási funkciók * (aminek állítólag lenniük kell) és a * jelszó-kivonatoló funkciók * (a hitelesítési rendszerek esetében, amelyek nem így vannak) között.A jelszó ellenőrzésére használt tipikus PHF csak az offline támadások megakadályozása érdekében tartja titokban a hasheket.Itt a hash a kulcs;a kapott jelszó értéke * csak * a KDF segítségével.
    @CBHacking Szivárványos táblázatot hozhat létre egy rejtjelhez [ha ismert sima szöveg] (https://crypto.stackexchange.com/q/18307/54184) (pl. A fejléc / varázsérték).Egyszerűen úgy kezeled, mintha maga a rejtjel egy kivonat lenne, vagyis _H (K) = E_K (C) _ a _H_ hash függvényhez, az _E_ blokkjelzéshez, a _K_ kulcshoz és a _C_ konstanshoz.Ezzel szivárványasztalt készíthet a _K_ számára.
    @forest Igen, de ebben az esetben a véletlenszerű IV * megvédi a szivárványos asztalokat, feltételezve, hogy távolról megfelelő hosszúságúak (akárcsak egy só).
    @CBHacking CBC módra talán.Elfelejtem, hogy a `ccrypt` milyen módot használ.


    Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
    Loading...