Incoming transmission

Knod Box 0.4

Divulgâchage : Et si on récompensait les joueurs par des fragments de clés à collectionner ?

Je vous l’avais promis dans l’article précédent, la rétrocompatibilité n’a pas été assurée... Car pour cette nouvelle mouture des Knod Box, j’ai revu la liste des chunks et même leur signification.

Tout a commencé avec le problème des énigmes à étapes. Le scénario prévoit que vous résolviez une énigme, puis une autre et, chemin faisant, vous arriviez à destination. Le problème, c’est qu’avec le système actuel, ce n’est pas très ergonomique :

J’y ai alors vu l’opportunité d’implémenter et d’utiliser une méthode de résolution que j’avais mise de côté pour plus tard : la collecte de fragments. Et pour bien faire, j’en ai profité pour simplifier la mécanique de jeu en adaptant les chunks.

Secret partagé

Cette histoire de fragments à collectionner, en cryptographie, on appelle ça un secret partagé. La méthode de base utilise un XOR entre plusieurs clés de même taille et ressemble assez à la reconstruction des données en RAID 5.

Cette méthode est parfaite1 mais elle nécessite de récupérer l’intégralité des fragments. De mon côté, j’aurais préféré quelque chose qui permette d’en retrouver certains parmi tous ceux distribués dans la box.

Et ça tombe bien, la cryptographie moderne propose plusieurs algorithmes pour y arriver. Ils sont plus ou moins faciles à comprendre et à implémenter et j’ai jeté mon dévolu sur le Secret Partagé de Shamir.

L'idée de base, c'est de générer aléatoirement une courbe polynomiale qui passe par le secret puis de partager des points de la courbe. Lorsqu'on en a collectionné assez, on peut utiliser l'interpolation de Lagrange pour retrouver la courbe, et donc le secret. Petite subtilité, les calculs se font sur un corps fini, GF(28)GF(2^8) dans mon cas.

C’est amusant tout plein (et je vous ferai sûrement un article sur la question si ça vous intéresse), mais pour l'instant, sachez que les Knod Box peuvent maintenant embarquer des énigmes qui se résolvent en collectionnant des fragments éparpillés 🎉.

Nouvelle organisation des chunks

Avant l'introduction des fragments, chaque knod se débloquait avec une seule réponse et j'avais défini une « Suite de chiffrement » comme une liste de couples de monades (dérivation de la clé, déchiffrement). Ça avait une certaine élégance, mais ça n'est pas compatible avec des fragments.

Je n'étais pas non plus très convaincu par la présence des chunks ceRt et la répétition des chiffrements pour les ceNc et les knOd. Je suis donc retourné à la racine de ce que je voulais faire, à la manière de le formuler et j'ai simplifié la liste des chunks...

  1. knod : Ce sont les énigmes à résoudre, vous devez trouver la clé qui les débloque. Une fois ouverts, vous obtenez une récompense sous forme de chunks. J'ai donc fusionné les anciens ceNc avec les anciens knOd. Et il y a autant de types de knod que de façons de les ouvrir.
  2. kkey : Ce sont les clés et leur type correspond aux knods qu'elles ouvrent. Vous trouverez des clés cryptographiques X25519 (pour déchiffrer) et des clés Ed25519 (accompagnées de leur chaîne de certificats pour créer les badges) ainsi que des fragments (à collectionner pour ouvrir un knod).
  3. ksig : Les signatures des chunks qui les précèdent, c'est un renommage des csig pour la cohérence avec le reste.
  4. kbdg : Les badges, seule partie qui reste rétrocompatible.

J'ai aussi dû corriger le format des certificats. J'avais prévu un champ de bits pour les utilisations autorisées, en y mettant la délégation et la signature. Mais du coup, n'importe quelle clé Ed25519 qui peut générer un badge peut aussi signer des chunks et usurper les signatures des auteurs de knod box. J'ai donc réparti ces deux cas d'utilisation sur deux bits : la signature des badges garde l'ancien bit (pour la rétrocompatibilité des badges) et la signature des chunks utilise un nouveau bit.

Et après ?

Je pense que le format ne devrait plus vraiment changer. Je rajouterai sûrement de nouvelles fonctionnalités dans les prochaines versions, mais je pense que la rétrocompatibilité devrait pouvoir être assurée. Je reste en numérotation « 0 » le temps d'en être sûr.

En attendant, vous pouvez télécharger les nouvelles versions des boxes. Celle d'introduction n'a pas changé, vous y trouverez tout de même un nouveau badge « 100% » lorsque vous aurez résolu toutes les énigmes.

La trahison des PNGs.

Syracuse a aussi été mise à jour. J'ai ajouté quelques énigmes supplémentaires (dont une partie culturelle) et j'ai organisé l'ensemble entre un scénario principal et des quêtes annexes. Il y a donc un badge « 100% » pour les fous qui feront tout, et un badge « any% » pour ceux qui veulent juste jouer sans se prendre [trop] la tête. Dernier changement, les énigmes récompensent par des fragments pour vous permettre de les résoudre dans l'ordre que vous voulez.

4, 2, 1,...

Comme toujours, vous trouverez la spécification et l'appli en HTML+JS dans un zip embarqué dans chaque Knod Box. Le fichier reste polyglotte ; vous pouvez donc considérer ces Box comme des ZIP et en extraire la spec et l'appli (et l'utiliser pour résoudre n'importe quelle box en 0.4). Et comme promis, les badges restent rétrocompatibles.

Amusez-vous bien et n'hésitez pas à m'envoyer vos badges et vos commentaires !