128 bitové náhodné číslo (inými slovami 128 bitov entropite) je dosť na to, aby sa nedali nikdy1 vyskúsať všetky možnosti.

To vychádza na 22 znakov v 64 znakovej abecede. Lebo 64 znakov je 6 bitov (2^6 = 64). 6 bitov * 22 znakov = 132 náhodných bitov (na porovnanie, 6 bitov * 21 znakov je iba 126 bitov).

Dôležitý predpoklad je, aby boli naozaj náhodné.

V PHP treba použiť funkciu openssl_random_pseudo_bytes. V Martinus PHP na to máme class \Martinus\Utils\Code\StringIdentifiersGenerator.

Príkladom 64 znakovej abecedy je base 64: a-z, A-Z, 0-9, +, /. Pre potreby URL sa viac hodí nahradiť znaky + a / za niečo iné. StringIdentifiersGenerator používa znaky - a _. V 16 znakovej abecede (hexadecimálne čísla) musí byť dĺžka strignu 32 znakov (16 = 2^4, 32 * 4 = 128).

Referencie:

  • https://security.stackexchange.com/questions/6141/amount-of-simple-operations-that-is-safely-out-of-reach-for-all-humanity/6149#6149
  • https://en.wikipedia.org/wiki/Password_strength

1 128 náhodných bitov je dosť preto, lebo iba samotná iterácia všetkých možností bude podľa odhadov v roku 2040 vyžadovať všetku energetickú produkciu Zeme a trvať 10 rokov.

2 Tip: je to dobré pravidlo aj pre náhodne generované heslá.