Kostenloses Privatsphäre-Tool

Eine Datei im Browser verschlüsseln

Datei wählen, Passphrase wählen und eine verschlüsselte Kopie herunterladen. AES-256-GCM, mit dem Schlüssel in deinem Browser abgeleitet. Nichts wird hochgeladen, und es funktioniert offline, sobald es geladen ist. Das Format ist unten Byte für Byte dokumentiert, damit du uns nichts glauben musst.

Läuft vollständig in diesem Tab. Nichts wird hochgeladen, und es funktioniert offline, sobald es geladen ist.

Jede Datei. Große Dateien brauchen Speicher. Siehe die ehrlichen Grenzen unten.

Es gibt keine Wiederherstellung. Eine vergessene Passphrase bedeutet eine Datei, die niemand, wir eingeschlossen, jemals öffnen kann.

Jeder Parameter, offengelegt

Verfahren
AES-256-GCM (WebCrypto), 128-Bit-Tag
Schlüsselableitung
PBKDF2-HMAC-SHA-256, 600.000 Iterationen
KDF-Salt
16 Bytes, CSPRNG, pro Datei neu
GCM-Nonce
12 Bytes, CSPRNG, pro Datei neu
Authentifizierte Daten
der gesamte 42-Byte-Header, sodass jede Manipulation eines angegebenen Parameters die Entschlüsselung bricht
Kodierung der Passphrase
UTF-8, NFC-normalisiert (damit dieselbe Phrase auf jedem Gerät denselben Schlüssel ergibt)

Ehrliche Grenzen

Das ist nicht das Tresorformat der Sealby-App. Die App leitet Schlüssel mit pro Gerät kalibriertem Argon2id ab, umschließt sie in der Secure Enclave und legt Inhalte in abstreitbaren, gestückelten Containern ab. Nichts davon kann eine Webseite. Diese Seite ist ein eigenständiges Werkzeug, gebaut auf dem, was Browser von Haus aus bieten.

PBKDF2 ist nicht speicherhart. Es ist die einzige Schlüsselableitungsfunktion, die Browser nativ mitbringen, und 600.000 Iterationen machen jeden Rateversuch langsam, aber eine GPU-Farm greift es trotzdem weit schneller an als Argon2id. Der Schutz liegt deshalb in deiner Passphrase: vier zufällige Wörter oder mehr, kein Passwort.

WebCrypto verschlüsselt in einem Rutsch. Es gibt kein Streaming, also liegt die ganze Datei während der Verarbeitung zwei- bis dreifach im Speicher. Hunderte Megabyte sind auf den meisten Geräten kein Problem. Für mehrere Gigabyte große Archive nimm ein Desktop-Tool. Die verschlüsselte Ausgabe verrät außerdem die ungefähre Größe der Datei. Der Name ist innen verschlüsselt, die Größe aber nicht verborgen.

Das Format, Byte für Byte

Alles, was technische Leser:innen brauchen, um die Ausgabe dieser Seite unabhängig zu überprüfen oder sie in zwanzig Zeilen Python zu entschlüsseln:

bytesfieldcontents
0–7MagicASCII "SBXF0001"
8Version0x01
9Algorithmus0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13Iterationenuint32, Big-Endian (600.000)
14–29Salt16 Bytes
30–41Nonce12 Bytes
42–EndeChiffratAES-256-GCM der Nutzdaten, AAD = Bytes 0–41; die letzten 16 Bytes sind das GCM-Tag

Nutzdaten vor der Verschlüsselung: [2 Byte Namenslänge, Big-Endian][Dateiname, UTF-8][Dateibytes]. Der ursprüngliche Dateiname reist verschlüsselt mit; beim Entschlüsseln wird er wiederhergestellt.

Referenz-Entschlüsseler (Python, cryptography-Bibliothek)
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)

Das hier ist die Demo. Der Tresor ist das Produkt.

Eine Datei, eine Passphrase, eine Seite. Mehr kann ein Browser nicht. Sealby macht es richtig: Argon2id, kalibriert auf dein Gerät, Schlüssel in der Secure Enclave und versteckte Tresore ohne gespeicherte Liste oder Anzahl.

Laden im App Store

iPhone & iPad · iOS 17+ · Kostenlos