Archive for the ‘référence’ 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é.

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

Propriété d’un objet et référence par rapport à un objet

Lundi, octobre 31st, 2016

Il y a deux liens très proches dans leurs formes. Le lien qui attribut une propriété à un objet et le lien qui désigne un objet par rapport à un objet de référence.

Le lien d’affectation d’une propriété à un objet :

  • type : l
  • source : un objet.
  • cible : l’objet de l’attribut.
  • méta : objet de référence du type d’attribut.

Le lien de désignation d’un objet par rapport à un objet de référence :

  • type : f
  • source : l’objet de départ.
  • cible : l’objet recherché.
  • méta : objet de référence

Leur forme est assez proche. Mais plus encore la recherche du résultat tourne autour de l’objet cible dans le contexte de l’objet méta, elle est strictement identique au type de lien près.

Et pourtant ce ne sont pas les mêmes liens parce que ce n’est pas le même usage.

Le lien d’affectation d’attribut définit une propriété de l’objet source alors que le lien de désignation par référence n’est pas une propriété mais un usage de l’objet source. Il y a donc bien une raison de séparer le type de ces deux formes de liens, et d’avoir deux fonctions distinctes de recherche.

Objet de référence contre suivi du graphe des mises à jours

Vendredi, octobre 21st, 2016

Le bootstrap retrouve l’application et la librairie nebule à utiliser en suivant des liens. Actuellement, il suit le graphe des mises à jours de l’application sélectionnée et celui de la librairie nebule.

Mais il est possible dans ce cas d’utiliser une autre méthode de suivi des liens pour retrouver la dernière version des applications et de la librairie.

La recherche par les graphes permet de suivre les liens de type u d’objets en objets jusqu’à arriver en bout de branche de l’arborescence des mises à jours. Évidement, il faut tenir compte des liens de type x de suppression de liens. Et il faut aussi que l’objet en bout de branche soit disponible sinon on remonte la branche en sens inverse…
La méthode est efficace mais elle est très longue a jouer.

Il est possible de faire plus simple pour un résultat identique dans notre cas.

La structure de recherche de la dernière version d’un objet a dans notre cas un cheminement complètement sous contrôle. Il n’est pas nécessaire de gérer une profondeur de recherche de plus de un niveau, même avec des liens de mise à jour. En ne fonctionnant plus que sur un seul niveau il est tout à fait possible de n’utiliser que des liens de type f depuis un objet de référence.
Et en plus il est possible de ne plus à devoir gérer les liens de suppression de liens. Un nouveau lien remplace automatiquement le précédent lien. Si il faut supprimer le lien de la dernière mise à jour, il suffit de rejouer à une date plus récente le lien de la version précédente.

Et ainsi il y a gain du nombre d’objets parcourus et gain de temps de traitement sur les quelques liens qui restent.

Cette méthode va être mis en place dès que possible dans le bootstrap.

Objet virtuel avec rôle – Suite

Dimanche, septembre 18th, 2016

Suite de l’article sur l’Objet virtuel avec rôle.

En fait ces objets virtuels sont déjà utilisés dans sylabe et klicty mais on se contente actuellement de générer aléatoirement la valeur de l’ID des objets de références. Et la taille des ID est la même qu’une empreinte de 256bits.

C’est utilisé par les groupes, le code va évoluer pour réduire la taille d’aléa utilisé et ajouter une partie fixe ou moins aléatoire. C’est utilisé par les nœuds mais ils vont disparaître. Et c’est utilisé par les arborescences, là aussi le code va évoluer.

La part d’aléa va être réduite à 64bits et un préfixe assez long sera ajouté pour avoir une taille d’ID entre 129 et 191bits.

Objet virtuel avec rôle

Vendredi, septembre 16th, 2016

Jusque là, la très grande majorité des objets créés ont ou ont eu un contenu et donc une empreinte numérique unique leur correspondant. Cela a été le cas pour les images utilisées comme icônes dans sylabe par exemple.

Le problème par exemple avec l’usage direct de l’objet d’une icône fait que si on veut la mettre à jour ou tout simplement en utiliser une autre à la place il faut faire un lien de mise à jour. Or ce lien de mise à jour n’a pas de contexte, c’est à dire de champs méta dans le lien. Ainsi la mise à jour s’applique partout alors que ce n’était pas forcément le but recherché.

La solution est de ne pas faire référence directement à une image que l’on veut utiliser dans une application mais à un objet intermédiaire. Cet objet n’a même pas besoin d’avoir un contenu, il est virtuel puisque son empreinte est créé de toute pièce sans contenu. Et du fait du fonctionnement de nebule, il n’aura probablement jamais (dans un temps raisonnable) de contenu correspondant à son empreinte.

Ainsi, on ne référence plus dans une application des icônes mais des objets intermédiaires. Et les icônes à utiliser n’ont plus à être des liens de mise à jour u mais deviennent naturellement des liens de dérivation f avec comme champs méta l’objet intermédiaire ou l’objet de l’application. Je pense que l’objet intermédiaire est le mieux comme champs méta.

Comme l’empreinte de cet objet virtuel est purement indicative, on peut lui mettre n’importe quelle valeur de n’importe quelle taille. Il est cependant raisonnable de choisir une taille assez conséquente et différente des tailles usuelles des empreintes, c’est à dire différent de 64, 128, 224, 256, 384, 512, 768, 1024, 2048, 4096, etc…
Chaque application peut utiliser les mêmes valeurs pour ces objets intermédiaires ou choisir par exemple une valeur préfixe identique suivi de valeurs aléatoires jusqu’à avoir une taille raisonnable.