Help Center / Security & privacy

Security & privacy

Bastion is local-first by design. This page explains exactly how your data is handled, why CUI never leaves your machine, and how to back up and move your work safely.

On this page

  1. Local-first architecture
  2. Zero CUI egress
  3. Where your data lives
  4. Hashing & integrity
  5. Redaction for sharing
  6. Backup & restore
  7. Shared-machine hygiene

1. Local-first architecture

Bastion is static files — HTML, CSS, and vanilla JavaScript — with no backend. The only network requests it makes are to load its own bundled control data (assets/data/*.json) from the same origin it's served from. There is:

2. Zero CUI egress

Everything you enter — statuses, notes, evidence, org details, affirmations — stays on your device. The places people worry about data leaving are all handled locally:

ActionWhat actually happens
Attaching an evidence fileHashed in-browser (SubtleCrypto); bytes discarded. No upload. See evidence vault.
Generating an SSP / POA&M / bundleAssembled in-browser and saved as a local download.
Computing the integrity hashComputed locally over the export text.
Importing Sightline / Cairn evidenceYou choose a local JSON file; it's parsed in-browser. Nothing is fetched from those services by Bastion.
Exporting / importing your assessmentLocal file download / local file pick. No transmission.

3. Where your data lives

Your assessment is stored in this browser's localStorage, namespaced per system profile. Each profile keeps its own assessment, org details, score history, planned remediations, affirmation, level, and triage answers. Switching profiles swaps the active data set; deleting a profile removes its data.

Because storage is per-browser and per-device, your work is not synced anywhere. Clearing site data, using a different browser, or switching computers means starting fresh — unless you've exported a JSON backup. Treat the JSON export as your real save file.

4. Hashing & integrity

Bastion uses the browser's Web Crypto API (crypto.subtle) for two things: hashing attached evidence files and stamping each exported bundle with a SHA-256 integrity hash. Both run entirely locally. The bundle hash lets a recipient confirm the file wasn't altered after handoff (see the integrity hash).

Secure-context note. crypto.subtle is only available in a secure context — https:// or http://localhost. If you open Bastion over plain http:// on a non-localhost address, hashing may be unavailable: file attaches still work but without a hash, and bundles export without the integrity line. Use HTTPS or localhost to get full integrity features.

5. Redaction for sharing

When you must share a package outside your CUI boundary, use the redacted export. It strips operator-entered free text (notes, evidence locations, reference names, scope/description) while keeping structural facts (status, scores, ownership, dates, and attached-file hashes). See export redaction.

6. Backup & restore

Your assessment is only as safe as your last export. The Data tab handles backup and migration:

Back up: click "⬇ Export assessment (JSON)." This saves a complete file (profile name, level, org, assessment, history, score) you can re-import later.
Move to another machine: copy the JSON file over (via your own secure channel), open Bastion there, create/select a profile, then…
Restore: click "⬆ Import assessment (JSON)" and pick the file. It loads the assessment, org, history, and level into the active profile.

Export regularly — at least after each significant work session. The JSON is plain and portable, so you can also keep it in your own version control or secure document store inside your CUI boundary.

7. Shared-machine hygiene

Next: Troubleshooting & FAQ Back to Help Center