KeePass přes vlastní Nextcloud: databáze hesel na PC i Androidu bezpečně a bez placeného cloudu

Databázi hesel KeePass mám v souboru .kdbx a potřeboval jsem ji mít na PC i v mobilu, aktuální a dostupnou i bez internetu. Místo placeného cloudu ji synchronizuje můj vlastní Nextcloud. Na PC používám KeePassXC, na Androidu Keepass2Android a databázi chrání kromě hlavního hesla i klíčový soubor, který v cloudu není.

Je bezpečné mít databázi hesel v cloudu?

Ano, soubor .kdbx je navržený přesně pro tohle. Celý obsah je zašifrovaný a klíč vzniká jen z hlavního hesla, případně z klíčového souboru. Server, Cloudflare ani zloděj souboru z něj nic nepřečtou. Jediný reálný útok na ukradený soubor je hádání hlavního hesla na počítači útočníka. Bezpečnost tedy stojí hlavně na tom:

  • jak silné je hlavní heslo (nejlépe fráze z 5–6 náhodných slov, nepoužitá nikde jinde),
  • jak drahý je jeden pokus: formát KDBX 4 s funkcí Argon2id a časem odemčení kolem 1 sekundy, s ohledem na rychlost mobilu,
  • jestli má útočník i druhý faktor, tedy klíčový soubor.

Větším rizikem než cloud jsou samotná zařízení. Virus v PC odchytí heslo při psaní. Proto se vyplatí šifrovaný disk, zámek obrazovky, automatické zamknutí databáze při nečinnosti a mazání schránky po pár sekundách.

PC: KeePassXC a složka, která je vždy offline

Databázi jsem přesunul do vlastní složky v synchronizované složce Nextcloud. Klient pro Windows běží v režimu virtuálních souborů, které se stahují až při otevření. Pro databázi hesel by to byla past: bez internetu by se neotevřela. U složky jsem proto zvolil Vždy ponechat na tomto zařízení. Nastavení platí jen pro PC, mobil se nastavuje zvlášť.

Klíčový soubor

Schéma: databáze KeePass synchronizovaná přes Nextcloud mezi KeePassXC na PC a Keepass2Android, odemčení hlavním heslem a klíčovým souborem mimo cloud

Klíčový soubor jsem vygeneroval v KeePassXC (Databáze → Zabezpečení databáze → Přidat další ochranu → Přidat klíčový soubor → Vytvořit). Vznikne soubor .keyx ve formátu KeePass XML 2.0, který podporují KeePassXC, KeePass 2 od verze 2.47, KeePassDX i Keepass2Android. Před změnou je dobré udělat kopii databáze mimo cloud a po uložení databázi zamknout a zkusit znovu otevřít.

Častý omyl je, že klíčový soubor má vlastní heslo jako SSH klíč. Nemá. Je to jen náhodná data, „druhý klíč do zámku“. Databáze se otevře jen se správným heslem a zároveň se souborem.

Útočník máOtevře databázi?
jen soubor .kdbx z cloudune
soubor .kdbx a hlavní heslone, chybí klíčový soubor
klíčový soubor bez heslane

Pravidla pro klíčový soubor:

  • Nikdy ne do cloudu vedle databáze. Do PC a mobilu se kopíruje ručně, například USB kabelem.
  • V Androidu do vnitřního úložiště, třeba do Documents/KeePass. Ne do složky Stažené (čisticí aplikace ji promazávají), ne do DCIM nebo Pictures (mohla by se nahrát do Fotek Google) a ne na SD kartu.
  • Po výběru v aplikaci ho už nepřesouvat. Aplikace si pamatuje cestu.
  • Offline záloha, například USB flash disk u důležitých papírů. Bez klíčového souboru databázi neotevřu ani já.
  • Jako klíčový soubor nepoužívat fotku ani jiný běžný soubor. Kdyby se změnil, databáze už nepůjde otevřít.

Android: Keepass2Android, nebo KeePassDX?

Na telefonu jsem původně měl KeePassDX. Obě aplikace umí soubor .kdbx i klíčový soubor, liší se v tom, jak se dostanou k Nextcloudu:

 KeePassDXKeepass2Android
Přístup k Nextcloudupřes aplikaci Nextcloud a výběr souboru v Androidupřímo přes WebDAV
Heslo pro aplikacinení potřebapotřeba
Offline kopiesoubor musí být v aplikaci Nextcloud nastaven jako dostupný offlinevlastní mezipaměť
Zápis změn zpětzávisí na synchronizaci aplikace Nextcloudspolehlivý, umí slučovat změny

Zůstal jsem u Keepass2Android, protože si spojení se serverem řídí sám. V aplikaci se zvolí otevření souboru z Nextcloudu nebo přes WebDAV (HTTPS) s adresou ve tvaru:

https://cloud.VASE_DOMENA/remote.php/dav/files/VAS_UZIVATEL/NAZEV_SLOZKY/

Past: chyba 401

Při prvním připojení hlásila aplikace received unexpected response, protocol h2, code 401. Kód 401 znamená odmítnuté přihlašovací údaje. Spojení i adresa jsou v pořádku. Účet má zapnuté dvoufázové ověření, takže aplikace potřebuje heslo pro aplikaci (Nastavení → Zabezpečení → Zařízení a sezení), ne běžné heslo, a jako uživatele uživatelské jméno, ne e-mail. Heslo pro aplikaci se zobrazí jen jednou, takže je potřeba ho opsat hned. Opakované chybné pokusy navíc dočasně zpomalí přihlašování z dané adresy.

Na co si dát pozor

  • Neupravovat databázi současně v PC i mobilu, hlavně ne offline. Když vznikne konflikt, Nextcloud vytvoří kopii „conflicted copy“ a KeePassXC ji umí sloučit (Databáze → Sloučit).
  • Staré verze se dají otevřít starým heslem. Nextcloud drží verze souborů, snapshoty a zálohy na NASu je drží měsíce. Při podezření na únik je proto potřeba změnit hlavně hesla uložená v databázi, nejen hlavní heslo.
  • Nouzový přístup. V databázi jsou i hesla k serverům a NASu. Musí se dát otevřít, i když cloud neběží: proto offline kopie v PC i mobilu a hlavní heslo na papíře na bezpečném místě doma.
  • Složku s databází nikdy nesdílet odkazem.

Programy, které při práci používám, popisuji i v sekci Moje technologie: KeePass.

Shrnutí

  • Soubor .kdbx v cloudu je bezpečný, pokud má silné hlavní heslo a Argon2id.
  • Klíčový soubor nemá vlastní heslo. Je to druhý faktor, který nesmí být v cloudu.
  • Na PC nastavit složku s databází jako vždy dostupnou offline, na Androidu použít Keepass2Android s heslem pro aplikaci.
  • Chyba 401 v mobilu obvykle znamená běžné heslo místo hesla pro aplikaci.
  • Počítat se starými verzemi souboru a s nouzovým přístupem bez cloudu.

Článek je součástí série Privátní cloud Nextcloud na domácím Proxmoxu.