Lisible sans nous
Le format des capsules OVELIYA
Version 2 · 26 septembre 2026. Elle ajoute la date verrouillée (section 8) et le profil IA (section 9) ; tout ce que décrivait la version 1 reste valable.
Une capsule doit pouvoir s’ouvrir dans vingt ans, même si ce site n’existe plus. Cette page décrit exactement comment elle est construite, pour que chacun puisse écrire son propre lecteur. Tout ce qu’elle affirme est vérifié par vingt capsules de contrôle et par un second lecteur, écrit sans rien reprendre du code du site. Le format est ouvert : l’implémenter ne demande l’accord de personne, et sa description, son code et ses capsules de contrôle sont sous licences libres (section 14).
Une capsule OVELIYA est un contenu chiffré sur l’appareil de son auteur en AES-256-GCM, avec une clé tirée d’un code (PBKDF2-SHA-256, 600 000 itérations) ou transmise avec elle. Elle voyage dans un lien, un fichier .html ou un fichier .oveliya, et son en-tête dit le jour où elle s’ouvre. Depuis la version 2, ce jour peut aussi être verrouillé : une seconde clé, scellée pour un tour de l’horloge publique drand, n’existe pour personne avant ce jour-là.
- Tout le dossierlecteur, agent et capsules de contrôle · zip, 2,8 Mo
- Le lecteur indépendantPython · 28 Ko · Apache 2.0
- Les capsules de contrôleJSON · 24 Ko · domaine public
- L’agent CapsulePython · 74 Ko · profil IA · Apache 2.0
- Conventions
- Le code et la clé
- La capsule message
- La capsule média
- Les fichiers
- L’empreinte
- Le temps
- La date verrouillée
- Le profil IA
- Ce qu’un lecteur doit faire
- Les capsules de contrôle
- Le lecteur indépendant
- Les versions futures
- La licence
1. Conventions
- Les textes sont en UTF-8. Le JSON est compact : sans espaces, les clés dans l’ordre indiqué.
- base64url : l’alphabet URL de la RFC 4648 (section 5), sans signe = final.
- Les entiers sur 4 octets sont gros-boutistes : l’octet de poids fort en premier.
- Les dates sont des millisecondes depuis le 1er janvier 1970 UTC. Dans un jeton, elles s’écrivent en base 36, en minuscules.
- AES-256-GCM : nonce de 12 octets, étiquette d’authentification de 16 octets placée à la fin du chiffré.
2. Le code et la clé
Deux modes
Mode c : la clé est tirée d’un code que l’auteur transmet à part. Mode l : une clé aléatoire de 256 bits voyage avec la capsule, dans le lien ou le fichier ; qui a l’un a le contenu, une fois la date passée.
Normalisation du code
- Forme de normalisation Unicode NFC.
- Espaces retirées au début et à la fin.
- Toute suite d’espaces remplacée par une seule espace.
- Minuscules.
« Le Tambour bleu » et « le tambour bleu » donnent donc la même clé. Les espaces sont celles de JavaScript : espace, tabulation, retour à la ligne, espaces insécables et fines, U+FEFF.
Dérivation
clé = PBKDF2-HMAC-SHA-256(code normalisé en UTF-8, sel de 16 octets, 600 000 itérations, 32 octets)
Le code proposé
Six mots distincts tirés au hasard dans une liste de 2 048, séparés par une espace : environ 66 bits. Un code choisi par l’auteur est refusé s’il paraît trop facile à deviner ; c’est une règle du site, pas du format. Un code envoyé en trois morceaux se recompose en les remettant dans l’ordre : séparés par une espace pour un code de mots, collés pour un code choisi.
3. La capsule message
Le message tient tout entier dans le lien, après le signe #, que les navigateurs n’envoient jamais au serveur :
https://oveliya.com/capsule/c/2020-01-01#c=4.c.k4v0fsw0.1.UG91ciB0ZXMgMTggYW5z.60.by6utxHzr5vAyLQYDNa6Bw.hTaI_aymwicp2-yn.c_BsWUuz7vwwWLjo8loDnd…
Le chemin /c/AAAA-MM-JJ ne porte que la date, pour l’aperçu du lien ; un lecteur l’ignore. Le jeton, après #c=, est une suite de champs séparés par des points :
| Champ | Contenu |
|---|---|
version | 4, 5 ou 6 (voir plus bas) |
mode | c (code) ou l (clé dans le jeton) |
ouverture | date d’ouverture, en base 36 |
compression | 1 : clair compressé en deflate brut (RFC 1951) ; 0 : non compressé |
étiquette | texte visible choisi par l’auteur, en base64url, 60 caractères au plus, souvent vide |
fuseau | décalage UTC de l’auteur à la date d’ouverture, en minutes (60 pour Paris en hiver), pour l’affichage |
durée ou fin | versions 5 et 6 seulement, en base 36 : durée de lecture après la première ouverture (v5), ou date de fermeture (v6) |
sel ou clé | mode c : sel de 16 octets ; mode l : clé AES de 32 octets ; en base64url |
nonce | 12 octets, en base64url |
chiffré | AES-256-GCM du clair, en base64url |
Donnée associée : les champs qui précèdent le sel ou la clé, joints par des points, en ASCII. Changer la date, l’étiquette ou le fuseau fait donc échouer le déchiffrement.
Clair : le JSON {"t":texte,"p":pour,"d":de}, compressé si le champ compression vaut 1. Les prénoms n’apparaissent qu’à l’ouverture.
Versions historiques 1, 2 et 3
Mêmes champs, à une différence près : à la place de l’étiquette et du fuseau, les prénoms « pour » et « de » voyagent en clair, en base64url, et le clair contient au moins t. Les liens envoyés avant septembre 2026 sont de ce type ; un lecteur doit toujours les ouvrir. Correspondance : 1 et 4 sans fermeture, 2 et 5 avec une durée de lecture, 3 et 6 avec une date de fermeture.
4. La capsule média
Photos, vidéos, sons et documents sont trop lourds pour un lien. Ils forment un flux chiffré par blocs, précédé d’un en-tête JSON lisible.
L’en-tête
| Clé | Contenu |
|---|---|
f | toujours "oveliya-capsule-media" |
v | 3 ; 4 avec une date verrouillée (section 8) ; 2 pour la version historique, avec pour et de au lieu de et |
et | étiquette visible, 60 caractères au plus |
tz | fuseau de l’auteur, en minutes (facultatif) |
o | date d’ouverture |
m | c ou l |
cs | taille d’un bloc de clair : 1 048 576 octets |
n | nombre de blocs : le plus grand de 1 et de ⌈taille ÷ cs⌉ |
taille | taille totale du clair, en octets |
np | préfixe de nonce, 7 octets |
it, sel | mode c : 600 000, et sel de 16 octets |
kiv, kw | mode c, et les deux modes en version 4 : nonce de 12 octets, et clé de contenu chiffrée (48 octets) |
k | mode l : clé de contenu, 32 octets ; en version 4, la moitié « lien » de la clé qui la chiffre (section 8) |
tour, temps, secours | version 4 seulement : tour drand, part du temps et part de la clé d’auteur (section 8) |
vie, fin | facultatifs, jamais en version 4 : durée de lecture après la première ouverture, ou date de fermeture |
cree | date de création, informative |
La partie authentifiée
Un sous-ensemble de l’en-tête, sérialisé exactement ainsi, dans cet ordre ; tz, vie et fin n’y figurent que s’ils sont présents, et, en version 4, tour, temps et secours suivent sel :
{"f":"oveliya-capsule-media","v":3,"et":"Nos photos","tz":60,"o":1577865600000,"m":"c","cs":1048576,"n":1,"taille":544,"np":"fK4TDJmTSw","it":600000,"sel":"7hx0UjNT9WLCup7VOVD8Kg"}
Sa somme SHA-256, de 32 octets, sert de donnée associée à chaque chiffrement de la capsule. En mode l, it vaut 0 et sel est une chaîne vide. En version 2, et et tz sont remplacés par pour et de.
Les clés
Une clé de contenu aléatoire de 256 bits chiffre les blocs. En mode c, elle est elle-même chiffrée en AES-256-GCM avec la clé tirée du code (sel sel, nonce kiv, même donnée associée) : c’est kw. En mode l, elle figure en clair dans k. En version 4, elle est toujours chiffrée, par une clé qui attend aussi le jour dit (section 8).
Le flux
Le clair se compose de la longueur du manifeste (4 octets), du manifeste JSON {"t":texte,"p":pour,"d":de,"fichiers":[{"nom","type","taille"},…]}, puis des fichiers bout à bout, dans l’ordre du manifeste. Il est découpé en blocs de 1 048 576 octets, le dernier plus court. Le bloc i, compté à partir de 0, est chiffré en AES-256-GCM avec :
nonce = np (7 octets) ‖ i (4 octets, gros-boutiste) ‖ 01 pour le dernier bloc, 00 sinon
C’est la construction STREAM de Hoang, Reyhanitabar, Rogaway et Vizár : retirer, déplacer ou tronquer un bloc fait échouer le déchiffrement.
5. Les fichiers
Le fichier .oveliya
| Partie | Taille |
|---|---|
OVELIYA-CAPSULE puis l’octet 02 | 16 octets |
| longueur de l’en-tête | 4 octets |
| en-tête JSON complet | cette longueur |
| blocs chiffrés | 1 048 592 octets chacun, le dernier plus court |
Taille totale : 20 + longueur de l’en-tête + taille + 16 × n.
Le fichier .html
Une page complète, qui s’ouvre dans un navigateur et porte son propre lecteur. La capsule y figure dans deux sortes de balises :
<script type="application/json" id="capsule-embarquee">{"type":"message","jeton":"4.c.…","origine":"https://oveliya.com/capsule"}</script>
<script type="application/octet-stream" class="bloc-capsule">…un bloc chiffré, en base64url…</script>
Pour une capsule média, "type":"media" et "entete" remplacent le jeton, et chaque bloc chiffré suit dans sa propre balise, dans l’ordre. Dans ce JSON, le caractère < s’écrit \u003c.
6. L’empreinte
Seize caractères qui désignent une capsule sans rien en révéler : la somme SHA-256 du jeton (message) ou de la partie authentifiée (média), dont on garde les 8 premiers octets, en hexadécimal majuscule, par groupes de quatre : BC65 38B2 3790 927D. Une copie .html et une copie .oveliya de la même capsule ont la même empreinte. Un lecteur l’affiche avant d’ouvrir, pour que le destinataire la compare à celle que l’auteur lui a donnée.
7. Le temps
- Ouverture : une capsule ne s’ouvre pas avant sa date, selon l’horloge la plus sûre dont dispose le lecteur. Le site utilise celle de son serveur.
- Fermeture : avec une date de fermeture (version 6,
fin), elle ne s’ouvre plus à partir de cette date. Avec une durée de lecture (version 5,vie), elle ne s’ouvre plus une fois la durée écoulée depuis sa première ouverture sur cet appareil.
Sans verrou, ces règles sont tenues par le lecteur, pas par la cryptographie. Qui détient déjà le code, ou le lien d’une capsule sans code, et écrit son propre programme peut lire avant la date. Avec la date verrouillée (section 8), l’ouverture est tenue aussi par la cryptographie : avant le jour dit, la clé n’existe pas. Ce que Capsule garantit, et ce qu’elle ne garantit pas.
8. La date verrouillée
Une option, proposée à la création d’un message, d’une capsule à fichiers ou d’une capsule IA, et désactivée par défaut. La clé de la capsule combine alors deux secrets : celui du code (ou du lien) et une clé du temps, scellée pour un tour de l’horloge publique drand. Avant la publication de ce tour, personne ne peut calculer la clé du temps : ni le destinataire, ni OVELIYA, ni l’auteur, sauf avec sa clé d’auteur.
L’horloge publique
drand publie à intervalles fixes une balise numérotée : une signature BLS à seuil, qui n’existe que lorsqu’un nombre suffisant de nœuds, tenus par les organisations indépendantes de la League of Entropy, l’ont signée ensemble. Une balise est publique et définitive : une fois publiée, chacun peut la garder, et elle reste valable pour toujours. Le format utilise le réseau quicknet, une balise toutes les trois secondes :
| Paramètre | Valeur |
|---|---|
chaîne | 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971 |
genèse | 1692803367 (23 août 2023, 15:09:27 UTC) |
période | 3 secondes |
schéma | bls-unchained-g1-rfc9380 : signatures sur G1, clé publique sur G2, courbe BLS12-381 |
Clé publique du réseau :
83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a
Le tour
Le premier tour publié à la date d’ouverture ou juste après, au plus trois secondes plus tard :
tour = max(1, ⌈(ouverture ÷ 1000 − genèse) ÷ 3⌉ + 1)
heure = (genèse + (tour − 1) × 3) × 1000
Le jeton 7
Douze champs séparés par des points :
| Champ | Contenu |
|---|---|
version | 7 |
mode | c ou l, comme en section 2 |
ouverture | date d’ouverture, en base 36 |
compression | comme en section 3 |
étiquette | comme en section 3 |
fuseau | comme en section 3 |
tour | tour drand visé, en base 36 |
temps | la part du temps : un fichier age, en base64url |
secours | la part de la clé d’auteur : 76 octets en base64url, sel (16) ‖ nonce (12) ‖ chiffré (48) |
sel ou clé | mode c : sel de 16 octets ; mode l : clé de 32 octets |
nonce | 12 octets, en base64url |
chiffré | AES-256-GCM du clair, en base64url |
Une capsule verrouillée n’a pas de fermeture programmée. Son clair, sa compression et son empreinte suivent les sections 3 et 6.
La part du temps
La clé du temps est faite de 32 octets aléatoires. Elle est chiffrée pour le tour avec tlock (Gailly, Melissaris et Romailler, 2023) : un chiffrement fondé sur l’identité de Boneh et Franklin, dont l’identité est la somme SHA-256 du numéro de tour sur 8 octets gros-boutistes, le message même que drand signera. La balise de ce tour est la clé qui déchiffre. Le résultat est un fichier age binaire, non armuré, dont l’en-tête porte la ligne :
-> tlock <tour> 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971
C’est exactement le format de l’outil officiel tle (github.com/drand/tlock). Nous l’avons vérifié dans les deux sens : une part du temps scellée par le module du site s’ouvre avec l’implémentation Go de drand, et un chiffré produit par cette implémentation s’ouvre avec le module du site.
La clé d’auteur
Six mots, tirés comme le code proposé, remis à l’auteur seul (champ secours du jeton ; on l’appelait d’abord « clé de secours »). Elle chiffre la clé du temps en AES-256-GCM, avec la clé tirée d’elle comme en section 2 (son propre sel de 16 octets), et pour donnée associée les huit premiers champs du jeton, de version à temps, joints par des points. Elle remplace la balise : qui la détient ouvre sans drand, y compris avant la date. Elle reste donc chez l’auteur et ne se transmet jamais avec le code.
La clé de la capsule
kCode = PBKDF2(code normalisé, sel) mode c (section 2)
= clé du jeton mode l
kTemps = part du temps, ouverte par la balise du tour
ou par la clé d’auteur
clé = HKDF-SHA-256(kCode ‖ kTemps, sel = 32 octets nuls,
info = "OVELIYA Capsule v2", 32 octets)
Donnée associée du chiffré : les neuf premiers champs, de version à secours, joints par des points.
Ouvrir
- Attendre la date d’ouverture, comme pour toute capsule.
- Lire dans l’en-tête age le tour et la chaîne : ils doivent être ceux du champ
touret du réseau quicknet. - Obtenir la balise du tour :
https://api.drand.sh/<chaîne>/public/<tour>, ou tout autre relais de drand. Le site passe par ses relais,/capsule/drand/puis/capsule/drand-cf/, et, s’ils ne répondent pas, interroge drand directement ; un fichier .html ouvert hors du site, comme l’agent Capsule, interroge api.drand.sh, puis drand.cloudflare.com. Aucune confiance n’est due au relais : une fausse balise ne déchiffre rien. - Ouvrir la part du temps avec la balise, ou avec la clé d’auteur : on obtient kTemps.
- Tirer la clé de la capsule et déchiffrer.
Sans le site, avec le lecteur indépendant et l’outil de drand :
python3 lire_capsule.py "<lien>" --exporter-temps part.age
tle -d -o cle.bin part.age
python3 lire_capsule.py "<lien>" --code "…" --cle-temps cle.bin
L’en-tête média 4
Une capsule à fichiers verrouillée porte les mêmes pièces dans son en-tête (section 4), qui passe en version 4 : tour, un entier ; temps, la part du temps en base64url ; secours, la part de la clé d’auteur, 76 octets en base64url. Ni vie ni fin. Partie authentifiée de la capsule de contrôle ia-verrou :
{"f":"oveliya-capsule-media","v":4,"et":"Offres — clôture du 14 octobre","tz":120,"o":1728925200000,"m":"c","cs":1048576,"n":1,"taille":1526,"np":"nAYUFtG2KA","it":600000,"sel":"tHgxHVSNaCUg3gCw5nrhHA","tour":12040612,"temps":"YWdlLWVuY3J5cHRpb24…","secours":"JFVSNC2BGPJ6LBZ9…"}
- La clé d’auteur chiffre la clé du temps avec, pour donnée associée, la somme SHA-256 de cette partie authentifiée privée de
secours. - kCode vient du code (sel
sel) en modec, et dek, 32 octets aléatoires, en model. La clé HKDF ci-dessus chiffre la clé de contenu danskw, avec le noncekiv. - La donnée associée de
kwet des blocs est la somme SHA-256 de la partie authentifiée complète,secourscompris. L’empreinte aussi.
Ce que le verrou demande. Une connexion le jour de l’ouverture, et une balise : celle de drand, d’un de ses relais, ou de quiconque l’aura gardée. Si l’horloge publique venait à disparaître, la clé d’auteur ouvrirait encore la capsule. Sur le site, le verrou s’applique aux messages et aux capsules IA ; les photos et les vidéos suivront, avec le même en-tête. Les capsules envoyées avant cette version n’en ont pas.
9. Le profil IA
Une capsule IA est une capsule média ordinaire (section 4) dont le manifeste porte un contrat : une tâche, un contexte, des consignes, des autorisations et la sortie attendue. Rien de nouveau n’est visible de l’extérieur : l’en-tête, l’empreinte et le chiffrement sont ceux de la section 4, ou de la section 8 si sa date est verrouillée. Un agent l’ouvre avec le code, ne remet rien à un modèle sans l’accord du propriétaire, et scelle la réponse avec le même code. La présentation complète, principes et limites compris : Remettre à une IA.
Le contrat
Dans le manifeste chiffré, sous la clé ia :
{"t":"Capsule IA · profil ia/1\n\nTâche :\n…","p":"","d":"","fichiers":[…],
"ia":{"profil":"ia/1",
"tache":"Analyse ce contrat et relève les obligations, les échéances et les pénalités.",
"contexte":"Contrat de prestation pour 2026. Je suis le prestataire.",
"consignes":["Ne pas inventer les données manquantes : les signaler."],
"autorise":["lire","analyser","repondre"],
"sortie":{"forme":"tableau","format":"csv","precision":"Une ligne par obligation."},
"reponse":{"sceau":"code"},
"demandes":[]}}
| Clé | Contenu |
|---|---|
profil | "ia/1" ; un agent refuse un profil qu’il ne connaît pas |
tache | ce qui est demandé, écrit par le propriétaire ; jamais vide |
contexte, consignes | facultatifs : un texte, une liste de textes |
autorise | une liste fermée : lire, analyser, resumer, transformer, produire, repondre |
sortie | facultative : forme (texte, tableau, document, fichier), format, precision |
reponse | {"sceau":"code"} : la réponse se scelle avec le code de la capsule |
demandes | réservée aux actions sur le monde ; toujours vide en ia/1 |
Un agent refuse une clé absente de ce tableau : une clé nouvelle passera par un profil nouveau. t reprend le contrat en clair, pour qu’un lecteur qui ignore le profil l’affiche quand même.
L’enveloppe
Une capsule IA a toujours un code (m vaut "c"). Par défaut, elle est immédiate : sa date d’ouverture o est l’instant du scellement. Son auteur peut aussi verrouiller une date d’ouverture : l’en-tête passe en version 4 (section 8), et le contrat ne change pas. La condition d’ouverture vit dans l’en-tête visible, jamais dans le contrat chiffré. Une capsule IA ne se referme pas.
Les autorisations
lire : les fichiers sont remis au modèle. produire : la réponse peut porter des fichiers. repondre : la réponse est scellée. Ces trois-là, l’agent les fait respecter. analyser, resumer et transformer sont remises au modèle comme des limites : il les respecte en règle générale, sans garantie. Ce qu’un agent fait réellement est l’intersection de ce que le propriétaire autorise, de ce que l’agent sait faire et de ce que son environnement permet.
Ce que fait un agent conforme
- Il ouvre la capsule avec le code, vérifie son intégrité et son enveloppe (date, fermeture) ; sinon, il ne montre rien. Date verrouillée : avant l’heure, il refuse ; le jour venu, il obtient lui-même la balise du tour (section 8).
- Il refuse un profil inconnu, une clé inconnue, une autorisation hors de la liste, une capsule sans code, et toute capsule dont
demandesn’est pas vide. - Il obtient l’accord du propriétaire en lui montrant la tâche, les autorisations, les fichiers et l’application qui va les recevoir. Quand l’application le permet (élicitation MCP), il le demande lui-même, sans passer par le modèle.
- Il remet deux blocs séparés : les instructions du propriétaire, puis les données, marquées non fiables et encadrées de repères imprévisibles.
- Il n’exécute aucun fichier, reconnaît le type réel de chacun à sa signature, et dit ce qu’il n’a pas remis, et pourquoi.
- Il scelle la réponse à côté de la capsule d’origine, sans jamais écraser un fichier.
La réponse
Une capsule média, scellée avec le même code, dont le manifeste porte ia_reponse : profil ("ia-reponse/1"), origine (l’empreinte de la capsule d’entrée), tache, statut (reussi, partiel, echec, refuse), agent, hote et modele (déclarés), non_lus et ecarts (écrits par l’agent), remarques. Le texte de la réponse est dans t, les fichiers produits dans fichiers. Une réponse n’a pas de contrat : un agent refuse de la traiter comme une tâche.
10. Ce qu’un lecteur doit faire
- Refuser toute altérationSi l’authentification AES-GCM échoue, il n’affiche rien, pas même un fragment.
- Respecter le tempsIl n’ouvre pas avant la date ni après la fermeture, et ne propose aucun moyen de le faire, pas même avec une clé d’auteur.
- Ne rien exécuterUn fichier contenu dans une capsule s’enregistre, il ne s’exécute pas, quel que soit son type annoncé. Son nom est réduit à un nom simple, sans chemin.
- Montrer l’empreinteAvant d’ouvrir, pour que le destinataire vérifie qu’il a reçu la bonne capsule.
- Ouvrir toutes les versionsLes jetons 1 à 7 et les en-têtes média 2 à 4.
- Montrer un contrat sans l’exécuterLes clés
iaetia_reponsese rendent telles quelles. Un lecteur montre une tâche ; il ne la fait pas.
11. Les capsules de contrôle
Vingt capsules, avec leur code et ce qu’on doit y trouver. Quinze ont été créées par le site lui-même, et une réponse par l’agent Capsule ; la capsule de version 1, deux capsules verrouillées et une capsule IA non conforme ont été construites d’après cette page. Pour les capsules verrouillées, le fichier donne aussi la clé d’auteur, et, pour les tours 12040883 et 12040612, la balise publique et la clé du temps attendue : le chemin drand se vérifie sans réseau. Un lecteur est conforme s’il obtient exactement ces résultats, empreintes comprises : vecteurs.json.
| Capsule | Ce qu’elle vérifie, et le résultat attendu |
|---|---|
message-code | Code proposé, prénoms chiffrés, étiquette, emoji. S’ouvre. |
message-sans-code | Clé dans le jeton. S’ouvre. |
message-code-choisi | Normalisation du code : majuscules et espaces en trop. S’ouvre. |
message-v1-historique | Ancien jeton, prénoms en clair, sans compression. S’ouvre. |
message-refermee | Date de fermeture passée. Refus. |
message-pas-encore | Ouverture le 31 décembre 2099. Refus. |
media-code | Deux fichiers et un texte, mode code, en .html et en .oveliya. Fichiers identiques. |
media-deux-blocs | 1,15 Mo en deux blocs, en .html et en .oveliya. Fichier identique. |
message-temps-code | Date verrouillée (tour 8140612) et code. S’ouvre avec la balise du tour ou la clé d’auteur. |
message-temps-sans-code | Date verrouillée, sans code : le lien seul ne suffit pas. S’ouvre avec la balise ou la clé d’auteur. |
message-temps-balise-reelle | Tour 12040883, balise publique jointe. S’ouvre sans réseau. |
message-temps-pas-encore | Verrouillée jusqu’au 31 décembre 2099. Refus, même avec la clé d’auteur. |
ia-analyse | Profil IA : tâche, contexte, consignes, deux fichiers ; lire, analyser, répondre. S’ouvre ; un agent l’accepte. |
ia-produire | Profil IA en .html : résumer et produire autorisés. S’ouvre ; un agent l’accepte. |
ia-produire-reponse | La réponse scellée par l’agent, au bout d’un échange MCP : un texte et un fichier. S’ouvre avec le même code ; un agent la refuse comme tâche. |
ia-demandes | Profil IA dont la clé demandes n’est pas vide. S’ouvre ; tout agent ia/1 la refuse. |
ia-verrou | Profil IA à date verrouillée, en-tête 4, tour 12040612, balise publique jointe. S’ouvre avec la balise ou la clé d’auteur ; un agent l’ouvre seul, par drand. |
ia-verrou-2099 | Profil IA verrouillé jusqu’au 1er janvier 2100, en .html. Refus ; un agent la refuse, même avec le code. |
12. Le lecteur indépendant
Écrit en Python, sans rien reprendre du code du site, avec une seule dépendance : le module cryptography. Il lit les liens, les jetons, les fichiers .html et .oveliya, affiche l’empreinte, respecte la date et la fermeture, et enregistre les fichiers d’une capsule média sans les ouvrir.
pip install cryptography
python3 lire_capsule.py "https://oveliya.com/capsule/c/…#c=…"
python3 lire_capsule.py capsule.oveliya --code "six mots du code" --sortie contenu
python3 lire_capsule.py capsule.html --empreinte
python3 lire_capsule.py "<lien verrouillé>" --code "…" --cle-auteur "clé d’auteur"
python3 tester_lecteur.py
Pour une capsule verrouillée, il écrit la part du temps pour tle et reprend la clé qu’il en obtient (section 8) ; il n’a pas besoin de réseau lui-même. Il ne connaît aucun moyen d’ouvrir une capsule avant son jour.
À côté de lui, l’agent Capsule (agent_capsule.py) est l’agent de référence du profil IA : en ligne de commande pour n’importe quelle IA, et en serveur MCP pour les applications d’IA. Il s’appuie sur ce lecteur pour ouvrir, et sur rien d’autre que cryptography ; pypdf, facultatif, lui permet de lire les PDF, et py_ecc d’ouvrir lui-même, le jour venu, une capsule IA à date verrouillée : il demande alors la balise du tour à drand, seule requête qu’il fasse sur le réseau. tester_lecteur.py vérifie aussi son verdict sur les capsules IA. Mode d’emploi : Remettre à une IA.
python3 agent_capsule.py resume capsule.oveliya --code "…"
python3 agent_capsule.py mcp --dossier ~/Capsules
13. Les versions futures
Les numéros de jeton 8 et suivants, et les valeurs de v 5 et suivantes pour l’en-tête média, sont réservés. L’en-tête 4 sert aux capsules à fichiers à date verrouillée : capsules IA et, depuis le 10 octobre 2026, photos, vidéos et documents. Pour le profil IA viendront ia/2, une réponse scellée pour la clé publique du propriétaire, puis des profils d’action, qui exigeront une signature de l’auteur : d’ici là, demandes reste vide. Tout nouvel usage sera décrit ici avant d’exister dans l’application.
14. La licence
Implémenter le format est libre et gratuit : le lire, l’écrire, le convertir, dans n’importe quel logiciel, payant ou non, sans demander l’accord de personne. Ce qui est publié ici l’est sous trois licences libres, une par nature de fichier.
| Ce qui est publié | Sa licence |
|---|---|
| Cette page : la description du format | CC BY 4.0. La copier, la traduire, l’adapter, y compris pour un usage commercial, en créditant OVELIYA avec un lien vers la licence. |
Le code : lire_capsule.py, tester_lecteur.py, agent_capsule.py, et leurs modes d’emploi | Apache 2.0. L’utiliser, le modifier, le redistribuer, y compris dans un logiciel fermé. Elle comprend une licence sur les brevets. |
Les capsules de contrôle : vecteurs.json et le dossier capsules | CC0 1.0, domaine public. Les reprendre dans n’importe quelle suite de tests, sans mention. |
Mention suggérée pour cette page : « Format des capsules OVELIYA, par OVELIYA, CC BY 4.0, oveliya.com/capsule/format.html ». Chaque fichier de code porte sa licence en tête, et les deux archives en contiennent le texte, dans le dossier LICENSES.
L’engagement d’OVELIYA
Pour tout ce qu’exige l’implémentation du format, OVELIYA ne fera valoir aucun droit, d’auteur ou de brevet, contre personne, sauf pour se défendre contre qui attaquerait lui-même une implémentation. Cet engagement est irrévocable ; il vaut pour toutes les versions décrites sur cette page, et suit ces droits s’ils changent de mains.
Ce que ces licences ne couvrent pas
- Le nom et le logo OVELIYA. Une implémentation peut dire qu’elle lit ou écrit le format des capsules OVELIYA ; elle ne se présente pas comme OVELIYA et ne laisse pas croire qu’OVELIYA la fait ou la garantit.
- Le reste du site : ses autres pages, son application et son identité, régis par les mentions légales. Dans une capsule de contrôle en page HTML, le domaine public vaut pour la capsule ; la page qui l’ouvre est celle du site, et se copie telle quelle avec elle.
La réserve de fouille de textes et de données qui vaut pour le reste d’oveliya.com ne s’applique ni à cette page ni aux fichiers du format : les licences le permettent, y compris pour entraîner des modèles d’IA.
Une remarque, une erreur, un lecteur écrit dans un autre langage ?
contact@oveliya.com, objet « Format ». Pour une faille : signaler une faille.