From 395eed25a9d879391558026bb90cd3acb9afdacf Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Thu, 5 Nov 2026 10:22:12 +0100 Subject: content: write HardenedPass getting-started pages Concepts, install, creating a store from zero and connecting the app, in both languages, with screenshots from the test store. Still drafts. Co-Authored-By: Claude Opus 5.5 --- content/it/hardenedpass/getting-started/_index.md | 10 +-- .../hardenedpass/getting-started/concepts/index.md | 70 ++++++++++++++++- .../hardenedpass/getting-started/connect/index.md | 83 ++++++++++++++++++++- .../getting-started/connect/pgp-import.png | Bin 0 -> 121295 bytes .../getting-started/connect/repository.png | Bin 0 -> 109852 bytes .../getting-started/connect/ssh-key.png | Bin 0 -> 68259 bytes .../getting-started/connect/store-list.png | Bin 0 -> 58552 bytes .../getting-started/connect/welcome.png | Bin 0 -> 95117 bytes .../getting-started/create-store/index.md | 71 +++++++++++++++++- .../hardenedpass/getting-started/install/index.md | 60 ++++++++++++++- 10 files changed, 272 insertions(+), 22 deletions(-) create mode 100644 content/it/hardenedpass/getting-started/connect/pgp-import.png create mode 100644 content/it/hardenedpass/getting-started/connect/repository.png create mode 100644 content/it/hardenedpass/getting-started/connect/ssh-key.png create mode 100644 content/it/hardenedpass/getting-started/connect/store-list.png create mode 100644 content/it/hardenedpass/getting-started/connect/welcome.png (limited to 'content/it') diff --git a/content/it/hardenedpass/getting-started/_index.md b/content/it/hardenedpass/getting-started/_index.md index 6d4333b..d1ba975 100644 --- a/content/it/hardenedpass/getting-started/_index.md +++ b/content/it/hardenedpass/getting-started/_index.md @@ -1,13 +1,11 @@ +++ title = "Per iniziare" date = 2026-11-05T00:00:00Z -description = "" +description = "Da qui si parte: cos'è pass, come installare HardenedPass, come creare un archivio di password e collegarci l'app." weight = 10 draft = true +++ -Placeholder. - -## First heading - -Text. +Leggi queste pagine in ordine se non hai mai usato `pass`. Se hai già un archivio in un +repository git, installa l'app e vai direttamente a +[Collega l'app]({{< relref "/hardenedpass/getting-started/connect" >}}). diff --git a/content/it/hardenedpass/getting-started/concepts/index.md b/content/it/hardenedpass/getting-started/concepts/index.md index dbd6fe3..34334ab 100644 --- a/content/it/hardenedpass/getting-started/concepts/index.md +++ b/content/it/hardenedpass/getting-started/concepts/index.md @@ -1,13 +1,75 @@ +++ title = "Concetti" date = 2026-11-05T00:00:00Z -description = "" +description = "Le tre cose su cui si basa HardenedPass, in parole semplici: pass salva le password come file, OpenPGP le cifra, git le sincronizza." weight = 10 draft = true +++ -Placeholder. +HardenedPass si basa su tre strumenti. Non serve padroneggiarli, ma sapere cosa fa +ciascuno rende facili da seguire tutte le altre pagine. -## First heading +## pass: un file per ogni password -Text. +[pass](https://www.passwordstore.org/) è un gestore di password per sistemi Unix. Non +ha un database: ogni password è un piccolo file cifrato, e le cartelle le raggruppano. +Questo albero di cartelle si chiama **archivio**. + +``` +store/ +├── .gpg-id +├── example.org.gpg +├── otp/ +│ └── example.com.gpg +└── work/ + └── mail.example.org.gpg +``` + +Una volta decifrata, una voce è testo semplice. La prima riga è la password, tutto +quello che sta sotto sono informazioni aggiuntive: + +``` +hunter2 +username: alice +url: https://example.org +``` + +HardenedPass legge queste righe e le mostra come campi separati. Qualsiasi programma +che capisce `pass` può aprire lo stesso archivio, quindi le tue password non restano +mai bloccate dentro questa app. + +## OpenPGP: il lucchetto su ogni file + +Ogni voce è cifrata con [OpenPGP](https://www.gnupg.org/), usando una **coppia di +chiavi**: + +- La **chiave pubblica** chiude i file. Non è segreta. +- La **chiave privata** li apre. Non lascia mai i tuoi dispositivi. +- La **passphrase** protegge la chiave privata: una copia del file della chiave, da + sola, non serve a nulla a chi la trova. + +Il file `.gpg-id`, in cima all'archivio, dice per quali chiavi sono cifrate le voci. + +{{< callout type="danger" title="Fai un backup della chiave privata" >}} +Se perdi la chiave privata o dimentichi la sua passphrase, nessuno potrà più decifrare +il tuo archivio. Non esiste un reset. Tienine una copia in un posto sicuro e offline. +{{< /callout >}} + +## git: sincronizzazione e cronologia + +[Git](https://git-scm.com/) registra ogni modifica all'archivio e la copia tra i +dispositivi attraverso un **remote**, cioè un repository su un server. Modifichi una +voce sul telefono, l'app registra la modifica e la invia al remote, e gli altri +dispositivi la scaricano da lì. Le vecchie versioni restano nella cronologia, quindi un +errore si può annullare. + +Il server contiene solo file cifrati, ma ne può leggere i **nomi**. Chi lo gestisce può +vedere che hai una voce chiamata `example.org`. Usa un repository privato, su un server +di cui ti fidi. + +## Come si incastra il tutto + +1. Su un computer crei una coppia di chiavi, un archivio e un remote. +2. Sul telefono, HardenedPass clona l'archivio dal remote. +3. Importi la chiave privata nell'app. +4. L'app decifra le voci quando le apri e sincronizza le modifiche con git. diff --git a/content/it/hardenedpass/getting-started/connect/index.md b/content/it/hardenedpass/getting-started/connect/index.md index d6006ca..d7c6e35 100644 --- a/content/it/hardenedpass/getting-started/connect/index.md +++ b/content/it/hardenedpass/getting-started/connect/index.md @@ -1,13 +1,88 @@ +++ title = "Collega l'app" date = 2026-11-05T00:00:00Z -description = "" +description = "Come collegare HardenedPass al tuo archivio: clona il repository, configura una chiave SSH o una password, importa la tua chiave privata OpenPGP." weight = 40 draft = true +++ -Placeholder. +Ti servono l'indirizzo del repository e il file con la tua chiave privata. Se non hai né +l'uno né l'altro, parti da [Crea un archivio]({{< relref "/hardenedpass/getting-started/create-store" >}}). -## First heading +## Clona l'archivio -Text. +Apri l'app e tocca **Clona repo remoto**. + +{{< image src="welcome.png" alt="Schermata di benvenuto con i pulsanti Clona repo remoto, Crea repo locale e Impostazioni." class="max-w-sm mx-auto rounded-lg border border-border" />}} + +Scrivi l'indirizzo del repository in **URL del repository** e scegli come accedere in +**Modalità di Autenticazione**. + +{{< image src="repository.png" alt="Schermata Informazioni del repository con l'URL compilato e Chiave SSH selezionata come modalità di autenticazione." class="max-w-sm mx-auto rounded-lg border border-border" />}} + +Funzionano tutte queste forme di indirizzo: + +| Forma | Esempio | +|---|---| +| SSH, breve | `git@git.example.org:store.git` | +| SSH, con porta | `ssh://git@git.example.org:2222/srv/git/store.git` | +| HTTPS | `https://git.example.org/you/store.git` | + +L'app ti avvisa degli indirizzi che non funzionerebbero bene: una porta personalizzata +senza `ssh://`, una porta su un indirizzo HTTPS, che non è supportata, e `git://`, che +non ha cifratura. + +### Con una chiave SSH + +Tocca **Gestisci** accanto alla riga Chiave SSH. + +{{< image src="ssh-key.png" alt="Schermata Chiave SSH con i pulsanti Importa chiave SSH e Genera coppia di chiavi SSH." class="max-w-sm mx-auto rounded-lg border border-border" />}} + +- **Importa chiave SSH** legge da un file una chiave privata che hai già. +- **Genera coppia di chiavi SSH** crea una nuova chiave sul telefono. Ed25519 è la + scelta migliore, a meno che il server non sia vecchio. **Proteggi con credenziali di + blocco schermo** fa chiedere all'app il blocco schermo ogni volta che usa la chiave. + +Dopo la generazione l'app mostra la chiave pubblica. Aggiungila al tuo server git, nello +stesso punto in cui aggiungeresti la chiave di un computer. Poi torna indietro e tocca +**Clona**. + +### Con una password + +Scegli **Password** e tocca **Clona**. L'app chiede la password quando si connette, e +**Ricorda password** la salva cifrata sul telefono. Molti servizi di hosting vogliono qui +un token di accesso invece della password dell'account. + +### L'identità del server + +Alla prima connessione SSH l'app salva la chiave host del server senza chiedere nulla, e +la controlla a ogni connessione successiva. Se la chiave cambia, la sincronizzazione si +ferma con un errore. Se sai perché è cambiata, tocca **Cancella la chiave host salvata** +nella schermata del repository. Se non lo sai, fermati e scoprilo prima: qualcuno +potrebbe spacciarsi per il tuo server. + +## Importa la chiave privata + +Finita la clonazione, l'app mostra per quale chiave è cifrato l'archivio, sotto +**Destinatari dell'archivio**. + +{{< image src="pgp-import.png" alt="Schermata Importa chiave PGP con l'ID della chiave destinataria dell'archivio e il pulsante Importa chiave PGP." class="max-w-sm mx-auto rounded-lg border border-border" />}} + +Tocca **Importa chiave PGP** e scegli il file della chiave. L'app mostra l'ID della +chiave importata: controlla che corrisponda. Puoi toccare **Più tardi** per saltare il +passo, ma nessuna voce si potrà aprire finché non importi la chiave giusta. + +Si apre l'elenco delle voci, e hai finito. + +{{< image src="store-list.png" alt="L'elenco dell'archivio, con le cartelle otp e work e la voce example.org." class="max-w-sm mx-auto rounded-lg border border-border" />}} + +Ora cancella il file della chiave dalla memoria del telefono, come spiegato in +[Crea un archivio]({{< relref "/hardenedpass/getting-started/create-store" >}}). +La prima volta che apri una voce, l'app chiede la passphrase della chiave. + +## Un archivio senza server + +**Crea repo locale** crea un archivio che vive solo sul telefono. Importa la chiave +privata, poi toccala nell'elenco per creare l'archivio per quella chiave. Ti serve +comunque una chiave generata su un computer, e senza un remote nulla ti protegge se perdi +il telefono. diff --git a/content/it/hardenedpass/getting-started/connect/pgp-import.png b/content/it/hardenedpass/getting-started/connect/pgp-import.png new file mode 100644 index 0000000..976bfda Binary files /dev/null and b/content/it/hardenedpass/getting-started/connect/pgp-import.png differ diff --git a/content/it/hardenedpass/getting-started/connect/repository.png b/content/it/hardenedpass/getting-started/connect/repository.png new file mode 100644 index 0000000..d60e51f Binary files /dev/null and b/content/it/hardenedpass/getting-started/connect/repository.png differ diff --git a/content/it/hardenedpass/getting-started/connect/ssh-key.png b/content/it/hardenedpass/getting-started/connect/ssh-key.png new file mode 100644 index 0000000..0baf468 Binary files /dev/null and b/content/it/hardenedpass/getting-started/connect/ssh-key.png differ diff --git a/content/it/hardenedpass/getting-started/connect/store-list.png b/content/it/hardenedpass/getting-started/connect/store-list.png new file mode 100644 index 0000000..006c288 Binary files /dev/null and b/content/it/hardenedpass/getting-started/connect/store-list.png differ diff --git a/content/it/hardenedpass/getting-started/connect/welcome.png b/content/it/hardenedpass/getting-started/connect/welcome.png new file mode 100644 index 0000000..c30fb12 Binary files /dev/null and b/content/it/hardenedpass/getting-started/connect/welcome.png differ diff --git a/content/it/hardenedpass/getting-started/create-store/index.md b/content/it/hardenedpass/getting-started/create-store/index.md index 8e73690..d36e449 100644 --- a/content/it/hardenedpass/getting-started/create-store/index.md +++ b/content/it/hardenedpass/getting-started/create-store/index.md @@ -1,13 +1,76 @@ +++ title = "Crea un archivio" date = 2026-11-05T00:00:00Z -description = "" +description = "Come creare da zero un archivio di password su un computer: genera una chiave OpenPGP, inizializza pass, aggiungi un remote git privato ed esporta la chiave." weight = 30 draft = true +++ -Placeholder. +Se hai già un archivio in un repository git, passa a +[Collega l'app]({{< relref "/hardenedpass/getting-started/connect" >}}). -## First heading +HardenedPass non può generare chiavi OpenPGP, quindi per questa parte serve un computer +con [GnuPG](https://www.gnupg.org/), [pass](https://www.passwordstore.org/) e +[git](https://git-scm.com/) installati. La maggior parte delle distribuzioni Linux li +offre tutti e tre. -Text. +## Crea una coppia di chiavi + +```bash +gpg --full-generate-key +``` + +Accetta il tipo di chiave predefinito, inserisci il tuo nome e un indirizzo e scegli una +passphrase robusta. La digiterai spesso, quindi sceglila in modo da ricordarla. + +## Crea l'archivio + +Usa l'indirizzo che hai dato alla chiave: + +```bash +pass init you@example.org +pass git init +``` + +Il primo comando crea l'archivio in `~/.password-store` e scrive `.gpg-id`. Il secondo +lo trasforma in un repository git. + +Aggiungi una prima voce, così hai qualcosa con cui provare. `-m` permette di scrivere più +righe; si termina con Ctrl+D: + +```bash +pass insert -m example.org +``` + +``` +hunter2 +username: alice +``` + +## Aggiungi un remote + +Crea un repository **vuoto e privato** su un server git raggiungibile via SSH o HTTPS. Va +bene un servizio di hosting, e va bene un server tuo. Poi collegaci l'archivio e +invialo: + +```bash +pass git remote add origin git@git.example.org:store.git +pass git push -u origin HEAD +``` + +## Esporta la chiave privata + +Il telefono ha bisogno di una copia della chiave privata: + +```bash +gpg --armor --export-secret-keys you@example.org > private-key.asc +``` + +{{< callout type="warning" title="Maneggia questo file con cura" >}} +Sposta `private-key.asc` sul telefono via USB, non per email né tramite un cloud. +Cancellane ogni copia dalla memoria del telefono e dal computer non appena l'app l'ha +importato. L'app ne conserva una sua. +{{< /callout >}} + +Tieni anche un backup offline della chiave, per esempio su una chiavetta USB cifrata. +Il perché è in [Concetti]({{< relref "/hardenedpass/getting-started/concepts" >}}). diff --git a/content/it/hardenedpass/getting-started/install/index.md b/content/it/hardenedpass/getting-started/install/index.md index af2787f..9757022 100644 --- a/content/it/hardenedpass/getting-started/install/index.md +++ b/content/it/hardenedpass/getting-started/install/index.md @@ -1,13 +1,65 @@ +++ title = "Installazione" date = 2026-11-05T00:00:00Z -description = "" +description = "Come scaricare l'APK di HardenedPass dalle release su GitHub, verificarne checksum e certificato di firma, installarlo e aggiornarlo." weight = 20 draft = true +++ -Placeholder. +HardenedPass richiede Android 8 o successivo e funziona senza Google Play Services. Non +è su nessuno store: si installa l'APK dalle release del progetto. -## First heading +## Scarica -Text. +Apri l'[ultima release](https://github.com/danixland/HardenedPass/releases/latest) e +scarica entrambi i file: + +- `HardenedPass_vX.Y.Z.apk`, l'app +- `HardenedPass_vX.Y.Z.apk.sha256`, il suo checksum + +## Verifica il download + +Per questo passo serve un computer, e vale la pena farlo: un gestore di password è +l'ultima cosa da installare da un file manomesso. + +Controlla che il file sia arrivato integro: + +```bash +sha256sum -c HardenedPass_vX.Y.Z.apk.sha256 +``` + +L'output deve finire con `OK`. + +Poi controlla chi l'ha firmato. `apksigner` fa parte dei build tools dell'Android SDK: + +```bash +apksigner verify --print-certs HardenedPass_vX.Y.Z.apk +``` + +La riga `certificate SHA-256 digest` deve riportare: + +``` +725016669e482f9ac371dee8df19a2a1b34fa76d1af05b2a23784725b1b49c83 +``` + +Se uno dei due controlli fallisce, non installare il file. + +## Installa + +Copia l'APK sul telefono e aprilo dal file manager. La prima volta Android chiede di +consentire le installazioni da quell'app. Consentile, installa, poi se preferisci +togli di nuovo il permesso. + +HardenedPass ha un suo application ID, quindi si installa accanto ad Android Password +Store invece di sostituirlo. Le due app non condividono dati: per passare a HardenedPass +configuralo come spiegato in [Collega l'app]({{< relref "/hardenedpass/getting-started/connect" >}}). + +## Aggiorna + +L'app non controlla gli aggiornamenti. Per seguire le nuove versioni tieni d'occhio la +[pagina delle release](https://github.com/danixland/HardenedPass/releases) o il suo +[feed Atom](https://github.com/danixland/HardenedPass/releases.atom). + +Per aggiornare, verifica il nuovo APK nello stesso modo e installalo sopra il vecchio. +Archivio e chiavi restano al loro posto. Android rifiuta un aggiornamento firmato con +una chiave diversa, un controllo in più oltre al tuo. -- cgit v1.2.3