## Šifrovací appka Mini Go/HTMX app na šifrování zpráv cizím veřejným klíčem. * Při startu vygeneruje/načte RSA identitu (2048 bit). * Umožní sdílet veřejný klíč (`public.pem`) a self-signed cert (`identity.crt`). * Šifruje hybridně: **RSA-OAEP(SHA-256) + AES-256-GCM**. * UI je čisté přes **HTMX**, tlačítka „Copy“ všude, kde to dává smysl. --- ## Požadavky * Go 1.21+ * (volitelné) Make, Docker, atd. – není potřeba pro základní běh --- ## Rychlý start ```bash # stačí spustit go run . # otevři v prohlížeči http://localhost:8080/ ``` Na prvním startu se vytvoří soubory: ``` identity_key.pem # RSA private key (PKCS#1) public.pem # veřejný klíč PEM (PKIX) identity.crt # self-signed cert s veřejným klíčem (jen „vizitka“) ``` --- ## Regenerace klíčů Chceš novou identitu? ```bash # přes flag go run . -regen # nebo přes env proměnnou REGEN_KEYS=1 go run . ``` --- ## Jak to používat (UI) 1. Otevři `http://localhost:8080/`. 2. V sekci **Můj veřejný klíč** stáhni/kopíruj `public.pem` nebo `identity.crt` a pošli kontaktům. 3. V sekci **Šifrovat pro cizí klíč** vlož svou zprávu a **cizí** public key/cert → klikni **Encrypt**. * Výstup (**Zašifrovaný payload**) se ukáže **hned pod formulářem** a má tvar JSON: ```json { "ek": "base64(RSA-OAEP(aesKey))", "n": "base64(nonce)", "ct": "base64(aes-gcm-ciphertext)" } ``` 4. Příjemce vloží payload do sekce **Dešifrovat** → dostane plaintext. 5. Všude můžeš použít tlačítko **Copy**. --- ## HTTP endpointy * `GET /` – HTMX UI * `GET /public.pem` – veřejný klíč (PEM) * `GET /public.crt` – self-signed cert (PEM) * `POST /encrypt` – form fields: * `message` – plaintext k zašifrování * `pubkey` – cílový klíč (PEM `PUBLIC KEY` **nebo** `CERTIFICATE`) * `POST /decrypt` – form field: * `payload` – JSON s poli `ek`, `n`, `ct` (viz výše) * `GET /static/style.css` – styl --- ## Struktura ``` . ├─ main.go ├─ templates/ │ ├─ index.html │ ├─ encrypt.html │ └─ decrypt.html └─ static/ └─ style.css ``` --- ## Bezpečnostní poznámky * Klíče se ukládají **lokálně** vedle binárky. Chraň `identity_key.pem` (chmod 600 je nastaven). * Certifikát je jen pro sdílení veřejného klíče (nepoužívá se pro TLS). * RSA-OAEP se SHA-256 + AES-GCM (12B nonce) pro zprávy libovolné délky. * Pro produkci řeš správu identit (HSM, password-protected export, rotace, audit). --- ## Problémy & tipy * „Neplatný public key/cert“ – zkontroluj, že vkládáš **PEM blok** (`-----BEGIN ...`). * Payload musí být validní JSON, base64 hodnoty bez zalomení. * Pokud migruješ mezi stroji, přenes `identity_key.pem` + `public.pem` + `identity.crt`. --- ## Licence MIT (nebo si dopiš dle potřeby).