Avancement

La nouvelle version est mise en place. Il y a pas mal de choses qui ont changées.

Le mode upl a été réorganisé et on peut maintenant transmettre un fichier contenant des liens. Cette nouvelle fonctionnalité va permettre de réinjecter des liens générés sur une machine hors réseau et donc transmis dans un fichier sur un support amovible.

Un certain nombre d’icônes utilisées dans l’interface, surtout dans le mode lnk, ont été nébulisées. Ces mêmes icônes ont été nébulisées et signées par l’entité bachue. Mais la synchronisation des objets ne fonctionne pas comme attendu, donc les objets correspondants aux icônes nébulisées ne sont pas disponibles, et donc ne s’affichent pas correctement. Ce problème d’affichage n’est pas bloquant, il sera résolu plus tard…

Dans le mode aff, on peut maintenant déclarer un texte dérivé d’un objet, donc en gros un commentaire. On peut aussi déclarer un objet comme mis à jour vers un nouvel objet. C’est cette dernière fonctionnalité qui va permettre de tester intensivement le suivi des mises à jours d’un objet. On a aussi un indicateur pour savoir si l’objet en cours d’affichage a été mis à jour et quel est sa mise à jour la plus récente.

Dans le mode log, il y a beaucoup plus de variables internes affichées.

Et enfin, de l’aide a été ajouté un peu partout. A compléter aussi.

Détournement de liens de mise à jour

La librairie nebule en php, qui est utilisée par sylabe, intègre depuis ce matin le code nécessaire à la résolution des graphes des liens de mise à jour d’un objet. Ce bout de code est encore en cours de test.

Il est notamment utilisé directement comme test par sylabe. Le premier usage est de gérer l’affichage des petites icônes qui pullulent dans l’interface. Les buts sont de pouvoir faciliter la mise à jour de ces mêmes icônes en cas de besoin et de ne plus avoir à les copier lors d’une nouvelle installation de sylabe. Et c’est le mode lnk qui en profite en premier. La fonction aff_img_upd permet de renvoyer le code html pour afficher l’image, en fait l’objet de l’image, le tout en tenant compte des mises à jours.

Mais il apparaît fastidieux et volumineux de remplacer le bout de code html :

<img src="ll.png" id="iconepuce" alt="Lien">

par :

<?php aff_img_upd('e9a97c8fb1c6257284e7fa6f4a4c40458deff45dd591f939bc123cd4378de697','Lien','iconepuce'); ?>

Or, il est possible de détourner les liens de mises à jours pour créer des raccourcis d’objets. Dans notre exemple, en créant un lien de type u entre e9a9 et l’objet e9a97c8fb1c6257284e7fa6f4a4c40458deff45dd591f939bc123cd4378de697, on peut faire simplement appel à l’affichage de l’objet e9a9 qui n’existe pas et avoir l’affichage de l’image attendu… Le code précédent ressemble maintenant à ça :

<?php aff_img_upd('e9a9','Lien','iconepuce'); ?>

Il y a cependant quelques contraintes. Par définition, les liens de nebule acceptent des objets dont les empreintes sont de toutes tailles à partir du moment qu’il y a au moins un caractère, notés en hexadécimal, en minuscule et que ce ne soit pas zéro (réservé). Dans le code de sylabe, les objets ne sont pas acceptés si la taille de l’empreinte ne fait pas au minimum un quart de la longueur de bloc de l’algorithme de prise d’empreinte. Donc sylabe est plus restrictif que nebule. La contrainte de taille d’empreinte dans sylabe a été mise en place pour éviter les erreurs grossières lors de la génération de liens à la main. Et puis, ces objets ne pourront jamais avoir de contenu puisqu’il n’existe pas d’objet avec cette empreinte, et donc toute tentative d’en forcer un échouera à la vérification d’intégrité.

On peut imaginer des raccourcis tels que 571abe, faceb00k ou 90091e

Dans sylabe, la restriction est faite lors du nettoyage des variables crlink, crlsrc, crldst, crlmet, prtobj, unprtobj, supobj, forcesupobj, entuid et lnkfltobj. Il est tout à fait envisageable pour certaines variables d’accepter une taille très faible. Par contre, toutes les variables devant contenir une entité, un lien complet ou un objet à (dé)protéger ou supprimer, il n’est pas nécessaire de réduire la taille de variable attendu. On peut donc alléger le test pour les variables crlsrc, crldst et crlmet. Un minimum de 4 est raisonnable.

La diffusion de la nouvelle version avec ces icônes nébulisées doit attendre que les-dites icônes soient hébergées par bachue afin que toutes les instances de sylabe puisse se mettre à jour.

Avancement

La cryptographie vient d’être corrigée dans la librairie nebule en php. Elle est de nouveau complètement opérationnelle. Plusieurs essais ont été notamment réalisés sur le même objet qui a été protégé/déprotégé plusieurs fois de suite : ça marche.
Il faut encore corriger l’implémentation de référence de nebule en bash, mais ça ne devrait pas poser de problème.
De plus, le code a été complété pour pouvoir déprotéger un objet soit depuis l’objet en clair soit depuis l’objet chiffré.

Dans la continuité du déchiffrement d’objet, il est maintenant possible d’afficher en ligne d’un objet chiffré avec donc le déchiffrement à la volé. Il faut bien sûr déverrouiller l’entité et avoir accès à la clé de session de l’objet. Cela se traduit par la possibilité de voir directement dans sylabe, dans le mode aff, certains objets chiffrés. Son concernés les images jpeg et png, les fichiers audio mp3 et ogg, les textes brutes et les clés RSA.
C’est étonnant à voir dans le mode lnk puisque l’objet protégé apparaît rouge dans les liens puisqu’il a été effacé, mais il s’affiche quand même en haut des liens!

Un début de support existe pour les fichiers mp3 et ogg bien qu’il y ai encore un problème de définition du type mime lors de l’envoi d’un nouveau fichier de ce type.

Installation sur un nouveau serveur

Une nouvelle page vient d’être créé dans la ligne directe de l’article Création d’une nouvelle entité, c’est la page Installation visible sur la partie gauche du blog.

Elle est encore en cours de rédaction!

Cette page décrit la mise en place d’une nouvelle instance de sylabe sur un serveur. C’est typiquement l’installation d’un serveur personnel à la maison.

Pour l’instant, c’est une documentation restreinte à Debian 7.0 et Apache 2.2.

Avancement

Pas encore de correction pour la crypto, mais la page de base index.php supporte maintenant l’absence du fichier a. Sans fichier a, elle s’affiche sans basculer sur une autre interface comme sylabe. En clair, si on ne demande pas explicitement l’affichage de sylabe sur un serveur web, alors on a par défaut la page de bootstrap qui s’affiche.

Dans le même temps, un petit serveur à été monté pour les tests de réplication de codes. Il s’appelle echo et est visible à l’adresse http://echo.nebule.fr/. Et justement, il affiche par défaut la page de bootstrap :

shot-2014-01-10_00-25-13

Et oui, là c’est nebule et pas encore sylabe.

Avancement

Je n’ai pas eu le temps de corriger les problèmes de crypto.

Mais j’ai avancé un peu sur la centralisation des fonctions très bas niveau d’accès aux objets et liens. Tout ce passe dans des fichiers aujourd’hui mais rien n’interdit que cela puisse être intégré dans une base de données ou un autre système de stockage. Ça n’apporte rien pour le moment mais c’est plus propre et cela prépare potentiellement des dérivés de sylabe sur des machines spécifiques.

Changement de couleur

Changement cosmétique pour aujourd’hui. En cherchant une nouvelle couleur pour le mode déverrouillé, un vert s’est imposé. Et ça tombe bien, c’est la couleur Pantone de l’année 2013 :

Pantone 17-5641 Emerald

Elle n’apparaît que lorsque l’entité est déverrouillée, dans la partie haute de la barre supérieure. Auparavant, c’était orange vif pour bien marquer que l’on avait accès à des objets protégés. Cela donne :

shot-2013-12-11_20-40-00

Avancement

Un premier ajout ce soir concerne une forme de journalisation des liens créés. Si activé, tous les liens créés sont copiés dans un fichier f présent dans le dossier des liens. Il est ainsi notamment accessible à une adresse de la forme http://stephane.nebule.fr/l/f.
Cette journalisation de l’activité sur le serveur est assez gênante puisque publique. Le besoin est cependant ici assez ciblé, en dehors de la facilité de debugg. Les différentes entités spéciales que sont puppetmaster, cerberus, kronos, bachue et asabiyya sont manipulées sur une machine hors connexion, le fameux air gap. Or, j’ai besoin de pouvoir rapidement extraire les nouveaux liens générés pas ces entités, et les objets qui vont avec, pour les transférer vers une machine qui se chargera de les transmettre sur le serveur web public. Cette fonctionnalité est contrôlée par la variable $nebule_createhistory.

Ensuite, j’ai ajouté le code nécessaire au téléchargement de nouveaux objets. Le nom est récupéré et lié à l’objet ainsi que l’extension et le type mime. Ce dernier n’est pas renvoyé par le navigateur mais recalculé sur l’objet reçu. Pour l’instant, les fonctions de protection de l’objet et de ses liens ne sont pas fonctionnelles.
Cette capacité me permet de diffuser la dernière version des différents fichiers :
index.php
sylabe.php
lib_nebule.php
env_sylabe.php

Avancement

Depuis aujourd’hui, on peut protéger et déprotéger un objet, c’est à dire le chiffrer et le déchiffrer. Lorsque l’objet est protégé, ou lorsque l’on affiche le fichier chiffré, un message prévient qu’il est protégé et qu’il faut faire attention si il apparaît en public. Ce message va surtout servir pour l’étape suivante, permettre l’affichage en ligne du contenu des objets protégés lorsque l’entité est déverrouillée.

Il est maintenant aussi possible de démarrer un nouveau serveur contenant sylabe et de générer une nouvelle entité. typiquement, ce peut être le serveur dédié à cette entité. Ce n’est pas encore tout à fait au point, il y a des objets à créer par défaut et ce n’est pas encore fait par défaut. On peut donc tout à fait se passer des script bash pour la génération d’une nouvelle entité et même de son serveur sylabe associé.

Voici un exemple sur ce qu’il se passe au moment ou l’on protège un objet :

20131207 sylabe capture

Avancement

Le chiffrement commence à se mettre en place. Le bouton de protection des objets est maintenant pleinement fonctionnel. Les liens vers les clés de session et IV sont créés. La clé de session est chiffrée pour l’entité courante.

Il ne reste qu’à faire la fonction de déchiffrement et vérifier que ça marche aussi depuis le bash.

Avancement

Cette fois-ci, la génération d’une nouvelle entité a basculée dans la librairie nebule. Et c’est fonctionnel pour une entité autonome !
J’ai même réussit à me connecter avec ces nouvelles entités générées.
Tous les liens, y compris le nom et la date de création sont générés par la nouvelle entité elle-même. Cela permet de ne pas trahir de lien avec l’entité courante. Ce sera par contre une autre histoire pour les entités esclaves.

Il reste à améliorer la génération d’entités esclaves. Cela nécessite le chiffrement du mot de passe généré aléatoirement pour protéger la clé privée. Du coup, le développement se concentre maintenant sur le chiffrement/déchiffrement proprement dit. Le mécanisme de gestion du mot de passe permettra même de rattacher une entité autonome comme entité esclave simplement en recréant les liens et le mot de passe chiffré comme c’est le cas pour une entité esclave.

Avancement

La génération d’une nouvelle entité est presque fonctionnelle. Cela inclut bien sûr la génération d’un bi-clé RSA. Les objets des clés publiques sont générés, ainsi que certains liens indispensable.
Cependant, seul le cas d’une entité autonome est géré. Le cas de l’entité esclave de l’entité courante nécessite le chiffrement du mot de passe aléatoire. Or le chiffrement existe dans nebule en bash, mais par encore dans sylabe en php.
De plus, tous les liens ont été signés par l’entité courante, ce qui ne n’est pas vraiment souhaitable. Il faut modifier le code pour que ce soit la nouvelle entité qui les signe.

Avancement

La reconnaissance d’une entité tierce est fonctionnelle. En fonction des informations renseignées, c’est à dire ID et/ou localisation, on récupère si possible les informations manquantes ainsi que le nom, prénom et surnom. On enregistre et on lie la localisation renseignée ou trouvée pour l’entité.

Le véritable identifiant de l’entité, ID, c’est l’empreinte de la clé publique. C’est un objet indispensable à trouver puisque c’est le seul à pouvoir valider les liens de cette entité.
La localisation est indispensable si l’entité n’est pas connue de son cercle d’amis (càd toutes les autres entités que l’on connaît).

Si la localisation de l’entité n’est pas renseignée ou trouvée, on utilise à la place l’emplacement de l’entité annuaire asabiyya par défaut.

C’est l’occasion aussi d’une rationalisation du code pour la création de nouveaux objets contenant du texte au niveau de nebule. La localisation est un texte par exemple. Ce code est reprit de la partie de sylabe qui permet l’ajout d’un texte.

Avancement

Ce soir, je n’ai pas continué la création d’une nouvelle entité, mais j’ai fait la reconnaissance d’une entité tierce. C’est à dire que sur un ID et/ou une URL, on peut synchroniser une entité, récupérer son nom et la marquer comme connue. Bon, j’ai un petit bugg sur la recherche du nom, mais ce ne doit pas être bien grave…

Avancement

Un gros travail a été fait sur la fonction de lecture des liens ainsi que sur celle qui assure le filtrage de ces liens. Le filtrage est nécessaire parce qu’il permet de retirer les liens marqués comme supprimés et donc de ne pas en tenir compte.

Une nouvelle fonction _l_fnd est une autre fonction de lecture de liens avec filtrage mais plus dédié à l’extraction plus précise de certains liens. Elle permet d’accélérer, un peu, la récupération de certaines caractéristiques des objets.

La vue vue des liens lnk dispose maintenant d’un filtrage de la vue plus avancé puisqu’il permet de sélectionner un type de lien et/ou de recherche un lien de/vers un objet spécifique (autre que l’objet en cours de visualisation). Ce filtrage des liens affichés sera complété plus tard avec en plus un mode de filtrage plus fin correspondant directement à la fonction _l_fnd.

En attendant la mise en place de la possibilité de charger un nouvel objet, et plus seulement un texte, la partie affichage du mode ent permet de créer une nouvelle entité. Mais, il n’y a que l’affichage qui marche, la création n’est pas encore fonctionnelle. Ce sera pour une prochaine fois. Il est déjà prévu notamment de pouvoir créer une entité esclave de son entité courante.

Un certain nombre de robots commencent à naviguer dans les différentes vues dont celles qui demande beaucoup de temps de calcul. Le serveur prend régulièrement une claque. Je songe à basculer par défaut l’affichage en mode non développement… ou d’interdire certains modes aux robots…

Avancement

Ça continue pour les actions.
La suppression est effective et un lien de suppression est créé. La suppression de l’objet proprement dit qui tient compte de la présence de liens d’autres entités. C’est la réponse à la réflexion sur le blog de nebule sur la multi-entité et la suppression d’objet. On verra dans le temps si cette façon de faire est correcte.
La restauration d’un objet précédemment supprimé est fonctionnelle. L’objet est synchronisé si disponible ailleurs. Le lien de suppression est annulé.
Une nouvelle action permet de définir un objet comme étant à bannir. Cela ne le supprime pas, mais cela empêche sa synchronisation si supprimé. Son affichage est restreint en conséquence dans les mode aff, nav et lnk. Lorsque banni, un lien permet d’annuler le bannissement si nécessaire. Le bannissement tient compte des liens générés par les entités puppetmaster et cerberus.
Une nouvelle action permet à l’entité propriétaire du serveur de forcer la suppression d’un objet. Là, la suppression de l’objet est effective. Cette suppression n’est possible que si l’entité en cours est l’entité propriétaire du serveur, si l’entité est connectée, si l’objet est marqué supprimé par un lien, et si l’objet est encore présent.

Les variables $sylabe_permitsynclink et $sylabe_permitsyncobject sont maintenant sous la coupe de nebule en tant que $nebule_permitsynclink et $nebule_permitsyncobject. Elles sont utilisées directement en vérification dans les fonctions _l_dl1 et _o_dl1. Les anciennes variables ne sont plus utilisées.

Le menu de gauche sur les nœuds a été corrigé dans sa forme et sa cohérence.

Avancement

La version de sylabe posée hier soir introduit un certain nombre d’actions, même si non réellement fonctionnelles (non terminées).

Dans les actions, il y a maintenant la synchronisation des objets et des liens. Cela veut dire que, si c’est autorisé, l’entité peut synchroniser des objets dont elle n’a pas le contenu et des liens depuis des points de présence sur internet. L’entité doit être déverrouillée. Les deux variables qui contrôle les autorisations de synchronisation sont $sylabe_permitsynclink et $sylabe_permitsyncobject.
Chaque entité manipule des objets qui nous intéressent ou nous sont destinés. Chaque entité a ainsi de bonnes chances de détenir un objet manquant et de nouveaux liens. La synchronisation se fait donc vers toutes les entités que l’on connaît, indistinctement.
Le mode d’affichage syn ne recevant que la synchronisation des liens et objets, il disparaît. La synchronisation apparaît maintenant dans la partie actions, en haut de la partie centrale de la page. De plus, ne se trouvant plus dans une page indépendante, c’est plus simple parce que l’on reste dans le mode qui a fait appel à la synchronisation.

La création/suppression de la définition d’un objet comme nÅ“ud est gérée comme une action et est fonctionnelle. C’est en fait un cas simple qui ne nécessite respectivement que l’ajout un lien de type f ou x vers l’objet nebule/objet/noeud.

Les actions de commenter un objet, le protéger et le supprimer sont ajoutées mais sont non fonctionnelles.

Le mode d’affichage des entités ent a été modifié. Il soufrait de gros problèmes de performances et de pertinence du contenu.

Il y a des problèmes de performances concernent le mode d’affichage des liens lnk. Je regarde pour résoudre ça…

Timeout

Il y a un gros problème de performances dans l’affichage des pages. Sur ma machine de dev, ça n’était pas trop flagrant. Mais sur le petit serveur en ligne, c’est catastrophique ! Presque 10 minutes (575s) pour afficher une page assez simple comme la page d’un objet image en mode aff

Le problème vient à priori de la partie à gauche qui affiche les entités. Je vais le corriger ou le simplifier fortement dans son fonctionnement…

Avancement

Ce soir, j’ai corrigé un petit bugg de la fonction _l_lsx. Les liens de type x n’étaient pas correctement pris en compte. Pour résoudre ce bugg, j’ai ajouté la possibilité d’afficher en mode lnk les liens avec ou non le tri/filtrage. Le filtrage est justement assuré sur les liens de type x
Maintenant, les liens de type x sont parfaitement gérés.

Le mode d’affichage des liens lnk propose aussi maintenant la possibilité de supprimer un lien (sauf un de type x). C’est en fait la génération d’un lien de type x correspondant au lien à supprimer.

Les boutons OK/NOK sont maintenant fonctionnels même si il se peut que ce système change un peu. Si OK avait été sélectionné pour un objet, le lien apparaît sur fond vert. Le sélectionner sur fond vert revient à le supprimer.

Un affichage un peu plus user-friendly des modes est en place sur activation de la variable sylabe_hidedevmods. Cet affichage masque les modes plutôt techniques. Il n’est pas activé pour le moment, on est en pleine expérimentation…