Archive for the ‘horodatage’ Category

Sondages et votes

Vendredi, septembre 11th, 2015

Dans un article La Suisse pourrait imposer l’open-source pour le vote électronique de Numerama, il est de nouveau question de la mise à disposition du code source du programme sous forme de logiciel libre.

L’avenir du vote électronique ne fait aucun doute, seule sa réalisation pose problème aujourd’hui. Beaucoup de débats comparatifs et contradictoires ont lieux vis-à-vis de la pertinence du vote électronique et de la confiance que l’on peut apporter aux machines de vote et au processus dans son ensemble. Ces débats peuvent paraître très conservateurs mais ils sont néanmoins nécessaires puisque le vote est un acte fondamental de nos démocraties, c’est le moyen d’expression de chacun d’entre nous.

La confiance en ce genre de machine de vote et du code qui l’anime ne peut être assurée sans l’ouverture du code à minima en lecture. Il faut aussi connaître précisément l’environnement de compilation et d’exécution pour le code soit parfaitement reproductible. Et bien sûr, il faut être sûr ce c’est bien ce code qui a été utilisé et pas un autre.
Invoquer le secret industriel sur du code pour un processus parfaitement connu et un enjeu majeur de démocratie, c’est particulièrement malhonnête. Tout au plus une société éditrice peut-elle demander un droit de paternité et une restriction de commercialisation à son seul bénéfice. Mais il suffit à l’état qui fait la commande du code de demander, et payer, explicitement la libre diffusion ou la libéralisation complète du code.

Le code doit être capable dans son ensemble de permettre la centralisation des votes, l’anonymisation des électeurs ainsi que la vérification en temps réel et à postériori du décompte des votes. L’authentification de l’utilisateur devrait être le principal problème mais il apparaît que c’est en fait le décompte et sa vérification qui interpellent le plus souvent les détracteurs du vote électronique.

Un vote a un point de départ dans le temps et une fin à partir de laquelle le décompte des votes est considéré comme définitif.

L’anonymisation est aussi un problème pour la vérification de conformité du vote à postériori puisqu’elle casse le lien sûr entre le votant et le vote unitaire. On peut ainsi affirmer que le votant à voté (il a posé un papier et signé le paraphore) mais on ne peut pas le prouver à postériori (était-ce vraiment lui).
La capacité de multi-entité et la dissimulation de liens dans nebule permettent de résoudre ce problème.

Voici un scénario possible de vote avec les objets et liens de nebule :

  1. Pour un vote, une entité maîtresse du vote est générée. Elle est explicitement reconnue par les autorités comme telle. Son seul rôle est de générer les jetons de vote et de les attribuer aux électeurs.
  2. L’entité maîtresse du vote va générer autant d’objets jetons qu’il y a de votants. Ces jetons sont aléatoires et n’ont pas de relation directes avec les électeurs. Chaque jeton est en fait la partie publique d’un bi-clé cryptographique (RSA par exemple). La clé privée de chaque jetons est protégé par un mot de passe stocké dans un objet protégé par et pour l’entité maîtresse (dans un premier temps).
  3. Le jeton est en fait l’entité qui réalisera le vote via la clé privée. Chaque vote peut être vérifié par rapport au jeton, c’est à dire la clé publique.
  4. Pour chaque objets de clés privées de chaque jetons, l’entité maîtresse va partager le secret de chiffrement de l’objet contenant le mot de passe. Le lien entre objet chiffré et objet non chiffré est dissimulé, c’est à dire que c’est un lien de type c masquant le vrai lien.
  5. La clé privée de l’entité maîtresse est détruite. Il n’est ainsi plus possible de retrouver l’intégralité des relations en les jetons et les électeurs mais il est possible de vérifier que tous les électeurs ont reçus un lien dissimulé et de vérifier tous les jetons réalisant le vote.
  6. Pour un vote, une entité de décompte du vote est générée. Elle est explicitement reconnue par l’entité maîtresse Son seul rôle est de recueillir et de valider les votes. La période de vote démarre.
  7. L’électeur, c’est à dire l’entités votantes, va récupérer auprès de l’entité maîtresse du vote l’intégralité des jetons et des clés privées associées (et pas juste son jeton). Il va ainsi obtenir tous les liens dont le lien dissimulé le concernant. Via le lien dissimulé, il va savoir quel est la clé privée du jeton que l’entité maîtresse lui a attribué. Disposant de cette information il peut déprotéger à son profit l’objet contenant le mot de passe de la clé privée du jeton.
  8. L’électeur, mettant à profit la clé privée du jeton, peut réaliser un ou plusieurs votes, seul le dernier est pris en compte. Le vote consiste en un lien entre le jeton et le choix de vote dans le contexte de l’entité de décompte du vote (champs méta).
  9. L’entité de décompte du vote vérifie régulièrement auprès de tous les électeurs la présence de liens dont elle est le contexte. au fur et à mesure de la récupération des liens, elle se les approprie (signature du lien de vote).
  10. A la fin de la période de vote, la clé privé de l’entité de décompte du vote est détruite. Plus aucun vote ne peut être ajouté, modifié ou supprimé. Les votes comptabilisés sont ceux qui ont été signés par l’entité de décompte du vote.
  11. L’électeur qui souhaite rendre publique son vote a juste à prouver qu’il dispose du jeton en utilisant sa clé privée pour autre chose que le vote en relation avec sa véritable entité. Il peut aussi révéler le lien dissimulé que lui avait généré l’entité maîtresse du vote.

Un des aspects des liens dissimulés est qu’il est possible de les dissimuler pour plusieurs entités. Ainsi il est possible de générer une entité d’audit du vote à qui l’entité maîtresse partagera les liens dissimulés, de façon également dissimulé.L’entité d’audit devient capable à postériori de vérifier la bonne association entre jetons de vote et électeurs sans être elle-même capable d’émettre de nouveaux jetons.

Le sondage est moins contraignant et surtout peut être à choix multiples.

Gestion du temps et anonymisation

Mardi, février 10th, 2015

L’horodatage des liens est important pour leur interprétation. C’est particulièrement vrai pour démêler les suppressions. L’horodatage est placé dans les liens, ce qui veut dire que ce n’est pas l’objet qui est daté mais son usage.

On traite ici la suite des articles Horodatage, suite, Gestion temporelle partielle, Transfert de liens et de confiance, et cela entrera dans l’Etude du temps.

Vis-à-vis de l’anonymisation des entités, et surtout des personnes derrières, la gestion du temps nécessaire à l’horodatage peut poser problèmes.

Le problème c’est la synchronisation sur une source unique. Utiliser deux ou trois source réduit le problème mais uniquement de façon linéaire. Cette source unique sera régulièrement consultée et donc verra la source des demandes, notamment d’un point de vu adresses sur le réseau. Mais qui dit demande de synchronisation de temps ne veut pas dire présentation de l’entité qui le demande. La corrélation peut être faite après coup en comparant les marques de synchronisation de temps d’une entité avec les logs de connexion. Le risque ici est de récupérer la localisation d’une entité. Pour beaucoup de personnes, la connexion à son système d’information se résume à son ordinateur à la maison, son téléphone/tablette et à son travail. Avec la connexion depuis le domicile, on peut casser assez facilement l’anonymisation.

L’utilisation de plusieurs moyens informatiques pas forcément synchronisés entre eux en terme de temps introduit des problèmes pour calculer un décalage de temps et une dérive éventuelle. Dans ce cas, la relation entre entité et localisation ou entre entité et individu est plus dure à obtenir, mais pas impossible.

On peut utiliser la même entité source de synchronisation de temps mais en passant par des relais. Il faut dans se cas récupérer les dernières marques de l’entité de gestion du temps et le rejouer. En passant par une entité intermédiaire, on casse la corrélation possible entre les connexions et les marques de temps. C’est au prix d’une moins grand précision dans le calcul du décalage de temps.

Si on utilise un système de synchronisation des machines, tel que NTP, les machines se synchronisent sur des références de temps cohérentes. Noyé dans la masse des connexions, les synchronisations d’une entité ne permettent pas de lever son anonymat. Malheureusement, cela ne fonctionne que si les machines sont en réseau. Tout au plus peut-on se contenter d’une synchronisation irrégulière et espacée dans le temps. Dans ce cas, l’absence de marques de temps d’une entité ne permettra pas de calculer son décalage, et donc on en sera réduit à supposer qu’elle est à peu près à l’heure.

Dans tous les cas, il est possible d’utiliser en même temps une synchronisation précise par NTP et un calcul de décalage de temps. Des machines synchronisées devraient avoir un décalage proche de 0. Pour ne pas affaiblir l’anonymat des utilisateurs, il est préférable d’avoir une synchronisation NTP et d’utiliser les marques de temps mais horodatées sur son heure propre. Les marques de temps seront récupérées aléatoires chez les entités connues.

La gestion du temps va générer un trafic propre tant en réseau qu’en terme d’objets et de liens. Il faudra prévoir un nettoyage fréquent et à court terme de ces objets et liens avant qu’ils ne saturent les échanges entre entités.

Enfin, cela n’a peut-être pas trop d’importance à première vue mais c’est quand même une entorse à l’anonymisation, générer des marques de temps régulières pour permettre les synchronisations ne peut se faire que lorsque l’entité est déverrouillée. C’est à dire que l’on a des marques de temps que quand on est connecté, ce qui trahi les heures de présence effective mais aussi fait office de marqueur de présence. La parade est de ne faire des marques synchronisation de temps que… de temps en temps. Cette parade se fait au prix d’une perte de précision dans le calcul du différentiel de temps, surtout avec des machines multiples.

Etude du temps

Dimanche, octobre 12th, 2014

Voici dans le wiki une nouvelle étude sur le temps et sa représentation. Cette étude va permettre de poser les bases de la gestion du temps dans le projet nebule. Cette gestion du temps implique sa, ou plutôt, ses représentations ainsi que les traductions associées. Les représentations du temps affiché peuvent être multiples en fonction de critères culturels, religieux, ou géographiques. Mais elles doivent toutes être traduisibles dans d’autres représentations.

Nous n’étudierons pas ici la mesure du temps. La mesure implique la quantification d’une propriété physique. Nous ne faisons qu’utiliser des mesures de temps déjà quantifiées.

J’en profite pour remercier ici Mr Jean-Daniel Morerod. Il me permet de mettre en ligne une copie sur le wiki de son article co-écrit avec Mr Justin Favrod : Histoire du temps : l’origine du calendrier.

Transfert de liens et de confiance

Dimanche, septembre 14th, 2014

Les réseaux fragmentés posent des problèmes plus importants que le maintient de la cohérence du système d’horodatage. CF Gestion temporelle partielle.

Certains protocoles de sécurisation des échanges deviennent bancales sans synchronisation de temps. Mais il y a plus grave. La cohérence du temps entre plusieurs machines peut être négligé sur une courte période, les horloges ne vont pas dériver exagérément et il y a peu de change que des certificats expirent. Par contre, il devient difficile de transmettre de nouveaux contacts avec un grand niveau de confiance. les relations de confiance sont souvent dépendantes de services centralisés, services qui ne sont plus forcément joignables. Ces services ont le rôle d’annuaires globaux. Il faut dans ce cas faire confiance aux seuls intermédiaires que l’on a sous la main, et que l’on connaît (au moins dans nebule). On doit utiliser des entités comme des annuaires locaux.

Dans ce cas, il est peut-être utile de voir si la définition d’un nouveau type de lien ne pourrait pas répondre à ce besoin. Ce serait un lien signé par une entité que l’on connaît et qui transmettrait un lien d’une autre entité, inconnue. Un lien serait encapsulé dans un autre de la même façon que pour un lien offusqué. La validité et la pondération du lien de l’entité inconnue seraient les mêmes que si le lien venait de l’entité connue. Ce serait une forme de relais de liens.

Ce type de lien aura peut-être aussi une utilisé pour les annuaires d’entités. Cela pourrait faciliter la mise en relation entre deux entités qui ne se connaissent pas.

Mais, c’est aussi un risque qui faut analyser. On commence dans ce cas à prendre en compte des liens d’une entité que l’on ne connaît pas et que l’on ne peut directement vérifier. Il faut voir ça comme si l’entité qui fait le relais des liens s’appropriait elle-même le lien. Cette entité peut diffuse des liens invalides, c’est à dire dont la signature est invalide, sans que l’on puisse le vérifier. L’affiche de ces liens ou leur interprétation doit être peut-être adapté pour montrer cette particularité…

Marque de temps

Dimanche, septembre 14th, 2014

Il est maintenant clair qu’il faut aller plus loin que la norme ISO8601. Il faut que le code soit capable d’interpréter différents calendriers connus ou pas, par extension. Dans ces calendriers pourront prendre place une référence de temps en temps long tel que le calendrier Maya.

CF : Gestion temporelle partielle, Horodatage, ISO 8601, suite et Marque de temps.

Gestion temporelle partielle

Jeudi, septembre 11th, 2014

Il y a deux façons de gérer le temps et deux façons pour le prendre en compte.

C’est la suite des articles Horodatage, ISO 8601, suite et Marque de temps.

La référence de temps, ou pas

On peut gérer le temps comme étant un prérequis commun à tous les acteurs. Dans ce cas, toutes les machines doivent synchroniser leurs horloges internes sur une source commune. Tout le monde travaille avec la même heure, le même espace temps et la même référence. Ici on ne tient pas compte du fuseau horaire qui est un bricolage de décalage non pas temporel mais sur l’affichage uniquement. Aujourd’hui, l’orientation de tous les systèmes d’informations, c’est la synchronisation globale, c’est à dire la même partout sur la planète.
On pourrait aussi simplement considérer que chaque machine, chaque utilisateur, a un espace temps qui lui est propre. Pas de synchronisations à faire mais se pose alors l’interprétation d’une date donnée par une autre machine. Il faut prévoir un mécanisme de correction du temps des autres machines, par rapport à une référence. On retrouve cette référence commune mais elle peut dans certains cas être soi-même, c’est à dire je suis à la bonne heure et je compense l’heure des autres. En cas d’absence de référence externe, il faut retenir le décalage de chacune des machines avec lesquelles on communique.
Avoir une référence commune implique une communication régulière avec cette référence. Il faut donc une connexion réseau, même partielle. Plus la précision attendue dans la synchronisation est forte, plus les moyens tant en réseau qu’en relais doivent être importants, rapides et fiables. Sur des réseaux isolés ou fortement fragmentés, la synchronisation du temps devient illusoire. Et cela peut arriver partout sur la planète : catastrophe naturelle, guerre, dictature, repli sur elles-même des nations, etc…

Le problème sur la référence de temps n’est pas que théorique. Ce ne serait pas « juste un problème d’affichage ». Beaucoup de protocoles de sécurisation s’appuient aujourd’hui sur le temps et exigent un horodatage assez précis. Lorsque l’on se connecte au site web de sa banque, lorsque l’on renvoie un message signé, lorsque l’on se connecte à un réseau d’entreprise, les jetons de session et autres certificats électroniques ont une durée de vie limitée ou une date d’expiration. Tous ces services impliquent d’avoir un réseau pour fonctionner et peuvent délivrer une référence de temps en même temps que ces services. Par contre, des documents comme les passeports sont aussi émis avec une date d’expiration et il serait difficile de vérifier leur validité sans une référence de temps commune.

Le système de gestion du temps dans nebule est encore aujourd’hui basé sur l’horloge interne de la machine qui exploite les liens. Il utilisera aussi l’entité kronos comme référence. Mais il est prévu de calculer et mémoriser les décalages de temps entre machines. Cette capacité à mémoriser les variations de temps rend l’ensemble plus résilient en cas de catastrophe ou tout simplement de fragmentation volontaire des réseaux. A faire…

Sur un réseau maillé comme sur Internet, la structure globale ressemble à un fractal dans lequel on peut zoomer et retrouver les mêmes formes de connexions entre nœuds de réseau. Un réseau Internet fragmenté serait sûrement toujours maillé et toujours interconnecté, mais la structure globale ressemblerait plutôt à une nébuleuse, c’est à dire sans structure marquée. Dans ce deuxième cas, les synchronisations de temps seraient souvent conflictuelles.
Le postulat que l’on peut simplement synchroniser tout le monde sur une seule et unique référence de temps est une facilité de notre époque. Mais c’est une facilité qui n’est ni évidente ni définitivement acquise.

Prise en compte des événements futurs, ou pas

Avec synchronisation du temps entre les machines ou pas, il peut arriver d’une marque de temps soit dans le futur ou interprétée comme telle. Que fait-on dans ce cas ? Est-ce une erreur de l’émetteur ? Est-ce une erreur de synchronisation ? Est-ce une erreur de zone de temps ? Est-ce un acte malveillant ?
Et c’est pareil pour une date du passé qui ne correspond manifestement pas à l’ère informatique. Est-ce une erreur de référence de temps ?

On peut tenir compte d’une marque de temps problématique et l’interpréter telle quelle vis-à-vis des autres date. Dans le cas d’une suppression de lien marqué dans le futur, cette suppression est valable. Mais, parce qu’elle est dans un futur un peu lointain, il va devenir impossible de réhabiliter ce lien avant cette date puisque sa suppression sera toujours valide temporellement. Il faudrait un nouveau lien plus loin dans le futur qui, lui, empêcherait la suppression avant cette nouvelle date dans le futur… On ne s’en sort pas.

On peut ne pas tenir compte d’une marque de temps invalide et l’écarter du traitement comme étant incohérente. Dans ce cas un lien de suppression dans le futur ne serait plus utilisé avant que notre espace temps ne soit arrivé effectivement à cette date.
Mais dans ce cas la synchronisation de temps ou l’utilisation d’une référence de temps a beaucoup plus d’importance puisque des dates du calendrier arabe, hébraïque, indien, chinois ou copte n’ont pas la même signification. Des événements interprétés comme étant dans le futur seront automatiquement ignorés alors qu’ils sont peut-être valides.

La non prise en compte de liens avec une date dans le futur semble la meilleur solution, mais elle n’est pas encore implémentée dans nebule. A faire…
L’implémentation doit aussi permettre de gérer sereinement les décalages, prévisibles, du temps entre différentes machines même si elles ont la même référence de temps. En dessous de la seconde, une synchronisation globale est illusoire. Avec une connexion à Internet intermittente, une précision de l’ordre de la minute est plausible. Il faut donc prévoir un paramètre afin de définir le décalage maximal de temps que l’on accepte pour des liens dans le futur.

L’utilisation de la norme ISO8601 est indispensable mais pas suffisante. Tous les calendriers n’utilisent pas cette forme et bien sûr n’ont pas la même référence de temps. De plus, si il permet une grande précision, il ne permet pas de manipuler le temps sur ce que l’on appelle le temps long. Il serait intéressant de pouvoir manipuler d’autres calendriers, peut-être avec un préfixe spécifique.

Lien juste à temps

Les liens de nebule n’ont pas vocation à permettre un traitement complexe des données, juste à permettre leur transmission et faciliter le traitement.

Manipuler des données avec des échéances n’est possible qu’en associant un objet contenant une date avec un objet méta spécifique. Le traitement à échéance est réalisé par le programme qui interprète cette forme de lien. Il est facile de réaliser au niveau des liens d’une prise en compte « à retardement » d’un lien. Le modèle pourrait être l’encapsulation d’un lien dans un autre lien d’un type particulier, sur le modèle du lien offusqué. Au lien d’une clé de chiffrement, ce pourrait être une date de prise en compte.
Ce nouveau type de lien est de fait en concurrence avec un lien avec une date dans le futur. Mais cela présenterait quand même quelques avantages. Le premier, c’est que la date pourrait être aussi une période de prise en compte. Mais surtout, là où un lien dans le futur pourrait être supprimé parce que considéré invalide, un lien dédié à cet usage serait beaucoup plus légitime.

Cette idée est encore à réfléchir…

Les entités et le code

Samedi, juillet 26th, 2014

La remise en forme du code de nebule en php orienté objet amène son lot de questions.

Les entités de nebule

Les entités principales de nebule ont actuellement des noms mais ne sont reliées à leurs fonctions respectives que par leur usage dans le code.

Pour que ce soit plus clair dans le code, le nom est un peu trop hermétique. Je le remplace donc par un nom contenant directement le rôle. Ainsi, kronos par exemple s’appellera toujours kronos mais sera mémorisé dans une variable nommée time master. Et il en est ainsi pour toutes les entités qui ont un rôle dans nebule :

  • puppetmaster, ne change pas de nom, c’est l’entité qui chapeaute toutes les autres, le maître ;
  • cerberus, hérite du rôle et du nom security master, le maître de la sécurité ;
  • bachue, hérite du rôle et du nom code master, le maître du code ;
  • asabiyya, hérite du rôle et du nom directory master, le maître de l’annuaire ;
  • kronos, hérite du rôle et du nom time master, le maître du temps.

Les possibilités de gestion pour l’utilisateur

La sécurisation du code amène aussi des questions sur l’organisation de la gestion de certaines parties de la sécurité. Notamment, jusqu’où peut-on permettre l’ajout de droits à une entité normale ?

Cette entité peut vouloir utiliser des extensions externes au code d’origine tel que diffusé par bachue. Cela peux se faire en relation avec la définition d’autorités locales. L’ajout d’une traduction de l’interface en est un bon exemple. L’entité bachue peut aussi diffuser ou permettre la diffusion de plusieurs codes utilisables par une entité.

Plus on donne de droits à un utilisateur, plus il risque de se faire corrompre par un code malveillant. Il faut trouver un juste milieu. Le code et la gestion du bootstrap doit rester la plus saine possible dans tous les cas.

Redéfinition de puppetmaster

L’entité puppetmaster est celle qui contrôle toutes les autres, donc qui contrôle tout. C’est le point fort de la hiérarchie des entités, et aujourd’hui la moins vulnérable. Mais c’est aussi l’entité qui présente le plus grand risque pour l’ensemble puisqu’elle est unique et que sa compromission serait fatale à tout l’ensemble.

C’est le même problème que le système de certificats présente aujourd’hui. Quoique, c’est pire encore pour le système de certificats puisqu’il existe beaucoup d’autorités de certifications racines et que la compromission d’un seule casse la confiance de tout le système. Dans l’ensemble, ce système de certificats est bien fait à part cette horreur de monstre à têtes multiples. Un vrai trou conceptuel dans la sécurité. Les gouvernements et le grand banditisme l’ont déjà corrompu depuis quelque temps à leur avantage.

Pour l’entité puppetmaster, l’idée est de partir en sens inverse. Au lieu de divulguer cette entité à de multiples personnes et organismes dont l’intégrité et l’honnêteté sont loin d’être garanties, on ne diffuse qu’une partie du pouvoir de l’entité puppetmaster. Une personne seule ne doit pas pouvoir utiliser l’entité. Chaque lien doit être validé, et donc signé, par un corpus de plusieurs clés représentant l’entité. Par exemple, on peut partir sur dix sous-clés de l’entité, associées deux à deux.

On peut implémenter la vérification du quotas de sous-clés ayant signées un même lien. Mais cette façon de faire est un droit faible puisqu’il ne repose que sur du code. On peut, j’espère, trouver une implémentation mathématique permettant de mettre en place une signature unique combinaison de plusieurs clés.

Il faut aussi résoudre un problème organisationnel et non technique. En combien de parties découpe-t-on l’entité ?
Dans notre exemple dix sous-clés associées deux à deux, on a un pouvoir de la clé maître répartie en cinq couples de clés. Chaque clé d’un couple a le pouvoir du couple. Le couple ici fait référence au couple humain. Et le cinq peut faire référence à tout un tas de choses…
Est-ce la meilleur répartition ? Celle-ci doit-elle répondre à une organisation physique ? Philosophique ? Spirituelle ? Mystique ? etc…

Marque de temps

Dimanche, mars 30th, 2014

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.

Horodatage – suite

Vendredi, août 23rd, 2013

Cette réflexion fait suite à celles sur l’horodatage et la norme ISO 8601. La gestion du temps est très importante pour les liens, voir par exemple pour un événement unique multiple. Mais on a déjà vu qu’il y avait deux méthodes pour gérer le temps, soit par synchronisation universelle, soit par calcul du décalage et de la dérive.

Doit-on utiliser le temps absolu ou le temps relatif ?
Pour commencer, le temps absolu n’existe pas. Ce temps dit absolu est en fait un temps relatif à un instant bien déterminé dans le temps. Il fait nécessairement référence à une base commune de la mesure du temps. Enfin, il s’accommode mal de décalages et de dérives dans sa mesure.
Tout est donc basé sur des temps relatifs. Cependant, le temps relatif est plus difficile à manipuler. Quand on parle d’une mesure relative du temps, cela veut dire que c’est la mesure entre deux instants séparés et bien définis dans le temps. Donner une valeur de temps relatif pour un instant donné n’a pas d’utilité si on ne précise pas la référence de temps utilisée. On en revient au temps absolu.
Vu comme ça, il parait indispensable de définir une base de mesure du temps. C’est à dire une référence dite absolu et universelle et une unité de mesure. Cette unité de mesure est un authentique temps relatif. Mais quelle référence choisir ?
Le calendrier lunaire ou Solaire ?
Le calendrier Maya, Romain, Julien, Grégorien, Orthodoxe, Bouddhiste, Musulman ?

Quelle mesure du temps choisir ?
L’année et le jour sont des mesures faciles à appréhender et sont à l’échelle humaine.
La seconde est beaucoup plus précise et stable, mais est déjà en marge de l’échelle humaine. Les sous divisions de la seconde sont hors de la marge.

Doit-on être capable de gérer le temps long et notamment les temps anciens ?
Doit-on garder la même précision sur des temps longs ?

Comment est notée l’année 0 ?
Année 0000, -0000 ou an 1 ?
Il y a discordance entre calendriers et normes…

Références :

- RFC3339 (copierfc3339)
– ISO 8601:2004 (copieISO_8601-2004_E)
Fondation Long Now
Calendrier – Wikipedia [fr]
Liste des calendriers – Wikipedia [fr]
Histoire de la mesure du temps – Wikipedia [fr]
Unité de temps – Wikipedia [fr]
– Histoire du temps A B C D

Chronographe : 20 jours après

Mercredi, janvier 30th, 2013

Le chronographe expérimental est lancé depuis maintenant 20 jours et quelques heures (CF Chronographe).
Il tourne toujours.

L’accès via le web est impossible. La page de bootstrap avait déjà été modifiée pour supporter un grand nombre de liens. La visualisation de l’entité est impossible via la page gnav.php . Il faut modifier le robot pour qu’il ne lie pas les traces de temps avec sa propre entité mais avec l’objet contenant "nebule/objet/entite/suivi".

En regardant de plus près, il faut une vingtaine de secondes pour lister tous les fichiers contenants des liens. Il y en a plus de 29000…
C’est encore exploitable, mais peut-être faudrait-il dans ce cas répartir les objets dans des sous-répertoires et alléger le système de fichiers qui n’est pas vraiment prévu pour ça. Le robot ne semble pas ralentir dans son fonctionnement malgré tout, c’est que les fichiers restent accessibles dans un temps raisonnable.

Le robot est recréé ce soir avec quelques correctifs.
kronos.nebule.org

Chronographe

Jeudi, janvier 10th, 2013

Une nouvelle entité vient d’être mise en ligne : kronos

C’est un chronographe, il mesure le temps.
Et il le signe !

Toutes les minutes, l’objet 09531c684ca8804f671250db6d20403745f3e9c156eb1fad80945b9a4030105a est mis à jour avec en dernier la trace du temps.
Cet objet s’appelle ‘nebule/objet/entite/suivi/m00‘, la minute 0 du temps passé.
Le temps a dans nebule un écoulement linéaire et exponentiel. Il est linéaire pour des périodes de temps du même ordre de grandeur. Il est exponentiel lorsque l’on change d’ordre de grandeur.

Il y a encore quelques erreurs résiduelles dans les objets générés parce que le moteur de nebule et en cours de ré-écriture complète… et que c’est actuellement un peu buggé…
Mais l’idée est là et surtout : ça marche :-)

Evenement unique multiple

Dimanche, décembre 16th, 2012

Je fais une erreur depuis quelques temps dans les scripts. Le concept de base est bon mais l’implémentation est mauvaise.

En effet, lors de l’ajout d’un lien à un objet, si celui-ci existe déjà, il n’est pas ajouté. C’est un doublon.

Mais j’implémentais la vérification d’unicité du lien sur les champs Action, HashSource, HashDestination et HashMeta. Ce qui signifie que tout lien précédent disposant de ces quatre champs invalide le nouveau lien. Pourtant ce n’est pas tout à fait le même, même si il lie exactement les mêmes objets dans le même ordre et avec la même action. Ce lien peut être fait par une autre entité, rien de grave, quoique ça dépend du sens. Mais il peut être aussi généré avec une autre date, ce qui à une signification particulière = c’est le même lien volontairement refait plus tard…

L’exemple qui permet simplement de valider cette réflexion sur la multiplicité de ces liens, c’est la possible désactivation de lien.
Soit un lien L. Il peut y avoir un lien intermédiaire X (de type x) dans le temps qui invalide la première instance du lien L. Et on peut recevoir un deuxième lien L’ identique dans l’action demandé sur les même objets, et ce sans forcément avoir reçu le lien intermédiaire X de désactivation. Si l’on ne tient pas compte de la date, cela entraîne une désactivation du lien L’ à posteriori alors qu’il avait été volontairement refait après…

Une autre raison, si on se place sur un comportement plus sociale, on peut avoir répondu plusieurs fois la même chose à quelqu’un… mais à des moments différents.

Horodatage ISO 8601

Samedi, décembre 8th, 2012

L’un des problèmes actuels avec les liens, c’est que le caractère tiret « – » est utilisé comme séparateur. Hors, il est aussi utilisé par le format d’horodatage universel tel que définit dans la norme ISO 8601. Celle-ci utilise aussi le caractère spécial deux-points « : ».

Il faut donc modifier le séparateur de champs du registre des liens. Le protocole des liens nebule passe en version v1.1 avec un nouveau séparateur de champs.

Toutes les expérimentations en cours vont progressivement migrer…

Horodatage

Mercredi, février 22nd, 2012

Le marquage du temps est un élément primordial dans l’échange d’informations.

Un lien créé vers un objet doit contenir une marque de temps de cette création. Cet horodatage ne semble pas utile au première abord, mais il est nécessaire si l’on veut ensuite pouvoir casser ce lien.

Une information, et donc un lien, doit être considéré comme non effaçable une fois créé. Cette information ayant été à priori diffusée, on en perd le contrôle, et donc la capacité de suppression. A défaut d’être effacé, cette information doit être désactivable. Dans le cas du lien, on le désactive aussi. Cette désactivation sera à son tour diffusée, et de la même façon on en perdra le contrôle.

La création d’un lien doit être vue comme la création de l’objet lien doublé d’une opération de signature cryptographique de ce même objet lien. L’entité validant ainsi le lien de façon forte, sa désactivation doit aussi être faite par une méthode forte, c’est à dire doublée d’une opération de signature cryptographique (par le même signataire en fait).

La désactivation doit aussi être horodaté, pour deux raisons. La première pour simplement savoir quand elle a été faite. La deuxième pour que l’on puisse sans ambiguïté savoir si cette désactivation intervient bien après la création. Et ainsi de suite, le lien ou toute information peut être validé et invalidé plusieurs fois de suite dans le temps.

Le marqueur de temps doit être couvert par la signature. Il doit être systématiquement présent avec la signature.

Référence de temps

Nous avons besoin aujourd’hui de tous avoir le même espace de temps pour pouvoir communiquer et travailler ensemble. Cette état de fait pose déjà le problème de la référence de temps, nous devons avoir la même heure.

Mais cette nécessité de tous travailler avec la même heure se heurte aux grandes distances et les décalages horaires que cela implique bien que les communications n’en soient que peu affectées.

Et comment fait-on si, indépendamment du décalage horaire, deux entités décident volontairement de ne pas travailler avec la même référence de temps? Et si en plus l’unité de temps est différente?

Une première approximation de ce que à quoi on peut s’attendre se pose sous la forme d’une équation du premier degré :

Tv = a Ti + b

Le temps vu Tv est calculé par rapport au temps interne Ti affecté d’un coefficient a et corrigé par un décalage b.

Dans la vraie vie, il faut beaucoup d’efforts pour approcher une synchronisation parfaite entre deux entités. A l’échelle d’un pays, c’est impossible, on se contente de quelques secondes voir quelques minutes de décalage horaire entre toutes les entités. Et chaque horloge interne souffrant d’une dérive plus ou moins grande, il faut régulièrement calculer et compenser cette dérive. Même tous d’accord, nous avons bien notre coefficient a et notre décalage b.

Et encore, on considère là que l’horloge interne de chaque entité est stable dans le temps…

Marqueur de temps

On peut continuer à essayer d’être tous calés sur la même référence de temps. Ou on peut prendre le problème en sens inverse, prendre en compte que chacun a son heure de fonctionnement propre, et calculer quand nécessaire la correction du datage des objets.

Il faut cependant dans ce cas qu’un ou plusieurs liens existent entre les différentes entités, liens qui permettent de calculer de décalage de temps. C’est le rôle du marqueur de temps qui date et signe un objet généré par une entité, objet qui contient sa date de création. Ou du marqueur de temps qui génère régulièrement des objets horodatés que toutes entité peut dater/signer.

Cette méthode nécessite cependant une certaine coopération entre les deux entités. Il y a peut-être moyen de disposer d’une méthode proche par signatures d’objets communs et qui marcherait même en mode non coopératif.

La suite au prochain épisode…

Mémoire fini

Mardi, avril 5th, 2011

On part souvent du principe que l’on va gérer nos données en les accumulant dans le temps de façon infinie…

Mais est-ce vrai?

C’est en partie vrai.

Les capacités de stockage évoluent assez rapidement dans le temps. Nous enregistrons de nouveaux fichiers assez régulièrement dans le temps mais pas forcément de façon continu. Ici, pour la réflexion, on ne va retenir qu’une moyenne constante d’enregistrement de données.

Que se passe-t-il si on ajoute régulièrement suffisamment de capacités de stockage, suffisamment pour ne jamais arriver à saturation?
Tout se passe bien, on ne perd rien.

Et si la capacité de stockage n’augmente pas assez vite (dans le cas extrême où elle ne peut plus être augmentée) ?
C’est dans ce cas que doit être prévu un mécanisme de nettoyage (d’oubli), et donc de pertes maîtrisées.

Le stockage de données sous la forme proposée pour nebule risque dans certains cas de générer, et donc de stocker, énormément de données. On doit prévoir ce mécanisme d’oubli nativement.

La perte d’information maîtrisée impose de permettre cette gestion à la main. Mais quelle efficacité d’une gestion à la main pour plusieurs millions de fichiers?
Des mécanismes d’assistance ou d’automatisation doivent être proposés. Ils peuvent avoir plusieurs formes.

Sur quels critères déclarer un fichier périmé?
Plusieurs critères peuvent être pris en compte, et plusieurs combinaisons complexes peuvent être calculées de critères simples :
– le temps de possession de l’objet, plus il est vieux plus il a de chance d’être périmé ;
– si le fichier dispose d’une nouvelle version, il n’est peut-être plus intéressant de le conserver ;
– l’attractivité, ou un critère d’appréciation, donne de l’importance à un fichier dans le temps et doit faciliter sa conservation ;
– l’intensité de l’appréciation peut être exploitée en absolu, un fichier qui appel un très fort sentiment positif ou négatif a des chances de devoir être conservé longtemps ;
– un fichier lié à plusieurs autre fichiers jugés importants a surement besoin d’être lui aussi conservé, il va peut-être hériter par calcul d’une note d’appréciation ;
– d’autres fichiers font références à ce fichier, il faut sûrement le conserver ;
– mes amis ont gardé ce fichier, il doit être important.

Doit-on supprimer immédiatement un fichier périmé?
Celui-ci peut peut-être servir à quelqu’un d’autre? A-t-on la place de le garder en attendant? Peut-on se contenter de le supprimer lorsque l’on aura besoin de la place qu’il occupe? Doit-on les marquer périmés en attendant ou gérer une liste des objets périmés?
L’analyse des fichiers à marquer peut se faire en continu, moyennant une occupation constant et relativement importante de ressources. L’analyse peut se faire lors d’une phase de repos (activité de sommeil). Une liste peut aussi être maintenu en temps réel sans analyse, juste en classant les objets de façon croissante dans une liste et en faisant évoluer la place des objets en fonction de l’évolution de leurs paramètres.

Une fois un objet marqué comme périmé, comme propager son marquage? C’est à dire, comment vont se comporter les relais avec ces objets dits périmés?
Cette propriété de péremption doit-elle être visible des entités tierces? Ou est-elle purement interne?