Tipy

2FA a bezpečná hesla – jak zabezpečit účty vývojáře

Správce hesel, TOTP, hardwarové klíče a passkeys. Jak zabezpečit GitHub, e-mail a server, a jak správně implementovat 2FA ve vlastní aplikaci.

12. 10. 2026 · 4 min čtení

Účet vývojáře je pro útočníka cennější než účet běžného uživatele. Přes váš GitHub se dá podstrčit kód do produkce, přes e-mail resetovat všechno ostatní a přes SSH klíč dostat na server. Tento článek má dvě části: jak zabezpečit vlastní účty a jak správně udělat 2FA ve vaší aplikaci.

Část 1: vaše vlastní účty

Správce hesel je základ

Pravidlo „každá služba má jiné heslo“ je bez správce hesel nedodržitelné. Použijte například Bitwarden, 1Password, KeePassXC (offline) nebo správce vestavěného do prohlížeče či systému.

  • Generujte náhodná hesla o délce alespoň 16–20 znaků.
  • Hlavní heslo správce volte jako passphrase – několik náhodných slov, např. kolo-mrak-sedm-lampa-vydra. Délka je důležitější než speciální znaky.
  • Hlavní heslo nepoužívejte nikde jinde.

Je vaše heslo v nějakém úniku? Služba Have I Been Pwned umí kontrolu přes k-anonymitu – posíláte jen prvních 5 znaků SHA-1 hashe:

HASH=$(printf '%s' 'moje-heslo' | sha1sum | awk '{print toupper($1)}')
curl -s "https://api.pwnedpasswords.com/range/${HASH:0:5}" | grep "${HASH:5}"

Pokud příkaz něco vypíše, heslo se objevilo v únicích a nepoužívejte ho. (Pozor, heslo zůstane v historii shellu – pro skutečná hesla použijte raději funkci správce hesel.)

Druhý faktor: od nejslabšího po nejsilnější

Metoda Ochrana proti phishingu Poznámka
SMS Ne Riziko SIM swap, ale lepší než nic
TOTP aplikace (Aegis, 2FAS, Google Authenticator…) Ne Kód lze vylákat falešnou stránkou
Push notifikace Částečně Pozor na „únavu“ z opakovaných žádostí
Hardwarový klíč (FIDO2/WebAuthn, např. YubiKey) Ano Vázán na doménu, falešná stránka ho nepoužije
Passkeys Ano WebAuthn bez hesla, synchronizované mezi zařízeními

Kde to jde, používejte passkeys nebo hardwarový klíč. Mějte vždy dva klíče nebo záložní metodu, jinak při ztrátě přijdete o přístup.

Záchranné kódy

Při zapnutí 2FA dostanete záchranné (recovery) kódy. Uložte je do správce hesel nebo vytiskněte a schovejte. Nikoli do souboru na ploše.

Priority pro vývojáře

  1. E-mail – přes něj jde resetovat většina ostatních účtů.
  2. GitHub / GitLab – 2FA, ideálně passkey. Zkontrolujte Settings → Sessions a Applications.
  3. Registrátor domény a DNS – převzetí domény je katastrofa.
  4. Cloud / hosting a platební brány.
  5. Správce balíčků (npm, PyPI) – pokud publikujete balíčky. PyPI vyžaduje 2FA pro všechny účty.

SSH klíče

Na serveru vypněte přihlašování heslem a používejte klíče. Moderní volba je Ed25519, ideálně chráněný passphrase:

ssh-keygen -t ed25519 -C "notebook-2026"

S hardwarovým klíčem podporujícím FIDO2 můžete mít SSH klíč, který bez fyzického dotyku nefunguje (OpenSSH 8.2+):

ssh-keygen -t ed25519-sk

V /etc/ssh/sshd_config:

PasswordAuthentication no
PermitRootLogin prohibit-password

Po změně sudo sshd -t (kontrola syntaxe) a sudo systemctl reload ssh (na některých distribucích sshd). Nové přihlášení vyzkoušejte v druhém terminálu, než zavřete stávající session.

Část 2: 2FA ve vlastní aplikaci

Ukládání hesel

Hesla nikdy neukládejte v čitelné podobě ani rychlými hashi (MD5, SHA-256). Použijte Argon2id, bcrypt nebo scrypt. V PHP stačí vestavěné funkce:

$hash = password_hash($heslo, PASSWORD_ARGON2ID); // nebo PASSWORD_DEFAULT
if (password_verify($zadane, $hash)) { /* OK */ }

Pravidla pro hesla podle NIST

Doporučení NIST SP 800-63B jdou proti dřívějším zvykům:

  • Dbejte na délku: aktuální revize (Rev. 4) požaduje minimálně 15 znaků, pokud je heslo jediným faktorem, a 8 znaků v kombinaci s 2FA. Povolte dlouhá hesla (alespoň 64 znaků).
  • Nevynucujte kombinace typu „velké písmeno + číslo + znak“.
  • Nevynucujte pravidelnou změnu hesla bez důvodu.
  • Kontrolujte hesla proti seznamu uniklých a běžných hesel.

TOTP v Pythonu

Knihovna pyotp implementuje TOTP podle RFC 6238:

import pyotp

secret = pyotp.random_base32()          # uložit k uživateli (šifrovaně)
uri = pyotp.TOTP(secret).provisioning_uri(
    name="[email protected]", issuer_name="MojeAplikace")
# uri převeďte na QR kód (např. knihovnou qrcode)

totp = pyotp.TOTP(secret)
totp.verify(kod_od_uzivatele, valid_window=1)  # tolerance ±30 s

Na co nezapomenout:

  • Rate limiting – šestimístný kód má jen milion kombinací.
  • Jednorázovost – zapamatujte si poslední použitý časový krok, aby šel kód použít jen jednou.
  • Recovery kódy – vygenerujte 8–10 jednorázových kódů a ukládejte je hashované, stejně jako hesla.
  • Při zapnutí 2FA ověřte první kód, než ho aktivujete – jinak si uživatel může zamknout účet.

Pro WebAuthn/passkeys sáhněte po hotové knihovně (např. py_webauthn, @simplewebauthn/server), protokol je příliš složitý na vlastní implementaci.

Shrnutí

Správce hesel, passkeys nebo hardwarový klíč na e-mail a GitHub, SSH jen s klíči. Ve vlastní aplikaci Argon2id, žádná zbytečná pravidla pro složitost hesel a TOTP s rate limitingem a záchrannými kódy.