© 2013 All rights reserved.
0

MHASH_CRC32

Tato funkce je většinou využívána ke kontrole integrity například při přenášení souborů. Je taktéž hojně využívána při komprimaci (CRC se spočítá před komprimací a musí být shodné s CRC po komprimaci).

Poslední jednosměrnou hashovací funkcí, na kterou se podrobněji podíváme, je funkce CRC-32 (Cyclic Redundancy Check). Tato funkce je většinou využívána ke kontrole integrity například při přenášení souborů. Je taktéž hojně využívána při komprimaci (CRC se spočítá před komprimací a musí být shodné s CRC po komprimaci). Pokud je CRC shodné, existuje velká pravděpodobnost že archiv nebyl porušen.

Účelně jsem použil slovo velká, ale ne stoprocentní, neboť u použití CRC-32 je teoretická pravděpodobnost rovna hodnotě 2 32 : 1 ( 4 294 967 296 : 1) že budou dva soubory (řetězce) stejné. V praxi je pravděpodobnost ale podstatně menší. Pravděpodobnost klesá s přibývající velikostí souboru, ale i přesto můžeme CRC považovat za slušnou kontrolu, neboť u náhodných chyb slouží dostatečně, neboť je stavěná hlavně pro porovnávání souborů a dat, musí být navržena tak, aby se projevila změna i při prohození 2 bitů a toto prohození se projevilo jako plně odlišný výsledek (otisk).

Základem výpočtu CRC je tabulka, 32bitových konstant, která tvoří základ pro výpočet. Obsah takové tabulky můžeme předvypočítat a umístit přímo do zdrojového kódu, nebo ji můžeme vypočítat až po startu programu – za běhu.

Oficiální funkce pro výpočet tabulky vypadá následovně:

CRC nejprve nastavíme na hodnotu 0xFFFFFFFF a potom v cyklu procházíme celý řetězec(buffer) bajt po bajtu. Nejnižších 8 bitů XORtujeme s vstupními daty. Tím získáme indexi pro tabulku. Potom rotujeme vždy 8 bitů vpravo a XORtujeme s konstantou z tabulky (podle indexu).

Nakonec k celému CRC vytvoříme inverzní CRC¨hodnotu.

V PHP by kód mohl vypadat následně:

Nejprve musíme umístit předvypočítanou tabulku přímo do zdrojového kódu:

a samotná funkce by vypadala následovně:

Pokud ale chcete vytvořit CRC otisk v PHP nemusíte naštěstí nic počítat, ale stačí vám použít standardní funkci obsaženou v knihovně mhash:

Výstup vypadá potom takto:

Shrnutí

Pokud bychom tedy shrnuly všechny tři popsané hashovací funkce a srovnali je ještě s docela rozšířenou funkcí HAVAL, dospěli bychom k následující tabulce:

Název kódování Vlastnosti
CRC-32 Nízká bezpečnost, rychlý
MD5 Všší bezpečnost
SHA Všší bezpečnost
HAVAL 128 bitový klíč, nejvyšší bezpečnost

Je nutné si uvědomit, že žádná hashovací funkce není stoprocentní a u každé této funkce existuje možnost prolomení jejího hashe. U většiny funkcí jsou k dispozici přímo vyvinuté softwares, u jiných je to otázka času.

Nic vám však nebrání použít libovolnou kombinaci těchto funkcí na váš vstupní řetězec. Pokud tedy chcete útočníkovy přidělat starostí není nic jednoduššího, než nakombinovat dvě funkce, nebo jednu funkci použít dvakrát po sobě:

Takovýto způsob je sice výhodný, ale je zase výpočetně mnohem náročnější, proto dobře rozmýšlejte, než se do něčeho takového pustíte.

Comments (0)

No comments yet, but you can be the first..

Add comment

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836