Skip to content

Browser V13 Compatibility

Elman Mohammadi edited this page Oct 6, 2026 · 1 revision

Browser V13 Compatibility

The browser vault remains SECURE-BROWSER-V13 and is intentionally separate from the V14 server package engine.

Why V13 remains separate

The browser environment has different cryptographic primitives and deployment constraints than the PHP/Sodium server engine.

V13 uses:

  • Web Crypto API
  • PBKDF2-HMAC-SHA-256
  • AES-256-GCM
  • HKDF-SHA-256
  • browser-side streaming/chunk processing

V14 uses:

  • libsodium Argon2id13
  • XChaCha20-Poly1305-IETF
  • secretstream XChaCha20-Poly1305
  • server-side package processing

These are deliberately not silently mapped onto each other.

V13 format identity

Format: SECURE-BROWSER-V13
Extension: .spk13
Container magic: SPK13BIN1
Footer magic: SPK13FOOT

V13 KDF

The browser descriptor specifies:

PBKDF2-HMAC-SHA-256
1,500,000 iterations

This is a browser portability choice, not the V14 server KDF.

V13 content encryption

Browser content uses AES-256-GCM.

The browser descriptor also exposes HKDF-SHA-256 for key separation and SHA-256 for chunk integrity and package Merkle integrity.

V13 chunking

The browser descriptor uses content-defined streaming with:

  • minimum chunk: 1 MiB
  • target chunk: 4 MiB
  • maximum chunk: 8 MiB

V13 limits

Current descriptor limits include:

Limit Value
Package bytes 4 GiB
Header 2 MiB
Manifest 32 MiB
Files 100,000
Chunks 1,000,000
Name parts 256
Name bytes 4 KiB
Total plaintext 64 GiB

Recovery

V13 can also create an independent recovery credential and stores explicit slot type/version metadata.

A V13 regression that previously caused browser-created packages to reject themselves was fixed by ensuring slots include:

primary:  type=password-pattern, version=1
recovery: type=recovery, version=1

Compatibility rule

A .spk13 package is not a .spkg14 package.

Do not rename an extension, edit a version field, or inject V13 data into the V14 reader and expect a valid migration.

The V14 reader intentionally rejects unsupported formats instead of guessing.

Recommended migration strategy

During a transition period:

  1. keep V13 tooling available for existing browser packages;
  2. create new server packages as V14;
  3. preserve legacy V13 packages until an explicit migration workflow exists;
  4. do not silently reinterpret V13 package metadata as V14;
  5. test any future conversion path as its own security-critical feature.

Browser-side security boundary

Because V13 executes in a browser, endpoint compromise and malicious browser extensions can affect the client-side secret boundary.

The project therefore treats V13 as a compatibility component with its own threat assumptions rather than claiming that the V13 and V14 designs provide identical guarantees.

Clone this wiki locally