# PRD: Trezor - lokální správce hesel

## 1. Přehled produktu

Trezor je desktopová aplikace pro lokální správu hesel. Umožňuje bezpečně ukládat přihlašovací údaje, vyhledávat v nich, třídit je pomocí štítků, importovat hesla z Chrome a spravovat hlavní heslo trezoru. Výchozím jazykem aplikace je čeština, uživatel může přepnout také na slovenštinu, angličtinu, španělštinu nebo němčinu.

Produkt je určený pro uživatele, kteří chtějí jednoduchý offline správce hesel bez cloudové synchronizace a bez nutnosti registrace.

## 2. Cíle

- Poskytnout bezpečný lokální trezor pro hesla.
- Zachovat jednoduché a rychlé desktopové ovládání.
- Umožnit rychlé hledání a filtrování uložených záznamů.
- Nabídnout základní správu záznamů: vytvořit, upravit, smazat, kopírovat heslo.
- Podporovat import z Chrome CSV exportu.
- Umožnit přizpůsobení vzhledu pomocí barevných schémat.
- Nabídnout lokalizaci pro více jazyků při zachování češtiny jako výchozího jazyka.

## 3. Necíle

- Cloudová synchronizace mezi zařízeními.
- Webová nebo mobilní verze aplikace.
- Sdílení hesel mezi uživateli.
- Správa týmových oprávnění.
- Automatické vyplňování hesel v prohlížeči.
- Obnova trezoru bez hlavního hesla.

## 4. Cíloví uživatelé

- Jednotlivci, kteří chtějí offline správce hesel.
- Uživatelé, kteří preferují lokální uložení dat.
- Uživatelé, kteří chtějí převést uložená hesla z Chrome do samostatné aplikace.
- Méně technicky zdatní uživatelé, kteří potřebují jednoduché rozhraní.

## 5. Hlavní scénáře použití

1. Uživatel spustí aplikaci a odemkne trezor hlavním heslem.
2. Uživatel vytvoří nový záznam s názvem, uživatelem, heslem, URL, poznámkou a štítkem.
3. Uživatel vyhledá záznam podle názvu, uživatele, URL nebo poznámky.
4. Uživatel vyfiltruje záznamy podle štítku.
5. Uživatel zkopíruje heslo do schránky.
6. Uživatel importuje hesla z CSV exportu Chrome.
7. Uživatel změní hlavní heslo trezoru.
8. Uživatel změní jazyk nebo barevné schéma aplikace.

## 6. Funkční požadavky

### 6.1 Zamykací obrazovka

- Aplikace musí po spuštění zobrazit zamykací obrazovku.
- Zamykací obrazovka musí zobrazovat název produktu Trezor.
- Při prvním spuštění musí umožnit vytvoření nového trezoru.
- Při existujícím trezoru musí umožnit odemčení hlavním heslem.
- Hlavní heslo musí mít minimálně 8 znaků.
- Hlavní heslo nesmí začínat ani končit mezerou.
- Při vytváření trezoru musí uživatel heslo potvrdit.

### 6.2 Správa záznamů

- Uživatel může vytvořit nový záznam.
- Uživatel může upravit existující záznam.
- Uživatel může smazat konkrétní otevřený záznam z detailu.
- Před smazáním musí aplikace zobrazit potvrzovací dialog.
- Potvrzovací dialogy musí používat lokalizovaná tlačítka.
- Záznam obsahuje:
  - název,
  - uživatele nebo e-mail,
  - heslo,
  - URL,
  - poznámku,
  - štítek.

### 6.3 Štítky a filtrování

- Aplikace musí podporovat štítky:
  - Vše,
  - Oblíbené,
  - Práce,
  - Osobní.
- V detailu záznamu musí být možné vybrat štítek.
- Seznam záznamů musí jít filtrovat podle štítků.
- Při smazání záznamu musí zůstat zachovaný aktuální filtr i hledaný text.

### 6.4 Hledání

- Uživatel může vyhledávat v záznamech.
- Hledání musí procházet název, uživatele, URL a poznámku.
- Psaní do vyhledávacího pole musí působit plynule.
- Obnova seznamu nesmí blokovat zadávání textu.

### 6.5 Detail záznamu

- Detail musí zobrazovat aktuálně vybraný záznam.
- Při přepnutí na jiný záznam nesmí problikávat prázdné okno.
- Detail musí obsahovat indikátor síly hesla.
- Indikátor síly hesla musí reagovat na aktuální hodnotu hesla.
- Detail musí umožnit:
  - zobrazit nebo skrýt heslo,
  - kopírovat heslo,
  - generovat nové heslo,
  - uložit změny,
  - smazat záznam.

### 6.6 Import z Chrome

- Aplikace musí umožnit import CSV exportu hesel z Chrome.
- Před importem musí zobrazit potvrzení.
- Import musí přeskočit řádky bez hesla nebo bez URL.
- Import musí přeskočit duplicity.
- Po importu musí uživatel vidět importované záznamy v trezoru.

### 6.7 Nastavení

- Nastavení musí umožnit změnu barevného schématu.
- Nastavení musí umožnit změnu jazyka.
- Volby nastavení musí být uložené lokálně.
- Změna nastavení se musí projevit bez nutnosti restartu aplikace.

### 6.8 Lokalizace

- Výchozí jazyk aplikace je čeština.
- Aplikace musí podporovat:
  - češtinu,
  - slovenštinu,
  - angličtinu,
  - španělštinu,
  - němčinu.
- Lokalizované musí být hlavní obrazovky, tlačítka, potvrzovací dialogy a hlavní systémové hlášky.
- Interní hodnoty štítků mohou zůstat česky kvůli kompatibilitě uložených dat, ale uživateli se zobrazí v aktuálním jazyce.

## 7. Bezpečnostní požadavky

- Trezor musí být šifrován lokálně.
- Hlavní heslo se nesmí ukládat na disk.
- Odvození klíče musí používat Argon2id.
- Sůl musí být uložená společně s šifrovaným obsahem trezoru, aby nedošlo k rozpojení soli a dat.
- Změna hlavního hesla musí být atomická z pohledu souboru trezoru.
- Aplikace musí automaticky uzamknout trezor po nečinnosti.
- Schránka s kopírovaným heslem se musí automaticky vyčistit, pokud se její obsah nezměnil.

## 8. UX a design požadavky

- Aplikace musí zachovat stávající barevná schémata.
- Rozhraní musí být rozdělené na levý navigační panel, seznam záznamů a detail.
- Při filtrování a mazání se nesmí překreslovat celá aplikace.
- Při posouvání seznamu se nesmí rozpadat rozložení.
- Prázdná plocha seznamu musí respektovat aktuální barevné schéma.
- Titulkový řádek okna má používat vlastní ikonu aplikace.
- Tlačítka musí používat srozumitelné lokalizované názvy.

## 9. Nefunkční požadavky

- Aplikace musí běžet jako lokální desktopová aplikace pro Windows.
- Aplikace nesmí vyžadovat síťové připojení pro běžné použití.
- Aplikace musí zvládat stovky záznamů bez citelného zadrhávání při hledání.
- Ukládání trezoru musí být atomické.
- Aplikace musí být připravitelná jako samostatný spustitelný soubor pomocí PyInstaller.
- Ikona aplikace musí být použitelná také v instalátoru Inno Setup.

## 10. Akceptační kritéria

- Uživatel vytvoří trezor a po restartu ho odemkne stejným hlavním heslem.
- Uživatel nemůže vytvořit hlavní heslo kratší než 8 znaků.
- Uživatel nemůže vytvořit hlavní heslo začínající nebo končící mezerou.
- Uživatel vytvoří, upraví a smaže záznam bez ztráty aktuálního filtru.
- Uživatel vyhledává v seznamu a zadávání textu zůstává plynulé.
- Uživatel přepne jazyk na angličtinu, slovenštinu, španělštinu nebo němčinu a hlavní UI se přeloží.
- Uživatel změní barevné schéma a aplikace zachová čitelnost a konzistentní barvy.
- Import z Chrome přeskočí neplatné a duplicitní položky.
- Při změně hlavního hesla nevznikne stav, kdy je trezor zašifrovaný novým klíčem, ale sůl odpovídá starému klíči.

## 11. Rizika

- Ztráta hlavního hesla znamená neobnovitelný trezor.
- Chybný import CSV může vytvořit neúplné záznamy, pokud se změní formát exportu Chrome.
- Příliš mnoho widgetů v seznamu může zatížit UI, proto je nutné zachovat dávkované vykreslování.
- Lokalizace může časem zastarat, pokud se přidají nové texty bez překladových klíčů.

## 12. Budoucí rozšíření

- Export trezoru do šifrované zálohy.
- Kontrola uniklých nebo slabých hesel.
- Volitelné pole pro datum vytvoření a poslední změnu záznamu.
- Pokročilé kategorie nebo vlastní štítky.
- Tisk nebo export vybraných záznamů.
- Volitelná integrace s prohlížečem.

