Archive for the ‘librairie’ Category

Entités de recouvrement – implémentation

Jeudi, décembre 8th, 2016

Dans le précédent article sur les Entités de recouvrement qui date de plus de 6 mois, il était question de l’implémentation du mécanisme dans le code. Jusque là la liste des entités de recouvrement était renvoyée vide.
Ce mécanisme peut être une contrainte légale dans certains pays mais ce peut être aussi un moyen d’assurer plus sereinement la disponibilité des données sans remettre en question significativement la confidentialité de celles-ci. Sa portée est strictement local et ne doit pas devenir un comportement global sous peine de rompre la confiance dans l’ensemble du code de nebule.

La prochaine version de la bibliothèque nebule en PHP intègre le code nécessaire à la détection des entités marquées localement comme entités de recouvrement et le code qui se charge de dupliquer la protection des objets pour ces entités.

La définition des entités de recouvrement est purement locale et est attachée à l’entité instance locale. La détection d’entité de recouvrement se fait sur un lien de type f entre chaque entité définie comme entité de recouvrement et l’entité instance locale. Le champ méta du lien est l’objet de référence contenant nebule/objet/entite/recouvrement. Seuls les liens des autorités strictement locales sont pris en compte, c’est à dire à l’exception du puppetmaster, du maître de la sécurité et du maître du code.

La duplication de la protection se fait au niveau de la fonction (unique) de protection d’un objet setProtected(). Afin d’éviter la suppression du partage de protection avec une entité de recouvrement, la fonction cancelShareProtectionTo() ne supprime pas ce partage si l’entité est dans la liste des entités de recouvrement.
Afin de ne pas perturber l’utilisateur, les applications affichent tous les partages de protection mais n’affichent pas le bouton correspondant pour ces entités de recouvrement.

Les applications option, sylabe et klicty permettaient déjà l’affichage des entités de recouvrement même si elle était vide. Ces affichages ont été améliorés afin d’afficher en plus l’entité autorité locale qui a activé l’entité comme entité de recouvrement. Le but est d’avoir un mécanisme qui peut être contraignant et indiscret mais dont le fonctionnement doit être ouvert et loyal pour maintenir la confiance de l’utilisateur.
L’application option est maintenant le centre de gestion des entités de recouvrement. Il est possible, lorsque l’on déverrouille l’entité instance de serveur, d’ajouter ou de retirer des entités à la liste. Les autres entités ne peuvent faire que de l’affichage. Si un lien est généré par une autre entité, il est ignoré.

bootstrap – Mise en ligne

Jeudi, novembre 24th, 2016

Une nouvelle 020161123 version du bootstrap est mise en ligne, le différentiel :

bc3f2cf23e92fa55fca4f20307236d7653726f9f7ca4593589316f3b8bdb9a53

Comme c’est un différentiel, il faut importer les liens puis copier les objets, et enfin remplacer le bootstrap. La bibliothèque et toutes les applications ont été mises à jour.

L’application 0 semble avoir des problèmes sur certains serveurs. Les serveurs de test ne semblent par contre pas concernés. Le problème est en cours d’investigation…

Renforcement de la lecture des objets – affichage

Samedi, novembre 19th, 2016

Suite de l’article sur le Renforcement de la lecture des objets, et type hash invalide.

L’argument $permitTruncate ayant disparu, c’est aussi l’option displayUnverifiedObjects qui n’a plus de raison d’être. Les fonctions d’affichage qui auraient pu devoir afficher un objet trop gros pour le vérifier n’en verront plus dans tous les cas.

En échange, une nouvelle option permitCheckObjectHash est mise en place dans la bibliothèque nebule en PHP orienté objet.
Elle est utilisée dans la fonction _getUnprotectedContent(). Elle va activer la vérification de l’empreinte des objets lus, ou plutôt forcer la lecture de l’objet même si son empreinte est invalide ou non vérifiable. C’est le pendant de l’option permitCheckSignOnVerify ayant la même signification pour la vérification des liens. Elle a true comme valeur par défaut. Elle n’est pas modifiable par lien, pour changer sa valeur par défaut il faut modifier le fichier des options.
Cette option est critique, elle doit toujours rester par défaut à true !

Renforcement de la lecture des objets – type hash invalide

Vendredi, novembre 18th, 2016

Dans l’article sur le Renforcement de la lecture des objets, il était question notamment de la possibilité de supprimer ou pas un objet dont on ne peut pas vérifier l’empreinte parce que le type de hash est soit inconnu soit non reconnu.

Lors de l’échec de la récupération du type de hash de l’objet, on essaye tout de suite, si l’option permitSynchronizeLinks est à true, de synchroniser rapidement les liens de l’objet. Puis on essaie de relire le type de hash de l’objet.

Une nouvelle option permitDeleteObjectOnUnknowHash vient d’être ajoutée. Elle a true comme valeur par défaut. Elle n’est pas modifiable par lien, pour changer sa valeur par défaut il faut modifier le fichier des options.
Cette option est critique, elle doit toujours rester par défaut à true !

La nouvelle option est utilisée par la bibliothèque nebule en PHP en programmation orienté objet (library POO) par les fonctions checkConsistency() et _getUnprotectedContent() de la classe Object. La fonction _getProtectedContent() ne prend pas en compte cette option, elle se base uniquement sur _getUnprotectedContent() pour la lecture de l’objet protégé et de la clé de déchiffrement associée.

L’implémentation de l’option est un tout petit peu différent ce que l’on peut attendre. Lorsque l’on recherche le lien du type d’empreinte d’un objet (avec la pondération sociale), si aucun lien n’est trouvé ou si le nom de l’algorithme de prise d’empreinte n’est pas reconnu, alors il y a deux possibilités.
L’option permitDeleteObjectOnUnknowHash est à :

  1. false. Dans ce cas les deux fonctions retournent tout de suite un résultat booléen négatif ou un contenu vide.
  2. true. Comme aucun algorithme n’est trouvé, on utilise l’algorithme définit par défaut et on continue le processus de vérification dans les deux fonctions. Si l’empreinte ne correspond pas avec cet algorithme, l’objet est supprimé. C’est une façon de donner une chance à un objet pour lequel les liens auraient été partiellement synchronisés.

Dans la bibliothèque nebule en PHP en programmation procédurale (library PP), la lecture des objets se fait via les fonctions _o_ls1 et _o_lsx. La deuxième repose en fait sur la première. Et en début de fonction _o_ls1, un appel à la fonction _o_vr permet de vérifier le contenu de l’objet.
La fonction _o_vr ne prend en compte que les objets avec un hash fait avec l’algorithme par défaut, aujourd’hui sha256. L’option permitDeleteObjectOnUnknowHash n’est pas utilisée.

Dans les deux bibliothèques, si c’est l’objet avec d’identifiant 0, alors il est systématiquement supprimé.

Enfin, dans tous les cas, il ne faut surtout pas tenter de vérifier l’empreinte avec tous les algorithmes disponibles, cela reviendrait à permettre une attaque sur le plus faible de ceux-ci…

Renforcement de la lecture des objets

Jeudi, novembre 17th, 2016

Dans la bibliothèque nebule en PHP orienté objet et dans certaines applications, un certain nombre de fonctions lisent le contenu des objets soit directement soit via la fonction getContent() de l’instance Object des objets. Toutes les lectures de contenus d’objets et de liens se font via la classe io de la bibliothèque et non directement par des fonctions de PHP de lecture de flux, de lecture directe. Les fonctions de la classe io ne font pas d’opérations cryptographiques, donc aucune vérification n’est possible à ce niveau.

Dans la bibliothèque se trouve aussi la fonction checkConsistency() pour vérifier le contenu d’un objet. Deux différences existent entre les deux fonction :

  1. La fonction getContent() lit des données et vérifie si l’empreinte est bonne sauf si l’objet est trop grand. Si l’objet est trop grand, un argument $permitTruncate permet de ne pas rejeter le contenu de l’objet si il est trop grand. Pour les petits objets la vérification se fait dans tous les cas. La limite d’un objet petit ou grand est définie par l’option ioReadMaxData. Si l’empreinte ne correspond pas, le contenu n’est pas conservé et un contenu vide est renvoyé à la fonction appelante. La fonction checkConsistency() ne renvoie pas de données mais vérifie juste l’empreinte, le résultat booléen renvoyé et négatif ou positif.
  2. La fonction getContent() ne supprime pas un objet si l’empreinte n’est pas bonne. La fonction checkConsistency() vérifie l’empreinte et, si l’empreinte n’est pas bonne, supprime l’objet via une fonction de la classe io.

Il est difficile de prendre une décision de suppression d’un objet parce que peut-être que l’algorithme de prise d’empreinte n’est pas reconnu par la machine sur laquelle tourne l’instance serveur. En cas d’absence de possibilité de vérification comme un type d’empreinte inconnu ou un objet trop grand, il faut renvoyer un contenu vide ou résultat négatif mais il ne faut pas supprimer l’objet. Quoique dans un mode paranoïaque, il faut peut-être prévoir de supprimer tout objet non vérifiable, à voir.

Pour commencer l’argument $permitTruncate n’a pas de raison d’être, il est contre productif parce qu’il affaibli l’ensemble du système. Il va être supprimé et les applications qui affichaient un objet avec un message comme quoi l’objet est trop gros vont afficher un message d’erreur sans le contenu.

Ensuite, la fonction getContent() fait appel à une fonction privée _getProtectedContent() pour lire le contenu d’un objet protégé. Elle va maintenant sous-traiter aussi la lecture des objets non protégés à une fonction privée _getUnprotectedContent(). Cette nouvelle fonction sera très similaire à la fonction checkConsistency() mais renverra un contenu complet ou vide au lieu d’un résultat booléen. Et bien sûr l’objet sera supprimé en cas d’empreinte invalide. Et la fonction _getProtectedContent() utilisera la fonction _getUnprotectedContent() pour la lecture de tous les objets accessibles non protégés.

La suppression de l’argument $permitTruncate va poser un gros problème pour l’affichage des gros objets. Ceux-ci via le navigateur peuvent être affiché dans certains cas parce que le navigateur les télécharge sur le serveur web pour les afficher au fur et à mesure. C’est le cas des vidéos non protégées. Une des options pour résoudre ce problème est peut-être d’utiliser le lien de type s jusque là inexploité par la bibliothèque…

Signature du bootstrap

Mardi, novembre 1st, 2016

Jusque là, le bootstrap était le seul code à ne pas être vérifié. Il est le premier code à charger et si il lui est possible de calculer sa propre empreinte, il n’est pas possible de pouvoir vérifier et certifier celle-ci comme c’est le cas pour la bibliothèque. Et c’est logique, le bootstrap peut avoir été modifié pour ne plus se vérifier et dire que tout va bien.

On contournait le problème jusque là via les applications. Il fallait tenir à jour une liste des bootstrap supportés par l’application (ou vice versa en fait). Ça n’était pas pratique en fait.

Et puis les objets de références sont arrivés pour la bibliothèque et les applications.

Rien n’empêche de créer un objet de référence pour le bootstrap aussi, sur le même modèle que celui de la bibliothèque. Et c’est plus simple à mettre en place en fait. Il faudra juste ajouter le lien de référence pour toute nouvelle version du bootstrap et presque automatiquement toutes les applications le reconnaîtront juste en cherchant si il y a un lien de référence.

Dans le même temps, cette méthode à le mérite de permettre au bootstrap aussi de lui-même tester sa propre empreinte en regardant si il a bien le lien de référence. ce n’est pas infaillible, comme dit au début, mais c’est mieux que rien et c’est facile à implémenter.

Et ça marche bien. Une nouvelle version du bootstrap est diffusée avec cet ajout et quelques corrections mineures :

3a16374dc6ea7610c6ad464b3d627ae9409a78698fa18258d22946d2fd48d8f4

Avancement du bootstrap

Lundi, octobre 31st, 2016

Une nouvelle version du code du bootstrap en php procédurale est diffusée :

6c902d8c29b965fde6d576ef04e5405c84b1353d01715c4fb96e561ba76e9114

Comme d’habitude, l’identifiant est sont empreinte sha256. C’est le seul code qui ne peut pas être signé.

Sauf problème de dernière minute lors des tests sur Internet, cette version est fonctionnelle et complète.

Il manque par contre les liens signés du maître du code bachue pour désigner la bibliothèque et les applications. Les différentes applications se lancent sauf sylabe qui coince sur un de ses modules. Lorsque l’ensemble sera à peut près stable, le tout sera mis en ligne.

Du fait des grands changements dans la gestion des arguments en ligne et des applications, les applications actuellement en ligne sur Internet ne sont plus compatibles avec le nouveau bootstrap.

Avancement sur le bootstrap

Dimanche, octobre 30th, 2016

Le travail sur le bootstrap progresse.

La modification du code pour rechercher la bibliothèque et les applications à partir des objets de référence est maintenant complète et fonctionnelle.

Les nouveaux arguments sont aussi fonctionnels. Il reste à vérifier que les applications utilisent bien ces nouveaux arguments.

La face erreur du bootstrap :

020161030 bootstrap_-_2016-10-30_19.22.10

La face de sélection des applications, dite application 0 :

020161030 bootstrap_-_2016-10-30_19.33.18

La face passagère de pré-chargement d’une application :

020161030 bootstrap_-_2016-10-30_20.05.05

bootstrap – pré-chargement des applications

Mardi, octobre 11th, 2016

Suite à la Reprise du bootstrap en programmation procédurale, le code à été en très grande partie revu.

La version en programmation procédurale est maintenant utilisée par défaut. La version en programmation orientée objet est laissée en l’état, elle n’est plus fonctionnelle.

Le nouveau bootstrap est pleinement fonctionnel à l’exception de la partie de premier chargement lorsque l’on installe une nouvelle instance de serveur.

Contrairement à avant, les applications et la librairie sont pré-chargés lors du premier lancement de l’application. Cela se passe dans une page dédiée qui une fois l’application en mémoire fait un rechargement de la page. Au rechargement, on est dans l’application. La page de pré-chargement peut être un peu longue comme dans la capture d’écran plus bas mais sur des machines récentes elle passera en moins d’une seconde.
Surtout, cette fonctionnalité qui paraît un peu cosmétique au premier abord va permettre de mieux gérer la sérialisation/désérialisation des différentes instances d’une application. C’est à dire qu’une fois le pré-chargement réalisé avec tous les calculs et parcours de liens effectués, le chargements suivants seront beaucoup plus rapides.

Le travail sur le pré-chargement a contraint la remise à plat des fonctions liées à l’instanciation et à la sérialisation/désérialisation des différentes classes des applications. Cela a été l’occasion de faire le ménage aussi; De fait, les applications ne sont plus compatibles avec les anciennes version du bootstrap.

Voici donc à quoi ressemble le bootstrap lorsqu’il est interrompu par l’utilisateur ou si il y a une erreur :

020161011 - bootstrap_-_2016-10-11_22.11.40
Page du bootstrap interrompu sur initiative de l’utilisateur.

Et enfin, voici à quoi ressemble la page de pré-chargement des applications :

020161011 - bootstrap_-_2016-10-11_22.10.53
Page de pré-chargement de l’application sylabe.

Mode de récupération

Dimanche, octobre 9th, 2016

Un mode de récupération était déjà plus ou moins bien implémenté. Il a été repris à l’occasion de la ré-écriture du bootstrap et il a notamment été corrigé dans la librairie nebule.

L’activation de ce mode de récupération empêche simplement l’entité instance du serveur et l’entité par défaut de devenir autorités locales. C’est à dire que les options qui leur permettent de devenir autorités locales ne sont plus pris en compte.
Le fait d’être autorité locale permet de générer des liens, qui seront réellement reconnus, pour faire des mises à jours de la librairie et des applications au même titre que le maître du code bachue. C’est comme cela que l’on peut travailler le code signé sans avoir recours en permanence au maître du code. Et c’est aussi comme cela que l’on peut mettre en place sa propre application sans qu’elle soit signée du maître du code.

L’activation peut se faire via les arguments de l’URL en ajoutant rescue si l’option permitOnlineRescue est à true.
En cas de besoin, option modeRescue permet à true d’activer et de forcer le mode de récupération sans tenir compte de l’option permitOnlineRescue.

Ajout d’émotions sur des objets – suite 6

Samedi, octobre 1st, 2016

Suite des articles sur l’Ajout d’émotions sur des objets et suites 1 2 3 4 5, et Liens d’émotions.

Les émotions sont maintenant fonctionnelles dans la version encore en cours de développement de la librairie des des applications comme sylabe ou klicty.

1joie1 2confiance1 3peur1 4surprise1 5triste1 6degout1 7colere1 8interet1

Une page dédiée à l’Iconographie dans nebule est créé afin de recenser les différents icônes utilisées par la partie affichage (display) de la librairie. La première rubrique concerne justement les icônes des émotions.

Voici à quoi ressemble les émotions sur un objet affiché dans sylabe avec plusieurs émotions de plusieurs entités :

020161001 sylabe_-_Dieu_Thor_-_2016-10-01_22.39.40

Ajout d’émotions sur des objets – suite 5

Dimanche, septembre 18th, 2016

Suite des articles sur l’Ajout d’émotions sur des objets et suites 1 2 3 4, et Liens d’émotions.

Les émotions sont une façon de marque un objet avec les sentiments qu’il inspire à un être humain. Les émotions sont plutôt subjectives là où les avis sont beaucoup plus objectifs. L’intensité que l’on peut donner à une émotion est toujours strictement positive, le sens positif ou négatif est déjà porté par l’émotion elle-même.

Les émotions étaient fonctionnelles sur les objets dans la version 2014 de sylabe. Mais le code ayant été entièrement repris en php orienté objet elles n’avaient pas encore été ré-implémentées. Le nécessaire est en cours de remise en place directement dans la librairie afin que les émotions sur les objets soient utilisables dans toutes les applications.

Les avis ne sont pas maintenus.

En parallèle, la réflexion à long terme continue sur la pondération des objets en vue de leur suppression automatique au bout d’une certain temps. C’est la fonction d’oublie. Il faut que cette pondération soit aisée à utiliser, et surtout qu’elle ait du sens pour que l’utilisateur prenne le temps de le faire. Il est clair qu’un champs de quantification de l’importance d’un objet est difficile à appréhender et ne sera pas utilisé. La gestion des émotions devient en fait la solution évidente de pondération. De plus, la pondération d’un objet, qui représente en fait son importance, peut influencer et être influencée par l’importance des objets qui lui sont liés.
Sans pondération, la gestion de l’oublie sera chaotique et peu fiable, donc pas utilisée.

La facilité d’usage et la pertinence de la solution de gestion des émotions et leurs pondérations sont donc déterminantes pour leur adoption et leur utilisation mais aussi plus tard pour la gestion de l’oublie.

Il y a plusieurs façons d’aborder la pondération avec les émotions. (suite…)

Version 020160830

Mercredi, août 31st, 2016

Une nouvelle version 020160830 est publiée. Les changements étant assez profonds par rapport à la précédente version publiée, elle va subir une phase de test. Il n’est pas possible de mettre à jour une instance de serveur existante sans remplacer le bootstrap, c’est à dire le fichier index.php. Les sites web des applications sylabe et klicty seront mis à niveau progressivement plus tard.

La nouvelle version est diffusée pour l’instant sous forme d’une nouvelle installation d’instance de serveur.
Elle est disponible ici : 6b48a8ced09ef7ede2da001d8bf10a6fe5ad9d586ca1f1856eeec9fbc8ad4688

La procédure d’installation va être créée pour avoir quelque chose de complètement fonctionnel. Jusque là la procédure d’installation ne concernait que sylabe.

Les nouvelles applications option, upload et defolt sont disponibles à partir de cette version.

Les options sont maintenant en grande partie nébulisées dans la librairie, c’est à dire gérées par des liens. Le fichier nebule.env reste mais va permettre de figer les options que l’on ne voudra pas voir modifiée par les liens.

Iconographie

Mercredi, juillet 20th, 2016

Les icônes étaient jusque là gérées dans la partie affichage des différents programmes. Mais il y a la migration des parties communes d’affichage, c’est à dire une grande partie, vers la librairie nebule en php. Cette migration avance vite et elle inclue la gestion d’une grande partie des icônes, toutes celles qui sont communes. Une nouvelle page dédiée à l’iconographie va donc apparaître sur le blog de nebule.

Et en même temps les icônes vont être restylisées. Voici les premiers essais :

lo ent ll
objadd entadd

La résolution native des icônes passe à 256×256 pixels mais avec certaines contraintes dans le dessin pour supporter facilement le redimenssionnement à 64×64 pixels, taille d’affichage actuel.

Bootstrap procédural

Samedi, juillet 9th, 2016

Les instances du bootstrap ont été détachées des applications actuelles. Elles ne servaient que pour l’affichage optionnel de la métrologie.

L’idée est à terme de revenir sur un bootstrap en programmation procédurale et non orientée objet. Les besoins du bootstrap sont beaucoup plus restreints que ceux des applications et il est difficile aujourd’hui de faire un export réduit de la librairie nebule juste pour le bootstrap. La maintenance sera facilité.

Le portage devrait reprendre le code originel du bootstrap en procédural.

Nouvelles applications

Samedi, juillet 9th, 2016

La librairie nebule s’étoffe un peu plus au point de devenir un « framework » qui facilite grandement le déploiement de nouvelles applications. Les applications (classe Application) ont une classe abstraite parente avec tout un tas de fonctions disponibles. Idem pour les classes Display, Action et Translate des applications. Ces fonctions peuvent être directement utilisées ou surchargées si besoin.

Le développement de l’application messae est en attente de stabilisation de la librairie pour pouvoir être lancée.

Une base d’application a été ajouté à la page Applications.

Messagerie indépendante

Lundi, juillet 4th, 2016

La messagerie était un module de sylabe et avait déjà évolué pour ressembler plutôt à des conversation intégrant des messages.

Une nouvelle application va être lancée afin de présenter les conversations dans une application indépendante de la même façon que klicty. Mais le module des conversations dans sylabe va perduré et les conversations et messages seront complètement interopérables. En fait, la nouvelle application reprendra la base fonctionnelle et modulaire de sylabe mais avec un affichage simplifié et avec uniquement les modules entité, objet, groupe et messagerie. L’affichage principal sera différent mais les modules devraient être exactement les mêmes.

Afin de faciliter la création de nouvelles applications et la réutilisation des modules existants, le code de la librairie à été assez sérieusement modifié afin de centraliser dans celui-ci un maximum de fonctions et classes communes. A ce titre, la forme interne des applications et des modules à été changée et devient incompatible avec les précédentes applications et modules.

La nouvelle application des conversations s’appellera messae.
Un blog est déjà actif pour suivre son développement : http://blog.messae.org/

Nouvelle version librairie php

Samedi, juin 11th, 2016

Diffusion de la nouvelle librairie en php. Elle intègre nativement la gestion des conversations. La modification de la gestion des groupes n’est pas encore faite.

Le code : 9826667246765674e690e914bfc0a524f2847651f49f8ea1e638bb4122a3b4b4

Gestion des conversations

Lundi, mai 30th, 2016

La librairie php en cours de développement intègre maintenant nativement la gestion des conversations. Les conversations permettent de suivre des messages.
L’intégration dans la librairie permet de décharger les programmes comme sylabe et klicty de la gestion de ces conversations. Il permet aussi une uniformisation de cette gestion.

La gestion des conversations est au départ copiée/collée de la gestion des groupes. Mais elle a été revu au cours du développement.
Les conversations peuvent maintenant être marquées comme :

  1. fermée (ou ouverte)
  2. protégée (ou publique)
  3. dissimulée (ou affichée)

La fonctionnalité de conversation fermée est fonctionnelle, la protection est en court de développement et la dissimulation n’est pas encore développée.

L’intégration des groupes va être revu pour fonctionner de la même façon que les conversations.

Ajustement des noms de domaines

Vendredi, avril 1st, 2016

Tous les noms de domaines liés aux entités de nebule ont été revus. Le puppetmaster est toujours l’entité autorité racine sous laquelle on trouve maintenant les rôles :

  1. security.master.nebule.org
  2. code.master.nebule.org
  3. directory.master.nebule.org
  4. time.master.nebule.org

Chaque nom de domaine correspondant à un rôle est renvoyé vers une entité déterminée, à savoir aujourd’hui dans l’ordre :

  1. cerberus.nebule.org
  2. bachue.nebule.org
  3. asabiyya.nebule.org
  4. kronos.nebule.org

L’idée, c’est que en cas de problème une entité peut être remplacée par une nouvelle. Et c’est pareil dans le code de la librairie nebule en php.

Les adresses en IPv6 ne sont plus fonctionnelles, mais ça reviendra.