Outil de confidentialité gratuit

Sceller un fichier

Chiffrez un fichier sous une clé neuve à usage unique et envoyez-le par le canal de votre choix. La personne qui détient la clé l’ouvre ici même, sur cette page. Rien n’est jamais téléversé, il n’y a aucune phrase de passe à craquer, et vous voyez le contenu avant que quoi que ce soit ne soit enregistré.

Fonctionne entièrement dans cet onglet. Cette page ne peut communiquer avec aucun serveur, quel qu’il soit.

Chaque paramètre, énoncé

Chiffre
AES-256-GCM (WebCrypto), étiquette de 128 bits par bloc
Clé
256 bits tirés du CSPRNG du navigateur, générée neuve à chaque scellement, utilisée une seule fois, dérivée de rien
Découpage
un manifeste chiffré (nom de fichier, taille, type), puis le fichier en blocs de 1 Mio — chacun authentifié séparément
Nonce
sel de scellement aléatoire de 32 bits ‖ compteur de blocs de 64 bits — jamais répété dans un même fichier, et la clé est de toute façon à usage unique
Données authentifiées
l’en-tête complet de 16 octets, plus l’index de chaque bloc et le nombre total de blocs — réordonner, tronquer ou greffer des blocs casse le déchiffrement
Chaîne de la clé
base64url, 47 caractères : la clé de 32 octets plus une somme de contrôle SHA-256 de 3 octets, pour qu’une faute de frappe échoue proprement au lieu de produire du charabia

Des réponses franches sur ce que fait cet outil

Tout se passe dans votre navigateur.

Le scellement comme l’ouverture lisent le fichier dans la mémoire de cette page, y exécutent AES-256-GCM avec le moteur WebCrypto intégré à votre navigateur, et vous rendent le résultat sous forme de téléchargement. Rien n’est téléversé. Il n’y a aucun compte ni traitement côté serveur. Contrairement au reste de ce site, cette page ne charge même pas le compteur de visites sans témoins. Aucune analytique, d’aucune sorte.

Ce n’est pas qu’une promesse. La page est servie avec une Content-Security-Policy qui n’autorise le navigateur à récupérer que les fichiers statiques de ce site. Elle n’a aucun moyen d’envoyer votre fichier, votre clé ou quoi que ce soit d’autre à un serveur, les nôtres compris. Ouvrez les outils de développement de votre navigateur pendant le scellement et vous verrez zéro requête. Pour la preuve la plus brute, installez la boîte à outils et scellez en mode avion. Le réseau coupé, rien ne peut sortir.

La clé est tout — et nous ne l’avons jamais.

Chaque scellement génère dans votre navigateur une clé aléatoire de 256 bits toute neuve. Elle vous est montrée une seule fois et n’est conservée nulle part : ni dans nos systèmes (il n’y en a aucun d’impliqué), ni dans le stockage de votre navigateur, ni dans le fichier scellé. Il n’y a aucune phrase de passe à deviner et rien à attaquer par force brute. Qui détient la clé et le fichier peut l’ouvrir. Qui ne les détient pas, non.

Ça a une conséquence dure : si la clé est perdue, le fichier est perdu. Aucune réinitialisation, aucun billet de soutien, aucune récupération. Ce n’est pas de la mauvaise volonté de notre part. Une copie que nous pourrions récupérer serait une copie que quelqu’un pourrait voler ou exiger.

Le lien de la clé n’atteint jamais un serveur.

Le lien de partage place la clé après le # dans l’URL. Cette partie-là, le fragment, reste chez le navigateur. Elle n’est jamais incluse dans ce qu’il envoie à un serveur, le nôtre ou celui de qui que ce soit. Quand cette page se charge avec une clé dans le lien, elle lit la clé, bascule vers l’onglet Ouvrir et retire immédiatement la clé de la barre d’adresse. Ainsi, elle ne traîne ni dans l’URL visible ni dans l’historique du navigateur.

Reste que quiconque a à la fois le lien et le fichier scellé peut l’ouvrir. C’est pourquoi cette page vous dit d’envoyer le fichier et la clé par des canaux différents.

Vous voyez ce qu’il y a dedans avant que rien ne soit enregistré.

L’ouverture se fait en deux temps. D’abord, la page ne déchiffre qu’un petit manifeste : le nom, la taille et le type du fichier d’origine. Elle vous le montre, avec un avertissement bien visible pour les types de fichiers capables d’exécuter du code (programmes, scripts, installateurs, documents à macros, HTML) et pour les noms déguisés par une double extension comme invoice.pdf.exe. Rien n’est écrit tant que vous ne cliquez pas pour déchiffrer. La page n’ouvre ni n’affiche jamais elle-même le contenu déchiffré. Elle ne fait que proposer le fichier en téléchargement.

Soyez clair sur ce que le chiffrement prouve et ne prouve pas. Un fichier scellé est confidentiel pendant son transport. Le sceller ne dit rien sur qui l’a envoyé ni sur l’innocuité de son contenu. Traitez un fichier scellé inattendu avec le même scepticisme qu’une pièce jointe inattendue.

Où passe vraiment la frontière de confiance.

Vous exécutez du code que ce site Web vous a servi. Si sealby.app ou votre connexion à ce site étaient compromis, une page malveillante pourrait lire ce que vous y mettez. C’est vrai de tous les outils de chiffrement sur le Web, et nous préférons le dire plutôt que faire semblant du contraire. Ce que nous faisons pour y remédier : la page est un fichier statique, et nous la gardons exempte de code tiers. La boîte à outils installée vous permet de continuer à utiliser une version que vous avez déjà chargée. Et le format est documenté ci-dessous, pour que des outils indépendants puissent être bâtis dessus.

Votre propre appareil est lui aussi à l’intérieur de la frontière. Les extensions de navigateur qui ont accès à la page, ou un logiciel malveillant sur la machine, peuvent lire tout ce que n’importe quelle page peut lire. Le fichier scellé cache son contenu, mais pas tout. Quiconque le détient peut voir sa taille (à peu près celle de l’original) et voir qu’il s’agit d’un fichier scellé par Sealby.

Les limites, en clair

  • Clé perdue = fichier perdu. Aucune exception, par conception.
  • Nous ne pouvons pas voir vos fichiers ni vos clés, alors nous ne pouvons pas non plus y chercher des maliciels. L’avertissement sur le type de fichier repose uniquement sur le nom du fichier. Ce n’est pas une garantie d’innocuité.
  • Quiconque a à la fois le fichier scellé et la clé peut l’ouvrir. L’outil ne sait pas et ne vérifie pas de qui il s’agit.
  • La taille du fichier scellé révèle approximativement la taille du fichier d’origine.
  • Un fichier, jusqu’à 100 Mo, par scellement. Compressez d’abord plusieurs fichiers ensemble.

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 pour ouvrir un fichier .sealed en trente lignes de Python :

bytesfieldcontents
0–7magieASCII "SEALBY-W"
8version0x01 — toute autre valeur est rejetée comme « créé avec une version plus récente »
9algorithme0x01 = AES-256-GCM
10–13sel de scellement4 octets, CSPRNG, neuf à chaque scellement
14–15réservédoit être à zéro
16–fintrames de blocschacune : longueur du texte chiffré en uint32 BE, puis le texte chiffré AES-GCM + étiquette de 16 octets

Le bloc 0 est le manifeste : du JSON UTF-8 {"name":…,"size":…,"type":…}. Les blocs 1…N−1 sont le fichier en morceaux de 1 Mio. Pour le bloc i sur N : nonce = sel ‖ uint64 BE i; données authentifiées = en-tête ‖ uint64 BE i ‖ uint64 BE N. Ainsi, le trafiquage, la troncature, le réordonnancement, le déplacement et le greffage d’un fichier à l’autre échouent tous à l’authentification. Chaque cas est prouvé par un test négatif versé au dépôt.

Chaîne de la clé : base64url (sans remplissage) de la clé de 32 octets, suivie des 3 premiers octets de son SHA-256, 47 caractères au total. Une faute de frappe échoue à la somme de contrôle au lieu de produire du charabia.

Ouvreur de référence (Python, bibliothèque cryptography)
import base64, hashlib, json, struct, sys
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SEALBY-W" and raw[8] == 1 and raw[9] == 1
assert raw[14:16] == b"\x00\x00"
header, salt = raw[:16], raw[10:14]
frames, off = [], 16
while off < len(raw):
    (n,) = struct.unpack(">I", raw[off:off + 4]); off += 4
    frames.append(raw[off:off + n]); off += n
assert off == len(raw)

kb = base64.urlsafe_b64decode(sys.argv[2] + "=")   # 47-char key string
key, check = kb[:32], kb[32:35]
assert hashlib.sha256(key).digest()[:3] == check    # typo check

N = len(frames)
def chunk(i):
    nonce = salt + struct.pack(">Q", i)
    aad = header + struct.pack(">QQ", i, N)
    return AESGCM(key).decrypt(nonce, frames[i], aad)

manifest = json.loads(chunk(0))
data = b"".join(chunk(i) for i in range(1, N))
assert len(data) == manifest["size"]
open(manifest["name"], "wb").write(data)
print("decrypted ->", manifest["name"])

Ceci, c’est pour les fichiers en transit. Le coffre, c’est pour les fichiers au repos.

Sceller protège un fichier pendant son trajet. Sealby protège tout ce qui reste : photos, fichiers et notes dans des coffres chiffrés sur votre iPhone. Aucun compte, aucun serveur, lisible par vous et par personne d’autre.

Télécharger dans l’App Store

iPhone et iPad · iOS 17+ · Gratuit