# nofuture.go - Sicurezza Memguard Post-Quantum

nofuture.go è una web app crittografica post-quantum da usare in un tab del browser, mentre in un altro hai una chat. La comunicazione è cifrata localmente, e le sessioni vengono sincronizzate usando un Session ID. Le chiavi sono protette in RAM con `memguard` e vengono eliminate a fine sessione.

## 🔑 Panoramica operativa in 5 fasi

1. Start Session: Genera chiavi e Session ID
2. Share Session ID: Scambia l’ID con il tuo contatto
3. Pair Sessions: Clic su “Pair” per sincronizzare
4. Encrypt/Decrypt: Usa la sessione per messaggi sicuri
5. End Session: Tutto viene cancellato

## 📌 Cos'è il Session ID?

Il Session ID rappresenta una sessione univoca sicura tra due dispositivi. Non è una chiave pubblica, ma una combinazione sicura di identificatori derivati da elementi crittografici.

- `remotePubKey`: chiave pubblica remota
- `nonce`: numero casuale
- `sessionKey`: segreto condiviso

    hash := sha256.New()
    hash.Write(pubKey.Bytes())
    hash.Write(nonce[:])
    sessionID := hex.EncodeToString(hash.Sum(nil))

## 🤝 Pairing: Associazione automatica delle sessioni

Dopo lo scambio dei `session-ID`, cliccando su “Pair” l'app avvia un processo automatico per derivare una chiave condivisa sicura.

- Identifica la sessione remota tramite ID
- Esegue un key exchange post-quantum (Kyber)
- Deriva una chiave condivisa nota solo ai due client

Nota: Nessuna chiave pubblica viene scambiata manualmente.

## 🧠 Protezione delle chiavi in RAM

`nofuture.go` protegge tutte le chiavi in RAM usando memguard, che impedisce accessi anche da parte di root o strumenti di debug.

- RAM cifrata fuori dall'heap
- mlockall() per evitare swap
- Autodistruzione al segnale
- Invisibilità al GC

Minaccia | Contromisura
--- | ---
gdb / lsof | Memoria fuori heap, cifrata
Accesso root | RAM bloccata con mlock
Keylogger | Le chiavi non sono mai digitate
Cold boot | Memoria già purgata

## 🖱️ Tastiera virtuale anti-keylogger

Per proteggere la digitazione del testo, l’app può usare una tastiera virtuale con disposizione dei tasti casuale a ogni apertura.

- Click al posto della tastiera fisica
- Nessun evento keypress intercettabile
- Previene keylogger e spyware locali

# nofuture.go - Memguard Post-Quantum Security

nofuture.go is a post-quantum crypto tool used in a browser tab while using a chat app in another. Messages are encrypted locally and exchanged via synchronized Session IDs. Keys are memory-hardened with `memguard` and purged after session ends.

## 🔑 5-Step Operational Overview

1. Start Session: Generate keys and Session ID
2. Share Session ID: Send it to your contact
3. Pair Sessions: Click “Pair” to sync and derive key
4. Encrypt/Decrypt: Secure messages flow between tabs
5. End Session: Keys are securely destroyed

## 📌 What is the Session ID?

The Session ID uniquely identifies a secure session between two peers. It's derived from a mix of cryptographic elements—not a public key.

- `remotePubKey`: peer’s public key
- `nonce`: random number
- `sessionKey`: shared secret

    hash := sha256.New()
    hash.Write(pubKey.Bytes())
    hash.Write(nonce[:])
    sessionID := hex.EncodeToString(hash.Sum(nil))

## 🤝 Pairing: Secure automatic linking

After exchanging `session-IDs`, just click “Pair”. The system automatically derives a shared key using Kyber post-quantum KEM.

- Identifies the remote session by ID
- Performs post-quantum key exchange
- The final key is only known by the two paired clients

No manual key sharing is needed.

## 🧠 How are keys protected in RAM?

All key materials are protected with memguard, which allocates encrypted memory buffers off-heap, blocks OS access (even root), and purges everything on termination.

- Encrypted, locked memory buffers
- No exposure to GC or debugging tools
- Purged instantly on crash
- Swap disabled with mlock()

Threat | Mitigation
--- | ---
gdb / lsof | Data is not in readable heap
Root access | Memory protected with mlock
Keyloggers | Keys never typed
Cold boot | Memory purged

## 🖱️ Virtual keyboard against keyloggers

A virtual keyboard with randomized layout protects text from keyloggers. No keystroke events are triggered.

- Click-based input bypasses physical keyboard
- Random layout each time
- Blocks local spyware and keyloggers