Outil de confidentialité gratuit

Chiffrer un fichier dans votre navigateur

Choisissez un fichier, choisissez une phrase de passe, puis téléchargez une copie chiffrée. AES-256-GCM, avec la clé dérivée dans votre navigateur. Rien n’est téléversé, et ça fonctionne hors ligne une fois la page chargée. Le format est documenté octet par octet ci-dessous, pour que vous n’ayez à nous croire sur parole sur rien.

Fonctionne entièrement dans cet onglet. Rien n’est téléversé, et ça fonctionne hors ligne une fois chargé.

N’importe quel fichier. Les gros fichiers demandent de la mémoire. Voyez les limites franches ci-dessous.

Il n’y a aucune récupération. Une phrase de passe oubliée, c’est un fichier que personne, nous compris, ne pourra jamais ouvrir.

Chaque paramètre, énoncé

Chiffre
AES-256-GCM (WebCrypto), étiquette de 128 bits
Dérivation de clé
PBKDF2-HMAC-SHA-256, 600 000 itérations
Sel du KDF
16 octets, CSPRNG, neuf par fichier
Nonce GCM
12 octets, CSPRNG, neuf par fichier
Données authentifiées
l’en-tête complet de 42 octets, alors trafiquer un seul paramètre annoncé casse le déchiffrement
Encodage de la phrase de passe
UTF-8, normalisé NFC (pour que la même phrase tapée sur n’importe quel appareil dérive la même clé)

Limites, franchement

Ceci n’est pas le format de coffre de l’app Sealby. L’app dérive les clés avec Argon2id calibré par appareil, les enveloppe dans la Secure Enclave et range le contenu dans des conteneurs découpés à déni plausible. Rien de tout cela n’est possible pour une page Web. Cette page est un utilitaire autonome bâti sur ce que les navigateurs offrent nativement.

PBKDF2 n’est pas à coût mémoire élevé. C’est la seule fonction de dérivation de clé que les navigateurs offrent nativement, et 600 000 itérations rendent chaque supposition lente, mais une machine à GPU l’attaque encore bien plus vite qu’Argon2id. La protection vit donc dans votre phrase de passe : quatre mots aléatoires ou plus, pas un mot de passe.

WebCrypto chiffre en une seule passe. Il n’y a pas de flux, alors le fichier entier occupe la mémoire deux à trois fois pendant le traitement. Des centaines de mégaoctets, c’est correct sur la plupart des appareils. Pour des archives de plusieurs gigaoctets, utilisez un outil de bureau. La sortie chiffrée révèle aussi la taille approximative du fichier. Le nom est chiffré à l’intérieur, mais la taille n’est pas cachée.

Le format, octet par octet

Tout ce qu’il faut à un lecteur technique pour vérifier la sortie de cette page de façon indépendante, ou la déchiffrer en vingt lignes de Python :

bytesfieldcontents
0–7magieASCII "SBXF0001"
8version0x01
9algorithme0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13itérationsuint32, gros-boutiste (600 000)
14–29sel16 octets
30–41nonce12 octets
42–fintexte chiffréAES-256-GCM de la charge utile, AAD = octets 0–41; les 16 derniers octets sont l’étiquette GCM

Charge utile avant chiffrement : [longueur du nom sur 2 octets, gros-boutiste][nom de fichier, UTF-8][octets du fichier]. Le nom de fichier d’origine voyage chiffré; au déchiffrement, il est rétabli.

Déchiffreur de référence (Python, bibliothèque cryptography)
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)

Ceci est la démo. Le coffre, c’est le produit.

Un fichier, une phrase de passe, une page. Voilà ce qu’un navigateur peut faire. Sealby le fait comme il faut : Argon2id calibré pour votre appareil, clés dans la Secure Enclave, et des coffres cachés sans liste ni décompte enregistré.

Télécharger dans l’App Store

iPhone et iPad · iOS 17+ · Gratuit