5.2 KiB
Co to je
Mini Go/HTMX aplikace pro šifrování zpráv cizím veřejným klíčem.
- Při startu vygeneruje nebo 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.
- Rozhraní přes HTMX, moderní responzivní layout (2 sloupce na desktopu, 1 sloupec na mobilu).
- Všude jsou tlačítka Copy a Clear pro snadnou práci s texty.
Požadavky
- Go 1.21+
- Není potřeba databáze ani další služby
Rychlý start
# spustí server
go run .
# otevři v prohlížeči
http://localhost:8080/
Na prvním startu se vytvoří:
identity_key.pem # RSA private key (PKCS#1)
public.pem # veřejný klíč PEM (PKIX)
identity.crt # self-signed cert (vizitka pro sdílení)
Regenerace klíčů
Pokud chceš vygenerovat 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 je kontaktům. -
V sekci Šifrovat pro cizí klíč:
-
napiš zprávu,
-
vlož cizí public key nebo cert (PEM blok),
-
klikni Encrypt.
-
Výsledek (Zašifrovaný payload) se zobrazí hned pod formulářem jako JSON:
{ "ek": "base64(RSA-OAEP(aesKey))", "n": "base64(nonce)", "ct": "base64(aes-gcm-ciphertext)" } -
tlačítkem Copy zkopíruješ, Clear vymaže obsah.
-
-
Příjemce vloží payload do sekce Dešifrovat a klikne Decrypt → objeví se plaintext.
HTTP endpointy
-
GET /– hlavní UI (HTMX) -
GET /public.pem– veřejný klíč PEM -
GET /public.crt– self-signed cert PEM -
POST /encrypt– form fields:message– plaintextpubkey– cílový veřejný klíč (PEMPUBLIC KEYneboCERTIFICATE)
-
POST /decrypt– form field:payload– JSON se strukturou{"ek","n","ct"}
-
GET /static/style.css– CSS
Struktura projektu
.
├─ main.go
├─ templates/
│ ├─ index.html # UI s Copy/Clear tlačítky
│ ├─ encrypt.html # výstup šifrování
│ └─ decrypt.html # výstup dešifrování
└─ static/
└─ style.css # responzivní layout (1 sloupec mobile, 2 desktop)
Bezpečnostní poznámky
- Soukromý klíč se ukládá lokálně (
identity_key.pem, chmod 600). - Certifikát je jen vizitka (není pro TLS).
- Použitý algoritmus: RSA-OAEP se SHA-256 + AES-GCM.
- Pro produkci bys měl řešit: správu identit, heslem chráněný export, rotaci klíčů.
Tipy
- „Copy“ používá Clipboard API (funguje na
localhost). - „Clear“ vyprázdní textareu.
- Layout: mobil → 1 sloupec, desktop → 2 sloupce.
Jak to funguje podle chatGPT
Ok, pojďme úplně jednoduše, krok za krokem – bez odborných keců 👇
Jak to celé funguje
-
Máš dva klíče:
- soukromý klíč (jen pro tebe, musíš ho schovat)
- veřejný klíč (můžeš poslat komukoli)
-
Když ti někdo chce poslat zprávu:
- vezme tvůj veřejný klíč
- vytvoří si jednorázový tajný kód (klíč) pro šifrování
- ten kód uzamkne tvým veřejným klíčem (aby ho uměl odemknout jen tvůj soukromý klíč)
- zprávu zašifruje tím jednorázovým kódem
-
Ty zprávu dostaneš:
- odemkneš si tím svým soukromým klíčem ten jednorázový kód
- a tím kódem si dešifruješ samotnou zprávu
💡 Proč to takhle? Protože šifrovat velké zprávy přímo RSA by bylo pomalé a nepraktické. Proto se vždycky kombinuje:
- RSA jen na uzamčení malého tajného klíče,
- rychlý algoritmus (AES) na šifrování celé zprávy.
Jak silné to je (2025)
-
RSA 2048 bitů
- to je ta „velká matematika“ (pracuje s obrovskými prvočísly)
- dnes to nikdo na světě neumí rozlousknout běžnými prostředky
- odhady: kdybys měl všechny počítače světa, tak bys to lámal tisíce let
- pro běžnou komunikaci je to naprosto bezpečné
-
AES 256 bitů
- to je ten rychlý algoritmus na zprávy
- 256 bitů = tak obrovské množství možností, že brute force (zkoušet všechny klíče) je nereálný i s kvantovým počítačem, co si dnes umíme představit
- používají to banky, armády i vlády
Přirovnání
-
Tvůj systém = dvě zámky:
- RSA je jako trezor s klíčem – jen ty máš správný klíč (soukromý).
- AES je jako řetěz a visací zámek na balíku zprávy – kód k odemčení toho visacího zámku je schovaný v trezoru.
-
Útočník by musel buď:
- vykrást trezor RSA 2048 (prakticky nemožné),
- nebo prolomit AES 256 (prakticky nemožné).
Shrnutí
-
To, co máš teď, je na úrovni toho, co reálně používá PGP, banky a vlády.
-
Prolomení?:
- Dnes = nerealistické
- Do cca 2030 = pořád v pohodě (RSA 2048)
- Pokud chceš být „future-proof“ na desítky let, můžeš jít na RSA 3072 nebo 4096 (je to jen pomalejší).