Marque de temps

Le marquage du temps tel que réalisé aujourd’hui ne me convient que moyennement. Ce marquage est fait pour chaque lien et permet de leur donner un sens temporel.

La marque de temps est basée sur une norme reconnue : ISO 8601:2004. Elle est forcément absolue. Éventuellement, ce peut être un simple compteur incrémental.
Mais cette norme est loin d’être universelle. Elle se base exclusivement sur un calendrier grégorien. Donc sa référence de temps est biblique, ce qui a une connotation religieuse pour un sujet technique. Passe encore. De par sa référence et sa gestion du temps le plus grand, l’ordre de grandeur du temps géré est de quelques milliers d’années. En gros, on peut indiquer une date entre -9999 et 9999 années.
Certes, cela laisse de la marge dans nos sociétés modernes où on se préoccupe plus de la nano-seconde que du siècle. Mais les Mayas avaient à leur époque, il y quelques temps déjà, un calendrier pour gérer le temps profond. Leur calendrier était à même de donner une date à la création de la terre (si cela a un sens), et sans référence religieuse. Ils ne pouvaient pas par contre gérer finement le temps à petite échelle, en dessous de la journée…

Lorsque l’on aborde le sujet de la gestion du temps avec de multiples références, il faut penser au moyens de synchronisation de ces horodatages. Il faudra pour ça réactiver l’entité kronos

Il n’y a pas 36 solutions pour améliorer le marquage du temps.
On peut ne plus reconnaître de format de temps standardisé… et tenter de déterminer par la forme de la marque de temps la date indiquée dans sa propre référence de temps. Ce travail, fastidieux, peut être facilité par un lien de définition de la marque de temps utilisée par une entité.
On peut reconnaître par défaut le format ISO 8601 et accepter d’autres formats sous la forme d’un compteur. Ce compteur, dans ce cas doit avoir une forme progressive dans le temps pour pouvoir être interprétée au moins comme compteur à défaut de pouvoir en extraire une date fiable.
On peut reconnaître par défaut le format ISO 8601, accepter le compteur et accepter un indice de formatage spécifique pour des marques de temps autres. Le compteur doit toujours être progressif.
Enfin, on peut ne reconnaître que le compteur et une marque de temps préfixée de sont type. Cette dernière solution intègre à peu près les marques de temps actuellement utilisées dans nebule au format ISO 8601 comme de simples compteurs.

Marqueur de groupe multidimensionnel

Les objets sont aujourd’hui identifiés par une valeur unique qui, de part ses propriétés, n’est pas pré-calculable ou prévisible. Ce comportement est indispensable pour distinguer parfaitement et de façon univoque les objets, et donc leur contenu. Il résulte de ces propriétés que toute modification d’un objet, quelle qu’elle soit et aussi infime qu’elle soit, entraîne un changement complet et quasi-aléatoire de son empreinte, et donc de l’identifiant correspondant.

Mais il peut être aussi intéressant de disposer d’une autre valeur plus prévisible. On va essayer de définir ici ce que l’on appellera un marqueur.
On peut imaginer par exemple que deux images très proches puissent avoir un marqueur de valeur identique ou proche. Pour de la musique, le marqueur peut être un dérivé atemporel du spectre de fréquences. Ce marqueur doit avoir une structure en accord avec la structure de l’objet. On doit pouvoir comparer les marqueurs de deux objets différents et déterminer rapidement si ils ont une structure proche, donc si ils sont ressemblants. La structure doit être multidimensionnelle et de profondeur variable. L’ajustement de la profondeur de comparaison des marqueurs doit permettre de retrouver les objets très proches ou au contraire vaguement ressemblants.

Une notion de groupe apparaît. On fait un regroupement à géométrie variable des objets par rapport à leur contenu.

Le côté multidimensionnel du marqueur doit refléter les caractéristiques multidimensionnelles d’un objet. Voici quelques exemples :

  1. Un texte simple contient des données qui s’expriment en deux dimensions : la position spatial et pour chaque position une valeur (caractère).
  2. Un texte enrichit contient des données qui s’expriment en trois dimensions : la position spatial et pour chaque position deux valeurs (caractère et encodage).
  3. Un son mono contient des données en deux dimensions : la position temporelle et pour chaque position une valeur (amplitude).
  4. Un son stéréo contient des données en trois dimensions : la position temporelle et pour chaque position deux valeurs (amplitude).
  5. Une image en noir et blanc contient des données en trois dimensions : la position spatial horizontale, la position spatial vertical et pour chaque couple de position spatial on a une valeur (amplitude).
  6. Une image en couleur (RVB) contient des données en cinq dimensions : la position spatial horizontale, la position spatial vertical et pour chaque couple de position spatial on a trois valeurs (amplitude).
  7. Un film en couleur muet contient des données en six dimensions : la position spatial horizontale, la position spatial vertical, la position temporelle et pour chaque couple de position spatial/temporelle on a trois valeurs (amplitude).
  8. Un film en couleur avec son stéréo contient des données en huit dimensions : la position spatial horizontale, la position spatial vertical, la position temporelle et pour chaque couple de position spatial/temporelle on a cinq valeurs (amplitude).

Ce marqueur n’est pas destiné à remplacé l’identifiant !
L’identifiant reste le seul moyen de
discerner sans ambiguïté tous les objets, y compris les plus ressemblants.

Ne reste plus qu’à formaliser précisément ce marqueur.

Les variables des librairies

Une page Variables vient d’être mise en ligne. Elle regroupe les différentes variables utilisées par les librairies et modifiables par l’utilisateur (via les fichiers d’environnement), leurs valeurs par défaut ainsi qu’une description.

Sont concernées actuellement les variables en php, mais les variables en bash suivront…

Bootstrap php et chargement de code à la demande

Le bootstrap reconnait deux options en ligne bootstrap_load et bootstrap_lib. CF sybale – avancement du 02/03/2013.

Ces options ont pour but de permettre de choisir spécifiquement une version de sylabe et une version spécifique de la librairie php. Ce sera utile lors de problèmes de cohérences entre les versions de sylabe et de la librairie. Une incohérence peut conduire dans le cas d’une fonction absente à une erreur php, et donc à un affichage vide. Dans ce cas, forcer les versions permet de revenir à une situation stable et de corriger tranquillement le problème.

Mais ce mécanisme entraine un problème de sécurité. Il est possible de forcer ces options à la main et donc de choisir volontairement des versions de code anciennes, défectueuses ou mal protégées. Ce problème ne peut être résolu directement dans sylabe puisque les choix de codes se font dans le bootstrap. Il faut donc trouver et implémenter un mécanisme pour soit restreindre soit désactiver ces deux options directement dans le bootstrap. Il sera toujours temps de les réactiver le temps de résoudre un problème.

  • Une des solution serait de vérifier site web de provenance et de rejeter les options si ce n’est pas en accord avec l’URL courante. Mais cette valeur peut elle aussi être forgée.
  • Une autre solution peut être de tenir compte des listes de bannisement pour éviter certains codes anciens. Mais cette liste ne va pas protéger des codes malveillants insérés sur le serveur.
  • Enfin, on peut prévoir un fichier d’environnement pour le bootstrap, ou plus simplement la prise en compte des options si un certain fichier est présent.

La suite au prochain épisode…

Migration du bootstrap et de la librairie

Jusque là, le code du bootstrap et de la librairie nebule en php était dépendant du projet sylabe.

Maintenant, ils sont détachés du projet sylabe et sont directement rattachés au projet nebule, ce qui est plus cohérent. Le projet sylabe va cependant continuer à s’appuier sur le bootstrap et la librairie nebule et même à les faire progresser.

Les codes actuellement en ligne, diffusés par l’entité bachue, sont disponibles ici :
bootstrap
librairie

CF : Projet sylabe – Migration du bootstrap et de la librairie

Gestion de bachue

L’entité bachue existe depuis un certain temps en tant que telle. Mais il est difficile de diffuser dans de bonnes conditions les objets et liens qu’elle signe. De bonnes conditions sont ici à interpréter comme conditions de sécurité et facilité d’exploitation.

Cette entité est matérialisée par une clé RSA en deux parties, une publique et une privée. La clé privée doit être manipulée avec précaution dans un environnement strictement contrôlé. La perte ou la divulgation de la clé privée remettrait en question tout ce qui a été diffusée par cette entité, surtout si c’est du code. En terme de sensibilité, elle est en troisième position derrière puppetmaster et cerberus.
Les technologies employées actuellement ont toutes des vulnérabilités en ligne à certains moments. Si ces vulnérabilités peuvent être comblées, il n’en demeure pas moins une petite période de temps pendant lequel elles deviennent à la fois publiques et non encore comblées. Le problème est pire encore avec les vulnérabilités non publiques (0-days) contre lesquelles une machine unique ne peut pas avoir de défense efficace. Donc la machine qui héberge l’entité bachue, la machine hôte, ne peut être laissée connectée sur un réseau externe.
Tout ce qui est manipulé par nebule supporte sans aucun problème les transferts via le réseau ou via des supports amovibles et est manipulable sur des systèmes d’exploitations différents. Il est aisé de travailler avec des stations non connectées et de diffuser simplement l’information via des relais en ligne même plus faiblement protégés.
Chaque machine à un rôle strictement définit avec des règles de gestion en conséquences. Toutes les machines ne sont pas installées avec le même système d’exploitation et toutes les machines ne reposent pas sur la même architecture matériel. Des machines tournent notamment avec un processeur SUN SPARC ou un processeur PowerPC en plus des classiques processeurs Intel/AMD 32bits ou 64bits. Microsoft Windows a été écarté pour sa forte présomption (impossible à démontrer ou à réfuter) de compromission par des entités étatiques.

Voici le schéma de principe retenu actuellement pour la gestion des objets et liens par bachue :

20140301 sync bachue

1 – La station de développement est unique mais pourra s’étendre à plusieurs machines. C’est une machine assez classique et qui sert à bien d’autres choses que nebule. C’est actuellement le principal point de faiblesse, le principal point d’entrée d’une attaque.

1->2 – Depuis la station de développement, on exporte les liens et objets associés sur une clé USB vers la station hôte bachue.

2 – La station hôte est la seule et unique machine sur laquelle sera déverrouillée l’entité bachue. C’est la machine la plus critique du dispositif. Les seuls vecteurs d’attaque sont la clé USB et un accès physique frauduleux.
Toutes les clés USB insérées sont systématiquement nettoyées. Le nettoyage consiste en la suppression de tout fichier autre que le fichier ‘l’ ou ce qu’il y a dans le dossier ‘o’. Le fichier ‘l’ ne doit contenir que des caractères imprimables. Le dossier ‘o’ ne doit pas contenir de sous dossiers. Les fichiers du dossier ‘o’ doivent avoir une empreinte valide.
Si les liens sont ceux attendus, ils sont signés par l’entité.
Cette station ne se met pas à jour régulièrement des correctifs de sécurité. Ce processus est réalisé à la main si nécessaire. La machine est préparée pour résister aux deux vecteurs d’attaques connus.

2->3 – Les nouveaux liens sont exportés par la même clé USB vers le serveur relais.

3 – Le serveur relais contient une copie de ce que l’entité bachue partage publiquement. Il n’est pas très critique puisqu’une compromission serait facilement détectée dans les liens et objets. La suppression de certains objets ou liens serait facilement réparable. Ce serveur est protégé derrière un pare-feu qui bloque toute tentative de connexion depuis Internet vers le serveur ainsi que toute connexion non référencée depuis le serveur vers Internet.
Toutes les clés USB insérées sont systématiquement nettoyées. Le nettoyage consiste en la suppression de tout fichier autre que le fichier ‘l’ ou ce qu’il y a dans le dossier ‘o’. Le fichier ‘l’ ne doit contenir que des caractères imprimables. Les liens dans le fichier ‘l’ doivent être de bachue uniquement et leurs signatures sont vérifiées. Le dossier ‘o’ ne doit pas contenir de sous dossiers. Les fichiers du dossier ‘o’ doivent avoir une empreinte valide.
Ce serveur se tient automatiquement à jour de correctifs de sécurité directement sur Internet.
Les nouveaux objets sont ajoutés aux objets déjà présents. Les nouveaux liens sont insérés dans les fichiers de liens via la librairie nebule.

3->4 – L’ensemble des objets et liens sont synchronisés vers le serveur miroir public avec rsync encapsulé dans ssh.

4 – Le serveur miroir est un serveur web disponible en permanence sur Internet. Il n’est pas critique dans sont contenu puisque toutes modifications des objets ou liens seront immédiatement rejetées par les autres entités. Il n’est que peut critique en terme de disponibilité puisque les objets et liens peuvent être diffusés par d’autres entités. Il n’est pas critique non plus en terme de sensibilité des données qu’il partage puisque toutes les données sont soit librement publiables soit chiffrées.
Ce serveur se tient automatiquement à jour de correctifs de sécurité directement sur Internet.

4->5 – Chaque entité peut venir consulter les liens et objets sur le serveur miroir public.

5 – La station cliente est autonome. Elle gère ses propres processus et assure sa propre protection.