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

2.9 KiB
Raw Blame History

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

  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:

      {
        "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).