A kivonatsorok „ALGORITMUS kivonat” alakúak, így kiadási megjegyzésekbe vagy letöltési jegyzékekbe másolhatók.
Kivonatgenerátor — minden algoritmus nulláról elmagyarázva
Egy mondatban: a kriptográfiai kivonatfüggvény egyirányú turmixgép — tetszőleges számú bájtot vesz, és rögzített hosszúságú ujjlenyomattá préseli úgy, hogy ugyanaz a bemenet mindig ugyanazt az ujjlenyomatot adja, az ujjlenyomat pedig nem mond semmit arról, hogyan lehetne a bemenetet visszaépíteni. Ez az oldal tizenegyet futtat közülük teljes egészében a böngészőlapon belül.
Minden alábbi algoritmus ugyanazt a négy lépést követi: mit jelent egyszerű szavakkal, a működésének intuitív képe képletek nélkül, hogy ma is érdemes-e használni, és a leggyakoribb tévedések vele kapcsolatban.
MD5
Mi ez? Az MD5 (1992) bármilyen bemenetet 128 bites (32 hex-karakteres) ujjlenyomattá tömörít. Az 1990-es évek számítógépeire gyorsnak tervezték, és az is — éppen ezért van még mindenütt: szoftverletöltő oldalakon, fájl-deduplikációs gyorsítótárakban, örökölt adatbázis-kulcsokban.
Intuitív működés. A bemenetet 64 bájtos darabokra vágják. Minden darabot négyszer keverni egy 128 bites gördülő állapotba (négy, kissé eltérő keverő körben), és az utolsó darab után az állapotot kiírják kivonatként. A keverés összeadásokból, forgatásokból és táblázat-keresésekből áll — akkor is olcsó volt, most is az.
Érdemes használni? Olyan ellenőrző összegekre, ahol senki nem akar csalni — sérült letöltés kimutatására, duplikált fájlok keresésére — igen, a sérülést még mindig tökéletesen jelzi. Bármi ellenséges környezetben nem: 2004 óta a kutatók másodpercek alatt készíthetnek két különböző fájlt azonos MD5-tel, és a 2008-ban MD5-ütközéssel készült valódi tanúsítvány-hamisítások is megtörténtek. Sorszámként kezelendő, nem zárként.
Gyakori tévedések. Jelszavakhoz MD5-öt használni (túl gyors — a Jelszókivonat-generátorban látható, mi való oda helyette); egy fájlt megbízhatónak tekinteni csak azért, mert „az MD5 egyezik”, miközben a támadó az MD5-öt is közzétette; és az egész MD5 (file) = hash sor beillesztése a puszta kivonat helyett — a fenti Ellenőrzés mező mindkettőt elfogadja.
SHA-1
Mi ez? A SHA-1 (1995, NSA) 160 bites (40 hex-karakteres) kivonatot állít elő. Húsz évig a Git, a TLS-tanúsítványok és a PGP-aláírások alapértelmezett integritási kivonata volt.
Intuitív működés. Ugyanaz a családi recept, mint az MD5-nél, de 160 bites állapottal, 64 bájtos darabonként 80 keverőkörrel, és szélesebb műveletkészlettel. A plusz körök célja az volt, hogy a keverőt nehezebb legyen visszafejteni.
Érdemes használni? Ellenséges környezetben nem. Az elméleti törés 2017-ben vált gyakorlativá, amikor a Google két különböző PDF-et állított elő azonos SHA-1 értékkel (a SHAttered támadás, körülbelül 6500 CPU-év). A Git még mindig SHA-1 alatt tárolja az objektumokat, de csak azonosítóként kezeli, és azóta ütközésészlelést is hozzáadott. Új munkához a SHA-256 vagy a SHA-3 való.
Gyakori tévedések. Az a hit, hogy a 160 bit „még mindig elég hosszú” — a törés a belső szerkezetről szól, nem a brute force-ról; és a RIPEMD-160 összekeverése a SHA-1-gyel, mert mindkettő 40 hex-karakter (a fenti azonosító doboz megkülönbözteti őket).
SHA-2: SHA-256, SHA-384 és SHA-512
Mi ez? A SHA-2 család (2001, NSA) a modern integritás-ellenőrzés munkalova. A SHA-256 256 bitet (64 hex-karaktert), a SHA-512 512 bitet ad, a SHA-384 pedig a SHA-512, amelynek eredményét 384 bitre vágják — hasznos, ha egy protokoll rövidebb címkét ír elő.
Intuitív működés. A 64 bájtos (az 512 bites változatoknál 128 bájtos) darabok 64 (vagy 80) add-forgat-keverő lépésből álló körön keresztül egy 8 szavas állapotba kerülnek. Az MD5-tel ellentétben az ütemezés először minden darabot egy bővített pufferbe nyújt ki, és ez tette tönkre az MD5-öt és a SHA-1-et törő támadási stílust. Érdekesség: 64 bites processzorokon a SHA-512 gyorsabb, mint a SHA-256, mert körönként kétszer annyi adatot dolgoz fel 64 bites aritmetikával.
Érdemes használni? Igen — a SHA-256 ma az alapértelmezett válasz fájl-ellenőrző összegekre, kódaláírásra és tanúsítvány-ujjlenyomatokra, két évtizedes elemzés után ismert gyakorlati törés nélkül. A SHA-384/512 akkor jó, ha több tartalékot szeretnénk, vagy ha a platform gyorsabban futtatja őket.
Gyakori tévedések. Jelszavakhoz pusztán SHA-256-ot használni — ez egy gyors kivonat, és ott a sebesség az ellenség (bcrypt/scrypt/Argon2id való); és összekeverni a kivonat hosszát az ütközésállóság erősségével — a hossz csak a plafont adja meg.
SHA-3 (SHA3-256 / SHA3-512) és Keccak-256
Mi ez? A SHA-3 (2015, a Bertoni, Daemen, Peeters és Van Assche által beadott Keccakból szabványosítva) a harmadik NIST-kivonatszabvány. A SHA-2 belsejével semmi közös nincs benne — pontosan azért választották, hogy független tartalék legyen, ha a SHA-2 valaha megbukna.
Intuitív működés. A Keccak a darabok kis állapoton való átkeverése helyett ismételten „beszív és kipréseli”: a bemenet bitenként beszívódik egy 5×5×64 bites szivacsba, a teljes szivacsot rögzített permutáció keveri (24 kör bitenkénti műveletek az egész állapoton), majd a kivonat bitjei kipréselődnek. A szivacs-kép az egész ötlet: a kapacitásbitek sosem kerülnek ki, és ezek teszik a függvényt egyirányúvá.
Keccak-256 vs. SHA3-256. Pontosan egy kitöltő bájtban különböznek. A Keccak-csapat eredeti beadványa az utolsó blokkot 0x01-gyel töltötte ki; a NIST a szabványos kitöltést 0x06-ra változtatta (a SHA-2 korabeli Keccak tartományelválasztásához). Az Ethereum az eredeti kitöltést vette át, így az Ethereum „keccak256” minden bemenetre eltér a szabványos SHA3-256-tól. Ez az oldal mindkettőt kínálja, külön-külön jelölhetően.
Érdemes használni? Igen — akár elsődleges választásként, ha a szabályzat nem SHA-2 algoritmust kér, akár ott, ahol az ökoszisztéma már ezt beszéli. Gyakori tévedések: azt feltételezni, hogy a SHA3-256 és a Keccak-256 felcserélhető (nem azok — az oldal két sorának összevetése ugyanarra a bemenetre javasolt); és azt hinni, hogy a „SHA-3” felváltja a SHA-2-t — mindkettő biztonságos, a SHA-2 azonban szélesebben elterjedt.
RIPEMD-160
Mi ez? A RIPEMD-160 (1996, az európai akadémikusok RIPE konzorciuma, Dobbertin, Bosselaers és Preneel megerősítésével) 160 bitet ad. Teljesen európai tervezés, szándékosan független az NSA által tervezett SHA-családtól.
Intuitív működés. Minden 64 bájtos darabot két párhuzamos, egyenként 80 körből álló ág dolgoz fel, eltérő konstansokkal és forgatási mennyiségekkel; a végén a két ágat és a régi állapotot egyesítik. A kétsávos szerkezet volt a tervezők válasza az 1990-es évek más kivonatait törő differenciális támadások ellen.
Érdemes használni? A gyakorlatban főleg más rendszereken belül él tovább: a Bitcoin-címek a nyilvános kulcsaikat RIPEMD-160(SHA-256(pk)) alakban kivonatolják, a régebbi OpenPGP-kulcsok hash-opcióként kínálják, és a BitTorrent v1 darabjainak hagyományos kivonata a SHA-1 mellett. Gyakorlati ütközési támadása nincs, de a 160 bites méret adja a legkisebb biztonsági tartalékot ezen az oldalon. Önálló új használatra a SHA-256 vagy a SHA-3 való.
Gyakori tévedések. Az a hit, hogy a két párhuzamos ág „kétszer olyan erőssé” teszi — a kimenet mérete korlátozza az ütközésállóságot; és összekeverni a SHA-1-gyel (ugyanaz a 40 hex-karakteres hossz; a fenti azonosító doboz egymás mellett sorolja fel a két lehetőséget).
BLAKE2b-512 és BLAKE2s-256
Mi ez? A BLAKE2 (2013, Aumasson, Neves, Wilcox-O’Hearn és Winnerlein) szoftveres sebességre tervezett kivonat: a BLAKE2b 64 bites platformokra készült, legfeljebb 512 bites kimenettel, a BLAKE2s 32 bites platformokra, legfeljebb 256 bites kimenettel.
Intuitív működés. A BLAKE a SHA-3 döntőse, amelynek magja egy kulcsolt permutáció, a ChaCha folyamtitkosítótól kölcsönözve: egy 4×4-es szómátrixot váltakozó oszlop- és átlós keverő lépésekkel kevernek össze — mint amikor a rácsot először fentről lefelé, majd az átlók mentén keverik meg — chunkonként 12 (BLAKE2b) vagy 10 (BLAKE2s) körben. Mivel ezek a lépések szépen leképezhetők a processzorutasításokra, a BLAKE2 gyakran gyorsabb az MD5-nél, miközben a SHA-3-éhoz hasonló biztonságot nyújt.
Érdemes használni? Igen — teljesen modern, meg nem tört tervezés, népszerű a teljesítménykritikus szoftverekben (csomag-integritás egyes ökoszisztémákban, tartalomcímzett tárolás, mentési deduplikáció), és gyors MAC-ként is. Ezen az oldalon a BLAKE2b-512 adja a leghosszabb kivonatot, a BLAKE2s-256 pedig a tömör modern választás.
Gyakori tévedések. Az a gondolat, hogy a „gyorsabb egyben gyengébb is”: a BLAKE2 tervezéssel gyorsabb, nem sarokvágással; és az, hogy nem tudják, a BLAKE2 kulcsot is elfogad (így MAC lesz) vagy személyre szabó sztringet — ez az oldal mindig kulcs nélküli módban használja.
Az Ellenőrzés és az Azonosítás mezők olvasása
Ellenőrzés. Az ellenőrző mező bármit normalizál, amit beillesztenek — nagy- vagy kisbetűk, kettőspont minden két számjegy után, sha256= előtag, a BSD-stílusú SHA256 (file) = hash burkoló, a GNU md5sum sor a kivonat után álló fájlnévvel, eltévedt \r\n — majd minden bejelölt algoritmust újraszámol az aktuális bemeneten (szöveg vagy a kiválasztott fájl), és jelenti, melyik algoritmus egyezik. A zöld egyezés azt jelenti, hogy „ezek a bájtok pontosan azok, amelyeket a kiadó kivonatolt”; a piros azt, hogy a bejelölt algoritmusok egyike sem adta — további algoritmusok bejelölése, vagy a beillesztés csonkolódásának ellenőrzése javasolt.
Azonosítás. Az azonosító mező semmit nem kivonatol; a sztring alakját olvassa. A hossz szűkíti a jelölteket: 32 hex-karakter lehet MD5, 40 lehet SHA-1 vagy RIPEMD-160, 64 lehet SHA-256 / SHA3-256 / Keccak-256 / BLAKE2s-256, 96 SHA-384, 128 SHA-512 / SHA3-512 / BLAKE2b-512. Az előtagok jelszókivonatokat árulnak el ($2a$/$2b$/$2y$ bcrypt, $argon2id$, $scrypt$, $6$ sha512crypt, $1$ MD5-crypt) — ezek másfajta állatok (részletek: a Jelszókivonat-generátort), és ez az oldal szándékosan nem számolja őket. A +, / és = karaktereket tartalmazó, 4-gyel osztható hosszúságú sztring inkább Base64-kódolt adat, mint hex-kivonat; az eszköz dekódolja, és kiírja a megfelelő bájthosszt.
Mit mondhat és mit nem mondhat az azonosítás. A hossz és a karakterkészlet a formátum ujjlenyomata, nem az algoritmus bizonyítéka: két 64 hex-karakteres sztring származhat SHA-256-ból vagy csonkított SHA-512-ből. Az azonosító a lehetőségeket rangsorolja; az Ellenőrzés mező az, amely bizonyítja, melyik algoritmusra egyezik a bájtjaink.
Mind a tizenegy egy pillantásra
| Algoritmus |
Emésztés |
Kitalált |
A „The quick brown fox jumps over the lazy dog” szöveg kivonata |
| MD5 | 128 bit | 1992 | 9e107d9d372bb6826bd81d3542a419d6 |
| SHA-1 | 160 bit | 1995 | 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 |
| SHA-256 | 256 bit | 2001 | d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 |
| SHA-384 | 384 bit | 2001 | ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1 |
| SHA-512 | 512 bit | 2001 | 07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6 |
| SHA3-256 | 256 bit | 2015 | 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 |
| SHA3-512 | 512 bit | 2015 | 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 |
| Keccak-256 | 256 bit | 2015 előtt | 4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15 |
| RIPEMD-160 | 160 bit | 1996 | 37f332f68db77bd9d7edd4969571ad671cf9dd3b |
| BLAKE2b-512 | 512 bit | 2013 | a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918 |
| BLAKE2s-256 | 256 bit | 2013 | 606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812 |
A fenti táblázat minden kivonata ugyanezen oldal motorjaival készül: az összes algoritmus bejelölése, a Minta gomb használata és az összehasonlítás elvégezhető. A SHA-3, Keccak, RIPEMD-160 és BLAKE2 sorok az oldal-rendszer crypto-shared.js magjából származnak, amelyet ennek a webhelynek a kriptográfiai eszközei használnak.
GYIK
Melyik mezőben higgyünk letöltésnél? Az Ellenőrzés mezőben, a SHA-256 bejelölésével — a legtöbb kiadó ma SHA-256-ot vagy SHA-512-t ír alá. Az Azonosítás mező csak jelölteket nevez meg; a fájlról soha nem bizonyít semmit.
Miért szerepel egyáltalán a Keccak-256 a listában? Mert az Ethereum, a Swarm és néhány főkönyvi rendszer a szabvány előtti kitöltést szabványosította. Ha Ethereum-keccak256-ot ellenőrzünk, ezt a sort kell használni, nem a SHA3-256-ot.
Osztozhat két különböző bemenet ugyanazon a kivonaton? Elméletben igen — végtelen sok bemenet képződik le véges számú kivonatra (dobozelv). A gyakorlatban egy ilyen pár megtalálása a világegyetem hőhalála előtt az, amiről az „ütközésállóság” szól, és a fenti algoritmusok közül az MD5 és a SHA-1 kivételével mindegyik áll még.
A kivonat titkosítás? Nem. A titkosítás kulccsal visszafordítható; a kivonat egy egyirányú turmixgép. Az oldalon semmi nem „visszafejthető” a szövegbe — és ez funkció, nem korlát.