Nástroj na generování a ověřování hesel

Profesionální nástroj na generování a ověřování hesel, který vytváří silná hesla a snadno zapamatovatelná hesla s podporou hromadného generování, zárukou jedinečnosti, hodnocením síly a ověřováním podle pravidel. Vlastnosti zahrnují kryptograficky bezpečné zdroje náhodných hodnot, konfigurovatelné znakové sady, filtrování podobných znaků, statistiky duplicit v dávce a funkci kopírování jedním klikem. Obsahuje vícejazyčné příklady kódu, databázi informací o heslech, osvědčené postupy v oblasti bezpečnosti a nástroje pro testování pravidel. Všechny operace probíhají lokálně ve vašem prohlížeči, což zajišťuje soukromí a bezpečnost.

Generátor hesel

Vybrat skupiny symbolů
Tip: Znaky vyloučíte výběrem skupin nebo přímým kliknutím na jednotlivé znaky.
Výsledek

Testovací nástroj pro hesla

Výsledky
  • Délka
  • Malá písmena
  • Velká písmena
  • Číslice
  • Symboly
  • Sekvenční
  • Opakování
  • Blokovaný seznam
Všechny kontroly jsou prováděny lokálně ve vašem prohlížeči.

Generátor přístupové fráze

Slova jsou vybírána rovnoměrně pomocí kryptograficky bezpečné náhodnosti (Web Crypto) ze 1271slovového jednoznačného seznamu; 6 slov poskytuje přibližně 62 bitů entropie — pro větší sílu použijte 8 slov.

Šablona pro hashování hesel

Argon2id
  • Používejte Argon2id s rozumnými paměťově náročnými parametry
  • Čas ≥ 2 průchody, paměť ≥ 64MB (ladte podle prostředí)
  • Ukládejte jedinečnou sůl pro každého uživatele; volitelně použijte pepper na aplikační vrstvě
PBKDF2
  • Vyberte SHA-256 nebo SHA-512 s iteracemi ≥ 210 tisíc (ladte podle potřeby)
  • Používejte jedinečnou sůl pro každý hash; podporujte upgrade parametrů
  • Migrujte na parametry s vyšší náročností při příštím přihlášení uživatele
BCrypt
  • Nastavte cenu (cost) mezi 10–14, podle schopností serveru
  • Vyhněte se problémům s ořezáváním; hašujte celé heslo
  • Implementujte omezení četnosti a monitorování na autentizačních koncových bodech
Zdroj: NIST SP 800-63B, OWASP ASVS. Parametry musí odpovídat hardwarovým schopnostem a SLO.

Evaluátor síly hesla

Síla je aproximována pomocí entropie: entropie = log2(velikost znakové sady) × délka. Větší znaková sada a delší délka zvyšují odolnost proti uhádnutí.

  • Slabé: < 50 bitů —— Vhodné pouze pro jednorázové nebo nízkohodnotové scénáře
  • Střední: 50–80 bitů —— Přijatelné pro scénáře s nízkým rizikem
  • Silné: 80–110 bitů —— Doporučený výchozí cíl
  • Výborné: > 110 bitů —— Doporučené pro administrátorské nebo kritické účty

Poznámka: Reálné útočné modely se mohou lišit; vyhněte se opakovanému používání hesel a zapněte dvoufaktorové ověření (MFA).

Jak používat

  • Vyberte délku a znakovou sadu (malá/velká písmena/čísla/symboly); volitelně povolte možnost Zamezit podobným znakům a Požadovat každý typ
  • Pro jemnější kontrolu: vylučte konkrétní znaky nebo skupiny znaků, nebo zvolte podmnožiny symbolů
  • Zvolte, kolik hesel chcete vygenerovat, a klepněte na generovat; výsledky dávky jsou automaticky odstraněny duplicity a lze je zkopírovat najednou
  • Pro ověření existujících hesel použijte nástroj pro testování pravidel; pro snadno zapamatovatelná hesla použijte generátor hesel

Vlastnosti

  • Kryptograficky bezpečné zdroje náhodných hodnot (Web Crypto)
  • Konfigurovatelné znakové sady a skupiny symbolů
  • Filtrování podobných znaků a vlastní vyloučení
  • Dávkové generování 1–100 hesel, vždy jedinečných
  • Metriky síly a entropie
  • Nástroj pro testování pravidel a generátor hesel
  • Vícejazyčné příklady kódu
  • Kopírování jedním klikem (jedno nebo vše)

Příklady generování hesel

Silné
Délka 24, zahrnuje velká a malá písmena, číslice a symboly
Snadno zapamatovatelné
Délka 16, zahrnuje velká a malá písmena a číslice; vyhýbá se podobným znakům

Databáze informací o heslech

1) Síla hesel a entropie
  • Entropie ≈ log2(velikost znakové sady) × délka; délka obvykle přispívá více
  • Doporučené cíle: Obecné účty ≥ 80 bitů; Účty s vysokými oprávněními/finanční účty ≥ 110 bitů
  • Větší znaková sada + delší délka → větší odolnost proti luštění
2) Délka vs. komplexita
  • Slepé přidávání symbolů je méně účinné než zvyšování délky
  • Zabraňte předvídatelným vzorcům (např. vždy 'velké počáteční písmeno + koncové číslo!')
  • Upřednostňujte dostatečnou délku, poté mírně zvyšujte rozmanitost znaků
3) Časté chyby a nežádoucí vzorce
  • Klávesnicové sekvence (např. qwerty), opakované bloky, narozeniny/roky jsou snadno cílem pravidel
  • Použití 'kořenové heslo + přípona webu' vytváří varianty s opakovaným použitím, soustřeďuje riziko a usnadňuje luštění hesel
  • Nikdy nepoužívejte stejné heslo na více webech
4) Doporučení pro správu hesel
  • Používejte správce hesel; zajistěte jedinečná hesla pro každý web; povolte MFA pro kritické účty
  • Zabraňte přenosu hesel v nešifrované podobě přes veřejné kanály; v případě potřeby používejte 'vyslovitelná' hesla
  • Okamžitě změňte a zjedinečněte hesla, pokud zjistíte únik nebo opakované použití
5) Pokyny pro hesla
  • Kombinace 4–6 náhodných slov jsou obvykle silná a snadno zapamatovatelná
  • Prostředky oddělovačů, velká počáteční písmena a vložte čísla pro zvýšení síly a čitelnosti
  • Vyhněte se přímému spojování běžných frází, textů písní nebo slavných citací

Osvědčené postupy v oblasti bezpečnosti hesel

Osvědčené postupy
  • Používejte dostatečnou délku: 16+ znaků pro běžné účty, 24+ pro kritické
  • Pro snadnou zapamatování upřednostněte passphrases; používejte správce hesel pro ukládání náhodných vysoce bezpečných hesel
  • Povolte vícefaktorové ověřování (MFA), jakmile je to možné
  • Nikdy nepoužívejte hesla znovu napříč weby – každý účet by měl mít jedinečné heslo
Entropie a síla

Entropie měří nepředvídatelnost na základě délky a velikosti znakové sady – čím více bitů entropie, tím silnější je heslo obvykle.

  • Upřednostněte zvyšování délky pro maximální nárůst síly
  • Pokud je to možné, používejte více znakových sad
  • Přílišné vyřazování znaků snižuje počet dostupných znaků a oslabuje sílu
Zásady a střídání hesel
  • Upřednostňujte požadavky na délku a černé listiny běžných/protékajících hesel před pravidly pro složitost
  • Vyhněte se častému povinnému střídání; měňte heslo pouze při zjištění narušení nebo rizika
  • Používejte seznamy kompromitovaných hesel pro blokování běžně používaných nebo uniklých hesel
Passphrases
  • Používejte 4–6 náhodných slov spojených oddělovači, např. jezero-MRKEV-planeta_7
  • Vyhněte se slavným citacím, textům písní nebo jiným běžným frázím; důležitější je náhodnost než „důvtipnost“
  • Pro kritické účty používejte správce hesel pro ukládání skutečně vysoce entropických náhodných hesel
Tipy pro nastavení generování
  • "Požadovat každou vybranou sadu" zajistí, že se objeví alespoň jeden znak z každé vybrané kategorie
  • "Vyhnout se podobným" zlepšuje čitelnost, ale mírně snižuje velikost znakové sady
  • Symboly lze omezit na podmnožinu podporovanou cílovým systémem
Ukládání na serveru
  • Nikdy neukládejte hesla ve formě prostého textu; používejte silné hashování (Argon2id/PBKDF2/Bcrypt) se solí
  • Nastavte parametry (paměť/čas/náklady) přiměřeně; v případě potřeby zvažte použití peppru
  • Omezte počet pokusů o přihlášení a monitorujte selhání; při útocích použijte CAPTCHA nebo ověření zařízení
Vícefaktorové a obnovení
  • Upřednostněte TOTP nebo hardwarové klíče; SMS se vyhněte, jakmile je to možné
  • Zabezpečte procesy obnovení pomocí vícefaktorového ověření nebo e-mailového ověření a prosazujte doby čekání
  • Poskytněte záložní obnovovací kódy a povzbuďte uživatele, aby je ukládali bezpečně
Ochrana proti hrubé síle
  • Implementujte progresivní zpoždění nebo zámky s hodnocením rizika IP/zařízení
  • Používejte WAF a omezení rychlosti pro API a přihlašovací formuláře
  • Monitorujte útoky credential stuffing a povzbuďte uživatele, aby používali jedinečná hesla
Místní ukládání a manipulace
  • Pro ukládání a automatické vyplňování používejte důvěryhodného správce hesel
  • Nikdy nesdílejte hesla jako prostý text prostřednictvím chatu nebo e-mailu; používejte pro tým správu tajemství
  • Pokud si hesla zapisujete offline, zajistěte jejich fyzickou bezpečnost
Prohlášení: Tento nástroj generuje hesla lokálně ve vašem prohlížeči pomocí Web Crypto; žádná data nejsou odesílána na žádný server.

Jak generovat hesla pomocí programovacích jazyků

JavaScript (Web Crypto)
function randomPassword(length = 16, sets = {lower:true, upper:true, digits:true, symbols:true}) {
  const pools = {
    lower: 'abcdefghijklmnopqrstuvwxyz',
    upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
    digits: '0123456789',
    symbols: '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
  };
  let pool = '';
  for (const k of Object.keys(sets)) if (sets[k]) pool += pools[k];
  if (!pool) throw new Error('No charset');
  // Rejection sampling removes modulo bias
  const limit = Math.floor(0x100000000 / pool.length) * pool.length;
  const buf = new Uint32Array(1);
  let out = '';
  for (let i = 0; i < length; i++) {
    do { crypto.getRandomValues(buf); } while (buf[0] >= limit);
    out += pool[buf[0] % pool.length];
  }
  return out;
}
Python (secrets)
import secrets

def random_password(length=16, lower=True, upper=True, digits=True, symbols=True):
    pools = {
        'lower': 'abcdefghijklmnopqrstuvwxyz',
        'upper': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
        'digits': '0123456789',
        'symbols': '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
    }
    pool = ''.join(v for k, v in pools.items() if locals()[k])
    if not pool:
        raise ValueError('No charset')
    return ''.join(secrets.choice(pool) for _ in range(length))
PHP (random_int)
function random_password($length = 16, $sets = ['lower'=>true,'upper'=>true,'digits'=>true,'symbols'=>true]) {
    $pools = [
        'lower' => 'abcdefghijklmnopqrstuvwxyz',
        'upper' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
        'digits' => '0123456789',
        'symbols' => '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
    ];
    $pool = '';
    foreach ($sets as $k => $on) if ($on) $pool .= $pools[$k];
    if ($pool === '') throw new Exception('No charset');
    $out = '';
    for ($i = 0; $i < $length; $i++) {
        $out .= $pool[random_int(0, strlen($pool)-1)];
    }
    return $out;
}
Go (crypto/rand)
package main

import (
  "crypto/rand"
  "math/big"
)

func RandomPassword(length int, pool string) (string, error) {
  out := make([]byte, length)
  for i := 0; i < length; i++ {
    nBig, err := rand.Int(rand.Reader, big.NewInt(int64(len(pool))))
    if err != nil { return "", err }
    out[i] = pool[nBig.Int64()]
  }
  return string(out), nil
}
Java (SecureRandom)
import java.security.SecureRandom;

public class Pw {
  static final String POOL = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
  static final SecureRandom SR = new SecureRandom();
  static String randomPassword(int length) {
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length; i++) {
      int idx = SR.nextInt(POOL.length());
      sb.append(POOL.charAt(idx));
    }
    return sb.toString();
  }
}
C# (.NET RandomNumberGenerator)
using System;
using System.Security.Cryptography;

public static class Pw {
  public static string RandomPassword(int length, string pool) {
    // GetInt32 draws an unbiased value in [0, pool.Length)
    var chars = new char[length];
    for (int i = 0; i < length; i++) {
      chars[i] = pool[RandomNumberGenerator.GetInt32(pool.Length)];
    }
    return new string(chars);
  }
}
Rust (rand + getrandom)
use rand::rngs::OsRng;
use rand::Rng;

fn random_password(length: usize, pool: &str) -> String {
    // gen_range is uniform, so there is no modulo bias
    let chars: Vec = pool.chars().collect();
    (0..length)
        .map(|_| chars[OsRng.gen_range(0..chars.len())])
        .collect()
}

fn main() {
    let pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
    let pw = random_password(16, pool);
    println!("{}", pw);
}