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, Alphabet, Prolomení, 1001, Trik, Lausanne, Bobik, Počet znaků, Rand, Stejný výsledek, Programátor, Random, Stejná metoda

Určitě si přečtěte

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

** Tesla představila elektrický kamion ** Má obdivuhodný výkon i dojezd ** Prodávat by se měl už za dva roky

17.  11.  2017 | Vojtěch Malý | 237

Black Friday 2017: Přehled slev na elektroniku a počítače

Black Friday 2017: Přehled slev na elektroniku a počítače

** Začala slevová mánie zvaná Black Friday ** Pozor, ne všechny slevy jsou opravdu výhodné ** Průběžně sledujeme slevové akce v počítačových e-shopech

Včera | David Polesný | 31

Google Mapy mají nový design. Líbí se vám víc než předchozí? Tady je srovnání

Google Mapy mají nový design. Líbí se vám víc než předchozí? Tady je srovnání

** Nový design Google Map přijde na počítače i mobilní telefony. ** Zaměřuje se na zvýraznění konkrétních míst, mapové podklady jsou mnohdy upozaděné. ** Lépe pracuje s chráněnými oblastmi a parky.

20.  11.  2017 | Vladislav Kluska | 30

Bluetoothové patálie: O bezdrátovém přenosu hudby a  problémech s kodeky

Bluetoothové patálie: O bezdrátovém přenosu hudby a problémech s kodeky

** Bezdrátový přenos hudby je budoucnost ** K dosažení nejlepší kvality je ale potřeba, aby telefon i sluchátka podporovala správný kodek ** Záleží také na typu souborů s hudbou

17.  11.  2017 | Jakub Michlovský | 39


Aktuální číslo časopisu Computer

Otestovali jsme 5 HDR 4K televizorů

Jak natáčet video zrcadlovkou

Vytvořte si chytrou domácnost

Radíme s koupí počítačového zdroje