Security & Audit

Tamper-evident. Legally defensible. Forensically complete.

Every LIABL document is immutably hashed at signing time. Every event is logged with millisecond precision, IP address, device fingerprint, and chain of custody.

Document integrity verification

Every signed LIABL document receives a SHA-256 cryptographic hash at the moment of signing. Paste any Document ID to retrieve the chain of custody and verify the document has not been altered.

Try doc_a1b2c3d4 to see a verified result.

Real-time audit trail

Every event in the LIABL document lifecycle is logged with millisecond precision, IP address, device fingerprint, and actor identity. This is the chain of custody your legal team produces in court.

Event stream · doc_a1b2c3d4✓ Chain intact
09:04:12.441waiver.signed
Jordan Rivera
SHA-256: 7f3a9c21... · IP: 98.112.44.21 · Chrome 124 / macOS
09:04:11.028signature.captured
Jordan Rivera
Draw signature · Canvas fingerprint recorded
09:03:58.774document.viewed
Jordan Rivera
All 6 clauses scrolled · Average read time: 47 seconds
09:03:44.102waiver.generated
LIABL system
Activity: Kayaking · 2 adaptive clauses · Risk score: 42 (Moderate)
09:03:40.021session.started
Jordan Rivera
Entry via operator QR code · Session AM-04
09:02:15.330session.qr_generated
LIABL system
QR code issued for AM-04 Whitewater Kayaking

How document sealing works

When a participant submits their signature, LIABL concatenates the document content, participant identity, timestamp, IP address, and session metadata — then generates a SHA-256 hash of the result. That hash is stored immutably. If a single character in the document changes, the hash changes.

// Document sealing pseudocode
const payload = {
clauses: document.clauses,
participant: identity.verified,
signature: canvas.toDataURL(),
timestamp: Date.now(),
ip_address: req.headers['x-forwarded-for'],
session_id: session.id,
}
const hash = SHA256(JSON.stringify(payload))
// → 7f3a9c212d4e5b6a8c9d0e1f2a3b4c5d...