Outil de confidentialité gratuit

Chiffrer un fichier dans votre navigateur

Choisissez un fichier, choisissez une phrase secrète, et téléchargez une copie chiffrée. AES-256-GCM, avec la clé dérivée dans votre navigateur. Rien n’est envoyé, 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 en rien.

S’exécute entièrement dans cet onglet. Rien n’est envoyé, et fonctionne hors ligne une fois chargé.

N’importe quel fichier. Les gros fichiers demandent de la mémoire. Voir les limites honnêtes ci-dessous.

Il n’existe aucune récupération. Une phrase secrète oubliée, c’est un fichier que personne, nous compris, ne pourra jamais ouvrir.

Chaque paramètre, énoncé

Chiffrement
AES-256-GCM (WebCrypto), tag de 128 bits
Dérivation de clé
PBKDF2-HMAC-SHA-256, 600 000 itérations
Sel du KDF
16 octets, CSPRNG, nouveau à chaque fichier
Nonce GCM
12 octets, CSPRNG, nouveau à chaque fichier
Données authentifiées
l’en-tête complet de 42 octets, de sorte qu’altérer n’importe quel paramètre annoncé casse le déchiffrement
Encodage de la phrase secrète
UTF-8, normalisé NFC (pour que la même phrase saisie sur n’importe quel appareil dérive la même clé)

Limites honnêtes

Ce n’est pas le format de coffre de l’application Sealby. L’application dérive les clés avec Argon2id calibré par appareil, les enveloppe dans la Secure Enclave, et stocke le contenu dans des conteneurs déniables découpés en blocs. Aucune page web ne peut faire cela. 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 proposent nativement, et 600 000 itérations rendent chaque tentative lente, mais une ferme de GPU l’attaque tout de même bien plus vite qu’Argon2id. La protection réside donc dans votre phrase secrète : quatre mots aléatoires ou plus, pas un mot de passe.

WebCrypto chiffre en une seule passe. Il n’y a pas de traitement en flux, donc le fichier entier occupe la mémoire deux à trois fois pendant le traitement. Quelques centaines de mégaoctets : sans problème sur la plupart des appareils. Pour les archives de plusieurs gigaoctets : utilisez un outil de bureau. La sortie chiffrée révèle par ailleurs la taille approximative du fichier. Le nom est chiffré à l’intérieur, mais la taille n’est pas dissimulée.

Le format, octet par octet

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

bytesfieldcontents
0–7magicASCII "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 le tag GCM

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

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 secrète, une page. Voilà ce qu’un navigateur sait faire. Sealby le fait correctement : Argon2id calibré pour votre appareil, clés dans la Secure Enclave, et des coffres cachés sans aucune liste ni décompte enregistré.

Télécharger dans l’App Store

iPhone et iPad · iOS 17+ · Gratuit