Outil de confidentialité gratuit
Sceller un fichier
Chiffrez un fichier sous une clé à usage unique toute neuve et envoyez-le par le canal de votre choix. Celui qui détient la clé l’ouvre ensuite ici même, sur cette page. Rien n’est jamais envoyé, il n’y a aucune phrase secrète à casser, et vous voyez ce qu’il y a à l’intérieur avant que quoi que ce soit ne soit enregistré.
S’exécute entièrement dans cet onglet. Cette page ne peut communiquer avec le moindre serveur.
Scellement…
Scellé.
Voici votre fichier chiffré. Sans la clé, personne ne peut le lire. Ni nous, ni personne.
La clé — affichée maintenant seulement
Cette clé n’existe que sur cette page, à cet instant. Elle n’est ni conservée ni envoyée où que ce soit. Si vous la perdez, personne ne peut ouvrir le fichier, nous compris. Enregistrez-la avant de quitter la page.
Ou partagez la clé sous forme de lien
La clé se trouve après le # du lien. Les navigateurs n’envoient jamais cette partie-là à un serveur. Le lien ouvre cette page avec l’onglet Ouvrir prêt et la clé déjà remplie, puis retire la clé de la barre d’adresse.
Envoyez le fichier et la clé séparément.
Quiconque détient à la fois le fichier scellé et la clé peut l’ouvrir. Faites-les passer par des canaux différents, par exemple le fichier par e-mail et le lien de la clé par SMS. Ainsi, aucune boîte de réception ne contient jamais les deux.
Clé lue depuis votre lien et retirée de la barre d’adresse, pour qu’elle reste hors de votre historique.
Vérification…
À l’intérieur de ce fichier scellé
Rien n’a encore été enregistré. Voici ce que le fichier scellé annonce contenir :
- Nom
- Taille
- Type
Prudence — ce type de fichier peut exécuter du code sur votre appareil
Déchiffré.
Le fichier a été déchiffré sur votre appareil et proposé au téléchargement. Rien le concernant n’a jamais quitté cette page.
Par les créateurs de Sealby — le coffre chiffré pour iPhone
Sealby garde photos, fichiers et notes dans des coffres chiffrés sur votre iPhone. Sans compte, sans serveurs, lisibles par vous seul.
Chaque paramètre, énoncé
- Chiffrement
- AES-256-GCM (WebCrypto), tag de 128 bits par bloc
- Clé
- 256 bits issus du CSPRNG du navigateur, générée à neuf à 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 sur 64 bits — jamais répété au sein d’un 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’indice 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 n’importe quoi
Réponses honnêtes sur ce que fait cet outil
Tout se passe dans votre navigateur.
Sceller comme ouvrir 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 envoyé. Il n’y a ni compte, ni traitement côté serveur. Contrairement au reste de ce site, cette page ne charge même pas le compteur de visites sans cookie. Aucune mesure d’audience, d’aucune sorte.
Ce n’est pas qu’une promesse. La page est servie avec une Content-Security-Policy qui n’autorise le navigateur à charger 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, le nôtre y compris. Ouvrez les outils de développement de votre navigateur pendant un scellement et vous verrez zéro requête. Pour la preuve la plus brute, installez la boîte à outils et scellez en mode avion. 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 nouvelle clé aléatoire de 256 bits. Elle vous est montrée une seule fois et n’est conservée nulle part : ni dans nos systèmes (aucun n’intervient), ni dans le stockage de votre navigateur, ni dans le fichier scellé. Il n’y a aucune phrase secrète à 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.
Cela a une conséquence sans appel : si la clé est perdue, le fichier est perdu. Aucune réinitialisation, aucun ticket de support, 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 # de l’URL. Cette partie, le fragment, reste dans le navigateur. Elle n’est jamais incluse dans ce que le navigateur envoie à un serveur, le nôtre ou celui de quiconque. Quand cette page se charge avec une clé dans le lien, elle lit la clé, bascule sur l’onglet Ouvrir, puis retire immédiatement la clé de la barre d’adresse. Ainsi, elle ne s’attarde ni dans l’URL visible ni dans l’historique du navigateur.
Cela dit, quiconque possède à la fois le lien et le fichier scellé peut l’ouvrir. C’est pourquoi cette page vous invite à envoyer le fichier et la clé par des canaux différents.
Vous voyez ce qu’il y a dedans avant que quoi que ce soit ne soit enregistré.
L’ouverture se fait en deux temps. La page ne déchiffre d’abord qu’un petit manifeste : nom d’origine, taille et type du fichier. Elle vous le montre, avec un avertissement bien visible pour les types de fichiers capables d’exécuter du code (programmes, scripts, installeurs, 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 se contente de proposer le fichier au téléchargement.
Soyons clairs 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 la même méfiance qu’une pièce jointe inattendue.
Où se situe 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 saisissez. C’est vrai de tout outil de chiffrement sur le web, et nous préférons le dire plutôt que de prétendre le contraire. Ce que nous faisons contre cela : 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 déjà chargée. Et le format est documenté ci-dessous, pour que des outils indépendants puissent être écrits pour lui.
Votre propre appareil est lui aussi à l’intérieur de la frontière. Les extensions de navigateur qui ont accès aux pages, 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 le fait qu’il s’agit d’un fichier scellé par Sealby.
Les limites, en clair
- Clé perdue = fichier perdu. Sans exception, par conception.
- Nous ne pouvons pas voir vos fichiers ni vos clés, donc nous ne pouvons pas non plus y chercher des logiciels malveillants. L’avertissement sur le type de fichier repose uniquement sur le nom du fichier. Ce n’est pas une garantie de sécurité.
- Quiconque détient à 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 celle du fichier d’origine.
- Un fichier, jusqu’à 100 Mo, par scellement. Regroupez d’abord plusieurs fichiers dans un ZIP.
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 pour ouvrir un fichier .sealed en trente lignes de Python :
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SEALBY-W" |
| 8 | version | 0x01 — toute autre valeur est rejetée comme « créée avec une version plus récente » |
| 9 | algorithme | 0x01 = AES-256-GCM |
| 10–13 | sel de scellement | 4 octets, CSPRNG, nouveau à chaque scellement |
| 14–15 | réservé | doit être à zéro |
| 16–fin | trames de blocs | chacune : longueur du texte chiffré en uint32 BE, puis le texte chiffré AES-GCM + tag de 16 octets |
Le bloc 0 est le manifeste : du JSON UTF-8 {"name":…,"size":…,"type":…}. Les blocs 1…N−1 sont le fichier découpé 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, l’altération, la troncature, le réordonnancement, le déplacement et le greffage entre fichiers échouent tous à l’authentification. Chaque cas est prouvé par un test négatif inscrit dans le 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, soit 47 caractères au total. Une faute de frappe échoue à la somme de contrôle au lieu de produire n’importe quoi.
Spécification complète, exacte à l’octet près (FORMAT-WEB-v1) ·Vecteurs de test à réponse connue (JSON)
Programme d’ouverture 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 est fait pour les fichiers en transit. Le coffre est fait pour les fichiers au repos.
Sceller protège un fichier en chemin vers sa destination. Sealby protège tout ce qui reste : photos, fichiers et notes dans des coffres chiffrés sur votre iPhone. Sans compte, sans serveurs, lisibles par vous seul.
iPhone et iPad · iOS 17+ · Gratuit