reklama

Staňte se programátorem: Prolomení MD5

V druhém pokračování miniseriálu o šifrování dat se podíváme na hašovací funkce, jejich význam a použití a nakonec si budete moci vyzkoušet, jak dlouho trvá prolomení MD5 haše.

V minulém díle jsme si ukázali způsob, jak zakódovat text do nečitelné podoby nebo jej přímo zašifrovat symetrickým algoritmem, jakým je například známý TripleDES či RijnDael za pomoci hesla. V dnešním pokračování našeho miniseriálu o základech kryptografie se podíváme na hašování dat a ukážeme si algoritmus pro jeho prolomení. Kód v dnešním článku slouží pouze k ukázce toho, jak jednoduše by mohl útočný algoritmus vypadat, v praxi se totiž používají složitější mechanizmy a zapojují se výkonnější počítače nebo rovnou superpočítače, které testují sílu kryptografických metod a systémů.

Jak na hašování

Hašování slouží k jednosměrnému zakódování množiny bajtů. Výsledkem tohoto procesu je relativně malé hexadecimální číslo, které je pro tuto množinu bajtů unikátní a představuje její „otisk prstu“, což je základní podmínkou všech kvalitních hašovacích algoritmů. Jako uživatel tedy mohu mít jistotu, že po transformaci sekvence X dostanu výsledek Y a neexistuje žádná jiná sekvence bajtů, se kterou bych dostal stejný výsledek Y. Tento jev se nazývá kolizí a každá hašovací funkce se s tímto problémem potýká. Hašování se používá nejčastěji při archivaci hesel v databázi. Pokud útočník získá databázi obsahující zahašovaná hesla, získá tím pouze neúčelnou změť znaků. Naopak, pokud se vlastník hesla pokusí přihlásit, je zadané heslo zahašováno a následně porovnáno s heslem z databáze. Pokud jsou stejné, znamená to, že je zadané heslo správně.

Klepněte pro větší obrázek
Výpočet MD5 otisku slova bobik v našem programu

Dalším možným použitím hašování je ověření totožnosti dvou objemných bloků dat, kde neporovnáváme jednotlivé bloky, ale pouze jejich hašový kód. K hašování slouží řada algoritmů, my se podíváme na hašování pomocí toho nejznámějšího – MD5. V prostředí Microsoft .NET Frameworku k tomu slouží třída MD5 ze jmenného prostoru System.Security.Cryptography a takto vypadá její použití pro výpočet hašového kódu ze řetězce:

public string CalculateMD5Hash(string input)
{
  // Výpočet MD5 haše ze vstupu
  MD5 md5 = System.Security.Cryptography.MD5.Create();
  byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
  byte[] hash = md5.ComputeHash(inputBytes);
  // Převod pole bajtů na hexadecimální číslo
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < hash.Length; i++)
  {
    sb.Append(hash[i].ToString("X2"));
  }
  return sb.ToString();
}

Za jak dlouho prolomíte hash

Následují algoritmus slouží k rozlousknutí zahašovaného textu.

Klepněte pro větší obrázek
Známe MD5 hash a délku původního hesla (4 znaky)
Výsledek je odhalen během minuty

public string MD5CrackAlgorithm(string[] alphabet, string md5hash, int lenght)
{
  Random rand = new Random();
  string result = "";
  while (true)
  {
    for (int x = 0; x < lenght; x++)
    {
      result += alphabet[rand.Next(0, alphabet.Length )];
    }
    if (md5hash == CalculateMD5Hash(result))
      return result;
    result = "";
 }
}

Pro zjištění, jak dlouho trvala určitá operace slouží třída systém.Diagnostics.StopWatch:

Stopwatch sw = new Stopwatch();
sw.Start();
NějakáOperace();
sw.Stop();
MessageBox(“Operace trvala: “ + sw.Elapsed.ToString());

Jelikož je hašování jednosměrné, nemělo by jít rozlousknout jinak než takzvanou. “hrubou silou”, kdy se zkouší veškeré kombinace písmen o určité délce zahašovat a porovnat s originálem. Nento úkon je však velice pomalý, což je patrné i z následujícítabulkyčasů zaznamenaných na obyčejném počítači:

Počet znakůDoba prolomení
31 s
440 s
530 minut
6den
7měsíc
82 roky

Zde je vidět, že k prolomení haše obyčejného hesla o délce sedmi znaků by bylo zapotřebí 1 měsíc výpočetního výkonu na běžném počítači, což je dostatečná doba na to, aby odradila většinu možných útočníků.

Klepněte pro větší obrázek Klepněte pro větší obrázek
LACAL Lausanne PlayStation Lab: sen každého herního pařana

Do výpočtu se tak často zapojují superpočítače, na kterých se testuje například síla nejrůznějších šifrovacích metod, u kterých se používá hašování. O takovém pokusu jsme ostatně psali již na začátku letošního roku, kdy jistá mezinárodní skupina použila několik desítek do sítě zapojených PlayStationů, aby zkonstruovala alternativní obsah, který měl stejný MD5 hash – otisk prstů. Podařilo se jim tedy vypočítat kolizi, o které jsme psali v úvodu. Jelikož byl v tomto případě MD5 otisk součástí elektronického podpisu, respektive důvěryhodného SSL certifikátu, inženýrům se podařilo vyrobit alternativní a platný SSL certifikát, který ovšem daná autorita nikdy nevydala. Prolomení haše a jeho kolize je tak poměrně závažný bezpečnostní systém i s ohledem na skutečnost, že superpočítačový výkon je stále dostupnější především ve formě velmi výkonných cloud-computingových webových hostingů.

A to je vše. Nakonec si hašování a jeho prolomování můžete sami vyzkoušet, ke stažení totiž opět nabízíme zdrojové kódy včetně projektu pro Visual Studio 2008 (Express Edition) a spustitelný program.


Mareš, Amadeo: 1001 tipů a triků pro C#

Klepněte pro větší obrázekNestačí vám náš seriál? Pořiďte si knihu jeho autora, ve které vás seznámí s tisícovkou programovacích tipů a technik.Díky velkému počtu tipů, návodů, triků a rad kniha poslouží při každé příležitosti. Kdykoli si nevíte rady, stačí nalistovat příslušnou stranu a problém okamžitě vyřešit. Tipy a triky míří především na začínající programátory; užitečné rady tu ovšem najdou i pokročilejší vývojáři a ostřílení znalci. SOučástí publikace je i přiložené DVD, na kterém najdete bezplatné vývojové prostředí Visual C#, databázový server a především všechny zdrojové kódy z knihy, takže je budete moci okamžitě použít.Webové stránky knihy.

Témata článku: Programování, MD5, Random, Bobik, Lausanne, Rand, 1001

22 komentářů

Nejnovější komentáře

  • ricmat 5. 9. 2009 0:37:13
    Opet mi chybi vice rozvedena pointa, co to vlastne hashovani je (jak se...
  • herceg.tomas 31. 8. 2009 16:59:30
    Ono zpomalení .NETu je dost diskutabilní, zrovna v tomhle případě bude...
  • kozec 31. 8. 2009 14:32:06
    > nesmysly. zpomaleni diky .NET existuje, ale pokud to nekdo nechce mlatit...
reklama
Určitě si přečtěte

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

** Herní hardware se od toho běžného často liší jen vzhledem ** Při výběru stále nezapomínejte na základní parametry ** Poradíme jak vybrat herní hardware i periferie

20.  2.  2017 | Stanislav Janů | 35

10 nejhorších produktů v historii Microsoftu

10 nejhorších produktů v historii Microsoftu

20.  2.  2017 | Karel Javůrek | 131

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

** Každý bastlíř se po čase neobjede bez armády švábů ** Dnes si některé z nich vyzkoušíme ** Třeba zázračný posuvný registr

19.  2.  2017 | Jakub Čížek | 39

Facebook o nás ví vše. Díky dobře skrytému vyhledávači se to dozví i ostatní

Facebook o nás ví vše. Díky dobře skrytému vyhledávači se to dozví i ostatní

** Facebook o nás ví vše, protože mu to sami řekneme ** V jeho nitru se skrývá mocný vyhledávač ** Mohou jej zneužít stalkeři, sociální inženýři a další nezbedníci

16.  2.  2017 | Jakub Čížek | 76

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

** AMD uvedlo první tři procesory Ryzen 7 ** Všechny budou pracovat s osmi jádry a šestnácti vlákny ** Na pulty obchodů se dostanou už za týden

Včera | Stanislav Janů | 107


Aktuální číslo časopisu Computer

Stavba 3D tiskárny

Výbava domácí elektrodílničky

Budoucnost 5G sítí

Velké testy microSD karet a vodních chladičů

Přehled mobilních tarifů

reklama
reklama