{"id":2658,"date":"2016-09-30T21:29:27","date_gmt":"2016-09-30T19:29:27","guid":{"rendered":"http:\/\/blog.nebule.org\/?page_id=2658"},"modified":"2018-05-21T00:55:43","modified_gmt":"2018-05-20T22:55:43","slug":"norme-nebule-v1-3","status":"publish","type":"page","link":"https:\/\/blog.nebule.org\/?page_id=2658","title":{"rendered":"Norme nebule v1.3"},"content":{"rendered":"<p>Cette page contient la documentation technique de <a class=\"external text\" title=\"http:\/\/blog.nebule.org\/?page_id=2047\" href=\"http:\/\/blog.nebule.org\/?page_id=2047\" rel=\"nofollow\">nebule<\/a> version <strong>1.3<\/strong> .<\/p>\n<h1>F \/ Fondations<\/h1>\n<p>Le but du projet nebule, c&rsquo;est le moteur de gestion des objets. La couche basse qui s&rsquo;occupe du stockage des objets et liens, et de leur diffusion.<\/p>\n<p>L&rsquo;interface utilisateur est un programme utilis\u00e9 pour manipuler ces objets et traduire les liens \u00e0 l&rsquo;utilisateur ou les actions de l&rsquo;utilisateur en liens.<\/p>\n<p>Le projet nebule se concr\u00e9tise num\u00e9riquement par trois piliers de base :<\/p>\n<ol>\n<li>l&rsquo;objet<\/li>\n<li>le lien<\/li>\n<li>la confiance<\/li>\n<\/ol>\n<h1>O \/ Objet<\/h1>\n<p>L&rsquo;objet est un agglom\u00e9rat de donn\u00e9es num\u00e9riques.<\/p>\n<p>Un objet num\u00e9rique est identifi\u00e9 par une empreinte ou condensat (hash). Cette empreinte doit avoir des caract\u00e9ristiques propres forte correspondant \u00e0 des fonctions de prise d&#8217;empreinte (hash) cryptographiques. C&rsquo;est \u00e0 dire :<\/p>\n<ol>\n<li>L&rsquo;espace des valeurs possibles est suffisamment grand.<\/li>\n<li>La r\u00e9partition des valeurs possibles est \u00e9quiprobable.<\/li>\n<li>La r\u00e9sistance aux collisions est forte.<\/li>\n<li>La fonction utilis\u00e9e est non r\u00e9versible.<\/li>\n<\/ol>\n<p>La fonction de prise d&#8217;empreinte actuellement recommand\u00e9e est <code>sha256<\/code>. Elle remplie toutes les exigences \u00e9voqu\u00e9es ci-dessus. Aucune faille ne permet de remettre en question de fa\u00e7on significative sa r\u00e9sistance et sa non-r\u00e9versibilit\u00e9 \u00e0 cours terme.<\/p>\n<p>Pour certains petits besoins sp\u00e9cifiques, la fonction de prise d&#8217;empreinte peut \u00eatre minimaliste, donc rapide et non s\u00e9curis\u00e9e. Cependant, celle-ci doit faire au minimum 2 octets. Les valeurs sur un octets sont susceptibles d&rsquo;\u00eatre interpr\u00e9t\u00e9es, comme la valeur <code>0<\/code> qui ne d\u00e9signe aucun objet.<\/p>\n<p>&#8230;<\/p>\n<h4>D\u00e9finition<\/h4>\n<p>L&rsquo;objet est identifi\u00e9 par un ID \u00e9gal \u00e0 la valeur de son empreinte.<\/p>\n<p>L&rsquo;indication de la fonction de prise d&#8217;empreinte (hashage) est imp\u00e9ratif. Elle est d\u00e9fini par le lien :<\/p>\n<ul>\n<li>action : <code>l<\/code><\/li>\n<li>source : ID de l&rsquo;objet<\/li>\n<li>cible : hash du nom de l&rsquo;algorithme de prise d&#8217;empreinte<\/li>\n<li>m\u00e9ta : hash(&lsquo;nebule\/objet\/hash&rsquo;)<\/li>\n<\/ul>\n<p>Le lien de d\u00e9finition du type est optionnel. Le type est g\u00e9n\u00e9ralement le type mime reconnu de l&rsquo;objet.<\/p>\n<h4>Caract\u00e9ristiques optionnelles<\/h4>\n<p>Les diff\u00e9rentes caract\u00e9ristiques utilisables :<\/p>\n<ul>\n<li>nebule\/objet<\/li>\n<li>nebule\/objet\/hash<\/li>\n<li>nebule\/objet\/homomorphe<\/li>\n<li>nebule\/objet\/type<\/li>\n<li>nebule\/objet\/localisation<\/li>\n<li>nebule\/objet\/taille<\/li>\n<li>nebule\/objet\/prenom<\/li>\n<li>nebule\/objet\/nom<\/li>\n<li>nebule\/objet\/surnom<\/li>\n<li>nebule\/objet\/prefix<\/li>\n<li>nebule\/objet\/suffix<\/li>\n<li>nebule\/objet\/liens<\/li>\n<li>nebule\/objet\/date<\/li>\n<li>nebule\/objet\/date\/annee<\/li>\n<li>nebule\/objet\/date\/mois<\/li>\n<li>nebule\/objet\/date\/jour<\/li>\n<li>nebule\/objet\/date\/heure<\/li>\n<li>nebule\/objet\/date\/minute<\/li>\n<li>nebule\/objet\/date\/seconde<\/li>\n<li>nebule\/objet\/date\/zone<\/li>\n<li>nebule\/objet\/entite<\/li>\n<li>nebule\/objet\/entite\/type<\/li>\n<li>nebule\/objet\/entite\/localisation<\/li>\n<li>nebule\/objet\/entite\/suivi<\/li>\n<li>nebule\/objet\/entite\/suivi\/seconde<\/li>\n<li>nebule\/objet\/entite\/suivi\/minute<\/li>\n<li>nebule\/objet\/entite\/suivi\/heure<\/li>\n<li>nebule\/objet\/entite\/suivi\/jour<\/li>\n<li>nebule\/objet\/entite\/suivi\/semaine<\/li>\n<li>nebule\/objet\/entite\/suivi\/mois<\/li>\n<li>nebule\/objet\/entite\/suivi\/annee<\/li>\n<li>nebule\/objet\/entite\/maitre\/securite<\/li>\n<li>nebule\/objet\/entite\/maitre\/code<\/li>\n<li>nebule\/objet\/entite\/maitre\/annuaire<\/li>\n<li>nebule\/objet\/entite\/maitre\/temps<\/li>\n<li>nebule\/objet\/entite\/web<\/li>\n<li>nebule\/objet\/entite\/web\/applications<\/li>\n<li>nebule\/objet\/noeud<\/li>\n<li>nebule\/objet\/emotion<\/li>\n<li>nebule\/objet\/emotion\/joie<\/li>\n<li>nebule\/objet\/emotion\/confiance<\/li>\n<li>nebule\/objet\/emotion\/peur<\/li>\n<li>nebule\/objet\/emotion\/surprise<\/li>\n<li>nebule\/objet\/emotion\/tristesse<\/li>\n<li>nebule\/objet\/emotion\/degout<\/li>\n<li>nebule\/objet\/emotion\/colere<\/li>\n<li>nebule\/objet\/emotion\/interet<\/li>\n<li>nebule\/objet\/conversation<\/li>\n<li>nebule\/objet\/conversation\/ferme<\/li>\n<li>nebule\/objet\/conversation\/protegee<\/li>\n<li>nebule\/objet\/conversation\/dissimulee<\/li>\n<li>nebule\/objet\/groupe<\/li>\n<li>nebule\/objet\/groupe\/ferme<\/li>\n<li>nebule\/danger<\/li>\n<li>nebule\/warning<\/li>\n<li>nebule\/arborescence<\/li>\n<\/ul>\n<p>Une caract\u00e9ristique d&rsquo;un objet est d\u00e9fini par le lien :<\/p>\n<ul>\n<li>action : <code>l<\/code><\/li>\n<li>source : ID de l&rsquo;objet<\/li>\n<li>cible : hash de la valeur de la caract\u00e9ristique (ex : &lsquo;Dupont&rsquo;)<\/li>\n<li>m\u00e9ta : hash de la caract\u00e9ristique (ex : &lsquo;<code>nebule\/objet\/nom<\/code>&lsquo;)<\/li>\n<\/ul>\n<p>Cette liste est susceptible de s&rsquo;agrandir avec le temps pour r\u00e9pondre \u00e0 de nouveaux besoins&#8230;<\/p>\n<h4>Nommage<\/h4>\n<p>Le nommage \u00e0 l&rsquo;affichage du nom des objets repose sur plusieurs propri\u00e9t\u00e9s :<\/p>\n<ol>\n<li>nom<\/li>\n<li>pr\u00e9nom<\/li>\n<li>surnom<\/li>\n<li>pr\u00e9fixe<\/li>\n<li>suffixe<\/li>\n<\/ol>\n<p>Ces propri\u00e9t\u00e9s sont mat\u00e9rialis\u00e9es par des liens de type <code>l<\/code> avec comme objets m\u00e9ta, respectivement :<\/p>\n<ol>\n<li><code>nebule\/objet\/nom<\/code><\/li>\n<li><code>nebule\/objet\/prenom<\/code><\/li>\n<li><code>nebule\/objet\/surnom<\/code><\/li>\n<li><code>nebule\/objet\/prefix<\/code><\/li>\n<li><code>nebule\/objet\/suffix<\/code><\/li>\n<\/ol>\n<p>Par convention, voici le nommage des objets pour l&rsquo;affichage :<\/p>\n<p><center><code>pr\u00e9nom pr\u00e9fixe\/nom.suffixe surnom<\/code><\/center>Les diff\u00e9rents nommages sont d\u00e9finis par des liens :<\/p>\n<ul>\n<li>action : <code>l<\/code><\/li>\n<li>source : ID de l&rsquo;objet<\/li>\n<li>cible : hash de la valeur de nommage (ex : &lsquo;Dupont&rsquo;)<\/li>\n<li>m\u00e9ta : hash propri\u00e9t\u00e9 de nommage (ex : &lsquo;<code>nebule\/objet\/nom<\/code>&lsquo;)<\/li>\n<\/ul>\n<h2>OG \/ Groupe<\/h2>\n<p style=\"text-align: justify;\">Le groupe est un objet d\u00e9finit comme tel, c&rsquo;est \u00e0 dire qu&rsquo;il doit avoir un type mime <code>nebule\/objet\/groupe<\/code>.<\/p>\n<p style=\"text-align: justify;\">Fondamentalement, le groupe est un ensemble de plusieurs objets. C&rsquo;est \u00e0 dire, c&rsquo;est le regroupement d&rsquo;au moins deux objets. Le lien peut donc \u00e0 ce titre \u00eatre vu comme la mat\u00e9rialisation d&rsquo;un groupe. Mais la d\u00e9finition du groupe doit \u00eatre plus restrictive afin que celui-ci soit utilisable. Pour cela, dans <em>nebule<\/em>, le groupe n&rsquo;est reconnu comme tel uniquement si il est marqu\u00e9 de son type mime. Il est cependant possible d&rsquo;instancier explicitement un objet comme groupe et de l&rsquo;utiliser comme tel en cas de besoin.<\/p>\n<p style=\"text-align: justify;\">Le groupe va permettre de regrouper, et donc d&rsquo;associer et de retrouver, des objets. L&rsquo;objet du groupe va avoir des liens vers d&rsquo;autres objets afin de les d\u00e9finir comme membres du groupe.<\/p>\n<p style=\"text-align: justify;\">Un groupe peut avoir des liens de membres vers des objets d\u00e9finis aussi comme groupes. Ces objets peuvent \u00eatre vus comme des sous-groupes. La biblioth\u00e8que <em>nebule<\/em> ne prend en compte qu&rsquo;un seul niveau de groupe, c&rsquo;est \u00e0 dire que les sous-groupes sont g\u00e9r\u00e9s simplement comme des objets.<\/p>\n<h2 style=\"text-align: justify;\">OGO \/ Objet<\/h2>\n<p style=\"text-align: justify;\">L&rsquo;objet du groupe peut \u00eatre de deux natures.<\/p>\n<p style=\"text-align: justify;\">Soit c&rsquo;est un objet existant qui est en plus d\u00e9finit comme un groupe. L&rsquo;objet peut avoir un contenu et a s\u00fcrement d&rsquo;autres types mime propres. Dans ce cas l&rsquo;identifiant de groupe est l&rsquo;identifiant de l&rsquo;objet utilis\u00e9.<\/p>\n<p style=\"text-align: justify;\">Soit c&rsquo;est un objet dit virtuel qui n&rsquo;a pas et n&rsquo;aura jamais de contenu. Cela n&#8217;emp\u00eache pas qu&rsquo;il puisse avoir d&rsquo;autres types mime. Dans ce cas l&rsquo;identifiant de groupe a une forme commune aux objets virtuels.<\/p>\n<p style=\"text-align: justify;\">La cr\u00e9ation d&rsquo;un objet virtuel comme groupe se fait en cr\u00e9ant pour identifiant la concat\u00e9nation d&rsquo;un hash (<em>sha256<\/em>) d&rsquo;une valeur al\u00e9atoire de 128bits et de la cha\u00eene <code>006e6562756c652f6f626a65742f67726f757065<\/code>. Soit un identifiant complet de la taille de 102 caract\u00e8res.<\/p>\n<h2 style=\"text-align: justify;\">OGN \/ Nommage<\/h2>\n<p style=\"text-align: justify;\">Le nommage \u00e0 l&rsquo;affichage du nom des groupes repose sur une seule propri\u00e9t\u00e9 :<\/p>\n<ol>\n<li>nom<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Cette propri\u00e9t\u00e9 est mat\u00e9rialis\u00e9e par un lien de type <code>l<\/code> avec comme objets m\u00e9ta :<\/p>\n<ol>\n<li><code>nebule\/objet\/nom<\/code><\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Par convention, voici le nommage des groupes :<\/p>\n<ul>\n<li><code>nom<\/code><\/li>\n<\/ul>\n<h2 style=\"text-align: justify;\">OGP \/ Protection<\/h2>\n<p style=\"text-align: justify;\">En tant que tel le groupe ne n\u00e9cessite pas de protection puisque soit l&rsquo;objet du groupe n&rsquo;a pas de contenu soit on n&rsquo;utilise pas son contenu directement.<\/p>\n<p style=\"text-align: justify;\">La gestion de la protection est d\u00e9sactiv\u00e9e dans une instance de groupe.<\/p>\n<h2 style=\"text-align: justify;\">OGD \/ Dissimulation<\/h2>\n<p style=\"text-align: justify;\">Le groupe peut en tant que tel \u00eatre dissimul\u00e9, c&rsquo;est \u00e0 dire que l&rsquo;on dissimule l&rsquo;existence du groupe, donc sa cr\u00e9ation.<\/p>\n<p style=\"text-align: justify;\">La dissimulation devrait se faire lors de la cr\u00e9ation du groupe.<\/p>\n<p style=\"text-align: justify;\">L&rsquo;annulation de la dissimulation d&rsquo;un groupe revient \u00e0 r\u00e9v\u00e9ler le lien de cr\u00e9ation du groupe.<\/p>\n<p style=\"text-align: justify;\">La dissimulation peut se (re)faire apr\u00e8s la cr\u00e9ation du groupe mais son efficacit\u00e9 est incertaine si les liens de cr\u00e9ation ont d\u00e9j\u00e0 \u00e9t\u00e9 diffus\u00e9s. En cas de dissimulation \u00e0 posteriori, il faut g\u00e9n\u00e9rer un lien de suppression du groupe puis g\u00e9n\u00e9rer un nouveau lien dissimul\u00e9 de cr\u00e9ation du groupe \u00e0 une date post\u00e9rieure au lien de suppression.<\/p>\n<h2 style=\"text-align: justify;\">OGF \/ Fermeture<\/h2>\n<p style=\"text-align: justify;\">Le groupe va contenir un certain nombre de membres ajouter par diff\u00e9rentes entit\u00e9s. Il est possible de limiter le nombre des membres \u00e0 utiliser dans un groupe en restreignant artificiellement les entit\u00e9s contributrices du groupe. Ainsi on marque le groupe comme ferm\u00e9 et on filtre sur les membres uniquement ajout\u00e9s par des entit\u00e9s d\u00e9finies.<\/p>\n<p style=\"text-align: justify;\">Dans nebule, l&rsquo;objet\u00c2\u00a0r\u00e9serv\u00e9 <code>nebule\/objet\/groupe\/ferme<\/code> est d\u00e9di\u00e9 \u00e0 la gestion des groupes ferm\u00e9s. Un groupe est consid\u00e9r\u00e9 ferm\u00e9 quand on a l&rsquo;objet\u00c2\u00a0r\u00e9serv\u00e9 en champs m\u00e9ta, l&rsquo;entit\u00e9 en cours en champs cible et l&rsquo;ID du groupe en champs source. Si au lieu d&rsquo;utiliser l&rsquo;entit\u00e9 en cours pour le champs cible on utilise une autre entit\u00e9, cela revient \u00e0 prendre aussi en compte ses liens dans le groupe ferm\u00e9. Dans ce cas c&rsquo;est une entit\u00e9 contributrice.<\/p>\n<p style=\"text-align: justify;\">C&rsquo;est uniquement un affichage du groupe que l&rsquo;on a et non la suppression de membres du groupe.<\/p>\n<p style=\"text-align: justify;\">Lorsque l&rsquo;on a marqu\u00e9 un groupe comme ferm\u00e9, on doit explicitement ajouter des entit\u00e9s que l&rsquo;on veut voir contribuer.<\/p>\n<p style=\"text-align: justify;\">Il est possible ind\u00e9finiment de fermer et ouvrir un groupe.<\/p>\n<p style=\"text-align: justify;\">Il est possible de fermer un groupe qui ne nous appartient afin par exemple de le rendre plus lisible.<\/p>\n<p style=\"text-align: justify;\">Lorsque l&rsquo;on a marqu\u00e9 un groupe comme ferm\u00e9, on peut voir la liste des entit\u00e9s explicitement que l&rsquo;on veut voir contribuer. On peut aussi voir les entit\u00e9s que les autres entit\u00e9s veulent voir contribuer et d\u00e9cider ou non de les ajouter.<\/p>\n<p style=\"text-align: justify;\">Lorsqu&rsquo;un groupe est marqu\u00e9 comme ferm\u00e9, l&rsquo;interface de visualisation du groupe peut permettre de le visualiser temporairement comme un groupe ouvert.<\/p>\n<p style=\"text-align: justify;\">Le traitement des liens de fermeture d&rsquo;un groupe doit \u00eatre fait exclusivement avec le traitement social <em>self<\/em>.<\/p>\n<h2 style=\"text-align: justify;\">OGPM \/ Protection des membres<\/h2>\n<p style=\"text-align: justify;\">Le groupe va contenir un certain nombre de membres ajouter par diff\u00e9rentes entit\u00e9s. Il est possible de limiter la visibilit\u00e9 du contenu des membres utilis\u00e9s dans un groupe en restreignant artificiellement les entit\u00e9s destinataires qui pourront les consulter.<\/p>\n<p style=\"text-align: justify;\">Dans nebule, l&rsquo;objet r\u00e9serv\u00e9 <code>nebule\/objet\/groupe\/protege<\/code> est d\u00e9di\u00e9 \u00e0 la gestion des groupes prot\u00e9g\u00e9s. Un groupe est consid\u00e9r\u00e9 prot\u00e9g\u00e9 quand on a l&rsquo;objet r\u00e9serv\u00e9 en champs m\u00e9ta, l&rsquo;entit\u00e9 en cours en champs cible et l&rsquo;ID du groupe en champs source. Si au lieu d&rsquo;utiliser l&rsquo;entit\u00e9 en cours pour le champs cible on utilise une autre entit\u00e9, cela revient \u00e0 partager aussi les objets prot\u00e9g\u00e9s cr\u00e9\u00e9s pour ce groupe. Cela ne repartage pas la protection des objets d\u00e9j\u00e0 prot\u00e9g\u00e9s.<\/p>\n<p style=\"text-align: justify;\">Dans un groupe marqu\u00e9 prot\u00e9g\u00e9, tous les nouveaux membres ajout\u00e9s au groupe ont leur contenu prot\u00e9g\u00e9. Ce n&rsquo;est valable que pour l&rsquo;entit\u00e9 en cours et \u00e9ventuellement celles qui lui font confiance.<\/p>\n<p style=\"text-align: justify;\">Lorsque l&rsquo;on a marqu\u00e9 un groupe comme prot\u00e9g\u00e9, on doit explicitement ajouter des entit\u00e9s avec qui on veut partager les contenus.<\/p>\n<p style=\"text-align: justify;\">Il est possible ind\u00e9finiment de\u00c2\u00a0prot\u00e9ger et d\u00e9prot\u00e9ger un groupe.<\/p>\n<p style=\"text-align: justify;\">Il est possible de\u00c2\u00a0prot\u00e9ger un groupe qui ne nous appartient afin de masquer le contenu des membres que l&rsquo;on y ajoute.<\/p>\n<p style=\"text-align: justify;\">Lorsque l&rsquo;on a marqu\u00e9 un groupe comme prot\u00e9g\u00e9, on peut voir la liste des entit\u00e9s explicitement a qui on veut partager les contenus. On peut aussi voir les entit\u00e9s a qui les autres entit\u00e9s veulent\u00c2\u00a0partager les contenus et d\u00e9cider ou non de les ajouter.<\/p>\n<p style=\"text-align: justify;\">Le traitement des liens de protection d&rsquo;un groupe doit \u00eatre fait exclusivement avec le traitement social <em>self<\/em>.<\/p>\n<h2 style=\"text-align: justify;\">OGDM \/ Dissimulation des membres<\/h2>\n<p style=\"text-align: justify;\">Le groupe va contenir un certain nombre de membres ajouter par diff\u00e9rentes entit\u00e9s. Il est possible de limiter la visibilit\u00e9 de l&rsquo;appartenance des membres utilis\u00e9s dans un groupe en restreignant artificiellement les entit\u00e9s destinataires qui pourront les voir.<\/p>\n<p style=\"text-align: justify;\">Dans nebule, l&rsquo;objet r\u00e9serv\u00e9 <code>nebule\/objet\/groupe\/dissimule<\/code> est d\u00e9di\u00e9 \u00e0 la gestion des groupes dissimul\u00e9s. Un groupe est consid\u00e9r\u00e9\u00c2\u00a0dissimul\u00e9 quand on a l&rsquo;objet r\u00e9serv\u00e9 en champs m\u00e9ta, l&rsquo;entit\u00e9 en cours en champs cible et l&rsquo;ID du groupe en champs source. Si au lieu d&rsquo;utiliser l&rsquo;entit\u00e9 en cours pour le champs cible on utilise une autre entit\u00e9, cela revient \u00e0 partager aussi les objets\u00c2\u00a0dissimul\u00e9s cr\u00e9\u00e9s pour ce groupe. Cela ne repartage pas la dissimulation des objets d\u00e9j\u00e0 dissimul\u00e9s.<\/p>\n<p style=\"text-align: justify;\">Dans un groupe marqu\u00e9 dissimul\u00e9, tous les nouveaux membres ajout\u00e9s au groupe sont dissimul\u00e9s. Ce n&rsquo;est valable que pour l&rsquo;entit\u00e9 en cours et \u00e9ventuellement celles qui lui font confiance.<\/p>\n<p style=\"text-align: justify;\">Lorsque l&rsquo;on a marqu\u00e9 un groupe comme dissimul\u00e9, on doit explicitement ajouter des entit\u00e9s avec qui on veut partager les membres du groupe.<\/p>\n<p style=\"text-align: justify;\">Il est possible ind\u00e9finiment de\u00c2\u00a0dissimuler et d\u00e9-dissimuler un groupe.<\/p>\n<p style=\"text-align: justify;\">Il est possible de\u00c2\u00a0dissimuler un groupe qui ne nous appartient afin de masquer le contenu des membres que l&rsquo;on y ajoute.<\/p>\n<p style=\"text-align: justify;\">Lorsque l&rsquo;on a marqu\u00e9 un groupe comme dissimul\u00e9, on peut voir la liste des entit\u00e9s explicitement a qui on veut partager les contenus. On peut aussi voir les entit\u00e9s a qui les autres entit\u00e9s veulent\u00c2\u00a0partager les contenus et d\u00e9cider ou non de les ajouter.<\/p>\n<p style=\"text-align: justify;\">Le traitement des liens de dissimulation d&rsquo;un groupe doit \u00eatre fait exclusivement avec le traitement social <em>self<\/em>.<\/p>\n<h2 style=\"text-align: justify;\">OGL \/ Liens<\/h2>\n<p style=\"text-align: justify;\">Une entit\u00e9 doit \u00eatre d\u00e9verrouill\u00e9e pour la cr\u00e9ation de liens.<\/p>\n<p style=\"text-align: justify;\">Le lien de d\u00e9finition du groupe :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>l<\/code><\/li>\n<li>source : ID du groupe<\/li>\n<li>cible : hash(\u00e2\u20ac\u02dcnebule\/objet\/groupe&rsquo;)<\/li>\n<li>m\u00e9ta : hash(\u00e2\u20ac\u02dcnebule\/objet\/type&rsquo;)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Le lien de suppression d&rsquo;un groupe :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>x<\/code><\/li>\n<li>source : ID du groupe<\/li>\n<li>cible : hash(\u00e2\u20ac\u02dcnebule\/objet\/groupe&rsquo;)<\/li>\n<li>m\u00e9ta : hash(\u00e2\u20ac\u02dcnebule\/objet\/type&rsquo;)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Le lien de dissimulation d&rsquo;un groupe est le lien de d\u00e9finition cach\u00e9 dans une lien de type <code>c<\/code>.<\/p>\n<p style=\"text-align: justify;\">Le lien de rattachement d&rsquo;un membre du groupe :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>l<\/code><\/li>\n<li>source : ID du groupe<\/li>\n<li>cible :\u00c2\u00a0ID de l&rsquo;objet<\/li>\n<li>m\u00e9ta : ID du groupe<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Le lien de suppression de rattachement d&rsquo;un membre du groupe :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>x<\/code><\/li>\n<li>source : ID du groupe<\/li>\n<li>cible :\u00c2\u00a0ID de l&rsquo;objet<\/li>\n<li>m\u00e9ta : ID du groupe<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Le lien de fermeture d&rsquo;un groupe :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>l<\/code><\/li>\n<li>source : ID du groupe<\/li>\n<li>cible : ID de l&rsquo;entit\u00e9, par d\u00e9faut l&rsquo;entit\u00e9 signataire.<\/li>\n<li>m\u00e9ta : hash(\u00e2\u20ac\u02dcnebule\/objet\/groupe\/ferme&rsquo;)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Le lien de suppression de fermeture d&rsquo;un groupe :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>x<\/code><\/li>\n<li>source : ID du groupe<\/li>\n<li>cible : ID de l&rsquo;entit\u00e9, par d\u00e9faut l&rsquo;entit\u00e9 signataire.<\/li>\n<li>m\u00e9ta : hash(\u00e2\u20ac\u02dcnebule\/objet\/groupe\/ferme&rsquo;)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Le lien de protection des membres d&rsquo;un groupe :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>l<\/code><\/li>\n<li>source : ID du groupe<\/li>\n<li>cible : ID de l&rsquo;entit\u00e9, par d\u00e9faut l&rsquo;entit\u00e9 signataire.<\/li>\n<li>m\u00e9ta : hash(\u00e2\u20ac\u02dcnebule\/objet\/groupe\/protege&rsquo;)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Le lien de suppression de\u00c2\u00a0protection des membres d&rsquo;un groupe :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>x<\/code><\/li>\n<li>source : ID du groupe<\/li>\n<li>cible : ID de l&rsquo;entit\u00e9, par d\u00e9faut l&rsquo;entit\u00e9 signataire.<\/li>\n<li>m\u00e9ta : hash(\u00e2\u20ac\u02dcnebule\/objet\/groupe\/protege&rsquo;)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Le lien de dissimulation des membres d&rsquo;un groupe :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>l<\/code><\/li>\n<li>source : ID du groupe<\/li>\n<li>cible : ID de l&rsquo;entit\u00e9, par d\u00e9faut l&rsquo;entit\u00e9 signataire.<\/li>\n<li>m\u00e9ta : hash(\u00e2\u20ac\u02dcnebule\/objet\/groupe\/dissimule&rsquo;)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Le lien de suppression de\u00c2\u00a0dissimulation des membres d&rsquo;un groupe :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>x<\/code><\/li>\n<li>source : ID du groupe<\/li>\n<li>cible : ID de l&rsquo;entit\u00e9, par d\u00e9faut l&rsquo;entit\u00e9 signataire.<\/li>\n<li>m\u00e9ta : hash(\u00e2\u20ac\u02dcnebule\/objet\/groupe\/dissimule&rsquo;)<\/li>\n<\/ul>\n<h2 style=\"text-align: justify;\">OGIV \/ Impl\u00e9mentation des Variables<\/h2>\n<p style=\"text-align: justify;\">Les variables sp\u00e9cifiques aux groupes :<\/p>\n<ul>\n<li style=\"text-align: justify;\"><code>permitWriteGroup<\/code> : permet toute \u00e9criture de groupes.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Les variables qui ont une influence sur les groupes :<\/p>\n<ul>\n<li style=\"text-align: justify;\"><code>permitWrite<\/code> : permet toute \u00e9criture d&rsquo;objets et de liens ;<\/li>\n<li style=\"text-align: justify;\"><code>permitWriteObject<\/code> : permet toute \u00e9criture\u00c2\u00a0d&rsquo;objets ;<\/li>\n<li style=\"text-align: justify;\"><code>permitCreateObject<\/code> : permet la cr\u00e9ation locale\u00c2\u00a0d&rsquo;objets ;<\/li>\n<li style=\"text-align: justify;\"><code>permitWriteLink<\/code> : permet toute \u00e9criture de liens ;<\/li>\n<li style=\"text-align: justify;\"><code>permitCreateLink<\/code> : permet la cr\u00e9ation locale de liens.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Il est n\u00e9cessaire \u00e0 la cr\u00e9ation d&rsquo;un groupe de pouvoir \u00e9crire des objets comme le nom du groupe, m\u00eame si l&rsquo;objet du groupe ne sera pas cr\u00e9\u00e9.<\/p>\n<h2 style=\"text-align: justify;\">OGIA \/ Impl\u00e9mentation des Actions<\/h2>\n<p style=\"text-align: justify;\">Dans les actions, on retrouve les cha\u00eenes :<\/p>\n<ul>\n<li style=\"text-align: justify;\"><code>creagrp<\/code> : Cr\u00e9e un groupe.<\/li>\n<li style=\"text-align: justify;\"><code>creagrpnam<\/code> : Nomme le groupe \u00e0 cr\u00e9er.<\/li>\n<li style=\"text-align: justify;\"><code>creagrpcld<\/code> : Marque ferm\u00e9 le groupe \u00e0 cr\u00e9er.<\/li>\n<li style=\"text-align: justify;\"><code>creagrpobf<\/code> : Dissimule les liens du groupe \u00e0 cr\u00e9er.<\/li>\n<li style=\"text-align: justify;\"><code>actdelgrp<\/code> : Supprime un groupe.<\/li>\n<li style=\"text-align: justify;\"><code>actaddtogrp<\/code> : Ajoute l&rsquo;objet\u00c2\u00a0courant membre \u00e0 groupe.<\/li>\n<li style=\"text-align: justify;\"><code>actremtogrp<\/code> : Retire l&rsquo;objet\u00c2\u00a0courant membre d&rsquo;un groupe.<\/li>\n<li style=\"text-align: justify;\"><code>actadditogrp<\/code> : Ajoute un objet membre au groupe courant.<\/li>\n<li style=\"text-align: justify;\"><code>actremitogrp<\/code> : Retire un objet membre du groupe courant.<\/li>\n<\/ul>\n<h2 style=\"text-align: justify;\">OGIF \/ Impl\u00e9mentation des Fonctions<\/h2>\n<p style=\"text-align: justify;\">Dans la classe <code>nebule<\/code>, on trouve :<\/p>\n<ul>\n<li style=\"text-align: justify;\">La fonction <code>getListGroupsLinks()<\/code> retourne la liste des liens d\u00e9finissants les groupes.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>getListGroupsID()<\/code> retourne la liste des identifiants des groupes.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Dans la classe <code>Object<\/code>, on trouve :<\/p>\n<ul>\n<li style=\"text-align: justify;\">La fonction <code>getIsGroup()<\/code> retourne si l&rsquo;objet est un groupe.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>getListIsMemberOnGroupLinks()<\/code> retourne la liste des identifiants des groupes desquels l&rsquo;objet est membre.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>getListIsMemberOnGroupID()<\/code> retourne la liste des identifiants des groupes desquels l&rsquo;objet est membre.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Dans la classe <code>Group<\/code>, on trouve :<\/p>\n<ul>\n<li style=\"text-align: justify;\">La fonction <code>unsetGroup()<\/code> supprime la d\u00e9finition du groupe.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>getMarkClosed()<\/code> retourne si le groupe est marqu\u00e9 ferm\u00e9 ou si l&rsquo;entit\u00e9 demand\u00e9e est contributrice.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>setMarkClosed()<\/code> marque le groupe comme ferm\u00e9 ou marque l&rsquo;entit\u00e9 demand\u00e9e comme contributrice.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>unsetMarkClosed()<\/code> marque le groupe comme ouvert ou retire l&rsquo;entit\u00e9 demand\u00e9e comme contributrice.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>getMarkProtected()<\/code> retourne si le groupe est marqu\u00e9 prot\u00e9g\u00e9 (ses membres).<\/li>\n<li style=\"text-align: justify;\">La fonction <code>setMarkProtected()<\/code> marque le groupe comme prot\u00e9g\u00e9 (ses membres).<\/li>\n<li style=\"text-align: justify;\">La fonction <code>unsetMarkProtected()<\/code> marque le groupe comme non prot\u00e9g\u00e9 (ses membres).<\/li>\n<li style=\"text-align: justify;\">La fonction <code>getMarkObfuscated()<\/code> retourne si le groupe est marqu\u00e9 dissimul\u00e9 (ses membres). C&rsquo;est diff\u00e9rent de la dissimulation de la cr\u00e9ation du groupe.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>setMarkObfuscated()<\/code> marque le groupe comme dissimul\u00e9 (ses membres).<\/li>\n<li style=\"text-align: justify;\">La fonction <code>unsetMarkObfuscated()<\/code> marque le groupe comme non dissimul\u00e9 (ses membres).<\/li>\n<li style=\"text-align: justify;\">La fonction <code>getIsMember()<\/code> retourne si un objet est membre du groupe.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>setMember()<\/code> ajout un objet comme membre.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>unsetMember()<\/code> retire l&rsquo;objet comme membre.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>getListMembersLinks()<\/code> retourne les liens des objets d\u00e9finis comme membres.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>getListMembersID()<\/code> retourne les identifiants des objets d\u00e9finis comme membres.<\/li>\n<li style=\"text-align: justify;\">La fonction <code>getCountMembers()<\/code> retourne le nombre d&rsquo;objets d\u00e9finis comme membres.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: left;\">OC \/ Conversation<\/h2>\n<p style=\"text-align: justify;\">&#8230;<\/p>\n<h2 style=\"text-align: left;\">OCL \/ Liens<\/h2>\n<p style=\"text-align: justify;\">La conversation est un objet caract\u00e9ristique. Cet objet est reconnu par son type d\u00e9fini par le lien :<\/p>\n<ul>\n<li style=\"text-align: left;\">action : <code>l<\/code><\/li>\n<li style=\"text-align: left;\">source : ID al\u00e9atoire entre 129 et 191 bits<\/li>\n<li style=\"text-align: left;\">cible : hash(&lsquo;nebule\/objet\/conversation&rsquo;)<\/li>\n<li style=\"text-align: left;\">m\u00e9ta : hash(&lsquo;nebule\/objet\/type&rsquo;)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">L&rsquo;indication de la fonction de prise d&#8217;empreinte (hashage) est imp\u00e9ratif. Le lien est identique \u00e0 celui d\u00e9fini pour un objet.<\/p>\n<p style=\"text-align: justify;\">Toutes les autres indications sont optionnelles.<\/p>\n<h2 style=\"text-align: left;\">OCN \/ Nommage<\/h2>\n<p style=\"text-align: justify;\">Le nommage \u00e0 l&rsquo;affichage du nom des groupes repose sur une seule propri\u00e9t\u00e9 :<\/p>\n<ol>\n<li style=\"text-align: left;\">nom<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Cette propri\u00e9t\u00e9 est mat\u00e9rialis\u00e9e par un lien de type <code>l<\/code> avec comme objets m\u00e9ta :<\/p>\n<ol>\n<li style=\"text-align: left;\"><code>nebule\/objet\/nom<\/code><\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Par convention, voici le nommage des groupes :<\/p>\n<p><center><code>nom<\/code><\/center><\/p>\n<h2>OE \/ Entit\u00e9<\/h2>\n<p>&#8230;<\/p>\n<p style=\"text-align: justify;\">L&rsquo;entit\u00e9 est un objet caract\u00e9ristique. Elle dispose d&rsquo;une cl\u00e9 publique, par laquelle elle est identifi\u00e9e, et d&rsquo;une cl\u00e9 priv\u00e9e.<\/p>\n<h4 style=\"text-align: left;\">D\u00e9finition<\/h4>\n<p style=\"text-align: justify;\">L&rsquo;indication de la fonction de prise d&#8217;empreinte (hashage) ainsi que le type de bi-cl\u00e9 sont imp\u00e9ratifs. Le lien est identique \u00e0 celui d\u00e9fini pour un objet.<\/p>\n<p style=\"text-align: justify;\">Le type mime <code>mime-type:application\/x-pem-file<\/code> est suffisant pour indiquer que cet objet est une entit\u00e9. <i>Des valeurs \u00e9quivalentes pourront \u00eatre d\u00e9finies ult\u00e9rieurement<\/i>.<\/p>\n<p style=\"text-align: justify;\">Toutes les autres indications sont optionnelles.<\/p>\n<h2>OEN \/ Nommage<\/h2>\n<p style=\"text-align: justify;\">Le nommage \u00e0 l&rsquo;affichage du nom des entit\u00e9s repose sur plusieurs propri\u00e9t\u00e9s :<\/p>\n<ol>\n<li>nom<\/li>\n<li>pr\u00e9nom<\/li>\n<li>surnom<\/li>\n<li>pr\u00e9fixe<\/li>\n<li>suffixe<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Ces propri\u00e9t\u00e9s sont mat\u00e9rialis\u00e9es par des liens de type <code>l<\/code> avec comme objets m\u00e9ta, respectivement :<\/p>\n<ol>\n<li><code>nebule\/objet\/nom<\/code><\/li>\n<li><code>nebule\/objet\/prenom<\/code><\/li>\n<li><code>nebule\/objet\/surnom<\/code><\/li>\n<li><code>nebule\/objet\/prefix<\/code><\/li>\n<li><code>nebule\/objet\/suffix<\/code><\/li>\n<\/ol>\n<p>Par convention, voici le nommage des entit\u00e9s :<\/p>\n<p><center><code>pr\u00e9fixe pr\u00e9nom \"surnom\" nom suffixe<\/code><\/center><\/p>\n<h3>Localisation<\/h3>\n<h4>Description<\/h4>\n<p>Une localisation permet de trouver l&#8217;emplacement des objets et liens g\u00e9n\u00e9r\u00e9s par une entit\u00e9.<\/p>\n<p>Un emplacement n&rsquo;a de sens que pour une entit\u00e9.<\/p>\n<p>Une entit\u00e9 peut disposer de plusieurs localisations. Il faut consid\u00e9rer que toute entit\u00e9 qui h\u00e9berge l&rsquo;objet d&rsquo;une autre entit\u00e9 devient de fait une localisation valide m\u00eame si cela n&rsquo;est pas explicitement d\u00e9finit.<\/p>\n<h3>Interface<\/h3>\n<h4>Description<\/h4>\n<p>L&rsquo;interface est une entit\u00e9.<\/p>\n<p>&#8230;<\/p>\n<h3>Application<\/h3>\n<h4>Description<\/h4>\n<p>L&rsquo;application est une entit\u00e9.<\/p>\n<p>&#8230;<\/p>\n<h3>Annuaire<\/h3>\n<h4>Description<\/h4>\n<p>L&rsquo;annuaire est une entit\u00e9.<\/p>\n<p>&#8230;<\/p>\n<h3>Relais<\/h3>\n<h4>Description<\/h4>\n<p>Le relais est une entit\u00e9.<\/p>\n<p>&#8230;<\/p>\n<h1>L \/ Lien<\/h1>\n<p>Le lien est la mat\u00e9rialisation dans un graphe d&rsquo;une relation entre deux objets.<\/p>\n<h3>Liens d&rsquo;un objet<\/h3>\n<p>Les liens d&rsquo;un objet sont consultables s\u00e9quentiellement. Il doivent \u00eatre per\u00e7us comme des m\u00e9ta-donn\u00e9es d&rsquo;un objet.<\/p>\n<p>Les liens sont s\u00e9par\u00e9s soit par un caract\u00e8re espace \u00a0\u00bb \u00ab\u00a0, soit par un retour chariot \u00ab\u00a0\\n\u00a0\u00bb. Un lien est donc une suite de caract\u00e8res ininterrompue, c&rsquo;est \u00e0 dire sans espace ou retour \u00e0 la ligne.<\/p>\n<p>La taille du lien d\u00e9pend de la taille de chaque champs.<\/p>\n<p>Chaque localisation contenant des liens doit avoir un ent\u00eate de version.<\/p>\n<h3>Liens dans un objet<\/h3>\n<p>Certains liens d&rsquo;un objet peuvent \u00eatre contenus dans un autre objet.<\/p>\n<p>Cette forme de stockage des liens permet de les transmettre et de les manipuler sous la forme d&rsquo;un objet. On peut ainsi profiter du d\u00e9coupage et du chiffrement. Plusieurs liens peuvent \u00eatre stock\u00e9s sans \u00eatre n\u00e9cessairement en rapport avec les m\u00eames objets.<\/p>\n<p>Les liens stock\u00e9s dans un objet ne peuvent pas faire r\u00e9f\u00e9rence \u00e0 ce m\u00eame objet.<\/p>\n<p>Tout ajout de lien cr\u00e9e implicitement un nouvel objet de mise \u00e0 jour, c&rsquo;est \u00e0 dire li\u00e9 par un lien de type u.<\/p>\n<p>Chaque fichier contenant des liens doit avoir un ent\u00eate de version.<\/p>\n<p>Les objets contenants des liens ne sont pas reconnus et exploit\u00e9s lors de la lecture des liens. Ceux-ci doivent d&rsquo;abord \u00eatre extraits et inject\u00e9s dans les liens des objets concern\u00e9s. En clair, on ne peux pas s&rsquo;en servir facilement pour de l&rsquo;anonymisation.<\/p>\n<h2>LE \/ Ent\u00eate<\/h2>\n<p>L&rsquo;ent\u00eate des liens est constitu\u00e9 du texte <code>nebule\/liens\/version\/1.2<\/code>. Il est s\u00e9par\u00e9 du premier lien soit par un caract\u00e8re espace \u00a0\u00bb \u00ab\u00a0, soit par un retour chariot \u00ab\u00a0\\n\u00a0\u00bb.<\/p>\n<p>Il doit \u00eatre transmit avec les liens, en premier.<\/p>\n<h2>LR \/ Registre<\/h2>\n<p>Le registre du lien d\u00e9crit la syntaxe du lien :<\/p>\n<p><center><code>Signature_HashSignataire_TimeStamp_Action_HashSource_HashCible_HashMeta<\/code><\/center>Ce registre a un nombre de champs fixe. Chaque champs a une place fixe dans le lien. Les champs ont une taille variable. Le s\u00e9parateur de champs est l&rsquo;underscore \u00ab\u00a0_\u00a0\u00bb. Les champs ne peuvent contenir ni l&rsquo;underscore \u00ab\u00a0_\u00a0\u00bb ni l&rsquo;espace \u00a0\u00bb \u00a0\u00bb ni le retour chariot \u00ab\u00a0\\n\u00a0\u00bb.<\/p>\n<p>Tout lien qui ne respecte pas cette syntaxe est \u00e0 consid\u00e9rer comme invalide et \u00e0 supprimer. Tout lien dont la <code>Signature<\/code> est invalide est \u00e0 consid\u00e9rer comme invalide et \u00e0 supprimer. La v\u00e9rification peut \u00eatre r\u00e9alis\u00e9e en r\u00e9-assemblant les champs apr\u00e8s nettoyage.<\/p>\n<h2>LRSI \/ Le champ <code>Signature<\/code><\/h2>\n<p>Le champ <code>Signature<\/code> est repr\u00e9sent\u00e9 en deux parties s\u00e9par\u00e9es par un point \u00ab\u00a0.\u00a0\u00bb . La premi\u00e8re partie contient la valeur de la signature. La deuxi\u00e8me partie contient le nom court de la fonction de prise d&#8217;empreinte utilis\u00e9e.<\/p>\n<p>La signature est calcul\u00e9e sur l&#8217;empreinte du lien r\u00e9alis\u00e9e avec la fonction de prise d&#8217;empreinte d\u00e9sign\u00e9e dans la deuxi\u00e8me partie. L&#8217;empreinte du lien est calcul\u00e9e sur tout le lien sauf le champs <code>signature<\/code>, c&rsquo;est \u00e0 dire sur \u00ab\u00a0<code>_HashSignataire_TimeStamp_Action_HashSource_HashCible_HashMeta<\/code>\u00a0\u00bb avec le premier underscore inclus.<\/p>\n<p>La signature ne contient que des caract\u00e8res hexad\u00e9cimaux, c&rsquo;est \u00e0 dire de \u00ab\u00a00\u00a0\u00bb \u00e0 \u00ab\u00a09\u00a0\u00bb et de \u00ab\u00a0a\u00a0\u00bb \u00e0 \u00ab\u00a0f\u00a0\u00bb en minuscule. La fonction de prise d&#8217;empreinte est not\u00e9e en caract\u00e8res alpha-num\u00e9riques en minuscule.<\/p>\n<h2>LRHSI \/ Le champ <code>HashSignataire<\/code><\/h2>\n<p>Le champ <code>signataire<\/code> d\u00e9signe l&rsquo;objet de l&rsquo;entit\u00e9 qui g\u00e9n\u00e8re le lien et le signe.<\/p>\n<p>Il ne contient que des caract\u00e8res hexad\u00e9cimaux, c&rsquo;est \u00e0 dire de \u00ab\u00a00\u00a0\u00bb \u00e0 \u00ab\u00a09\u00a0\u00bb et de \u00ab\u00a0a\u00a0\u00bb \u00e0 \u00ab\u00a0f\u00a0\u00bb en minuscule.<\/p>\n<h2>LRT \/ Le champ <code>TimeStamp<\/code><\/h2>\n<p>Le champ <code>TimeStamp<\/code> est une marque de temps qui donne un ordre temporel aux liens. Ce champs peut \u00eatre une date et une heure au format <a class=\"external text\" title=\"http:\/\/fr.wikipedia.org\/wiki\/ISO_8601\" href=\"http:\/\/fr.wikipedia.org\/wiki\/ISO_8601\" rel=\"nofollow\">ISO8601<\/a> ou simplement un compteur incr\u00e9mental.<\/p>\n<h2>LRA \/ Le champ <code>Action<\/code><\/h2>\n<p>Le champ <code>Action<\/code> d\u00e9termine la fa\u00e7on dont le lien doit \u00eatre utilis\u00e9.<\/p>\n<p>Quand on parle du type d&rsquo;un lien, on fait r\u00e9f\u00e9rence \u00e0 son champ <code>Action<\/code>.<\/p>\n<p>L&rsquo;interpr\u00e9tation de ce champ est limit\u00e9 au premier caract\u00e8re. Des caract\u00e8res alpha-num\u00e9riques suppl\u00e9mentaires sont autoris\u00e9s mais ignor\u00e9s.<\/p>\n<p>Cette interpr\u00e9tation est bas\u00e9e sur un vocabulaire particulier. Ce vocabulaire est sp\u00e9cifique \u00e0 <i>nebule v1.2<\/i> (et <i>nebule v1.1<\/i>).<\/p>\n<p>Le vocabulaire ne reconna\u00eet que les 8 caract\u00e8res <code>l<\/code>, <code>f<\/code>, <code>u<\/code>, <code>d<\/code>, <code>e<\/code>, <code>x<\/code>, <code>k<\/code> et <code>s<\/code>, en minuscule.<\/p>\n<h2>LRAL \/ Action <code>l<\/code> &#8211; Lien entre objets<\/h2>\n<p>Met en place une relation entre deux objets. Cette relation a un sens de mise en place et peut \u00eatre pond\u00e9r\u00e9e par un objet m\u00e9ta.<\/p>\n<p>Les liens de type <code>l<\/code> ne devraient avoir ni <code>HashMeta<\/code> nul ni <code>HashCible<\/code> nul.<\/p>\n<h2>LRAF \/ Action <code>f<\/code> &#8211; D\u00e9riv\u00e9 d&rsquo;objet<\/h2>\n<p>Le nouvel objet est consid\u00e9r\u00e9 comme enfant ou parent suivant le sens du lien.<\/p>\n<p>Le champs <code>ObjetMeta<\/code> doit \u00eatre vu comme le contexte du lien. Par exemple, deux objets contenants du texte peuvent \u00eatre reli\u00e9s simplement sans contexte, c&rsquo;est \u00e0 dire reli\u00e9s de fa\u00e7on simplement hi\u00e9rarchique. Ces deux m\u00eames textes peuvent \u00eatre plut\u00f4t (ou en plus) reli\u00e9s avec un contexte comme celui d&rsquo;une discussion dans un blog. Dans ce deuxi\u00e8me cas, la relation entre les deux textes n&rsquo;a pas de sens en dehors de cette discussion sur ce blog. Il est m\u00eame probable que le blog n&rsquo;affichera pas les autres textes en relations si ils n&rsquo;ont pas un contexte appartenant \u00e0 ce blog.<\/p>\n<p><code>f<\/code> comme <i>fork<\/i>.<\/p>\n<h2>LRAU \/ Action <code>u<\/code> &#8211; Mise \u00e0 jour d&rsquo;objet<\/h2>\n<p>Mise \u00e0 jour d&rsquo;un objet d\u00e9riv\u00e9 qui remplace l&rsquo;objet parent.<\/p>\n<p><code>u<\/code> comme <i>update<\/i>.<\/p>\n<h2>LRAD \/ Action <code>d<\/code> &#8211; Suppression d&rsquo;objet<\/h2>\n<p>L&rsquo;objet est marqu\u00e9 comme \u00e0 supprimer d&rsquo;un ou de tous ses emplacements de stockage.<\/p>\n<p><code>d<\/code> comme <i>delete<\/i>.<\/p>\n<p>Le champs <code>HashCible<\/code> <span style=\"text-decoration: underline;\">peut<\/span> \u00eatre nuls, c&rsquo;est \u00e0 dire \u00e9gal \u00e0 <code>0<\/code>. Si non nul, ce champs doit contenir une entit\u00e9 destinataire de <i>l&rsquo;ordre<\/i> de suppression. C&rsquo;est utilis\u00e9 pour demander \u00e0 une entit\u00e9 relaie de supprimer un objet sp\u00e9cifique. Cela peut \u00eatre utilis\u00e9 pour demander \u00e0 une entit\u00e9 en r\u00e8gle g\u00e9n\u00e9rale de bien vouloir supprimer l&rsquo;objet, ce qui n&rsquo;est pas forc\u00e9ment ex\u00e9cut\u00e9.<\/p>\n<p>Le champs <code>HashMeta<\/code> <span style=\"text-decoration: underline;\">doit<\/span> \u00eatre nuls, c&rsquo;est \u00e0 dire \u00e9gal \u00e0 <code>0<\/code>.<\/p>\n<p>Un lien de suppression sur un objet ne veut pas forc\u00e9ment dire qu&rsquo;il a \u00e9t\u00e9 supprim\u00e9. M\u00eame localement, l&rsquo;objet est peut-\u00eatre encore pr\u00e9sent. Si le lien de suppression vient d&rsquo;une autre entit\u00e9, on ne va s\u00fcrement pas par d\u00e9faut en tenir compte.<\/p>\n<p>Lorsque le lien de suppression est g\u00e9n\u00e9r\u00e9, le serveur sur lequel est g\u00e9n\u00e9r\u00e9 le lien doit essayer par d\u00e9faut de supprimer l&rsquo;objet. Dans le cas d&rsquo;un serveur h\u00e9bergeant plusieurs entit\u00e9s, un objet ne sera pas supprim\u00e9 si il est encore utilis\u00e9 par une autre entit\u00e9, c&rsquo;est \u00e0 dire si une entit\u00e9 a un lien qui le concerne et n&rsquo;a pas de lien de suppression.<\/p>\n<h2>LRAE \/ Action <code>e<\/code> &#8211; \u00c9quivalence d&rsquo;objets<\/h2>\n<p>D\u00e9finit des objets jug\u00e9s \u00e9quivalents, et donc interchangeables par exemple pour une traduction.<\/p>\n<h2>LRAC \/ Action <code>c<\/code> &#8211; Chiffrement de lien<\/h2>\n<p>Ce lien contient un lien chiffr\u00e9. Il permet d&rsquo;offusquer des liens entre objets et donc d&rsquo;anonymiser certaines actions de l&rsquo;entit\u00e9.<\/p>\n<p>Le champs <code>HashSource<\/code> fait r\u00e9f\u00e9rence \u00e0 l&rsquo;entit\u00e9 destinataire du lien, celle qui peut le d\u00e9chiffrer. A part le champs de l&rsquo;entit\u00e9 signataire, c&rsquo;est le seul champs qui fait r\u00e9f\u00e9rence \u00e0 un objet.<\/p>\n<p>Le champs <code>HashCible<\/code> ne contient pas la r\u00e9f\u00e9rence d&rsquo;un objet mais le lien chiffr\u00e9 et encod\u00e9 en hexad\u00e9cimal. Le chiffrement est de type sym\u00e9trique avec la cl\u00e9 de session. Le lien offusqu\u00e9 n&rsquo;a pas grand int\u00e9r\u00eat en lui m\u00eame, c&rsquo;est le lien d\u00e9chiffr\u00e9 qui en a.<\/p>\n<p>Le champs <code>HashMeta<\/code> ne contient pas la r\u00e9f\u00e9rence d&rsquo;un objet mais la cl\u00e9 de chiffrement du lien, dite cl\u00e9 de session. Cette cl\u00e9 est chiffr\u00e9e (asym\u00e9trique) pour l&rsquo;entit\u00e9 destinataire et encod\u00e9e en hexad\u00e9cimal.<\/p>\n<p>Lors du traitement des liens, si une entit\u00e9 est d\u00e9verrouill\u00e9e, les liens offusqu\u00e9s pour cette entit\u00e9 doivent \u00eatre d\u00e9chiffr\u00e9s et utilis\u00e9s en remplacement des liens offusqu\u00e9s originels. Les liens offusqu\u00e9s doivent \u00eatre v\u00e9rifi\u00e9s avant d\u00e9chiffrement. Les liens d\u00e9chiffr\u00e9s doivent \u00eatre v\u00e9rifi\u00e9s avant exploitation.<\/p>\n<h2>LRAK \/ Action <code>k<\/code> &#8211; Chiffrement d&rsquo;objet<\/h2>\n<p>D\u00e9signe la version chiffr\u00e9e de l&rsquo;objet.<\/p>\n<h2>LRAS \/ Action <code>s<\/code> &#8211; Subdivision d&rsquo;objet<\/h2>\n<p>D\u00e9signe un fragment de l&rsquo;objet.<\/p>\n<p>Ce champ n\u00e9cessite un objet m\u00e9ta qui pr\u00e9cise intervalle de contenu de l&rsquo;objet d&rsquo;origine. Le contenu de l&rsquo;objet m\u00e9ta doit \u00eatre de la forme <code>x-y<\/code> avec :<\/p>\n<ul>\n<li><code>x<\/code> et <code>y<\/code> exprim\u00e9 en octet sans z\u00e9ro et sans unit\u00e9 ;<\/li>\n<li><code>x<\/code> strictement sup\u00e9rieur \u00e0 z\u00e9ro ;<\/li>\n<li><code>y<\/code> strictement inf\u00e9rieur ou \u00e9gal \u00e0 la taille de l&rsquo;objet (lien vers <i>nebule\/objet\/taille<\/i>) ;<\/li>\n<li><code>x<\/code> inf\u00e9rieur \u00e0 <code>y<\/code> ;<\/li>\n<li>sans espace, tabulation ou retour chariot.<\/li>\n<\/ul>\n<h2>LRAX \/ Action <code>x<\/code> &#8211; Suppression de lien<\/h2>\n<p>Supprime un ou plusieurs liens pr\u00e9c\u00e9demment mis en place.<\/p>\n<p>Les liens concern\u00e9s par la suppression sont les liens ant\u00e9rieurs de type <code>l<\/code>, <code>f<\/code>, <code>u<\/code>, <code>d<\/code>, <code>e<\/code>, <code>k<\/code> et <code>s<\/code>. Ils sont rep\u00e9r\u00e9s par les 3 derniers champs, c&rsquo;est \u00e0 dire sur <code>HashSource_HashCible_HashMeta<\/code>. Les champs nuls sont strictement pris en compte.<\/p>\n<p>Le champ <code>TimeStamp<\/code> permet de d\u00e9terminer l&rsquo;ant\u00e9riorit\u00e9 du lien et donc de d\u00e9terminer sa suppression ou pas.<\/p>\n<p>C&rsquo;est la seule action sur les liens et non sur les objets.<\/p>\n<h2>LRHS \/ Le champ <code>HashSource<\/code><\/h2>\n<p>Le champ <code>HashSource<\/code> d\u00e9signe l&rsquo;objet source du lien.<\/p>\n<p>Le champ <code>signataire<\/code> ne contient que des caract\u00e8res hexad\u00e9cimaux, c&rsquo;est \u00e0 dire de \u00ab\u00a00\u00a0\u00bb \u00e0 \u00ab\u00a09\u00a0\u00bb et de \u00ab\u00a0a\u00a0\u00bb \u00e0 \u00ab\u00a0f\u00a0\u00bb en minuscule.<\/p>\n<h2>LRHC \/ Le champ <code>HashCible<\/code><\/h2>\n<p>Le champ <code>HashCible<\/code> d\u00e9signe l&rsquo;objet destination du lien.<\/p>\n<p>Le champ <code>signataire<\/code> ne contient que des caract\u00e8res hexad\u00e9cimaux, c&rsquo;est \u00e0 dire de \u00ab\u00a00\u00a0\u00bb \u00e0 \u00ab\u00a09\u00a0\u00bb et de \u00ab\u00a0a\u00a0\u00bb \u00e0 \u00ab\u00a0f\u00a0\u00bb en minuscule.<\/p>\n<p>Il peut \u00eatre nuls, c&rsquo;est \u00e0 dire repr\u00e9sent\u00e9s par la valeur \u00ab\u00a00\u00a0\u00bb sur un seul caract\u00e8re.<\/p>\n<h2>LRHM \/ Le champ <code>HashMeta<\/code><\/h2>\n<p>Le champ <code>HashMeta<\/code> d\u00e9signe l&rsquo;objet contenant une caract\u00e9risation du lien entre l&rsquo;objet source et l&rsquo;objet destination.<\/p>\n<p>Le champ <code>signataire<\/code> ne contient que des caract\u00e8res hexad\u00e9cimaux, c&rsquo;est \u00e0 dire de \u00ab\u00a00\u00a0\u00bb \u00e0 \u00ab\u00a09\u00a0\u00bb et de \u00ab\u00a0a\u00a0\u00bb \u00e0 \u00ab\u00a0f\u00a0\u00bb en minuscule.<\/p>\n<p>Il peut \u00eatre nuls, c&rsquo;est \u00e0 dire repr\u00e9sent\u00e9s par la valeur \u00ab\u00a00\u00a0\u00bb sur un seul caract\u00e8re.<\/p>\n<h2>L1 \/ Lien simple<\/h2>\n<p>Le registre du lien simple a ses champs <code>HashCible<\/code> et <code>HashMeta<\/code> \u00e9gaux \u00e0 \u00ab\u00a00\u00a0\u00bb.<\/p>\n<p>Il ressemble \u00e0 :<\/p>\n<p><center><code>Signature_HashSignataire_TimeStamp_Action_HashSource_0_0<\/code><\/center><\/p>\n<h2>L2 \/ Lien double<\/h2>\n<p>Le registre du lien double a son champ <code>HashMeta<\/code> \u00e9gal \u00e0 \u00ab\u00a00\u00a0\u00bb.<\/p>\n<p>Il ressemble \u00e0 :<\/p>\n<p><center><code>Signature_HashSignataire_TimeStamp_Action_HashSource_HashCible_0<\/code><\/center><\/p>\n<h2>L3 \/ Lien triple<\/h2>\n<p>Le registre du lien triple est compl\u00e8tement utilis\u00e9.<\/p>\n<p>Il ressemble \u00e0 :<\/p>\n<p><center><code>Signature_HashSignataire_TimeStamp_Action_HashSource_HashCible_HashMeta<\/code><\/center><\/p>\n<h2>C \/ Confiance<\/h2>\n<p>La confiance n&rsquo;est pas quelque chose de palpable, m\u00eame num\u00e9riquement. Cela tient plus de la fa\u00e7on de concevoir les choses et le fait de faire en sorte que l&rsquo;ensemble soit solide. L&rsquo;ensemble doit \u00eatre coh\u00e9rent et r\u00e9sistant. On doit pouvoir compter sur ce que l&rsquo;on a.<\/p>\n<p>La confiance est donc sous-jacente aux objets et aux liens.<\/p>\n<p>Les objets et les liens doivent tous \u00eatre sign\u00e9s. Toute modification devient impossible <b>si l&rsquo;on prend le temps de v\u00e9rifier les signatures<\/b>.<\/p>\n<p>En l&rsquo;absence de nouvelle d\u00e9couverte math\u00e9matique majeure, les algorithmes cryptographiques nous permettent aujourd&rsquo;hui une offuscation forte et une prise d&#8217;empreinte fiable. C&rsquo;est le chiffrement et la signature.<\/p>\n<h3>CO \/ La confiance dans l&rsquo;objet<\/h3>\n<p>L&rsquo;int\u00e9grit\u00e9 et la confidentialit\u00e9 des objets est garantie non pas par une <i>m\u00e9ta-donn\u00e9e<\/i> mais par les math\u00e9matiques qui animent les algorithmes cryptographiques.<\/p>\n<p>L&rsquo;objet est r\u00e9f\u00e9renc\u00e9 par une empreinte cryptographique. L&#8217;empreinte d&rsquo;un objet doit \u00eatre v\u00e9rifi\u00e9e lors de la fin de la r\u00e9ception de l&rsquo;objet. L&#8217;empreinte d&rsquo;un objet devrait \u00eatre v\u00e9rifi\u00e9e avant chaque utilisation de cet objet. Un objet avec une empreinte qui ne lui correspond pas doit \u00eatre supprim\u00e9. Lors de la suppression d&rsquo;un objet, les liens de cet objet sont conserv\u00e9s.<\/p>\n<h3>CL \/ La confiance dans le lien<\/h3>\n<p>L&rsquo;int\u00e9grit\u00e9 des liens est garantie non pas par une <i>m\u00e9ta-donn\u00e9e<\/i> mais par les fonctions math\u00e9matiques utilis\u00e9es par les algorithmes cryptographiques.<\/p>\n<p>La signature du lien est obligatoire. La signature doit \u00eatre r\u00e9alis\u00e9e par le signataire. La signature englobe tout le lien \u00e0 l&rsquo;exception d&rsquo;elle-m\u00eame. Un lien avec une signature invalide ou non v\u00e9rifiable doit \u00eatre ignor\u00e9 et supprim\u00e9.<\/p>\n<p>Toute modification de l&rsquo;un des champs entra\u00eene l&rsquo;invalidation de tout le lien.<\/p>\n<p>L&#8217;empreinte du signataire est inclue dans la partie sign\u00e9e, ainsi il ne peut \u00eatre modifier sans invalider tout le lien. On ne peut ainsi pas usurper une autre entit\u00e9.<\/p>\n<h1>Fonctionnement<\/h1>\n<h2>L&rsquo;objet<\/h2>\n<p>&#8230;<\/p>\n<h2>Le lien<\/h2>\n<p>&#8230;<\/p>\n<h2>L&rsquo;entit\u00e9<\/h2>\n<p>Une entit\u00e9 est un objet contenant une cl\u00e9 cryptographique publique. Cette cl\u00e9 permet de v\u00e9rifier les liens sign\u00e9s par cette entit\u00e9.<\/p>\n<h4>Cr\u00e9ation d&rsquo;une entit\u00e9<\/h4>\n<p>La premi\u00e8re \u00e9tape consiste en la g\u00e9n\u00e9ration d&rsquo;un bi-cl\u00e9 (public\/priv\u00e9) cryptographique. Ce bi-cl\u00e9 peut \u00eatre de type RSA ou \u00e9quivalent. Aujourd&rsquo;hui, seul RSA est reconnu.<\/p>\n<p>On extrait la cl\u00e9 publique du bi-cl\u00e9. Le calcul de l&#8217;empreinte cryptographique de la cl\u00e9 publique donne l&rsquo;identifiant de l&rsquo;entit\u00e9. On \u00e9crit dans les objets (o\/*) l&rsquo;objet avec comme contenu la cl\u00e9 publique et comme id son empreinte cryptographique.<\/p>\n<p>On extrait la cl\u00e9 priv\u00e9e du bi-cl\u00e9. Il est fortement conseill\u00e9 lors de l&rsquo;extraction de prot\u00e9ger tout de suite la cl\u00e9 priv\u00e9e avec un mot de passe. On \u00e9crit dans les objets (o\/*) l&rsquo;objet avec comme contenu la cl\u00e9 priv\u00e9e et comme id son empreinte cryptographique (diff\u00e9rente de celle de la cl\u00e9 publique).<\/p>\n<p>A partir de maintenant, le bi-cl\u00e9 n&rsquo;est plus n\u00e9cessaire. Il faut la supprimer avec un effacement s\u00e9curis\u00e9.<\/p>\n<p>Pour que l&rsquo;objet soit reconnu comme entit\u00e9 il faut cr\u00e9er les liens correspondants.<\/p>\n<ul>\n<li>Lien 1 :\n<ul>\n<li>Signature du lien par la cl\u00e9 priv\u00e9e de la nouvelle entit\u00e9 ;<\/li>\n<li>Identifiant de la cl\u00e9 publique ;<\/li>\n<li>Horodatage ;<\/li>\n<li>Lien de type <code>l<\/code> ;<\/li>\n<li>Identifiant de la cl\u00e9 <b>publique<\/b> ;<\/li>\n<li>Hash de l&rsquo;algorithme de hash utilis\u00e9 pour le calcul des empreintes ;<\/li>\n<li>Hash de &lsquo;nebule\/objet\/hash&rsquo;.<\/li>\n<\/ul>\n<\/li>\n<li>Lien 2 :\n<ul>\n<li>Signature du lien par la cl\u00e9 priv\u00e9e de la nouvelle entit\u00e9 ;<\/li>\n<li>Identifiant de la cl\u00e9 publique ;<\/li>\n<li>Horodatage ;<\/li>\n<li>Lien de type <code>l<\/code> ;<\/li>\n<li>Identifiant de la cl\u00e9 <b>priv\u00e9e<\/b> ;<\/li>\n<li>Hash de l&rsquo;algorithme de hash utilis\u00e9 pour le calcul des empreintes ;<\/li>\n<li>Hash de &lsquo;nebule\/objet\/hash&rsquo;.<\/li>\n<\/ul>\n<\/li>\n<li>Lien 3 :\n<ul>\n<li>Signature du lien par la cl\u00e9 priv\u00e9e de la nouvelle entit\u00e9 ;<\/li>\n<li>Identifiant de la cl\u00e9 publique ;<\/li>\n<li>Horodatage ;<\/li>\n<li>Lien de type <code>l<\/code> ;<\/li>\n<li>Identifiant de la cl\u00e9 <b>publique<\/b> ;<\/li>\n<li>Hash de &lsquo;application\/x-pem-file&rsquo;.<\/li>\n<li>Hash de &lsquo;nebule\/objet\/type&rsquo;.<\/li>\n<\/ul>\n<\/li>\n<li>Lien 4 :\n<ul>\n<li>Signature du lien par la cl\u00e9 priv\u00e9e de la nouvelle entit\u00e9 ;<\/li>\n<li>Identifiant de la cl\u00e9 publique ;<\/li>\n<li>Horodatage ;<\/li>\n<li>Lien de type <code>l<\/code> ;<\/li>\n<li>Identifiant de la cl\u00e9 <b>priv\u00e9e<\/b> ;<\/li>\n<li>Hash de &lsquo;application\/x-pem-file&rsquo;.<\/li>\n<li>Hash de &lsquo;nebule\/objet\/type&rsquo;.<\/li>\n<\/ul>\n<\/li>\n<li>Lien 5 :\n<ul>\n<li>Signature du lien par la cl\u00e9 priv\u00e9e de la nouvelle entit\u00e9 ;<\/li>\n<li>Identifiant de la cl\u00e9 publique ;<\/li>\n<li>Horodatage ;<\/li>\n<li>Lien de type <code>f<\/code> ;<\/li>\n<li>Identifiant de la cl\u00e9 <b>priv\u00e9e<\/b> ;<\/li>\n<li>Identifiant de la cl\u00e9 <b>publique<\/b> ;<\/li>\n<li>0.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>C&rsquo;est le minimum vital pour une entit\u00e9. Ensuite, d&rsquo;autres propri\u00e9t\u00e9s peuvent \u00eatre ajout\u00e9es \u00e0 l&rsquo;entit\u00e9 (id cl\u00e9 publique) comme sont nom, son type, etc&#8230;<\/p>\n<p>Si le mot de passe de la cl\u00e9 priv\u00e9e est d\u00e9finit par l&rsquo;utilisateur demandeur de la nouvelle entit\u00e9, il faut supprimer ce mot de passe avec un effacement s\u00e9curis\u00e9.<\/p>\n<p>Si le mot de passe de la cl\u00e9 priv\u00e9e a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9, donc que la nouvelle entit\u00e9 est esclave d&rsquo;une entit\u00e9 ma\u00eetre, le mot de passe doit \u00eatre stock\u00e9 dans un objet chiffr\u00e9 pour l&rsquo;entit\u00e9 ma\u00eetre. Et il faut g\u00e9n\u00e9rer un lien reliant l&rsquo;objet de mot de passe \u00e0 la cl\u00e9 priv\u00e9e de la nouvelle entit\u00e9.<\/p>\n<h2>Stockage<\/h2>\n<h3>Support<\/h3>\n<p>&#8230;<\/p>\n<h3>Enregistrement<\/h3>\n<p>&#8230;<\/p>\n<h3>Lecture<\/h3>\n<p>&#8230;<\/p>\n<h2>\u00c9changes<\/h2>\n<h3>Moyens et supports d&rsquo;\u00e9change<\/h3>\n<p>Il est possible de t\u00e9l\u00e9charger des objets et des liens avec diff\u00e9rents protocoles. Le plus simple \u00e9tant le <i>http<\/i>. Le protocole et le serveur distant doivent \u00eatre capable de transmettre une requ\u00eate et de renvoyer en sens inverse une r\u00e9ponse.<\/p>\n<p>C\u00f4t\u00e9 serveur, c&rsquo;est \u00e0 dire la machine qui fait office de relais des objets et liens, tout ne peut pas \u00eatre demand\u00e9. Les requ\u00eates doivent \u00eatre triviales \u00e0 traiter, ne pas n\u00e9cessiter de forte puissance de calcul ni d&#8217;empreinte m\u00e9moire d\u00e9mesur\u00e9e. Une avalanche de requ\u00eates diverses ne doit pas mettre \u00e0 plat le serveur.<\/p>\n<p>&#8230;<\/p>\n<h3>protocole neb:\/\/<\/h3>\n<p>Ce protocole sera con\u00e7u ult\u00e9rieurement. Tous les \u00e9changes se font actuellement via le protocole <a class=\"external free\" title=\"http:\/\/\" href=\"http:\/\/\" rel=\"nofollow\">http:\/\/<\/a>&#8230;<\/p>\n<p>L&rsquo;ajout d&rsquo;un nouveau protocole n\u00e9cessite de le faire reconna\u00eetre par les serveurs. Un serveur web classique devrait pouvoir r\u00e9pondre assez facilement \u00e0 ce genre de requ\u00eates. Mais il faut aussi modifier les logiciels clients actuels, si tant est que l&rsquo;on souhaite se baser sur les logiciels clients existants.<\/p>\n<h3>Requ\u00eates\/r\u00e9ponses<\/h3>\n<p>&#8230;<\/p>\n<h3>Comportement au t\u00e9l\u00e9chargement d&rsquo;objets<\/h3>\n<p>Comportement global (t\u00e9l\u00e9chargement sans localisation pr\u00e9cis\u00e9e) :<\/p>\n<ol>\n<li>Si l&#8217;empreinte de l&rsquo;objet demand\u00e9 est 0, on quitte le processus de t\u00e9l\u00e9chargement.<\/li>\n<li>Si l&rsquo;objet existe d\u00e9j\u00e0 dans le r\u00e9pertoire public des objets, on quitte le processus de t\u00e9l\u00e9chargement.<\/li>\n<li>Si l&rsquo;objet existe d\u00e9j\u00e0 dans le r\u00e9pertoire priv\u00e9 des objets, on quitte le processus de t\u00e9l\u00e9chargement.<\/li>\n<li>Si l&rsquo;objet n&rsquo;a pas de lien dans le r\u00e9pertoire public des liens, on quitte le processus de t\u00e9l\u00e9chargement.<\/li>\n<li>Si l&rsquo;objet n&rsquo;a pas de lien dans le r\u00e9pertoire priv\u00e9 des liens, on quitte le processus de t\u00e9l\u00e9chargement.<\/li>\n<li>On se r\u00e9f\u00e8re \u00e0 l&rsquo;objet <code>0f183d69e06108ac3791eb4fe5bf38beec824db0a2d9966caffcfef5bc563355<\/code> (\u00ab\u00a0nebule\/objet\/entite\/localisation\u00a0\u00bb) pour trouver la localisation de toutes les entit\u00e9s connues.<\/li>\n<li>On parcourt les diff\u00e9rentes localisations une \u00e0 une (cf <i>comportement local<\/i>) pour essayer de t\u00e9l\u00e9charger l&rsquo;objet demand\u00e9 jusqu&rsquo;\u00e0 en obtenir une copie valide si c&rsquo;est possible.<\/li>\n<\/ol>\n<p>Comportement local (t\u00e9l\u00e9chargement sur une localisation pr\u00e9cise) :<\/p>\n<ol>\n<li>Si l&#8217;empreinte de l&rsquo;objet demand\u00e9 est 0, on quitte le processus de t\u00e9l\u00e9chargement.<\/li>\n<li>Si l&rsquo;objet existe d\u00e9j\u00e0 dans le r\u00e9pertoire public des objets, on quitte le processus de t\u00e9l\u00e9chargement.<\/li>\n<li>Si l&rsquo;objet existe d\u00e9j\u00e0 dans le r\u00e9pertoire priv\u00e9 des objets, on quitte le processus de t\u00e9l\u00e9chargement.<\/li>\n<li>Si l&rsquo;objet n&rsquo;a pas de lien dans le r\u00e9pertoire public des liens, on quitte le processus de t\u00e9l\u00e9chargement.<\/li>\n<li>Si l&rsquo;objet n&rsquo;a pas de lien dans le r\u00e9pertoire priv\u00e9 des liens, on quitte le processus de t\u00e9l\u00e9chargement.<\/li>\n<li>On t\u00e9l\u00e9charge un objet sur une localisation pr\u00e9cise vers le r\u00e9pertoire public des objets.<\/li>\n<li>Si il est vide, on supprime l&rsquo;objet.<\/li>\n<li>Si l&#8217;empreinte est invalide, on supprime l&rsquo;objet.<\/li>\n<\/ol>\n<h3>Comportement au t\u00e9l\u00e9chargement de liens<\/h3>\n<p>&#8230;<\/p>\n<h2>Cryptographie sur les liens<\/h2>\n<p>Le chiffrement permet de dissimuler des liens. Il est optionnel.<\/p>\n<div class=\"center\">\n<div class=\"floatnone\"><a href=\"\/wp-content\/uploads\/nebule\/2016\/03\/20150627-nebule-schema-crypto-lien-c.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2428\" src=\"\/wp-content\/uploads\/nebule\/2016\/03\/20150627-nebule-schema-crypto-lien-c-600x251.png\" alt=\"20150627-nebule-schema-crypto-lien-c\" width=\"600\" height=\"251\" srcset=\"\/wp-content\/uploads\/nebule\/2016\/03\/20150627-nebule-schema-crypto-lien-c-600x251.png 600w, \/wp-content\/uploads\/nebule\/2016\/03\/20150627-nebule-schema-crypto-lien-c-1024x429.png 1024w, \/wp-content\/uploads\/nebule\/2016\/03\/20150627-nebule-schema-crypto-lien-c.png 1228w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/div>\n<\/div>\n<h2>Cryptographie sur les objets<\/h2>\n<p>Le chiffrement permet de cacher le contenu des objets. Il est optionnel.<\/p>\n<p>Ce chiffrement doit \u00eatre r\u00e9sistant, c&rsquo;est \u00e0 dire correspondre \u00e0 l&rsquo;\u00e9tat de l&rsquo;art en cryptographie appliqu\u00e9e. On doit \u00eatre en mesure de parfaitement distinguer l&rsquo;objet en clair de l&rsquo;objet chiffr\u00e9, m\u00eame si le second est d\u00e9riv\u00e9 du premier.<\/p>\n<h3>Deux \u00e9tapes de chiffrement<\/h3>\n<p>Les entit\u00e9s sont des objets contenant le mat\u00e9riel cryptographique n\u00e9cessaire au chiffrement asym\u00e9trique. Cependant, le chiffrement asym\u00e9trique est tr\u00e8s consommateur en ressources CPU (calcul). On peut l&rsquo;utiliser directement pour chiffrer les objets avec la cl\u00e9 publique d&rsquo;un correspondant, mais cela devient rapidement catastrophique en terme de performances et donc en exp\u00e9rience utilisateur. D&rsquo;un autre c\u00f4t\u00e9, le chiffrement sym\u00e9trique est beaucoup plus performant, mais sa gestion des cl\u00e9s de chiffrement est d\u00e9licate. Pour am\u00e9liorer l&rsquo;ensemble, il faut mixer les deux pour profiter des avantages de chacun.<\/p>\n<p>Ainsi, on va aborder le chiffrement en deux \u00e9tapes distinctes.<\/p>\n<p>Pour la compr\u00e9hension des sch\u00e9mas, ne pas oublier que les propri\u00e9t\u00e9s des objets sont elles-m\u00eames des objets&#8230;<\/p>\n<h3>\u00c9tape chiffrement sym\u00e9trique<\/h3>\n<p>Le chiffrement d&rsquo;un objet peut prendre du temps, surtout si il est volumineux. On va donc privil\u00e9gier le chiffrement sym\u00e9trique qui est assez rapide. Nous avons besoin pour ce chiffrement de deux valeurs.<\/p>\n<p>La premi\u00e8re valeur est une cl\u00e9 de chiffrement. Elle est dite cl\u00e9 de session. La longueur de celle-ci d\u00e9pend de l&rsquo;algorithme de chiffrement utilis\u00e9. Par exemple, elle fait 128bits pour l&rsquo;AES. Elle est g\u00e9n\u00e9r\u00e9e al\u00e9atoirement. C&rsquo;est cette valeur qui va permettre le d\u00e9chiffrement de l&rsquo;objet et doit donc rester secr\u00e8te. Mais il faut pouvoir la partager avec ses correspondants, c&rsquo;est ce que l&rsquo;on verra dans la deuxi\u00e8me \u00e9tape.<\/p>\n<p>La seconde valeur est ce que l&rsquo;on appelle une semence ou vecteur initial (IV = Initial Vector). Elle est utilis\u00e9e dans la m\u00e9thode de chiffrement sur plusieurs blocs, c&rsquo;est \u00e0 dire lorsque l&rsquo;on chiffre un objet dont la taille d\u00e9passe le bloc, quantit\u00e9 de donn\u00e9es que traite l&rsquo;algorithme de chiffrement. Par exemple, le bloc fait 128bits pour l&rsquo;AES, tout ce qui fait plus que cette taille doit \u00eatre trait\u00e9 en plusieurs fois. Comme IV, je propose d&rsquo;utiliser l&rsquo;identifiant de l&rsquo;objet \u00e0 chiffrer, c&rsquo;est \u00e0 dire le hash de cet objet. Cela simplifie la diffusion de cette valeur qui n&rsquo;a pas \u00e0 \u00eatre dissimul\u00e9e.<\/p>\n<p>L&rsquo;objet source que l&rsquo;on voulait \u00e0 l&rsquo;origine prot\u00e9ger peut maintenant \u00eatre marqu\u00e9 \u00e0 supprimer. Il pourra \u00eatre restaur\u00e9 depuis l&rsquo;objet d\u00e9riv\u00e9 chiffr\u00e9 et la cl\u00e9 de session.<\/p>\n<p>Sur le sch\u00e9ma ci-dessous, la partie chiffrement sym\u00e9trique est mise en valeur. On retrouve l&rsquo;objet source en clair qui est ici une image de type JPEG. En chiffrant cet objet, cela g\u00e9n\u00e8re un nouvel objet. Le chiffrement est mat\u00e9rialis\u00e9 par un lien de type K. Ce lien associe aussi un objet contenant la cl\u00e9 de session. Le nouvel objet est de type AES-CTR, par exemple. Cela signifie qu&rsquo;il est chiffr\u00e9 avec le protocole AES et la gestion des blocs CTR (CounTeR). L&rsquo;objet contenant la cl\u00e9 de session est de type texte.<\/p>\n<div class=\"center\">\n<div class=\"floatnone\"><a href=\"\/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-sym.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2429\" src=\"\/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-sym-600x316.png\" alt=\"20130209-nebule-schema-crypto-sym\" width=\"600\" height=\"316\" srcset=\"\/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-sym-600x316.png 600w, \/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-sym-1024x539.png 1024w, \/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-sym.png 1312w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/div>\n<\/div>\n<h3>\u00c9tape chiffrement asym\u00e9trique<\/h3>\n<p>Suite \u00e0 la premi\u00e8re \u00e9tape de chiffrement, nous nous retrouvons avec un objet chiffr\u00e9 et un objet contenant la cl\u00e9 de session. Si le fichier chiffr\u00e9 est bien prot\u00e9g\u00e9 (en principe) et peut donc \u00eatre rendu public, l&rsquo;objet avec la cl\u00e9 de session est au contraire bien embarrassant. C&rsquo;est l\u00e0 qu&rsquo;intervient le chiffrement asym\u00e9trique et les cl\u00e9s publiques\/priv\u00e9es.<\/p>\n<p>Le syst\u00e8me de cl\u00e9s publiques\/priv\u00e9es va permettre de chiffrer l&rsquo;objet contenant la cl\u00e9 de session avec la cl\u00e9 publique d&rsquo;une entit\u00e9. Ainsi on permet \u00e0 cette entit\u00e9, c&rsquo;est \u00e0 dire le destinataire, de r\u00e9cup\u00e9rer la cl\u00e9 de session avec sa cl\u00e9 priv\u00e9 et donc de lire l&rsquo;objet source. Et plus encore, en re-chiffrant cette m\u00eame cl\u00e9 de session avec d&rsquo;autres cl\u00e9s publiques, ce qui g\u00e9n\u00e8re autant d&rsquo;objets de cl\u00e9s chiffr\u00e9s, nous permettons \u00e0 autant de nouvelles entit\u00e9s de lire l&rsquo;objet source.<\/p>\n<p>Le cr\u00e9ateur de l&rsquo;objet chiffr\u00e9 doit obligatoirement faire partie des entit\u00e9s destinataires si il souhaite pouvoir d\u00e9chiffrer l&rsquo;objet source plus tard. Sinon, il passe int\u00e9gralement sous le contr\u00f4le d&rsquo;une des entit\u00e9s destinataires.<\/p>\n<p>Sur le sch\u00e9ma ci-dessous, la partie chiffrement asym\u00e9trique est mise en valeur. On retrouve l&rsquo;objet en clair qui est ici la cl\u00e9 des session. En chiffrant cet objet, cela g\u00e9n\u00e8re un nouvel objet. Le chiffrement est mat\u00e9rialis\u00e9 par un lien de type K. Ce lien associe aussi un objet contenant la cl\u00e9 publique d&rsquo;une entit\u00e9. Le nouvel objet est de type RSA.<\/p>\n<div class=\"center\">\n<div class=\"floatnone\"><a href=\"\/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-asym.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2430\" src=\"\/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-asym-600x316.png\" alt=\"20130209-nebule-schema-crypto-asym\" width=\"600\" height=\"316\" srcset=\"\/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-asym-600x316.png 600w, \/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-asym-1024x539.png 1024w, \/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-asym.png 1312w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/div>\n<\/div>\n<h3>Ensemble du processus de chiffrement<\/h3>\n<p>\u00c9videmment, ce sch\u00e9ma de chiffrement ne r\u00e9-invente pas la roue. C&rsquo;est une fa\u00e7on de faire assez commune, voire un cas d&rsquo;\u00e9cole. Mais il est ici adapt\u00e9 au fonctionnement particulier de nebule et de ses objets.<\/p>\n<p>Il y a deux points \u00e0 v\u00e9rifier : &#8211; Partager l&rsquo;objet chiffr\u00e9 et permettre \u00e0 une autre entit\u00e9 de le voir, c&rsquo;est aussi lui donner acc\u00e8s \u00e0 la cl\u00e9 de session. Rien n&#8217;emp\u00eache cette entit\u00e9 de rediffuser ensuite cette cl\u00e9 de session en clair ou re-chiffr\u00e9e \u00e0 d&rsquo;autres entit\u00e9s. Cependant, la cl\u00e9 de session est unique et n&rsquo;a pas de valeur en dehors de l&rsquo;objet chiffr\u00e9 qu&rsquo;elle prot\u00e8ge. De m\u00eame, l&rsquo;objet source peut toujours \u00eatre re-chiffr\u00e9 avec une nouvelle cl\u00e9 de session et d&rsquo;autres cl\u00e9s publiques. On retombe sur un probl\u00e8me commun, insoluble et le m\u00eame constat : on perd automatiquement le contr\u00f4le de toute information que l&rsquo;on diffuse \u00e0 autrui. &#8211; L&#8217;empreinte (hash) de la cl\u00e9 de session est publique. Peut-\u00eatre que cela affaiblie le chiffrement et donc la solidit\u00e9 de la protection des objets. A voir&#8230;<\/p>\n<p>Par commodit\u00e9, je pense qu&rsquo;il serait int\u00e9ressant de lier explicitement l&rsquo;entit\u00e9 destinataire et l&rsquo;objet chiffr\u00e9.<\/p>\n<p>Voici le sch\u00e9ma de l&rsquo;ensemble :<\/p>\n<div class=\"center\">\n<div class=\"floatnone\"><a href=\"\/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2431\" src=\"\/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-600x316.png\" alt=\"20130209-nebule-schema-crypto\" width=\"600\" height=\"316\" srcset=\"\/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-600x316.png 600w, \/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto-1024x539.png 1024w, \/wp-content\/uploads\/nebule\/2016\/03\/20130209-nebule-schema-crypto.png 1312w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/div>\n<\/div>\n<h3>Chiffrement et vecteur initial<\/h3>\n<p>Pour la plupart des modes de chiffrements sym\u00e9triques, un vecteur initial (semence ou IV) est n\u00e9cessaire. Il est li\u00e9 \u00e0 l&rsquo;objet chiffr\u00e9 pour permettre le d\u00e9chiffrement de celui-ci. Par d\u00e9faut, sa valeur est al\u00e9atoire.<\/p>\n<p>Si pas pr\u00e9cis\u00e9, il est \u00e9gale \u00e0 0.<\/p>\n<p>Du fait du fonctionnement du mode CTR (CounTeR), l&rsquo;IV s&rsquo;incr\u00e9mente \u00e0 chaque bloc chiffr\u00e9.<\/p>\n<h3>Chiffrement et compression<\/h3>\n<p>Il est pr\u00e9f\u00e9rable d&rsquo;associer de la compression avec le chiffrement.<\/p>\n<p>La compression des donn\u00e9es d\u00e9j\u00e0 chiffr\u00e9es est impossible, non que l&rsquo;on ne puisse le faire, mais le gain de compression sera nul. L&rsquo;entropie d\u00e9termine la limite th\u00e9orique maximum vers laquelle un algorithme de compression sans pertes peut esp\u00e9rer compresser des donn\u00e9es. Quelque soit l&rsquo;entropie des donn\u00e9es d&rsquo;origine, une fois chiffr\u00e9es leur entropie est maximale. Si un algorithme obtient une compression des donn\u00e9es chiffr\u00e9es, il faut s\u00e9rieusement remettre en question la fiabilit\u00e9 de l&rsquo;algorithme de chiffrement. CF <a class=\"external text\" title=\"http:\/\/fr.wikipedia.org\/wiki\/Entropie_de_Shannon\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Entropie_de_Shannon\" rel=\"nofollow\">Wikipedia \u00e2\u20ac\u201c Entropie de Shannon<\/a>.<\/p>\n<p>A cause de l&rsquo;entropie apr\u00e8s chiffrement, si on veut compresser les donn\u00e9es il est donc n\u00e9cessaire de le faire avant le chiffrement.<\/p>\n<p>Ensuite, il faut choisir l&rsquo;algorithme de compression. On pourrait forcer par d\u00e9faut cet algorithme, pour tout le monde. C&rsquo;est notamment ce qui se passe pour le HTML5 avec le WebM ou le H.264&#8230; et c&rsquo;est pr\u00e9cis\u00e9ment ce qui pose probl\u00e8me. En dehors des probl\u00e8mes de droits d&rsquo;utilisation \u00e0 s&rsquo;acquitter, c&rsquo;est une facilit\u00e9 pour l&rsquo;impl\u00e9mentation de cette compression par d\u00e9faut dans les programmes. Cela \u00e9vite de devoir n\u00e9gocier pr\u00e9alablement l&rsquo;algorithme de compression. Mais si il est difficile de pr\u00e9senter des vid\u00e9os en plusieurs formats \u00e0 pr\u00e9-n\u00e9gocier, ce n&rsquo;est pas le cas de la plupart des donn\u00e9es. On perd la capacit\u00e9 d&rsquo;\u00e9volution que l&rsquo;on a en acceptant de nouveaux algorithmes de compression. Et plus encore, on perd la capacit\u00e9 du choix de l&rsquo;algorithme le plus adapt\u00e9 aux donn\u00e9es \u00e0 compresser. Il faut donc permettre l&rsquo;utilisation de diff\u00e9rents algorithmes de compression.<\/p>\n<p>Cependant, si l&rsquo;objet \u00e0 chiffrer est d\u00e9j\u00e0 compress\u00e9 en interne, comme le PNG ou OGG par exemple, la compression avant chiffrement est inutile. Ce serait une sur compression qui bien souvent n&rsquo;apporte rien. Le chiffrement n&rsquo;implique donc pas automatiquement une compression.<\/p>\n<p>Lors du chiffrement, l&rsquo;objet r\u00e9sultant chiffr\u00e9 est li\u00e9 \u00e0 l&rsquo;objet source non chiffr\u00e9 par un lien <code>k<\/code>. Il est aussi marqu\u00e9 comme \u00e9tant un objet de <i>type-mime<\/i> correspondant \u00e0 l&rsquo;algorithme de chiffrement, via un lien <code>l<\/code>. Pour marquer la compression avant chiffrement, un autre lien <code>l<\/code> est ajout\u00e9 comme <i>type-mime<\/i> vers l&rsquo;algorithme de compression utilis\u00e9. Ce lien n&rsquo;est ajout\u00e9 que dans le cas d&rsquo;une compression r\u00e9alis\u00e9e en m\u00eame temps que le chiffrement.<\/p>\n<p>La seule contrainte, c&rsquo;est l&rsquo;obligation d&rsquo;utiliser un algorithme de compression sans perte. L&rsquo;objet, une fois d\u00e9compress\u00e9 doit \u00eatre v\u00e9rifiable par sa signature. Il doit donc \u00eatre strictement identique, aucune modification ou perte n&rsquo;est tol\u00e9r\u00e9e.<\/p>\n<h3>Chiffrement et type mime<\/h3>\n<p>Il n&rsquo;existe pas de type mime g\u00e9n\u00e9ralistes pour des fichiers chiffr\u00e9s. Comme les objets chiffr\u00e9s ne sont li\u00e9s \u00e0 aucune application en particulier.<\/p>\n<p>Il faut aussi un moyen de pr\u00e9ciser l&rsquo;algorithme de chiffrement derri\u00e8re. Une application aura besoin de conna\u00eetre cet algorithme pour d\u00e9chiffrer le <i>flux<\/i> d&rsquo;octets. En suivant la <a class=\"external text\" title=\"http:\/\/www.rfc-editor.org\/rfc\/rfc2046.txt\" href=\"http:\/\/www.rfc-editor.org\/rfc\/rfc2046.txt\" rel=\"nofollow\">rfc2046<\/a>, il reste la possibilit\u00e9 de cr\u00e9er quelque chose en <code>application\/x-...<\/code><\/p>\n<p>Voici donc comment seront d\u00e9finis les objets chiffr\u00e9s dans nebule :<\/p>\n<ul>\n<li><code>application\/x-encrypted\/aes-256-ctr<\/code><\/li>\n<li><code>application\/x-encrypted\/aes-256-cbc<\/code><\/li>\n<li><code>application\/x-encrypted\/rsa<\/code><\/li>\n<\/ul>\n<p>Etc&#8230;<\/p>\n<p>En fonction de l&rsquo;algorithme invoqu\u00e9, on sait si c&rsquo;est du chiffrement sym\u00e9trique ou asym\u00e9trique, et donc en principe si c&rsquo;est pour une cl\u00e9 de session ou pas.<\/p>\n<h3>R\u00e9solution de conflits<\/h3>\n<p>Comment se comporter face \u00e0 un objet que l&rsquo;on sait (lien k) chiffr\u00e9 dans un autre objet mais qui est disponible chez d&rsquo;autres entit\u00e9s ? Si on est destinataire l\u00e9gitime de cet objet, on ne le propage pas en clair. On ne t\u00e9l\u00e9charge pas la version en clair. On garde la version chiffr\u00e9e.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cette page contient la documentation technique de nebule version 1.3 . F \/ Fondations Le but du projet nebule, c&rsquo;est le moteur de gestion des objets. La couche basse qui s&rsquo;occupe du stockage des objets et liens, et de leur diffusion. L&rsquo;interface utilisateur est un programme utilis\u00e9 pour manipuler ces objets et traduire les liens &hellip; <a href=\"https:\/\/blog.nebule.org\/?page_id=2658\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Norme nebule v1.3<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":7,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-2658","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/pages\/2658","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2658"}],"version-history":[{"count":6,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/pages\/2658\/revisions"}],"predecessor-version":[{"id":3064,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/pages\/2658\/revisions\/3064"}],"wp:attachment":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2658"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}