SPECIFICATION
The .ssz format, fully documented
A Starkive Secure Container is not a proprietary black box. It is a 132-byte header followed by a standard, WinZip AES-256 encrypted ZIP archive. Everything you need to read or verify one independently is on this page. No Starkive software is required to decrypt your data.
Container layout (version 2)
| Offset | Size | Contents |
|---|---|---|
| 0 | 4 bytes | Magic: 53 53 5A 02 (ASCII SSZ followed by the byte 0x02) |
| 4 | 4 bytes | Format version, little-endian uint32. Current version: 2 |
| 8 | 16 bytes | File token: a GUID (in .NET GUID byte order) identifying this container for open notifications |
| 24 | 32 bytes | KDF salt: 32 random bytes from a CSPRNG, unique per container |
| 56 | 36 bytes | Sender ID: 36 ASCII bytes (a UUID string; zeroed for anonymous web shares) |
| 92 | 32 bytes | SHA-256 hash of the encrypted payload (integrity lock) |
| 124 | 8 bytes | Payload length in bytes, little-endian int64 |
| 132 | n bytes | Payload: a standard ZIP archive encrypted with WinZip AES-256 |
Key derivation
The password you type is never used directly. It is stretched with PBKDF2-HMAC-SHA256 using the 32-byte salt at offset 24 and 310,000 iterations, producing 32 bytes. Those bytes are hex-encoded and uppercased, and that hex string is the password handed to the WinZip AES-256 layer that seals the payload.
key = PBKDF2-HMAC-SHA256(password, salt, iterations = 310000, length = 32) zipPw = UPPERCASE(HEX(key)) // 64 hex characters payload is a ZIP encrypted with WinZip AES-256 using zipPw
Integrity
The 32 bytes at offset 92 are the SHA-256 hash of the encrypted payload. Readers verify this before attempting decryption; any modification of the payload is detected. This makes a container tamper evident: changes cannot be hidden, though the format does not prevent someone from destroying a file they possess.
Open notifications
The file token at offset 16 is a random UUID with no personal data in it. When a Starkive app opens a container, it may report that token to our service so the sender gets their open alert. Decryption itself is fully offline: the token report is a courtesy signal, not a requirement, and the payload never leaves your device.
Reading a container yourself
Any language with PBKDF2 and a WinZip AES-256 capable ZIP library can open a .ssz file. In practice: read the salt at offset 24, derive the hex password as above, strip the first 132 bytes, and hand the rest to your ZIP library. Python users can do this with cryptography and pyzipper; JavaScript users with the WebCrypto API and zip.js, which is exactly what this website does for one-time secret links.
Questions about the format, or found an inconsistency between this page and the implementation? Email [email protected]. This specification is versioned with the apps; the current container version is 2.