2.9 KiB
2.9 KiB
Š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
# 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?
# přes flag
go run . -regen
# nebo přes env proměnnou
REGEN_KEYS=1 go run .
Jak to používat (UI)
-
Otevři
http://localhost:8080/. -
V sekci Můj veřejný klíč stáhni/kopíruj
public.pemneboidentity.crta pošli kontaktům. -
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:
{ "ek": "base64(RSA-OAEP(aesKey))", "n": "base64(nonce)", "ct": "base64(aes-gcm-ciphertext)" }
-
-
Příjemce vloží payload do sekce Dešifrovat → dostane plaintext.
-
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íč (PEMPUBLIC KEYneboCERTIFICATE)
-
POST /decrypt– form field:payload– JSON s poliek,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).