Generátor náhodných hesel
Author
Albert FloresHrací kostky jako jednoduchý hardwarový generátor náhodných čísel (používá např. metoda diceware). Generátor náhodných hesel je počítačový program, nebo hardwarové zařízení, které má vstup z náhodných nebo pseudo-náhodných čísel, ze kterých generátor vytvoří heslo. Náhodná hesla mohou být generována manuálně, pomocí jednoduchých zdrojů náhodnosti (mince, kostky), nebo mohou být generována pomocí počítače. Přikladem reálného využití hracích kostek jako hardwarového generátoru je diceware, což je metoda pro vytváření kvalitních heslových frází (varianta hesel).
Na internetu je spousta míst, kde lze získat „náhodné“ heslo, ale protože je generování náhodnosti složité, tak tyto programy nemusí produkovat skutečně náhodný výstup. Navíc není důležité generovat perfektně náhodná hesla, nýbrž hesla která lze jen těžko uhodnout (mnoho hesel z generátoru náhodných písmen bude snadno uhodnutelných). +more V kryptografii je nutné používat pečlivě navržené algoritmy, tzv. CSPRNGS: cryptographically secure pseudorandom number generators (kryptograficky bezpečné (pseudo)náhodné generátory čísel).
Nativní přístup
Zde jsou dvě ukázky za využití standardních programových knihoven:
C
#include #include #include
int main(void) { /* Length of the password */ unsigned short int length = 8;
/* Seed number for rand */ srand((unsigned int) time(0) + getpid);
/* ASCII characters 33 to 126 */ while(length--) { putchar(rand % 94 + 33); srand(rand); }
printf("\n");
return EXIT_SUCCESS; }
V tomto případě je využita standardní C funkce rand, což je generátor pseudo-náhodných čísel.
PHP
function pass_gen($length = 8) { $pass = array; for ($i = 0; $i
Silnější metody
Existují různé metody pro generování silných šifrovaných bezpečnostních náhodnější hesel. Na Unix platformách /dev/random a /dev/urandom jsou běžně používané a to buď programově nebo s nějakým spojením s programem jako je makepasswd. +more Programátoři ve WINDOWS mohou použít z knihovny Microsoft CryptoAPI funkci CryptGenRandom. Programovací jazyk Java obsahuje třídu s názvem SecureRandom. Další možností je odvodit náhodnost měřením nějakého vnějšího jevu jako je načasování vstupu uživatelské klávesnice. Mnoho počítačových systémů již má vytvořenou aplikaci (standardní název APG) k provádění FIPS 181. FIPS 181 - automatický generátor hesel. Popisuje změnu náhodných bitů do nějakým způsobem vyslovitelných „slov“ vhodná pro hesla.
Bash
Zde je ukázkový kód, který používá /dev/urandom generování hesla s jednoduchou Bash funkcí. Funkce má délku hesla jako parametr nebo využije délku 16 znaků jako výchozí.
function mkpw { tr -dc '[:graph:]'
Není vhodné pro dlouhé kryptografé klíče, nebo tam kde je vyžadována vysoká úroveň bezpečnosti.
Java
Zde je ukázkový kód který využívá SecureRandom a generuje 10místné hexadecimální číslo.
String[] symbols = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; int length = 10; Random random = SecureRandom.getInstanceStrong; // as of JDK 8, this should return the strongest algorithm available to the JVM StringBuilder sb = new StringBuilder(length); for (int i = 0; i
Python
Jazyk Python obsahuje třídu SystemRandom, která získává náhodné bity na Unixových systémech z /dev/urandom (Linux a Mac OS X) a v systému Windows je použit CryptGenRandom. Následující jednoduchý příklad ukazuje použití této třídy:
#. /usr/bin/python2 import random, string myrg = random. +moreSystemRandom length = 10 # Chcete-li non-anglicke znaky, vyjmete [0:52] alphabet = string. letters[0:52] + string. digits pw = str. join(myrg. choice(alphabet) for _ in range(length)) print pw.
Perl
Tento příklad využívá Crypt::Random::Source modul k nalezení silných náhodných čísel.
use Crypt::Random::Source qw(get_strong);
while(length($out)