What the seal defends against, what it doesn't, and where the limits lie. Stated explicitly so they survive scrutiny.
A security claim with no boundaries is a security claim that doesn't survive cross-examination. SALT's design intentionally narrows what the seal proves. This document makes that narrowness explicit, so a reviewer can verify SALT's properties without needing to discover the gaps on their own.
The model below describes attacker capabilities, what each can and cannot do against a SALT-sealed archive, and what defensive properties SALT relies on. It is intentionally honest about residual risk.
| Threat | Defended? | How |
|---|---|---|
| Modifying any byte of the sealed archive after capture | Yes | Bundle hash mismatch; TSA timestamp signs the original hash |
| Replacing one record's data with another's | Yes | Per-row provenance hash mismatch; affects bundle hash; TSA signature breaks |
| Forging a Sealed Ledger seal without keys | Yes | Sealed Ledger holds no signing keys; the seal is from the TSA, not from us |
| Forging a TSA signature | Yes | Computationally infeasible without the TSA's private key |
| Backdating a seal to claim earlier capture time | Yes | The TSA's genTime is signed; cannot be moved earlier without re-signing |
| Replaying an old seal against a different archive | Yes | The TSA token signs a specific hash; any other archive will hash differently |
| Tampering with the source QBO/QBD data before capture | No | SALT captures what the source returns; it cannot validate the source itself |
| Compelling the source platform (Intuit) to return false data | No | Outside SALT's scope — would require Intuit-level audit |
| Future cryptographic break of SHA-256 | Mitigated | Re-sealing under stronger algorithms preserves the original timestamp chain |
| Compromise of the TSA's private key | Mitigated | Multi-TSA support possible; ability to add additional independent timestamps over time |
| Loss or destruction of the user's archive | No | Custody is the user's responsibility; SALT does not guarantee retention |
| Unauthorized read access to archive contents (confidentiality) | Optional | Inner seal covers integrity. Optional outer-layer encryption (user-supplied passphrase) covers confidentiality. Sealed Ledger holds no decryption keys. |
| Selective omission during capture (records the source has but doesn't return) | Mitigated | SALT records what the API returns; structural integrity checks surface inconsistencies |
The threat model assumes an attacker may have any combination of the following capabilities:
The attacker is assumed not to have:
This is SALT's primary protection. Once the archive is sealed and time-stamped:
_raw_json_sha256 creates a row-level mismatch detectable by anyone with sha256sum.To successfully tamper, an attacker would need to also forge a new TSA signature — which requires the TSA's private key.
The TSA's genTime is part of what the TSA signs. An attacker cannot move the timestamp backwards without invalidating the signature. Likewise, a TSA token signs a specific hash; using it against a different archive produces a verifiable mismatch.
SALT does not introduce a Sealed Ledger signing key. The cryptographic authority comes from the external TSA, not from us. There is no Sealed Ledger key to compromise, no Sealed Ledger insider attack, no Sealed Ledger key-management failure mode that affects existing seals.
SALT addresses integrity — proving the data is unchanged since capture. SALT does not, by itself, address confidentiality — preventing unauthorized parties from reading the data. Integrity and confidentiality are independent properties: a properly encrypted archive whose seal is broken is still compromised, and an unencrypted archive whose seal is intact is still defensible as evidence of what was captured.
For engagements where confidentiality matters (most of them), Sealed Ledger delivers bundles under a dual-layer encryption model: an inner seal over the plaintext database (the standard SALT seal), and an outer seal over the encrypted bundle. The outer encryption uses a passphrase the user supplies at delivery time; Sealed Ledger does not retain the passphrase. See the Custody & Handoff document for the operational model and the Verification Guide for the decryption and verification procedure.
This is the most important limit. If a user edits records in QuickBooks Online or QuickBooks Desktop before running SALT, SALT will faithfully capture and seal the modified data. The seal attests to what the source system returned at capture time, not what the source system should have contained.
This limit is structural, not a defect. No software can independently verify the truthfulness of an API response from a third-party platform. Auditors and forensic accountants understand this distinction; SALT's role is to remove every other downstream tampering risk so that the only remaining question is the integrity of the source itself.
If Intuit (or another source platform) returns falsified data — whether through compromise, legal compulsion, or platform-level error — SALT captures whatever is returned. SALT does not detect platform-level integrity failures.
SALT delivers the bundle to the user. The user is the custodian. Sealed Ledger does not retain copies, does not provide recovery if the bundle is lost, and does not guarantee long-term storage. If the user's storage is destroyed, the archive is gone.
A user holding multiple archives may present only some of them. SALT can prove a presented archive is unmodified, but cannot prove that another archive of the same data does not also exist. This is a custody-of-evidence question, not a cryptographic question.
SHA-256 is currently considered cryptographically sound. If a practical break is published in the future, archives sealed today would become unverifiable under the broken algorithm. SALT mitigates this through re-sealing: an existing archive can be hashed under a stronger algorithm (SHA-3, post-quantum hashes) and re-time-stamped, with the original timestamp chain preserved as historical evidence. This is standard practice in long-lived digital archiving.
If a TSA's private key is compromised, signatures issued by that TSA become forgeable retroactively. SALT mitigates this by:
If the source platform omits records that exist (intentionally or by error), SALT cannot detect the omission directly — it only sees what the API returned. However, structural integrity checks ran at capture time (debits = credits, transaction-index counts match, linked-transaction targets resolve) surface inconsistencies that often correlate with selective omission. A reviewer evaluating an archive checks the _integrity_checks table for any failures.
SALT's security claims rest on the following assumptions, listed in decreasing order of confidence:
genTime values.The following are deliberately not part of SALT's threat model:
A reviewer evaluating SALT's appropriateness for a particular use case should ask:
For most engagement contexts — migration, cleanup, audit defense, dispute resolution — SALT's defenses cover the threat surface that matters and disclose what they don't cover. That combination is what makes the seal defensible.