How we protect your documents.
Security is not an add-on. Here is how ZSign keeps your data safe.
Encryption
- All data in transit is encrypted with 256-bit SSL (TLS 1.2+).
- All data at rest is encrypted with AES-256 by our managed cloud database tier.
- OAuth tokens (Salesforce, HubSpot, Google) are encrypted with AES-256-GCM in our database — even an exfiltrated DB dump leaks no usable credentials.
- API keys are hashed with SHA-256 before storage. The plaintext key is shown exactly once at creation and never stored.
Legal compliance
- ZSign signatures comply with the US ESIGN Act and UETA, which give electronic signatures the same legal standing as handwritten ones.
- EU users: ZSign signatures qualify as Basic Electronic Signatures under eIDAS Art. 25 §1 — admissible as evidence of valid execution. Advanced and Qualified Electronic Signatures (eIDAS AES/QES) are on our roadmap.
- Every signature carries a Certificate of Completion citing ESIGN §§7001/7006 and UETA §§7/9/12, exportable for legal discovery.
- Electronic Records Consent Disclosure (ERCD) is captured before any signature, with the disclosed version logged into the audit trail.
Tamper-evident audit trail
- Every signature event records the signer's IP address, timestamp, user agent, and signing method (draw / type / upload).
- Every audit-log row carries a SHA-256 hash chained to the previous row's hash. Removing or modifying ANY past event breaks the chain — tampering is detectable, not just suspected.
- The final signed PDF's bytes are hashed at delivery time. A nightly job re-fetches the artifact and re-computes the hash; bit-rot or silent corruption raises an alert before the next signer sees the doc.
- The full audit trail is exportable as a byte-deterministic evidence bundle (manifest + audit-log JSONL + attestation + Certificate of Completion) — the same shape your counsel can drop into a discovery request.
Data hosting & durability
- ZSign runs on enterprise-grade managed cloud infrastructure with row-level security enforcing tenant isolation. User A's documents are not reachable from User B's session, ever.
- File storage uses S3-compatible object storage. Signed documents land in a WORM (write-once-read-many) Object Lock compliance-mode bucket — no one (including ZSign operators) can delete or overwrite them for 7 years.
- Lifecycle policies are defined as code: signed-PDF retention, version-history pruning, and audit-log archival are version-controlled, peer-reviewed, and applied via deploy — not configured by hand in someone's console.
- All infrastructure is served over HTTPS with HSTS enabled (Strict-Transport-Security).
Continuous security discipline
- Every outbound HTTP fetch is routed through an SSRF guard — defends against cloud-metadata-endpoint exfiltration even when an authenticated user controls the URL. Enforced by a CI guard that fails the build if a raw fetch is added.
- Every unauthenticated endpoint is rate-limited (login, public signing links, webhook receivers, OAuth callbacks). Coverage is enforced by a CI guard that audits every route on every PR.
- OAuth flows are pinned to PKCE + cryptographically-random single-use state + redirect-uri allowlist. Tokens at rest are encrypted (above). Invariants are pinned by 42 test cases that block regressions.
- Multi-tenant data-leak boundary is enforced by a static guard that fails the build if any new CRUD route reads or writes an org-scoped table without filtering by organization_id.
Trust & transparency
SOC 2 Type II
Audit in preparation. We're putting the evidence-collection automation in place and will engage a CPA firm before pursuing the Type I attestation. Buyers in regulated industries: ask for the latest controls matrix at security@getzsign.com.
Responsible disclosure
security@getzsign.com — we acknowledge within 1 business day, triage in 5, and credit the reporter in our changelog (with consent). No bug-bounty program yet, but we'll discuss case-by-case.
Data Processing Agreement (DPA)
Standard DPA available for any paid customer. Review the current DPA template or request a counter-signed copy via support.
Multi-tenant isolation
Database-level row security enforces tenant boundaries. A static CI guard fails the build if any new CRUD route reads or writes an organization-scoped table without filtering by tenant — the canonical multi-tenant data-leak class. Every org-scoped table in the schema is under this guard.
Status page
Public uptime + incident history page is being set up. Until it's live, subscribe to security@getzsign.com for incident updates — we'll publish a post-mortem within 5 business days of any user-impacting incident.
Sub-processors list
Disclosed in the Data Processing Agreement and on request to security@getzsign.com. Customers are notified at least 30 days before any sub-processor change.
Questions about security?
We are happy to answer any questions about how we handle your data, request a DPA, or discuss your compliance requirements.
security@getzsign.com