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.
Scellement…
Scellé.
Voici votre fichier chiffré. Sans la clé, personne ne peut le lire. Ni nous, ni personne.
La clé — affichée seulement maintenant
Cette clé n’existe que sur cette page, en ce moment même. Elle n’est ni conservée ni envoyée nulle part. Si vous la perdez, personne ne peut ouvrir le fichier, nous compris. Enregistrez-la avant de quitter.
Ou partagez la clé sous forme de lien
La clé se trouve après le # dans le lien. Les navigateurs n’envoient jamais cette partie-là à aucun 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. Envoyez-les par des canaux différents, par exemple le fichier par courriel et le lien de la clé par message texte. 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…
Dans ce fichier scellé
Rien n’a encore été enregistré. Voici ce que le fichier scellé dit contenir :
- Nom
- Taille
- Type
Attention — 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é en téléchargement. Rien à son sujet n’a jamais quitté cette page.
Des créateurs de Sealby — le coffre chiffré pour iPhone
Sealby garde photos, fichiers et notes dans des coffres chiffrés sur votre iPhone. Aucun compte, aucun serveur, lisible par vous et par personne d’autre.
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 :
| bytes | field | contents |
|---|---|---|
| 0–7 | magie | ASCII "SEALBY-W" |
| 8 | version | 0x01 — toute autre valeur est rejetée comme « créé avec une version plus récente » |
| 9 | algorithme | 0x01 = AES-256-GCM |
| 10–13 | sel de scellement | 4 octets, CSPRNG, neuf à 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 + é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.
Spécification complète, exacte à l’octet près (FORMAT-WEB-v1) ·Vecteurs de test à réponse connue (JSON)
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.
iPhone et iPad · iOS 17+ · Gratuit