Gratis privacytool
Versleutel een bestand in je browser
Kies een bestand, kies een wachtwoordzin en download een versleutelde kopie. AES-256-GCM, met de sleutel die in je browser wordt afgeleid. Er wordt niets geüpload en het werkt offline zodra de pagina geladen is. Het formaat staat hieronder byte voor byte gedocumenteerd, zodat je ons nergens op hoeft te geloven.
Draait volledig in dit tabblad. Er wordt niets geüpload en het werkt offline zodra het geladen is.
Elk bestand. Grote bestanden vragen geheugen. Zie de eerlijke grenzen hieronder.
Er is geen herstel. Een vergeten wachtwoordzin betekent een bestand dat niemand, wij ook niet, ooit nog kan openen.
Elke parameter, uitgeschreven
- Cipher
- AES-256-GCM (WebCrypto), 128-bits tag
- Sleutelafleiding
- PBKDF2-HMAC-SHA-256, 600.000 iteraties
- KDF-salt
- 16 bytes, CSPRNG, vers per bestand
- GCM-nonce
- 12 bytes, CSPRNG, vers per bestand
- Geauthenticeerde data
- de volledige header van 42 bytes, dus knoeien met welke vermelde parameter dan ook breekt het ontsleutelen
- Codering wachtwoordzin
- UTF-8, NFC-genormaliseerd (zodat dezelfde zin op elk apparaat dezelfde sleutel oplevert)
Eerlijke grenzen
Dit is niet het kluisformaat van de Sealby-app. De app leidt sleutels af met Argon2id, per toestel gekalibreerd, verpakt ze in de Secure Enclave en slaat inhoud op in ontkenbare containers met blokken. Dat kan een webpagina allemaal niet. Deze pagina is een losstaand hulpmiddel, gebouwd op wat browsers van zichzelf bieden.
PBKDF2 is niet geheugenintensief. Het is de enige sleutelafleidingsfunctie die browsers standaard meeleveren, en 600.000 iteraties maakt elke gok traag, maar een GPU-opstelling valt het nog steeds veel sneller aan dan Argon2id. De bescherming zit daarom in je wachtwoordzin: vier willekeurige woorden of meer, geen wachtwoord.
WebCrypto versleutelt in één keer. Er is geen streaming, dus het hele bestand zit tijdens de verwerking twee tot drie keer tegelijk in het geheugen. Honderden megabytes zijn prima op de meeste apparaten. Gebruik voor archieven van meerdere gigabytes een desktoptool. De versleutelde uitvoer verraadt ook de globale omvang van het bestand. De naam zit er versleuteld in, maar de grootte wordt niet verborgen.
Het formaat, byte voor byte
Alles wat een technische lezer nodig heeft om de uitvoer van deze pagina zelfstandig te verifiëren, of om die in twintig regels Python te ontsleutelen:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SBXF0001" |
| 8 | versie | 0x01 |
| 9 | algoritme | 0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256 |
| 10–13 | iteraties | uint32, big-endian (600.000) |
| 14–29 | salt | 16 bytes |
| 30–41 | nonce | 12 bytes |
| 42–einde | ciphertext | AES-256-GCM van de payload, AAD = bytes 0–41; de laatste 16 bytes zijn de GCM-tag |
Payload vóór versleuteling: [naamlengte van 2 bytes, big-endian][bestandsnaam, UTF-8][bestandsbytes]. De oorspronkelijke bestandsnaam reist versleuteld mee; bij het ontsleutelen wordt hij hersteld.
Referentie-ontsleutelaar (Python, cryptography-bibliotheek)
import sys, hashlib, struct, unicodedata
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SBXF0001" and raw[8] == 1 and raw[9] == 1
iters = struct.unpack(">I", raw[10:14])[0] # 600000
salt, nonce, ct = raw[14:30], raw[30:42], raw[42:]
phrase = unicodedata.normalize("NFC", sys.argv[2]).encode()
key = hashlib.pbkdf2_hmac("sha256", phrase, salt, iters, 32)
plain = AESGCM(key).decrypt(nonce, ct, raw[:42]) # AAD = header
name_len = struct.unpack(">H", plain[:2])[0]
name = plain[2 : 2 + name_len].decode()
open(name, "wb").write(plain[2 + name_len :])
print("decrypted ->", name)Dit is de demo. De kluis is het product.
Eén bestand, één wachtwoordzin, één pagina. Dat is wat een browser kan. Sealby doet het goed: Argon2id gekalibreerd op jouw toestel, sleutels in de Secure Enclave, en verborgen kluizen zonder opgeslagen lijst of telling.
iPhone & iPad · iOS 17+ · Gratis