Forziere

Un password manager autocostruito, minimale ma robusto. Gira solo sul tuo hardware. Con plausible deniability integrata: puoi aprirlo in due modi e nessuno può dimostrare quale dei due è quello vero.
I password manager commerciali usano AES-256 — ma l’algoritmo è solo il punto di partenza. Quello che conta è come viene costruita la chiave, dove viene tenuta, chi può richiederla. Bitwarden la manda al server per verificare il login. 1Password la espone via cloud. KeePassXC la tiene tutta in un file protetto da una sola password.
Forziere parte da un modello diverso: la chiave non esiste da nessuna parte in forma completa. Viene ricostruita al momento dell’apertura da pezzi separati e dimenticata appena chiudi.
Cos’è#
Forziere è un password manager a riga di comando scritto in Go, pensato per Linux. Gira interamente in locale, non ha rete, non ha GUI, non ha cloud. Gestisce credenziali testuali e cifra documenti e cartelle interi — qualsiasi file può diventare un blob cifrato con la stessa chiave master.
Ogni volta che lo apri, si apre una sessione interattiva:
forziere apri
PIN chiavetta: ****
Password: ****
[forziere] lista
[forziere] cerca banca
[forziere] mostra 3
[forziere] aggiungi
[forziere] cifra ~/documenti/contratto.pdf --cancella
[forziere] apri-documento 7
[forziere] esci
La sessione dura 30 minuti. Ctrl+C è ignorato — non si chiude per sbaglio con dati aperti. esci fa il cleanup garantito in RAM e nei file temporanei.
Confronto con le alternative#
| Forziere | Bitwarden | KeePassXC | 1Password | |
|---|---|---|---|---|
| Cifratura | AES-256-GCM | AES-256-CBC+HMAC | AES-256-GCM | AES-256-GCM |
| KDF | Argon2id (64MB) | PBKDF2 / Argon2id | Argon2id | PBKDF2 |
| Cloud | ❌ mai | ✅ default | ❌ mai | ✅ obbligatorio |
| Open source | ✅ | ✅ | ✅ | ❌ |
| Volume esca | ✅ | ❌ | ❌ | ❌ |
| Shamir alla chiave | ✅ (2/3) | ❌ | ❌ | ❌ |
| Chiave fisica | ✅ (USB — parte Shamir) | ✅ (Yubikey 2FA) | ✅ (Yubikey 2FA) | ✅ (Yubikey 2FA) |
| Cifratura file/cartelle | ✅ | ❌ | ❌ | ❌ |
| Recovery offline | ✅ (33 parole) | ✅ (codici) | ✅ (file backup) | ✅ (kit emergenza) |
| GUI | ❌ solo CLI | ✅ | ✅ | ✅ |
| Browser extension | ❌ | ✅ | ✅ | ✅ |
| Mobile | ❌ | ✅ | ✅ | ✅ |
| Audit indipendente | ❌ (v1) | ✅ | ✅ | ✅ |
Dove Forziere vince: Argon2id con parametri aggressivi (64MB di memoria), chiave ricostruita via Shamir e mai memorizzata per intero, due volumi crittograficamente indipendenti, cifratura di documenti e cartelle integrata, zero superficie di attacco remota.
Dove perde: niente mobile, niente browser, niente GUI, nessun audit esterno, progetto in sviluppo attivo con bug aperti.
Le cose che lo rendono diverso#
1. La chiave non esiste da nessuna parte#
La chiave master viene ricostruita ogni volta da due pezzi su tre tramite Shamir Secret Sharing. Non è mai salvata su disco. Non è mai completa in RAM — viene tenuta spezzata in due metà XOR durante tutta la sessione e ricomposta solo per i microsecondi necessari a cifrare o decifrare.
parte A → chiavetta USB fisica (cifrata con PIN)
parte B → derivata dalla password [mai salvata]
parte C → 33 parole di backup
apertura normale: A + B (chiavetta + password)
persa la chiavetta: B + C (password + 33 parole)
persa la password: A + C (chiavetta + 33 parole)
Negli altri password manager la chiave fisica (Yubikey, TOTP) è un secondo fattore di autenticazione al login — non entra nella costruzione della chiave crittografica. Qui è diverso: senza la chiavetta USB, la chiave master non si può ricostruire.
2. Volume esca con indipendenza crittografica#
Forziere si apre in due modi: con la password reale vedi le voci reali, con la password esca vedi un secondo archivio separato. I due volumi non condividono nessuna chiave — hanno HMAC separati calcolati con master distinti.
Dal file cifrato è matematicamente impossibile stabilire quanti volumi esistono o quale dei due stai guardando. Anche con accesso fisico al file e tempo illimitato.
3. Argon2id con parametri aggressivi#
La chiave viene derivata dalla password con Argon2id a 64MB di memoria e 3 iterazioni. Questo rende gli attacchi a dizionario via GPU o ASIC proibitivi — ogni tentativo richiede 64MB di RAM per qualche secondo. Bitwarden usa PBKDF2 di default (più veloce da attaccare). 1Password usa PBKDF2. KeePassXC supporta Argon2id ma con parametri configurabili dall’utente — spesso lasciati al default.
4. Cifratura di documenti e cartelle#
Forziere non gestisce solo password testuali. Qualsiasi file o cartella può essere cifrata con la stessa chiave master:
[forziere] cifra ~/documenti/contratto.pdf --cancella
[forziere] cifra ~/backup/chiavi/ --cancella
[forziere] apri-documento 7
--cancella sovrascrive l’originale con pattern DoD prima di eliminarlo. Il documento decifrato viene estratto in /tmp e rimosso automaticamente all’uscita dalla sessione. I blob cifrati possono stare ovunque nel filesystem — Forziere tiene solo i riferimenti.
5. Nessuna traccia riconoscibile#
Il contenuto del file su disco non ha header, non ha magic bytes, non ha firma — sembra rumore casuale. L’estensione e il nome li scegli tu. La chiavetta USB contiene un file con nome casuale a 8 caratteri hex. Nessun software di analisi forense può identificarlo come password manager senza conoscere il PIN.
Tre modi di apertura#
forziere apri # normale: chiavetta USB + password
forziere apri --mappa # senza chiavetta: 33 parole + password
forziere apri --chiave-mappa # senza password: chiavetta + 33 parole
Ogni modalità ricostruisce la chiave master da una combinazione diversa dei tre pezzi Shamir. Il file cifrato è lo stesso — cambiano solo i pezzi usati per aprirlo.
Stato attuale#
Versione 4.0.0, installata e funzionante su Linux. Scritto in Go.
Non è software di produzione. È un progetto personale, in sviluppo attivo, che accetta feedback.
Vuoi testarlo?#
Se hai Linux e Go installato, puoi scaricare il sorgente e compilarlo:
tar xzf forziere4.tar.gz
cd forziere4
go build -o forziere .
Se lo testi e trovi qualcosa, scrivimi.