Zpět na seznam článků RSS

Správné měření síly hesla

Existuje spousta chybných pravidel, jak volit silná hesla. Také existuje spousta nepřesných nebo nesmyslných postupů, jak měřit jejich sílu. Mám za to, že jediný správný postup vychází ryze z klasic­ké informa­tiky, jednoduchým výpočtem informač­ní entropie.

Stručná teorie informace

Entropie je míra neurčitos­ti systému. Charakte­rizuje počet stavů, ve kterém se systém může nacházet. Pro úplné popsání stavu systému je tedy třeba množství informa­ce shodné s jeho entropií.

V infor­matice je to stejné. Jeden bajt může nabývat 28 = 256 sta­vů, jeho informač­ní entropie je tedy 8 bitů. A pro jeho úplné popsání je třeba pochopi­telně opět 8 bitů informa­ce.

Entropie jednoho prvku zprávy je rovna součtu entropií všech symbolů, které může obsahovat.

V přípa­dě, že je pravděpo­dobnost P výskytu všech symbolů s stejná (a to v našem případě je), je entropie zprávy o n prvcích a s symbo­lech rovna binárnímu logaritmu z počtu symbolů vynásobe­ným délkou zprávy.1

Výpočet entropie zprávy

Určení entropie hesla

Pokud jste přetrpěli předchozí kapitolu, tak víte, že pro výpočet entropie hesla je třeba znát jeho délku a počet symbolů, které může obsahovat.

Délka je asi jasná. Počet možných symbolů už možná méně. Určitou představu by nám ale mohly dát běžné rozsahy crackova­cích Rainbow tabulek­.2

Rozsah symbolů Počet symbolů s Entropie prvku H
0 – 9 10 3,3
a – z 26 4,7
a – z, 0 – 9 36 5,1
a – z, A – Z 52 5,7
a – z, A – Z, 0 – 9, mezera 63 6,0
a – z, A – Z, 0 – 9, mezera,
á, é, í, ó, ú, ý, č, ď, ě, ň, ř, š, ť, ž, ů
78 6,3
a – z, A – Z, 0 – 9, mezera,
á, é, í, ó, ú, ý, č, ď, ě, ň, ř, š, ť, ž, ů
Á, É, Í, Ó, Ú, Ý, Č, Ď, Ě, Ň, Ř, Š, Ť, Ž, Ů
93 6,5
a – z, A – Z, 0 – 9, mezera,
á, é, í, ó, ú, ý, č, ď, ě, ň, ř, š, ť, ž, ů
Á, É, Í, Ó, Ú, Ý, Č, Ď, Ě, Ň, Ř, Š, Ť, Ž, Ů
. , : ; – ? ! @ # & $ ^ _ *
107 6,7

Jak už možná vidíte sami, i kdybychom s heslem spáchali takové harakiri, jako v posled­ním řádku předchozí tabulky, dostaneme se s bídou na dvojnáso­bek entropie obyčejné­ho prachsp­rostého číselného hesla. Složitost tedy zdaleka nemá takový význam, jak by se na první pohled zd­álo.

Výpočet entropie hesla JavaScrip­tem

Pomocí jednoduché­ho regulár­ního výrazu můžeme snadno určit, do které skupiny heslo pat­ří.

function getPasswordEntropy(password) {

   var symbols = {
      10: '0-9', 26: 'a-z', 36: 'a-z0-9', 52: 'a-zA-Z', 63: 'a-zA-Z0-9 ',
      78: 'a-zA-Z0-9 áéíóúýčďěňřšťžů',
      93: 'a-zA-Z0-9 áéíóúýčďěňřšťžůÁÉÍÓÚÝČĎĚŇŘŠŤŽŮ',
      107: '^'
   };

   for (var s in symbols) {
      if (password.match(new RegExp('^[' + symbols[s] + ']+$')))
         return password.length * Math.log(s) / Math.LN2;
   }

   return 0;
}

Délka je důležitěj­ší než složitos­t — neserte své uživatele

Jistě to znáte: „heslo musí obsahovat velké písmeno, číslo a jméno ďáblovo v hebrej­štině.“ Spousta lidí považuje složitěj­ší heslo za bezpečněj­ší. Nic nemůže být dál od pravdy.3

Závislost entropie hesla na délce a počtu symbolů

Závislost entropie hesla na délce a počtu symbolů

Otázkou zůstává, jakou entropii považovat za dostateč­ně silnou. Šestnác­tiznako­vé heslo ve tvaru například jednadve­honzajde má entropii cca 75 bitů. Hrubou silou to znamená 275 = 3 × 1022 pokusů. Prostoro­vá náročnost pro případnou Rainbow tabulku tohoto rozsahu by byla 350 000 e­xabajtů.

Běžné CPU je v tomto případě zcela mimo hru. Ovšem pomenší těžařská Bitcoino­vá sestava zvládne pomocí trojice grafických karet spočítat 4 miliar­dy hashů za sekundu. Naše heslo by zlomila za slabých 300 000 l­et.4

60 bitové heslo (to jest třeba jednadve­honza) by už ale zvládla za necelých 9 let, 50 bitové (jednad­vetri) už za tři dny. A na první pohled zdánlivě bezpečné heslo w.X;89? (47 bitů) by podlehlo za 9 hodin.

70 bitů bych osobně považoval za hranici „dobrého“ hesla. Uvidíme za pár let.

Reference

  1. FELK ČVUT: Informace a entropie (PDF) — labe.fel­k.cvut.cz
  2. Rainbow­Crack Project — www.project-rainbowcrack.com
  3. xkcd: Password Strength — xkcd.com
  4. ircmaxe­ll's blog: The Rainbow Table Is Dead — blog.ir­cmaxell­.com

Pokud není uvedeno jinak, podléhá obsah licenci CC BY-NC-ND a ukázkové zdrojové kódy CC BY.
Martin Hozík — , poslední úprava .