Nommage multiple et protéiforme

Dans nebule, les objets ont forcément un identifiant. Ils ont aussi parfois un nom. Typiquement, c’est le cas lorsque l’objet a pour source un fichier nébulisé.

shot-2014-07-18_20-07-59

Le nom est un texte de caractères compréhensible par les humains. Déjà, en fonction des langues, il se peux que ce texte ne soit pas compréhensible pas tout le monde. Mais on exclut déjà par principe les caractères non imprimables, même si en réalité ça n’a pas beaucoup d’importance. Il vaut mieux que le texte n’ai pas de retour à la ligne, mais ça peut être interprété, traduit et pris en compte à l’affichage.

Pour un fichier, le nom (qui inclus le chemin) a deux rôles :

  1. le classement sommaire par sujets en fonction du chemin et parfois du nom ;
  2. la description sommaire du contenu, un peu comme un titre.

Dans nebule, le nom que l’on peut donner à un objet a le même rôle que le nom pour un fichier. Il donne un titre à l’objet. Par contre, le classement des objets intervient peu avec le nom que ceux-ci pourraient avoir. Ce serait plutôt le rôle de groupes et de nÅ“uds, concept encore en cours d’affinement. Pour un objet, lui donner un nom c’est le lier à un autre objet qui contient le nom avec un lien de type l.

Si un fichier ne peut avoir qu’un seul nom, un objet peut en avoir plus. Il est possible de créer plusieurs liens vers différents objets à utiliser comme noms. Les propriétés de liens multiples et concurrents sont valables aussi pour le nommage.
Lors de l’affichage, comme dans l’exemple ci-dessus, il faut faire un choix. Soit on affiche tous les noms, ce qui peut rapidement devenir problématique et difficilement compréhensible par l’utilisateur. Soit on affiche qu’un seul nom, celui affiché étant celui qui a le plus grand score dans le calcul des relations sociales. C’est cette dernière solution qui est adoptée aujourd’hui.

Mais on peut faire encore mieux. Rien n’interdit un lien pour un titre de renvoyer vers une image. D’ailleurs, ce peut être tout objet sans distinction. C’est l’interprétation du titre qui ici prend son importance. Si on n’interprète que du texte alphanumérique sur une seule ligne, les autres objets seront ignorés comme titre.
Si on décide de prendre en compte aussi les images, il ne sera peut-être pas opportun d’utiliser une image de grande résolution, lourde. On peut utiliser à la place les miniatures, des images dérivées, pour l’affichage comme titre. Les miniatures d’images seront d’ailleurs très régulièrement utilisées lors de l’affichage.
Pour un film, on va peut-être utiliser soit une image fixe soit une petite séquence animée, l’une comme l’autre extraite du film.

L’affichage final peut dans certains cas prendre en compte simultanément plusieurs objets titres mais de types différents. Par exemple accepter une image et un texte, ou un morceau de film, un son et un texte…
Protéiforme ne veut pas dire en forme de protéine mais bien de formes multiples.
Tout est question d’interprétation et de stratégie d’affichage. Tout est possible, aussi.

Dans sylabe, comme dans nebule, une entité a un nom constitué d’un petit texte, un prénom et même un préfixe sur le même principe. Mais elle peut aussi depuis peu avoir une image, typiquement une photo d’identité. Le nommage multiple et protéiforme existe donc déjà.

Google+ et l’anonymat

Dans un article, le réseau social Google+ revient sur les restrictions de nommage de ses utilisateurs. Il va maintenant être possible de choisir des pseudonymes de façon à profiter du réseau social en ligne tout en permettant un certain anonymat.

Il était temps…

L’étape suivant serait de permettre à tout utilisateur de pouvoir nativement créer des pseudonymes partiellement autonomes. L’idée est en cours de mise en place sur le projet sylabe. La condition du succès est bien sûr que qu’un pseudonyme puisse avoir une vie propre, ses propres relations et groupes (cercles sur G+) et que l’on bascule de façon équivoque de l’entité principale vers un pseudonyme. C’est un bon moyen de répondre à des besoins d’anonymisation tout en facilitant la gestion de l’anonymisation par les vrais utilisateurs.
Il faudra aussi déterminé si un pseudonyme apparait clairement comme tel dans les utilisateurs ou si sa vraie nature reste cachée pour préserver son efficacité.
Bien sûr, il faudra garder à l’esprit que monsieur Google aura accès à toutes les entités, que ce soit les vrais utilisateurs ou leurs pseudonymes. Cela répond dans ce cas aux problèmes légaux pour pouvoir remonter, sur décision d’un juge, à la personne physique derrière un pseudonyme.

Prise d’empreinte homomorphique

Les objets manipulés par nebule sont identifiés, et donc référencés, par leurs empreintes respectives. Ces empreintes sont cryptographiques afin de pouvoir s’assurer que c’est bien le bon objet, afin de pouvoir avoir confiance dans l’intégrité de son contenu. Il est possible dans un seul cas d’avoir plus d’une empreinte par objet, c’est si celles-ci sont calculées avec des algorithmes différents (cf Collisions d’empreintes multi-algorithmique).

Cependant, si la propriété cryptographique des empreintes est indispensable à la confiance, elle entraîne un manque de souplesse dans le référencement des objets. Rien dans la valeur de l’empreinte ne trahis une partie de son contenu. L’empreinte cryptographique reflète uniquement l’intégralité de l’objet. On ne peux pas s’en servir pour retrouver des objets proches dans leur contenu. Tout au plus peut-on vérifier si deux objets sont identiques… ce qui n’a pas d’intérêt puisque dans ce cas c’est tout simplement le même objet.

Sub-division d’objet

La première solution pour résoudre ce problème est d’utiliser des sous-parties d’un objet comme des objets propres, et de les identifier comme tels. Le lien de type s permet justement de lié l’objet principal à ses morceaux.

C’est notamment ce qui est fait dans les logiciels de Paire-à-Paire (P2P – Peer to Peer). Pour qu’un fichier puisse être téléchargé depuis de multiples sources, celui-ci est pré-découpé en morceaux de taille identique pré-définit. Chaque morceau à une empreinte propre et peut être vérifié à la réception. Chaque morceau est téléchargé sur une et une seule source, mais plusieurs morceaux sont téléchargés simultanément depuis plusieurs sources. On augmente ainsi le débit réel de réception du fichier voulu même si les sources ont individuellement un faible débit d’émission. Évidemment, si chaque morceau est valide, le fichier dans son ensemble ne peut qu’être valide.

Une recherche sur mot clé peut avantageusement tirer partie de ce système puisqu’une recherche se fera uniquement sur l’empreinte du morceau correspondant à la recherche. Toute la difficulté est de bien choisir ces morceaux.

Pour du texte, c’est facile. Pour une recherche sur des images ou des vidéos, c’est déjà beaucoup moins évident. Mais quoique l’on trouve, c’est toujours une liste d’objets qui contiennent cette petite sous-partie même si le reste n’a absolument aucun rapport.

Empreinte homomorphique

Une autre solution consiste à essayer de trouver des objets qui ont le plus de contenu en commun. Ce serait une sorte de représentation miniature du contenu de l’objet. On veut quelque chose qui se rapproche plus de l’empreinte des doigts de pieds. On regarde d’abord que cela à bien la forme d’un pied, puis on regarde plus en détail certaines parties morphologiques pour déterminer si les deux pieds sont proches.

On pourrait partir sur le système de sous-découpage utilisé par le P2P. Chaque objet est découpé en petits morceaux de taille identique. Ainsi, si deux objets ont un ou des morceaux en commun, on pourra en déduire que ceux-ci sont proches.
Mais cette méthode pose un problème. Si on prend un objet et que l’on en fait une copie avec pour seule différence un caractère supplémentaire dans le premier bloc de données, alors tous les blocs seront vus comme différents alors que les objets ont clairement des parties communes.
On pourrait imaginer essayer d’optimiser la méthode en travaillant sur des blocs de tailles variables. Mais quels critères adopter pour ajuster les tailles de blocs en fonction des données ?

Je propose une méthode comme base de réflexion à défaut pour l’instant d’être adoptée.
Si on regarde le travail d’un logiciel de compression de données, on constate qu’il recherche les occurrences multiples de données dans l’ensemble d’un document. Il le fait sans tenir compte de la sémantique de ce qu’il trouve. Ainsi des mots très proches sémantiquement ne seront pas agrégés parce que différents. Ensuite, le logiciel de compression fait un classement statistique pour déterminer les occurrences multiples qu’il serait avantageux de réduire. Une phrase qui apparaît quelques fois permet une bonne optimisation. Un mot qui apparaît plusieurs permet aussi un gain de place facile.
Si on reprend le même principe d’analyse, même sans tenir compte de la sémantique des mots, on peut s’attendre à ce que les plus grandes occurrences de mots ou de phrases représentent le ou les sujets du document. C’est ce que fontnotamment les moteurs de recherches (Google, Bing, Yahoo…) lorsqu’ils moulinent les pages web, mais avec l’analyse sémantique en plus.
L’empreinte homomorphique est constituée des 20 premières occurrences redondantes avec leur poids respectifs. L’occurrence peut être représentée par une petite empreinte (CRC) de façon à avoir une taille fixe, mettons 16 caractères hexadécimaux. Le poids peut être représenté en pourcentage sur 4 caractères hexadécimaux (entre 0000 et ffff).
Vue comme ça, l’empreinte générée n’est plus tout à fait homomorphique et n’a pas de propriétés cryptographique.On obtient une empreinte homomorphique de 400 caractères hexadécimaux.

Ainsi, plusieurs documents parlants d’un même sujet ont de fortes chances d’avoir une même empreinte parque bien que différents ils auront les mêmes occurrences redondantes.

Un certain nombre de données annexes vont figurer dans les données utilisées pour la comparaison. Par exemple on peut retrouver les en-têtes internes des documents bureautique. Il faut peut-être pré-filtrer les documents en fonction de leur type pur. Par exemple, un simple fichier texte et un fichier complexe de traitement de texte se verront expurgés de tout ce qui est en-tête et données internes, puis on en gardera que les caractères imprimables convertis en minuscule, sans ponctuation…

Conclusion

Une empreinte homomorphique peut être utilisée avantageusement en complément de l’empreinte cryptographique. Elle n’a d’intérêt que pour des objets ayant suffisamment de contenu. Il faut prévoir un seuil minimum en dessous duquel elle n’est pas calculée. Cette empreinte homomorphique est liée à l’objet par un lien de type l avec comme objet méta « nebule/objet/homomorphe ». Cet objet à usage réservé est ajouté à la documentation.

Mais dans tous les cas, en l’absence de propriétés cryptographique, une empreinte homomorphique ne doit pas être utilisée dans les liens. L’usage n’est pas le même, on fait soit de l’intégrité, soit du référencement.

Marqueur de groupe multidimensionnel

Les objets sont aujourd’hui identifiés par une valeur unique qui, de part ses propriétés, n’est pas pré-calculable ou prévisible. Ce comportement est indispensable pour distinguer parfaitement et de façon univoque les objets, et donc leur contenu. Il résulte de ces propriétés que toute modification d’un objet, quelle qu’elle soit et aussi infime qu’elle soit, entraîne un changement complet et quasi-aléatoire de son empreinte, et donc de l’identifiant correspondant.

Mais il peut être aussi intéressant de disposer d’une autre valeur plus prévisible. On va essayer de définir ici ce que l’on appellera un marqueur.
On peut imaginer par exemple que deux images très proches puissent avoir un marqueur de valeur identique ou proche. Pour de la musique, le marqueur peut être un dérivé atemporel du spectre de fréquences. Ce marqueur doit avoir une structure en accord avec la structure de l’objet. On doit pouvoir comparer les marqueurs de deux objets différents et déterminer rapidement si ils ont une structure proche, donc si ils sont ressemblants. La structure doit être multidimensionnelle et de profondeur variable. L’ajustement de la profondeur de comparaison des marqueurs doit permettre de retrouver les objets très proches ou au contraire vaguement ressemblants.

Une notion de groupe apparaît. On fait un regroupement à géométrie variable des objets par rapport à leur contenu.

Le côté multidimensionnel du marqueur doit refléter les caractéristiques multidimensionnelles d’un objet. Voici quelques exemples :

  1. Un texte simple contient des données qui s’expriment en deux dimensions : la position spatial et pour chaque position une valeur (caractère).
  2. Un texte enrichit contient des données qui s’expriment en trois dimensions : la position spatial et pour chaque position deux valeurs (caractère et encodage).
  3. Un son mono contient des données en deux dimensions : la position temporelle et pour chaque position une valeur (amplitude).
  4. Un son stéréo contient des données en trois dimensions : la position temporelle et pour chaque position deux valeurs (amplitude).
  5. Une image en noir et blanc contient des données en trois dimensions : la position spatial horizontale, la position spatial vertical et pour chaque couple de position spatial on a une valeur (amplitude).
  6. Une image en couleur (RVB) contient des données en cinq dimensions : la position spatial horizontale, la position spatial vertical et pour chaque couple de position spatial on a trois valeurs (amplitude).
  7. Un film en couleur muet contient des données en six dimensions : la position spatial horizontale, la position spatial vertical, la position temporelle et pour chaque couple de position spatial/temporelle on a trois valeurs (amplitude).
  8. Un film en couleur avec son stéréo contient des données en huit dimensions : la position spatial horizontale, la position spatial vertical, la position temporelle et pour chaque couple de position spatial/temporelle on a cinq valeurs (amplitude).

Ce marqueur n’est pas destiné à remplacé l’identifiant !
L’identifiant reste le seul moyen de
discerner sans ambiguïté tous les objets, y compris les plus ressemblants.

Ne reste plus qu’à formaliser précisément ce marqueur.

Renouveler son entité

Pour l’instant, les entités sont figées. Mais il faudra prévoir de changer leurs mots de passes et de les migrer vers de nouvelles entités au besoin.

Le changement de mot de passe nécessite de régénérer l’objet de clé privé qui change. Il faut évidemment préalablement déverrouiller l’entité, donc sa clé privée. Une fois le mot de passe changé, il faut lier la nouvelle clé privée à la clé publique puis supprimer le lien de l’ancienne clé privé. Il faut marquer à supprimer l’objet de l’ancienne clé privée.

Dans le cas d’une migration d’entité, c’est un peu plus complexe. Ce besoin répondra souvent suite à un problème de compromission ou de corruption d’entité.
Il faut générer une nouvelle entité autonome. Faire un lien de mise à jour de l’ancienne entité vers la nouvelle. Dans la mesure du possible, ce lien de mise à jour doit être signé à la fois par l’ancienne et la nouvelle entité. Puis l’objet de la clé privée de l’ancienne entité doit être marqué à supprimer à la fois par l’ancienne et la nouvelle entité.
Si l’entité avait été corrompue, c’est à dire qu’il était impossible de la déverrouiller, c’est un vrai problème. Dans ce cas, les liens de mise à jour d’entité et de suppression de clé privée ne pourront être signés par l’ancienne entité. rien ne permet de distinguer une opération légitime suite à un problème d’une tentative de détournement par une autre entité. Il peut tout au plus être possible de regarder si l’entité génère de l’activité, donc qu’elle n’est pas corrompue.
En cas de compromission de l’entité, on peut faire une mise à jour vers une nouvelle entité. Mais celui qui a volé la clé privée de l’entité peut le faire aussi de son côté. Il est difficile dans ce cas de déterminer qui est la véritable nouvelle identité et pas une usurpation… Peut-être le côté sociale, comportemental, d’une entité peut nous aider à posteriori?

Le SPAM, déficience d’identification

Qu’est ce que le SPAM?
« Le spam, pourriel ou polluriel est une communication électronique non sollicitée, en premier lieu via le courrier électronique. Il s’agit en général d’envois en grande quantité effectués à des fins publicitaires. »
CF Wikipedia

La définition est un peu floue. On note cependant plusieurs détails dans la première phrase. C’est d’abord une communication, donc un échange d’informations. Ensuite, cela prend une forme électronique, critère correspondant à une vision un peu réduite. Et enfin, c’est quelque chose de non sollicité, c’est à dire une communication initiée par l’autre partie, quelques chose que l’on a pas demandé.
Jusque là, une communication électronique sur deux rentre dans cette catégorie. Il y a un consensus général sur ce que cela désigne, mais la définition est trop imprécise. La précision concernant le courrier électronique est optionnelle, pas vraiment contraignante. C’est surtout un exemple qui aide le lecteur à raccrocher le SPAM à quelque chose qu’il connaît déjà. Cela veut aussi dire que le SPAM affecte potentiellement d’autres médias de communication. Le FAX par exemple…
La deuxième phrase reste aussi très générale, donc très imprécise. Ce serait donc des envois de grandes quantités de messages publicitaires. Ou est le problème ici? La grande quantité d’envois? Le caractère publicitaire? Il n’est fait aucune référence à un problème dans cette définition, mais on assimile automatiquement la combinaison quantité/commercial à un problème.
Le problème serait-il pas tout simplement de recevoir beaucoup de messages publicitaires que l’on n’aurait pas sollicité !? On notera la transformation entre l’envoie massif de messages et la réception massive de ces mêmes messages. Se soucierait-on du SPAM si un envoie massif aboutissait à un seul message par semaine dans notre boite aux lettres ? Assurément pas.

Un e-mail non sollicité ventant les propriétés d’une lessive est un SPAM.
Un prospectus papier dans notre boite aux lettres, non. Ce n’est pas une communication électronique. Pourtant, en pratique, c’est le même phénomène : on remplit nos boites aux lettres de messages publicitaires non sollicités. Messages dont il faut se débarrasser.
Allons encore plus loin. Un panneau publicitaire, diffusant d’autorité un message dans notre environnement, n’est pas non plus du SPAM. Ce n’est pas une communication électronique et cela ne vous est pas directement adressé. Pourtant nous sommes bien dans la diffusion massive d’un message publicitaire. Elle est massive parce que adressée à toutes les personnes qui passent devant. Finalement, le panneau publicitaire peut de la même façon être assimilé à du SPAM. Mais là on ne peut rien faire, il n’y a pas de bouton suppression. Bien que la dégradation de notre environnement visuel soit manifeste, cela ne rentre pas dans la catégorie SPAM. Je vous laisse en déduire la raison.
En terme informationnel, c’est l’insertion d’informations parasites en grand nombre qui provoques une gène. Tant que cela ne demande pas trop de temps pour être traitée, c’est toléré. Le traitement de ces informations parasites veut dire d’analyser chaque information afin de déterminer sa pertinence et la suite à donner, c’est à dire la supprimer ou l’ignorer dans le pire des cas.

Revenons au SPAM tel que communément accepté. Face au déluge de messages à trier (à supprimer), il est rapidement apparut nécessaire de traiter le problème. Ce traitement peut intervenir à plusieurs niveaux et de plusieurs manières. Évidemment, il est préférable de pouvoir fortement automatiser ce processus de traitement.
Il y a aujourd’hui un large panel de méthodes différentes pour traiter ce problème spécifique, des plus artisanales aux plus industrielles. Les résultats ne sont pas toujours à la hauteur des investissements en argent ou en temps. Mais comment mesurer l’efficacité de ces méthodes ?
On peut mesurer les performances de plusieurs façons. La première idée est de mesurer le pourcentage de SPAM réellement détectés. Oui, mais ce n’est pas suffisant, que fait-on du nombre de messages légitimes qui ont été supprimés en même temps? Une société commerciale doit pouvoir recevoir des messages de toute provenance et doit éviter un maximum de pertes de messages, sinon ce sont des clients en moins et donc des bénéfices en moins. Ces sociétés vont donc investir dans des solutions très sophistiquées qui maximisent la détection et minimise les dommages collatéraux.

Une des caractéristiques que l’on retrouve souvent dans les SPAM, c’est que l’adresse de l’expéditeur est fantaisiste bien que de forme correcte. Une des méthodes de lutte est de renvoyer un message à l’expéditeur pour demander une confirmation. Il n’est malheureusement pas infaisable pour un robot de pouvoir répondre positivement à cette confirmation, même avec un captcha.

Le particulier à potentiellement moins de problème qu’une société. Il peut facilement mettre de côté tous les messages dont les expéditeurs ne lui sont pas connus. Il suffit de temps en temps de regarder le dossier des SPAM (les inconnus) si on attend un message d’un nouveau destinataire. Mais même cette méthode a ses limites. Certaines sources de SPAM essayent de pirater des boîtes aux lettres d’utilisateurs légitimes (vos amis) pour leur faire envoyer à leur insu des SPAM. Un certain nombre de virus sont spécialisés, une fois qu’un nouvel ordinateur est contaminé, pour aller dépouiller le carnet d’adresse. Et pour rendre plus difficile la détection du poste contaminé, d’envoyer les SPAM en se faisant passé pour un des contacts du carnet d’adresse.
Si la méthode du filtrage est assez efficace tant en détection quand tant que rejet de messages légitimes, elle peut au besoin être complétée par une autre méthode comme un filtre bayesien par exemple.

Les filtres de type RBL sont un moyen de défense dynamique assez performant avec peu de dommages collatéraux. Mais d’un autre côté, si ils bloquent des plages entières d’adresses IP (plages IP des clients des ISP), ils deviennent catastrophiques par le nombre de messages légitimes bloqués.
Le filtre greylist est quand à lui basé sur le bon fonctionnement du serveur émetteur du SPAM. Ça marche encore très bien aujourd’hui avec aucun rejet de message légitime, mais cela ne tient qu’à la volonté des diffuseurs de SPAM d’améliorer (un peu) leurs outils.

On voit que la lutte contre le SPAM utilise des outils qui ont tous leurs limites. Ils sont tous par principe faibles parce que le protocole n’a pas été prévu pour lutter contre ce problème.
Dans la plupart des SPAM, on a clairement une carence dans l’identification de l’expéditeur.

Le moyen naturel d’y répondre est d’être capable d’identifier tous les acteurs générateurs d’information. Cela veut dire que, n’étant pas capable de pouvoir identifier toutes les sources possibles et légitimes dans le monde, on va devoir se fier à un système plus global qui se base sur des autorités de confiances. Un système sur le principe du DNS mais aussi des certificats x509.
Mais imposer une identification globale remet directement en cause l’anonymat. Et se reposer sur des autorités de confiance n’est pas sans conséquences. Les problèmes récurrents de piratage des autorités de certification nous montre que c’est loin d’être infaillible.

Que faire? Comment palier le manque d’identification sans remettre en question l’anonymat? Vu comme ça, cela semble impossible.
La réponse la plus simple serait de couper toute communication. Mais l’être humain a la nécessité (absolue) d’accepter des échanges, qu’ils soient de forme électronique ou pas d’ailleurs. Et l’être humain sait naturellement faire le tri des informations, de juger le risque de sélectionner une information plutôt qu’une autre. Il sait aussi se tromper et se faire manipuler.
L’humain doit revenir au centre de la décision lorsque le temps et la quantité d’informations ne sont pas saturantes. Il faut afficher l’information qui permet la prise de décision. Et si certaines actions sont fortement automatisées, il faut afficher le résultat de ces actions que l’automatisme a jugé nécessaires.

Comment se positionne nebule vis-à-vis de ce problème?
Il propose un système capable de gérer des utilisateurs localement mais qui peuvent être reconnus globalement. Ainsi, un utilisateur n’est valide que parce-qu’il est reconnu par ses paires, en gros ses voisins. Mais on est capable d’adresser un utilisateur à l’autre bout du monde, ce même si on ne le connaît pas. On peut éventuellement se fier à des autorités locales de confiance qui déterminent qui sont de vrais utilisateurs et qui ne le sont pas. On peut aussi dire que l’on accepte ou rejette certains utilisateurs en fonctions de critères comme la proximité sociale ou géographique.
Mais le risque, c’est la manipulation de ces règles de sélections à l’avantage du diffuseur de SPAM. Diffuseur qui peut être plus facilement bannis aussi.L’autre risque, c’est la compromission du poste de l’utilisateur, et donc l’envoie de SPAM à son insu. Mais ça c’est un problème d’une toute autre dimension…

Liens :
http://fr.wikipedia.org/wiki/Spam
http://fr.wikipedia.org/wiki/Courrier_%C3%A9lectronique
http://fr.wikipedia.org/wiki/Lutte_anti-spam
http://fr.wikipedia.org/wiki/CAPTCHA

Localisation de fichiers

Une étape importante dans l’utilisation de nebule, c’est d’importer des données. Ces données sont typiquement des fichiers existants. Cette opération d’importation de fichiers, c’est la nébulisation de fichiers.

La nébulisation de fichiers ne présente pas à priori de difficultés. On calcule son empreinte et on lui associe tout un tas d’informations telles que son type mime, sa taille, etc…

Il y a cependant une propriété des fichiers qui pose un problème.
Un fichier est classiquement reconnu par son nom. ce nom est une propriété du fichier au même titre que sa taille par exemple. L’extension de fichier n’est qu’un indicateur, peu fiable, de son type. L’extension de fichier est repris comme suffixe du nom.
Il peut y avoir plusieurs fichiers qui portent le même nom (et même suffixe) et qui ont ou non le même contenu. Ils doivent dans ce cas être disposés dans des emplacements différents. Cet emplacement peut être repris comme préfixe. L’emplacement est la traduction textuelle de l’arborescence de répertoires dans lequel se trouve un fichier. Et l’emplacement peut être soit relatif (à un autre emplacement), soit absolu. Dans tous les cas, il fait implicitement ou explicitement référence au disque, la distinction entre les deux dépendant de la notation faite par les différents systèmes d’exploitations. Nous ne prendrons ici que l’emplacement absolu, seul à pouvoir discriminer de façon certaine deux fichiers au même nom.
On peut aussi avoir deux fichiers de même nom/suffixe dans le même répertoire, mais sur deux machines différentes. Dans les différentes notations, il est donc préférable de se restreindre à l’utilisation de notations impliquant le nom de machine. Sinon on risque de pouvoir restaurer correctement un fichier en cas de besoin (si c’est le but).

Le problème de la notation des noms de fichiers peut se poser aussi dans le cas de deux fichiers identiques au même emplacement sur deux machines différentes. Si un des fichiers est modifié, cela va entraîner la création d’un lien u pour l’objet correspondant. Si rien ne distingue les deux fichiers, cela implique que l’autre fichier non modifié sera marqué comme lui aussi modifié…

Références :
Nebule blog – Empreinte d’objets et URI
Nebule blog – Fiches perforées
Nebule blog – Fichiers et chemins
Nebule blog – Système de fichiers
Nebule wiki – Réflexion – analyse des applications – Système de fichiers

Le maître des poupées et le gardien de l’enfer

1/Le maître des poupées

Le maître des poupées, alias puppetmaster, vient de révoquer son ancienne incarnation :

63864e42204080051f524d5be0171920e0117a0e83d2131ac506ce3cbff7f1f4

Contrairement à ce qui avait été annoncé, c’est un lien de type d qui à été utilisé, et non un lien de type u. Ceci pour un problème de sécurité. Ainsi son ancienne incarnation ne peut pas révoquer ce type de lien… et ressusciter.
Le détail ici : puppetmaster.nebule.org/l/63864e42204080051f524d5be0171920e0117a0e83d2131ac506ce3cbff7f1f4

D’autres anciennes incarnations ont elles aussi été révoquées, à la fois pour la clé publique et la clé privée :
70668497b6a0ad481aa7e0c08131bc0d0be40cd7dde30a7de8613290d7c35543 puppetmaster (priv)
9e85d7d25af97760f8611b85c2765912606c7eec8307dc58c7782e34cc373c18 cerberus (pub)
905296b7070b8e7d601d9509893683d072bb22083006a9e545ceaf0228787c8c cerberus (priv)
d756efe28847a3723639aed49a40f08c22a576ff3f002750a18ad6a192717621 kronos (pub)
5f951d41db3b18001fbc8baf895d84cb4d460a6143b273b4f5b2d0e9b0d5c67b kronos (priv)

Dans le même temps, puppetmaster a reconnu plusieurs nouvelles entités :
01351dd781453092d99377d94990da9bf220c85c43737674a257b525f6566fb4 cerberus cerberus.nebule.org
abdbaa31e404463ecc644f1eecdeb9b5f94428eb140fa5c66a7687ee96ed47aa kronos kronos.nebule.org
975571a8a470a6d975662e284f5ef1bd0396c06b31a2207b81bef2e24c5bf0c5 stéphane stephane.nebule.fr
Voir le détail ici : puppetmaster.nebule.org/l/88848d09edc416e443ce1491753c75d75d7d8790c1253becf9a2191ac369f4ea

2/Le gardien de l’enfer

Le gardien de l’enfer, alias cerberus, vient d’être régénéré en tant que :

01351dd781453092d99377d94990da9bf220c85c43737674a257b525f6566fb4
cerberus.nebule.org

Il est reconnu par puppetmaster. cf Cerberus et la mise en quarantaine d’objets.

Pour son rôle spécifique, il dispose de deux objets spécifiques :
nebule/danger
nebule/warning

Actuellement, les enfers n’ayant pas encore officiellement ouverts, cette entité est au chômage.
Seul le temps nous dira pour combien de temps…

Yubikey et la double authentification

Une des bêtes noires de la sécurité des utilisateurs et de leurs informations sur l’Internet est le mot de passe. Ou plutôt devait-on dire la multitude de mots de passes et de comptes utilisateurs qui vont avec.

Chaque service web nécessite un compte utilisateur pour être utilisé, normal. Ce qui est moins normal, c’est que cette identification reste assez strictement localisée au service en question. A part quelques tentatives qui n’ont remportée qu’un succès d’estime, chaque service gère jalousement ses utilisateurs. Il en résulte un multitude de comptes utilisateurs différents avec potentiellement autant de mots de passes.
La gestion de l’identité sur l’Internet est un vrai problème. La gestion des mots de passes associés encore plus. Même si l’on met le même mots de passe partout, il faut régulièrement le retaper. Et bien sûr, avec un mot de passe unique, on devient vulnérable au premier service qui ne sécuriserait pas correctement ceux-ci.

Yubico propose une solution basé sur le mot de passe à usage unique (OTP – One Time Password). L’ensemble fonctionne sur le principe de ‘ce que je connais‘ et ‘ce que j’ai‘. La double authentification repose donc sur deux moyens combinés de prouver son identité. On doit fournir les deux ou prouver que l’on détient les deux.

  1. Ce que je connais‘, c’est typiquement un nom d’utilisateur et un mot de passe.
  2. Ce que j’ai‘, c’est un objet dont je dispose. Cet objet doit être capable de prouver sa présence de façon numérique. C’est ici la YubiKey.
  3. Ce que je suis‘, c’est le plus dur à obtenir… puisque c’est généralement ce que l’on cherche.

La clé YubiKey branchée en USB émule un clavier et envoie un mot de passe OTP lorsque l’on appuie sur un bouton de la clé. Ce mot de passe unique est dérivé de l’identifiant de la clé, d’un numéro de séquence, d’une empreinte CRC et de divers autres champs. Le tout est converti en caractères imprimables et envoyé comme si il était tapé sur un clavier.
Ce OTP est transmis au serveur en même temps que le nom d’utilisateur et éventuellement un autre mot de passe (double authentification). Le serveur le transmet au YubiCloud pour vérification et attend une réponse positive ou négative sur la validité de l’OTP pour donner l’accès au service à l’utilisateur… ou pas.
L’OTP change à chaque fois et ne peut être rejoué. Il peut donc être divulgué une fois utilisé.
La YubiKey peut être volée, sans le compte à utiliser (ou le deuxième mot de passe) elle est inutilisable.
Si double authentification, le mot de passe peut être volé (keylogger), il n’est pas utilisable sans la YubiKey à côté.

Une des propriétés intéressante de cet implémentation, c’est que l’on peut voir l’ensemble comme la transmission de messages chiffrés (symétrique) entre la YubiKey et la YubiHSM. Toutes les clés connaissent l’unique (ou pas loin) mot de passe secret de chiffrement. On fait confiance au matériel (les clés USB) pour savoir garder le secret.

Le système est de loin préférable à la simple authentification par mot de passe. Mais il n’en présente pas moins des problèmes :

  1. Une petite polémique est apparue sur la robustesse réelle du système. Un CRC16 permet de vérifier la validé du paquet. Ce CRC est inclus dans les données chiffrées et couvre donc 128-16=112bits. En jouant des paquets au hasard, il y a 1/(2*2^16) chances que la signature du CRC16 soit cohérente avec le reste. Si l’on compte qu’il faut statistiquement parcourir la moitié des valeurs pour en trouver une bonne, cela donne une probabilité de 1/(2^16). Cependant, dans les données chiffrées, il y a aussi le champ private identity de 6 bytes=48bits. Ce champs étant vérifié comme nul ou valide par les serveurs, la probabilité remonte à 2*1/(2^(16+48)) soit 1/(2^63). Ce qui sauve les meubles c’est que l’attaque doit passer par le réseau, la solidité réelle de l’ensemble est de 2^63 et non de 2^128…
  2. Il faut la coopération active des services qui authentifient les utilisateurs. La méthode d’authentification doit être modifiée pour supporter la vérification de l’OTP en liaison avec le YubiCloud, l’infrastructure qui valide réellement l’authentification. Pour les personnes qui gèrent elles-même leurs blogs ou autres services, c’est un réel gain. Mais pour un gros acteur de l’Internet c’est plutôt une ingérence sur un sujet sensible que sont les utilisateurs et tout ce qu’ils rapportent. Cela à donc autant de chance d’être adopté que d’autres solutions par le passé comme OpenID, faible.
  3. La solution nécessite une connectivité vers l’Internet et le YubiCloud pour valider l’authentification. Impossible donc de travailler hors-ligne. Il y a 5 serveurs dans le monde, c’est déjà pas mal mais c’est aussi encore trop peu pour résister à un DDOS ciblé. Et en cas d’absence de connexion prolongée aux serveur, tous les services associés sont eux-aussi paralysés. On a un point de défaut unique.
  4. Comment va se comporter l’ensemble lorsque le compteur anti-rejeu va boucler ? La clé ne marchera plus. La taille du compteur est de 15bits=32768 utilisations (avec branchement de la clé).
  5. Volontairement, la YubiKey ne peut être mise à jour. La clé est accessible en lecture seule, ce qui empêche la diffusion de virus et réduit la surface d’attaque de celle-ci. Mais que se passera-t-il quand, inévitablement, une faille sera trouvée sur cette clé ? Poubelle.

D’autres questions restent en suspend. L’analyse rapide de la documentation sur le site web de Yubico ne permet pas d’y répondre.

  1. Clé unique de chiffrement AES entre toutes les clés YubiHSM ? Ou une clé AES par YubiHSM ? Ce système de clés secrètes interdit notamment toute concurrence avec les mêmes clés. Utiliser la cryptographie asymétrique plutôt que symétrique aurait permit bien plus de choses et relevé la sécurité à plus long terme.
  2. Et si un serveur d’authentification du YubiCloud répond toujours OK même si les OTP sont invalides ? Quelle est la robustesse de l’infrastructure du YubiCloud ? La liaison entre les API côté clients et les serveurs API Validation Servers est chiffrée avec une clé partagée. Les serveurs KSM avec leurs YubiHSM sont indépendants des API Validation Servers. Mais si la clé AES semble bien protégée dans les YubiHSM, je n’ai pas vu de mécanisme de signature de la réponse.
  3. Yubico ne semble pas aimer la cryptographie symétrique, elle n’est employée nulle part. Dans un contexte entièrement centralisé autour de quelques serveurs, la cryptographie symétrique appliquée à tous les échanges reste cependant acceptable. Mais on en revient à une critique précédente, cela renforce l’unicité du point de défaillance de ces serveurs.

Qu’en penser ?
Toute la sécurité repose sur la/les clés AES des YubiHSM, la robustesse de la clé YubiKey et sur l’implémentation du chiffrement de l’OTP. La solution semble viable à court terme. Trop de défauts la condamne malheureusement à long terme.
Bref, c’est mieux que de se reposer uniquement sur le user/password, mais il faudra l’abandonner sans regrets au premier signe de faiblesse.

Liens :
http://www.yubico.com/
http://www.wired.com/wiredenterprise/2013/01/google-password/all/
http://www.yubico.com/products/yubikey-hardware/
- http://static.yubico.com/var/uploads/pdfs/YubiKey_manual-2.0.pdf
http://www.yubico.com/wp-content/uploads/2012/10/YubiCloud-OTP-Validation-Service-v1.1.pdf
http://www.schneier.com/blog/archives/2013/01/googles_authent.html
http://gonzague.me/yubico-yubikey#axzz2IzWaf5Dr
https://bitcointalk.org/index.php?topic=85648.msg943612#msg943612
http://openid.net/

Identification/authentification sur l’internet des objets

Un interview de R.Haladjian revient sur l’Internet des objets.

L’internet des objets, c’est en gros la capacité d’interagir à distance avec des objets de notre environnement, et à ces objets de communiquer sur le réseau de façon autonome.

Une des remarques concerne la connectivité en IPv6. Ils sont revenus à IPv4 parce que « par exemple une prise électrique disposait d’un serveur et n’importe qui ayant obtenu l’adresse de cette prise électrique pouvait la pinger pour l’allumer et l’éteindre à distance. Il fallait donc mettre un pare-feu pour empêcher l’accès… Donc finalement il est plus intéressant de rester en IPV4 avec un DHCP qui distribue des adresses« .
Il est étonnant que l’on revienne à une solution dont on sait pertinemment qu’elle ne supportera pas la mise à l’échelle (de l’internet, et donc du monde) des objets connectés sur le réseau (internet). On se contente d’une vision de ces objets à courte distance, en gros de l’ordre de grandeur de la maison.
Ce recul est je pense une mauvaise réponse à un problème mal posé. Le problème concerne l’identification de qui peut dans l’exemple allumer/éteindre la lampe. Si il n’y a pas d’identification, c’est normal que tout le monde puisse le faire, une adresse IP n’est pas à considérer comme un secret même en IPv6. Mais mettre en place une identification/authentification forte sur les méthodes actuelles est fastidieux pour un grand nombre d’objets. Le problème est d’ailleurs déjà un problème commun sur les ordinateurs résidentiels. Donc parce que l’on ne sait pas mettre en place une identification correcte, on bride l’ensemble du système.
Je n’ai pas regardé comment est faite l’identification/authentification sur leurs objets. Mais cette remarque m’incite à penser qu’elle n’est pas innovante, et donc pas à la hauteur. Et, en regardant du côté de nebule, le problème semble du coup beaucoup plus facile à résoudre…

Il y a un autre aspect de l’internet des objets, c’est la gestion des objets physiques inertes d’un point de vue numérique. Ils sont reconnus par un identifiant unique, mais ils n’interagissent pas. C’est l’exemple du code barre sur les articles à vendre d’un magasin, ou la puce RFID qui les remplacera, ou la plaque d’immatriculation d’une voiture. La vision primaire de l’internet des objets avec des étiquettes collées partout me semble ubuesque : le monde deviendrait une poubelle recouverte d’étiquettes en tout genre que plus personne ne regarderait…
Pour nebule, ces identifiants numériques, quel qu’en soit leur forme ou norme, sont encodés dans des objets avant de pouvoir être liés et donc gérés. On peut même penser qu’ils seront attaché virtuellement à des positions géographiques.

Liens :
http://mobile.clubic.com/technologies-d-avenir/actualite-528965-leweb-12-haladjian-pere-nabaztag-internet-objets.html
http://fr.wikipedia.org/wiki/Internet_des_objets
http://fr.wikipedia.org/wiki/Web_3.0

L’internet des objets et les objets de l’internet

Les objets physiques qui peuplent notre environnement habituel ont une caractéristique particulière, ils sont uniques. On peut certes faire une copie, voire reproduire un objet en plusieurs millions d’exemplaires, chaque objet restera unique avec sa matière propre et ses défauts propres. Chaque objet peut être ainsi assemblé, remodelé ou refondu dans un autre objet, cela n’a aucun impact sur ses congénères.

Et les objets du monde numérique?
Ceux-ci ont l’équivalent d’une forme propre comme un objet physique. On peut distinguer un objet numérique d’un autre par cette forme que l’on appellera plutôt empreinte, mais aussi par sa localisation. La localisation est souvent représenté par un identifiant dans une arborescence ou sur un réseau, c’est un classement humanisé et peu fiable. Ainsi cette dualité de l’objet dans l’espace numérique a une conséquence importante immédiate, le même objet exactement peut exister simultanément en plusieurs endroits. Il faut donc considérer que chaque emplacement de l’objet reçoit une copie exacte de l’objet, c’est à dire sans altération, sinon cela devient un autre objet.

Continuer la lecture de L’internet des objets et les objets de l’internet

nous = toi + moi

Ce matin, en me connectant à Facebook sur l’ordinateur commun à nous, je me suis fait la réflexion que certaines choses étaient faites bizarrement. Je suis sur ma session Linux à moi mais dans Firefox, c’est toi Diana qui est connectée à FB…
L’ordinateur est multi-session, mais on ne voit simultanément qu’une seule session, soit moi soit toi. Si tu veux ouvrir ton Firefox avec ta connexion FB, tu dois ouvrir une autre session de l’ordinateur. Le problème est que l’on ne peut pas ouvrir facilement deux navigateur pour deux utilisateurs différents dans la même session, une session à nous.

Continuer la lecture de nous = toi + moi

Localisation web

Chaque entité dispose par nature d’un identifiant unique, invariant et non cessible. C’est une clé cryptographique publique.

Cependant cet identifiant ne précise pas la place de l’entité, ou plutôt la place où on peut la joindre.
Les entités, pour pouvoir échanger, doivent avoir une place publique, c’est la localisation.

Cette place est-elle unique d’ailleurs?
En fait non, l’entité peut être présente en de multiples places, soit par le biais de relais, soit parce que la clé privé aura été volé et exploité.

Ce qui différencie fortement l’entité d’une ressource web classique, c’est que l’entité est unique quelque soit sa localisation, et n’existe pas uniquement du fait de l’existence du serveur web qui l’héberge. Cette entité survira à la disparition d’un serveur web, sa résilience est grandement amélioré et ne dépend que faiblement de sont environnement.

Continuer la lecture de Localisation web

Empreinte d’objets et URI

L’Uniform Resource Identifier (URI) est une chaîne de caractères permettant l’identification d’un objet de façon univoque et permanente.

URI(Wikipedia – Licence CC BY-SA v3.0)

L’empreinte d’un objet réalisée au moyen d’une fonction de hash cryptographique est un URI.

Continuer la lecture de Empreinte d’objets et URI

Annuaires

La façon dont les objets sont liés entre eux est importante. Mais il y a aussi la façon dont les entités sont liées entre elles. Les liens entre ses entités suivent-ils la forme des liens entre objets? A priori oui, puisque une entité est avant tout un objet aussi.

Un autre problème qui lui est spécifique aux entités, c’est la localisation. C’est à dire la façon de retrouver une entité dans un vaste réseau. C’est le rôle de ce que l’on appelle un annuaire. Cela doit être vu comme un système similaire au DNS dans sa fonction.

Suite à un article fort intéressant sur un blog, je me rends compte que le problème est plus difficile qu’il n’en a l’air.

Pour résumer et pour reprendre l’article de Wikipedia sur le triangle de Zooko, un système de nommage ou un système d’annuaire doit :
1: Secure, doit être sécurisé.
2: Memorable, doit être facilement mémorisable par un être humain.
3: Global, doit garantir l’unicité.

Jusque là, rien de nouveau sous le soleil, sauf que l’article précise aussi que l’on ne peut satisfaire qu’à deux des trois conditions simultanément au maximum.

On peut ajouter aussi, en autre (cf premier lien), l’aspect stabilité dans le temps. Je pense que, l’entité pouvant être mobile, seule la stabilité dans le temps de l’unicité de l’entité est à assurer. Or, c’est déjà le rôle de l’identifiant unique (clé privé) de l’objet entité.

Je serais bien tenté de penser que pour Nebule, l’aspect globale est le moins « nécessaire ». Quoique l’aspect user friendly peut être dévolu à une autre fonction, dans ce cas l’annuaire s’assure juste de faire le lien entre entité et ressources physiques (réseau). A voir…

Continuer la lecture de Annuaires

Vote électronique

Je ne suis pas très familiarisé avec les problèmes légaux liés au vote électronique, donc sans le petit bout de papier. Mais il semble que les polémiques actuelles sur les équipements testés tiennent surtout à la façon dont ceux-ci sont conçus.
Et surtout, les critiques tournent autour de l’utilisation de logiciels fermés, donc dont le fonctionnement ne peut être vérifié par tout citoyen. Comment peut-on être sûr que la machine de plante pas, comptabilise bien les votes, et surtout les comptabilise bien à la bonne personne? Voir, comment vérifier que personne n’a faussé le score (nécessite un re-décomptage)?

Continuer la lecture de Vote électronique

Réflexion – stabilité de l’identifiant

Je bouquine un livre en ce moment :
« Gestion des identités » de OCTO Technology, ISBN:978-2-9525895-1-2, avril 2007, www.octo.com

Au cours du développement de l’Identifiant Unique Personnel (IUP), il est noté que trois contraintes doivent absolument être respectées.
L’IUP doit être :

  1. unique (strictement lié à une personne) ;
  2. inaliénable (ne peut être réattribué à une autre personne) ;
  3. stable (dans le temps).

En référençant un utilisateur (une entité) par un bi-clé cryptographique, respecte-t-on ces contraintes?

Continuer la lecture de Réflexion – stabilité de l’identifiant

Premier arrivé premier servi

On commence à voir des sites communautaires bien fait qui vous identifient (différente de l’authentification) sur quelque chose que vous possédez, par exemple une adresse email. Le nom et toute autre caractéristique est à votre (presque) libre discrétion. Continuer la lecture de Premier arrivé premier servi