diff options
Diffstat (limited to 'content/en/hardenedpass/reference')
4 files changed, 190 insertions, 18 deletions
diff --git a/content/en/hardenedpass/reference/_index.md b/content/en/hardenedpass/reference/_index.md index 9a07df6..7b14a54 100644 --- a/content/en/hardenedpass/reference/_index.md +++ b/content/en/hardenedpass/reference/_index.md @@ -1,13 +1,9 @@ +++ title = "Reference" date = 2026-11-05T00:00:00Z -description = "" +description = "Reference pages for HardenedPass: every setting, the security model and fixes for common errors." weight = 30 draft = true +++ -Placeholder. - -## First heading - -Text. +Look things up here when you need them. There is no need to read these pages in order. diff --git a/content/en/hardenedpass/reference/security/index.md b/content/en/hardenedpass/reference/security/index.md index 0c1ba30..c865c1d 100644 --- a/content/en/hardenedpass/reference/security/index.md +++ b/content/en/hardenedpass/reference/security/index.md @@ -1,13 +1,64 @@ +++ title = "Security" date = 2026-11-05T00:00:00Z -description = "" +description = "What HardenedPass protects, where each secret lives, what it sends over the network and which threats it does not cover." weight = 100 draft = true +++ -Placeholder. +This page says what the app does for you and, just as important, what it does not do. -## First heading +## Where your secrets live + +| Secret | Where it is | How it is protected | +|---|---|---| +| Entries | Files in the app's private storage, and on your git server | OpenPGP, the same as `pass` on a computer | +| OpenPGP private key | The app's private storage | Its own passphrase | +| Key passphrase | Nowhere, unless you enable caching | If cached: AES-GCM under an Android Keystore key | +| Git and proxy passwords | The app's private storage, if you tell it to remember them | AES-GCM under an Android Keystore key | +| SSH key made on the phone | Android Keystore | The system, plus your screen lock if you ask for it | +| SSH key you imported | The app's private storage | Its own passphrase, if it has one | + +Android Keystore keys are held by the system and cannot be copied out of the phone, even +by the app that uses them. + +## What the app does + +- **No telemetry.** No analytics, no crash reports, no Google Play Services. The app + only connects to the git server you configured, and to your proxy if you set one. +- **Blocks screenshots of secrets.** Entries, the editor, the generator, passphrase + dialogs and autofill windows cannot be captured by screenshots, and do not appear in + the recent apps view. +- **Clears the clipboard.** A copied password is removed after a timeout. +- **Checks the SSH server.** The server's host key is saved on first connection and + checked after that. The first connection is trusted without asking, so make it on a + network you trust. +- **Trusts known browsers only.** Autofill works only in browsers whose signing + certificate the app recognizes, and warns you if an app's publisher changes. See + [Autofill]({{< relref "/hardenedpass/using/autofill" >}}). +- **Refuses outside files.** Other apps can open the app, but it only opens paths that + really are inside your store. + +## What the app does not protect you from + +- **A compromised phone.** Malware that controls an unlocked phone can see what you + see. Keep the system up to date. +- **Your keyboard.** A keyboard app sees everything you type, the passphrase included. + Use one you trust, with network access off if your system allows that. +- **Other apps reading the clipboard** before the timeout runs out. Autofill avoids the + clipboard altogether. +- **A weak passphrase.** If someone gets your key file, the passphrase is all that is + left. +- **Your git server seeing names.** Entry and folder names are file names, and they are + not encrypted, so the server can read them, along with the dates of your commits. +- **Biometric lock as encryption.** **Enable biometric authentication** is a gate at app + start. It keeps out someone holding your unlocked phone for a moment, and it does not + encrypt anything. +- **Losing your key.** No one can recover a store without its private key and passphrase. + +## Passphrase caching + +Caching is convenient, but while the passphrase is cached, anyone who gets into the +unlocked app can open every entry. It is experimental. If you use it, turn on +**Automatically clear passphrase cache** as well. -Text. diff --git a/content/en/hardenedpass/reference/settings/index.md b/content/en/hardenedpass/reference/settings/index.md index 81a68ad..d856f93 100644 --- a/content/en/hardenedpass/reference/settings/index.md +++ b/content/en/hardenedpass/reference/settings/index.md @@ -1,13 +1,70 @@ +++ title = "Settings" date = 2026-11-05T00:00:00Z -description = "" +description = "Every HardenedPass setting and what it does, section by section: general, autofill, passwords, repository, misc and PGP." weight = 90 draft = true +++ -Placeholder. +Open **Settings** from the three dots in the list's search bar, or from the welcome +screen. Settings are grouped in six sections. -## First heading +## General -Text. +| Setting | What it does | +|---|---| +| **App theme** | Light, dark or following the battery saver. | +| **Password file organization** | How autofill names the files it saves, for example `work/example.org.gpg` or `work/example.org/alice@example.org.gpg`. | +| **Password sort order** | Folders first, or recently used first. | +| **Disable pull to sync action** | Stops the pull down gesture on the list from starting a sync. | +| **Recursive filtering** | Search also looks inside the folders below the current one. | +| **Open search on start** | Opens the search bar when the app starts. | +| **Show all files and folders** | Lists files that are not passwords as well. | +| **Enable biometric authentication** | Asks for your fingerprint when the app starts. See [Security]({{< relref "/hardenedpass/reference/security" >}}) for what this does and does not protect. | + +## Autofill + +| Setting | What it does | +|---|---| +| **Enable Autofill** | Makes HardenedPass the autofill service. See [Autofill]({{< relref "/hardenedpass/using/autofill" >}}). | +| **Default username** | Used when autofill cannot find a username in the entry or its path. | +| **Custom domains** | Domains whose subdomains autofill treats as separate sites. | + +## Passwords + +| Setting | What it does | +|---|---| +| **Password generator type** | The generator that opens first: Classic (the Random tab) or Diceware. | +| **Password copy timeout** | Seconds a copied password stays in the clipboard, 45 by default. 0 means forever. | +| **Show the password** | Whether a decrypted password is visible right away. Copying still works when it is hidden. | +| **Automatically copy password** | Copies the password as soon as an entry is decrypted. | + +## Repository + +| Setting | What it does | +|---|---| +| **Rebase on pull** | On, your local commits go on top of the server's. Off, a merge commit is made instead. On by default. | +| **Edit Git server settings** | Changes the repository URL and how you log in. | +| **HTTP(S) proxy settings** | Sets a proxy. Shown for HTTPS remotes only. | +| **Local Git config & utilities** | Commit name and email, commit log, and the recovery tools described in [Sync]({{< relref "/hardenedpass/using/sync" >}}). | +| **Import SSH key** | Reads a private SSH key from a file. | +| **Generate SSH key pair** | Makes a new SSH key on the phone. | +| **View generated public SSH key** | Shows the public half, to add to your server. | +| **Delete repository** | Deletes the local copy of the store. The server's copy is not touched, and neither are local commits you did not sync: those are gone. | + +## Misc + +| Setting | What it does | +|---|---| +| **Export passwords** | Copies the store, still encrypted, to a folder you choose. | +| **Workaround clipboard history feature** | On phones with a clipboard history, fills it with numbers to push passwords out. | +| **Debug logging** | Turns on debug logs, after an app restart. Release builds only. | + +## PGP settings + +| Setting | What it does | +|---|---| +| **Key manager** | Lists imported keys, imports new ones and deletes old ones. | +| **Encrypt in ASCII armor mode** | Writes entries as text instead of binary. Leave it off unless you know you need it. | +| **Enable passphrase caching** | Remembers the key's passphrase, so that entries open without asking. Experimental, and needs an active screen lock. | +| **Automatically clear passphrase cache** | Forgets the passphrase when the screen turns off. | diff --git a/content/en/hardenedpass/reference/troubleshooting/index.md b/content/en/hardenedpass/reference/troubleshooting/index.md index 4221c83..3dfce92 100644 --- a/content/en/hardenedpass/reference/troubleshooting/index.md +++ b/content/en/hardenedpass/reference/troubleshooting/index.md @@ -1,13 +1,81 @@ +++ title = "Troubleshooting" date = 2026-11-05T00:00:00Z -description = "" +description = "Common HardenedPass errors, what they mean and how to fix them: passphrase, keys, SSH, push rejected, detached head, autofill." weight = 110 draft = true +++ -Placeholder. +## Keys and passphrases -## First heading +**The app asks for the passphrase again and says it is wrong.** The passphrase does not +match the private key. If you changed the key's passphrase on a computer, the app +needs the new one. If caching is on, it asks again and replaces the old value. -Text. +**`Failed to import PGP key`.** The file is not a key the app can use. Keys without an +encryption subkey are rejected, because they could not decrypt anything. Check that you +exported the **private** key, with `gpg --armor --export-secret-keys`. + +**An entry will not open and no key matches.** The store is encrypted for a key that is +not imported. Compare **Store recipients** on the import screen, or the `.gpg-id` file, +with the keys in **Key manager**. A public key alone cannot decrypt: import the private +one. + +**The key is on a smartcard.** GnuPG exports a stub for such a key, with no secret +material in it. The app cannot decrypt with that. It needs the real private key. + +**`Found .gpg-id, but it contains an invalid key ID, fingerprint or user ID`.** The +`.gpg-id` file has something the app does not understand. Check it on a computer: one +key ID, fingerprint or address per line. + +## Connecting + +**`The provided repository URL is not valid`.** See the address forms in +[Connect the app]({{< relref "/hardenedpass/getting-started/connect" >}}). + +**`Wrong password` or `Wrong passphrase`.** For a repository password or an SSH key's +passphrase. Many hosting services want an access token rather than the account password. + +**`Selected file does not appear to be an SSH private key`.** You picked the public key, +or a file in another format. Choose the file without `.pub`. + +**The sync fails after the server was reinstalled or moved.** Its host key changed. If +you are sure why, use **Clear saved host key** on the repository screen, under **Edit +Git server settings**. If you are not, treat it as an attack until you know better. + +**SSH login is refused.** Check that the public key is on the server, for the right +account. **View generated public SSH key** shows it for a key made on the phone. + +## Syncing + +**`Push was rejected by remote, run pull before pushing again`.** The server has commits +you do not have. Use **Synchronize repository**, which pulls and then pushes. + +**`Pull has failed, you're in a detached head`.** A conflict stopped the rebase. +[Sync]({{< relref "/hardenedpass/using/sync" >}}) has the steps. + +**`Merge has failed, you're in a conflicting state`.** The same conflict, with **Rebase +on pull** off. The way out is the hard reset in +[Sync]({{< relref "/hardenedpass/using/sync" >}}), after saving anything you need. + +**`The repository must be cloned before syncing changes`.** The store on the phone has no +remote. Set one under **Edit Git server settings** and clone it. + +## Autofill + +**No suggestions appear.** Check that HardenedPass is the selected autofill service in +Android's settings, and that the browser is on the list in +[Autofill]({{< relref "/hardenedpass/using/autofill" >}}). + +**Only the password gets filled.** That is the browser's support level, as with Vanadium. + +**`This app is currently not supported`.** The app cannot save from there. You can still +add the entry by hand. + +**Nothing happens after tapping Save.** Android 14 and later hold back background +windows, and the app has a workaround: update to the latest version. + +## Still stuck? + +Open an issue on the [tracker](https://github.com/danixland/HardenedPass/issues). Say +which version you run and what you did. Never paste passwords, keys or real entry names. |
