fckeuspy-go/README.md
2025-09-08 21:09:47 +02:00

124 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Š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).