Skip to content

LockHTML v1.4.0

Choose a tag to compare

@drsamonline drsamonline released this 20 Oct 14:42
· 25 commits to main since this release

LockHTML v1.4.0

Split the key. Shamir secret sharing, so any k of n holders can open a file — and no fewer.

Highlights

  • 🧩 Shamir secret sharing — a random 32-byte key seed is split with Shamir's scheme over GF(256); any k of n shares reconstruct it, and k−1 reveal nothing.
  • 📄 Shares ship separately — lock --shares 5:3 writes a .shares.txt to distribute however you like. The locked file alone cannot be opened.
  • 🗂️ Works with the streaming container too, and combines with a PIN and a keyfile.
  • 🖥️ GUI support — a share-split field on the lock tab, and a shares box on unlock.
  • 🔒 Hardened reconstruction — duplicate indices, index 0 and ragged shares are rejected, and only the first k shares are used so a stray extra share can't corrupt a valid set.

Usage

lockhtml lock report.html --shares 5:3      # -> report.locked.html + report.locked.shares.txt
lockhtml unlock report.locked.html --shares some-three.txt
lockhtml unlock report.locked.html --share <b64> --share <b64> --share <b64>

# large file, split across holders
lockhtml lock big.mp4 --shares 5:3 --stream

Live GUI

👉 https://drsamonline.github.io/lockhtml/

Verification

74 unit tests — including GF(256) checked against the FIPS-197 AES vector and all 255 inverses — plus a 30-check headless-Chrome run across all four modes (embedded, streaming, recipient, shares) and 9 cross-implementation checks where the browser locks files the Python core then opens. The Python and JavaScript share arithmetic are proven to agree. All of it runs in CI.

Security note

Shares move the secret, not the trust: any k holders can reconstruct the seed, and a reconstructed seed cannot be revoked — re-lock with a fresh split if shares are exposed. See SECURITY.md and the self-audit in docs/AUDIT.md.