Avancement

Je galère avec la vérification de la signature des liens. Ces liens sont valides puisqu’ils ont été générés et vérifiés via l’implémentation de référence de nebule en bash.
En fait, je n’ai pas encore trouvé comment transmettre les différentes données à la fonction openssl_verify, si c’est bien celle qui doit être utilisée. Les différentes erreurs qui remontent ne sont pas assez explicites. Les exemples sur le web ne m’aident pas beaucoup, tout le monde copie-colle la documentation du site de php. Et l’exemple ne marche pas.

Il y a aussi un problème de gestion de sha2 par openssl dans php. La variable OPENSSL_ALGO_SHA256 n’est pas reconnu pour php en version inférieur à la 5.4.8 (cf lien). Par défaut, c’est sha1. Par exemple, sous Ubuntu Linux 12.04, la LTS donc, on est en 5.3.10 (cf lien). Il faut passer en 13.04 pour avoir une version suffisante… alors que cela fait maintenant quelques années que l’on préconise l’utilisation de sha2 au lieu de sha1 dans tout nouveau projet!
Pour Debian Linux, ce n’est pas mieux, il faut passer en unstable pour avoir une version suffisante (cf lien). La nouvelle Wheezy ne nous aidera pas.

Avancement

Le déverrouillage (connexion) d’une entité est maintenant fonctionnel. Le mot de passe est vérifié sur la clé privé. Si la clé privée ne peut être lu, la connexion échoue.

Il va maintenant être possible de créer des liens directement depuis l’interface de navigation. Et à terme, il sera possible de déchiffrer des objets.

Vérification de mot de passe de clé RSA

J’ai eu un peu de mal à vérifier si le mot de passe saisie dans sylabe pour déverrouiller une entité était le bon mot de passe.

Il semble y avoir un petit bugg de la fonction openssl_pkey_get_private. Lorsque l’on charge le fichier contenant la clé privée chiffrée et qu’on le passe à cette fonction, on a le code erreur suivant :

error:0906D06C:PEM routines:PEM_read_bio:no start line

En fait, il faut envoyer la concaténation de la clé publique puis de la clé privée…

Le code php qui fonctionne :

$publcert = file_get_contents("pub/o/$nebule_publ_entite");
$privcert = file_get_contents("pub/o/$nebule_priv_entite");
$cert = "$publcert$privcert";
$r = openssl_pkey_get_private($cert, $nebule_pass_entite);
if ( $r === false ) { return false; } else { return true; }

Ce serait bien si le message d’erreur était plus clair… comme dirait l’autre

Maintenant que je peux m’assurer si le mot de passe est bon, je peux essayer d’utiliser la clé RSA :-)

Avancement

Les changements ne sont pas très visibles sur l’interface, mais ça avance tout de même.

J’ai fait un peu d’optimisation de code afin d’accélérer l’affichage des objets, et surtout des liens. Gain qui m’a permit de faire un tri par date des liens à afficher.
Un code de lecture basique des liens avait été copié/collé partout (oui je sais c’est pas bien). Il faut remplacer ce bout de code par l’appelle à une fonction dédiée. Il en reste encore mais le principal est fait.

Et puis il fallait aussi sécuriser un minimum la lecture du contenu des objets qui sont affichés dans la page web. Il ne s’agirait pas de permettre une injection de code via un objet piégé.

Par contre, la crypto, ce n’est pas encore pour cette fois-ci…

Sur la vue d’affichage des liens, chaque lien est directement affiché en tout petit avant sa traduction. C’est vraiment petit, mais le lien est là :

Avancement

Ce week-end, le mode navigation à fait un bond. Maintenant, pour une nÅ“ud, il affiche sous forme d’arborescence les objets qui lui sont liés par des liens de type f.

Cependant, le test réalisé sur un nÅ“ud référençant un grand nombre d’images, cela générait une page web beaucoup trop grande… et faisait planter la modeste machine de test. Pour contourner ce problème, l’affichage des images à été désactivé dans l’arborescence ainsi générée. Plus tard, il faudra mettre en place un affichage des images mais en sélectionnant si possible par défaut une image dérivée de résolution limitée…

Le résultat peut être vu ici.

Cela permet aussi de voir que certaines choses ne devraient pas être intégrées de la même façon dans l’arborescence… et donc cela permet de tester en pratique les relations de dérivation entre objets.

Avancement

Dans les modes d’affichage, il y avait déjà la navigation, les liens, les objets, la connexion et le chargement. Certains était et sont toujours peu ou pas fonctionnels. La connexion est notamment pour l’instant purement simulée.

Ils y a maintenant de nouveaux modes. Ce sont les entités, les nœuds et la recherche.

Le mode entités permet de voir toutes les entités connues et inconnues mais référencées.
Le mode nœuds liste les objets marqués comme nœuds.
Et le mode recherche facilite la recherche sur le contenu des objets. Pour l’instant, la recherche se fait uniquement sur du contenu exacte et complet.

Le mode nœuds appelle à intégrer dans le mode navigation une représentation arborescente des objets attachés à un nœud. La définition des liaisons dans cette arborescence est en cours de réflexion du côté du blog nebule.

Les icônes glossy

Voici quelques icônes utilisées dans les pages web de sylabe :


Ces icônes ont été récupérées dans le répertoire /usr/share/icons/oxygen/ sous Linux. Elles sont sous licence LGPL (GNU Lesser General Public License).

Elles tranchent un peu avec le thème graphique global des pages sylabe. J’attends que Diana n’en redessine des nouvelles plus sobres :-)

Identification/authentification unique

Il y a une chose à implémenter rapidement, une chose assez facile à faire en fait. C’est de pouvoir se connecter sur une instance de sylabe avec une autre entité que celle qui héberge normalement l’instance de sylabe.

En clair, lorsque l’on consulte la page sylabe de son voisin (numériquement), on voit par défaut l’entité de son voisin ainsi que ses objets et liens publiques. Mais on voit aussi les entités qu’il connaît, et notamment la notre. Et si on se connectait avec une autre entité ?

Si la clé privée est publique (mais protégée par mot de passe), alors elle est disponible partout (si on connaît le mot de passe). Ainsi on obtient une authentification unifiée et universelle.

Mais est-ce vraiment nouveau ?
Non, on le faisait déjà avec des annuaires de sécurité (Active Directory, NDS, LDAP, etc…). Mais il n’y a ici rien à ajouter, pas de configuration, pas d’approbation, rien. Enfin si, juste connaître l’entité et ses clés RSA.

Par contre, si la clé privée est enfermée dans une puce cryptographique (type carte à puce par exemple), ça ne marchera pas sans disposer de la puce en question. L’utilisation à distance sur sylabe est donc impossible. Une solution serait de déporter côté poste utilisateur la logique de signature des liens via par exemple du javascript.