Commit 7537ca72 authored by sbalev's avatar sbalev

Premier brouillon de l'article couleurs sur la plage

parent be082205
---
layout: document-with-math-support
title: Couleurs sur la plage
authors: Stefan
image: /images/projets/cabanes/test_peinture.jpg
---
{% include brouillon.html %}
**Article pour le livre « Couleurs sur la plage » en cours de rédaction**
## Contexte
* Faironnerie ABC : qui sommes nous ?
* FabLab (LITIS, BU, ESADHaR, ...)
* Groupe de bidouilleurs curieux et passionnés par informatique, électronique, fabrication numérique etc.
* Lieu de partage d'outils, idées, compétences, crêpes, etc.
* « Localisation physique de l'utopie » lol !
* Comment on a mis les pieds dedans ?
* Volonté de KM de travailler avec des acteurs locaux
* C'est PY qui nous a branché et on a tout de suite adhéré
## Modèle
Au fil de nombreux échanges avec Karel Martens, nous nous sommes petit à petit imprégnés de sa vision du projet. Nous avons accepté la tâche de développer un algorithme permettant de colorier les cabanes, ainsi que quelques outils de visualisation et génération automatique de documentation.
Chaque face de cabane se voit attribuer deux bandes verticales de couleur et de largeur spécifiques. Les 10 couleurs et les 6 largeurs choisis par l'artiste donnent 60 bandes possibles. Même les faces invisibles et les cabanes qui ne participent pas au projet ont une couleur virtuelle dans notre modèle.
Pour réfléchir et communiquer sur le modèle nous avons très vite adopté une représentation aplatie en deux dimensions.
*Image avec légende : Représentation d'une cabane avec 8 bandes numérotées. À noter que les informaticiens comptent toujours à partir de 0.*
Le choix des bandes sur chaque cabane est soumis à quelques contraintes. Tout d'abord les 8 bandes doivent utiliser 8 couleurs différentes. Étant donné que nous disposons de seulement 6 largeurs pour 8 bandes, il y aura forcement des bandes de la même largeur. Pour minimiser ces répétitions, chacune des 6 largeurs sera utilisée une ou deux fois par cabane. Cela signifie qu'il y aura 4 largeurs qui vont apparaître une fois et 2 largeurs qui vont apparaître deux fois. En plus, ces doublons ne doivent pas être sur la même face, c'est-à-dire les paires de bandes 0-1, 2-3, 4-5 et 6-7 ne doivent pas avoir la même largeur.
### Un peu de combinatoire
Une des premières questions dans les discussions était : Est-il possible de faire en sorte que chaque cabane soit unique tout en respectant les contraintes de coloration ci-dessus ? Avec quelques arguments simples on se rend compte que oui, et très largement.
On peut choisir n'importe laquelle parmi les 10 couleurs pour la bande 0. Quand la couleur de la bande 0 est fixée, il nous reste 9 choix pour la bande 1 et ainsi de suite. On a donc
$$10 \times 9 \ldots \times 4 \times 3 = 1 814 400$$
choix de couleurs possibles pour une cabane. Pour les largeurs le raisonnement est légèrement plus compliqué, mais il n'est pas très difficile de voir qu'il y a 112 320 choix de largeurs. En combinant chaque choix de couleurs avec chaque choix de largeurs on obtient quelques 203 milliards de cabanes uniques ! Si on mettait toutes ces cabanes l'une à coté de l'autre sans laisser de la place pour le passage, elles couvriront une surface équivalente à celle d'Inde. Et si on les empilait l'une sur l'autre la hauteur de la tour ainsi obtenue sera égale à 2,7 fois la distance de la Terre au Soleil. Nous avons donc beaucoup de choix pour nos 713 cabanes.
Pour introduire encore plus de diversité, nous avons imposé une contrainte supplémentaire : deux bandes visibles côte à côte ne doivent pas avoir la même couleur ni la même largeur.
*Image avec explications ici*
Cela réduit le nombre de choix possibles mais on reste dans le même ordre de grandeur.
### Un message caché
Nous aurions pu nous contenter d'une coloration aléatoire pour un résultat visuel très similaire au rendu final. Mais nous sommes allés plus loin surtout pour nous amuser mais aussi pour saisir l'occasion de raconter une histoire. Nous avons donc décidé de cacher un message que seul un œil averti peut voir, tout en gardant l'apparence aléatoire de la coloration. Et à l'occasion des 500 ans du Havre, quoi de mieux comme message que le décret de fondation du port signé par François I<sup>er</sup>.
Mais la « traduction » de ce texte en séquence de bandes colorées pose deux problèmes. Tout d'abord il est trop court. Pour s'en rendre compte, mesurons l'information en bits. Un *bit* est est la plus petite pièce d'information qui peut prendre deux valeurs souvent notées par 0 et 1. En répondant par « oui » ou par « non » à une question ou en annonçant le résultat d'un tir à pile ou face, on transmet un bit d'information. Avec 2 bits nous avons 4 valeurs possibles : 00, 01, 10 et 11. Avec 3 bits les valeurs possibles sont 8 et ainsi de suite. Avec \\(n\\) bits on peut représenter \\(2^n\\) valeurs différentes. En décrivant une bande on transmet un peu moins de 6 bits d'information car il y a 60 bandes possibles (10 couleurs \\(\times\\) 6 largeurs) et c'est un peu moins de \\(2^6=64\\).
Nous avons vu qu'il y a environ 200 milliards de combinaisons de couleurs et de largeurs pour chaque cabane. Cela signifie que pour décrire une cabane nous avons besoin de 38 bits (\\(2^{38}\\) est proche de 200 milliards). Cela donne environ 27 000 bits pour toutes les 713 cabanes. De l'autre côte le décret de François I<sup>er</sup> fait 3354 caractères. En comptant les lettres, les espaces et les caractères de ponctuation nous avons environ \\(2^5=32\\) caractères différents. Un caractère porte donc 5 bits d'information ou environ 17 000 bits pour le document entier ce qui est inférieur aux 27 000 bits nécessaires pour décrire toutes les cabanes.
Même si on avait un texte plus long, un deuxième problème se pose. Certaines lettres comme 'e', 'a' et 'i' sont beaucoup plus fréquentes que d'autres comme 'k', 'w' et 'z'. Cela introduira forcement un biais et on verra certaines bandes beaucoup plus souvent que d'autres. On perdra l'apparence aléatoire de la coloration.
### La cryptographie vient au secours
Pour contourner ces deux problèmes, nous avons fait appel aux *fonctions de hachage*, une technique souvent utilisée en informatique et en cryptographie. Une fonction de hachage est une fonction particulière qui, à partir d'une donnée fournie à l'entrée, calcule une *empreinte* permettant d'identifier la donnée initiale. Ces fonctions ont des propriétés spécifiques selon les applications.
Une application typique en informatique est la recherche rapide de données. Imaginons un dictionnaire dans lequel les mots ne sont pas classés par ordre alphabétiqe et qui a plus de pages que d'articles. Une fonction de hachage calcule un numéro de page à partir d'un mot. Il est possible d'avoir des *collisions* (même numéro de page pour deux mots différents) mais notre fonction est conçue en sorte que ces collisions soient rares et on n'aura pas plus de 2-3 mots par page. Quand on veut chercher la définition d'un mot, on applique la fonction de hachage sur le mot et elle nous donne rapidement le numéro de la page à laquelle il faut chercher.
*Les fonctions de hachage cryptographiques* possédant quelques propriétés spécifiques :
* il est très difficile de trouver le message initial à partir de son empreinte ;
* il est très difficile de trouver deux messages avec la même empreinte ;
* le moindre changement dans un message change complètement son empreinte.
Par très difficile on entend pratiquement impossible. La seule façon connue d'attaquer ces fonctions est la force brute : générer tous les messages possibles, calculer leur empreintes et comparer avec l'empreinte donnée, ce qui demande un temps de calcul énorme se mesurant en années, voire en siècles.
Une application typique de ces fonctions est l'authentification par mot de passe. Pour des raisons de sécurité on ne stocke jamais les mots de passe en clair, on stocke leurs empreintes à la place. Pour identifier un utilisateur, l'ordinateur calcule l'empreinte du mot de passe qu'il lui fournit et la compare avec l'empreinte stockée. Les propriétés des fonctions d'hachage rendent l'accès au système très difficile même pour un individu mal intentionné qui a réussi à voler les empreintes stockées.
Voici un exemple de deux messages et leurs empreintes :
```
"Le Havre 2017" -> 309c191c9d7206ddba9d2c6e1f418511
"Le Havre 2018" -> 0e767b20a48ac9c3c47b757484959c7c
```
Dans cet exemple on utilise la fonction de hachage MD5 qui produit une empreinte de 128 bits à partir d'un message de taille quelconque. L'empreinte est écrite en *hexadécimal* : les bits sont regroupés quatre par quatre et chaque quadruplet est représenté par un chiffre (0-9) ou une lettre (a-f). On voit qu'en changeant un seul caractère dans le message on obtient une empreinte complètement différente. Cette différence est due à ce qu'on appelle *effet avalanche*, les changement se propagent rapidement pendant le calcul de l'empreinte et à la fin chaque bit de l'empreinte dépend de chaque bit du message.
Ce qui nous intéresse dans les fonctions de hachage cryptographiques et leur capacité de produire des empreintes d'apparence aléatoire et le lien invisible à l'œil nu mais bien existant entre le message et son empreinte.
Il nous reste un dernier petit problème à régler. Les empreintes produites par les fonctions de hachage ont une taille fixe, typiquement entre 128 et 512 bits, mais comme nous avons pu le constater, la description d'une cabane nécessite 38 bits. Même en utilisant SHA-512 qui, comme son nom l'indique, produit une empreinte de 512 bits, c'est suffisant juste pour 13 cabanes. La solution est de découper le texte en petits morceaux de quelques mots et d'associer chaque morceau à un groupe de cabanes. Les plus petits rangées auront un seul morceau de texte associé, les rangées de plus de 13 cabanes auront 2, voire 3 ou 4 morceaux associés en fonction du nombre de cabanes. On va calculer l'empreinte de chaque morceau et utiliser celle-ci pour déduire la coloration des cabanes associées. Ainsi, en partant de Saint Adresse, on peut « lire » l'empreinte du décret de François I<sup>er</sup>.
*Image avec un groupe (E6) le morceau utilisé et le hash*
## Conclusion
Un observateur se promenant sur la plage verra une belle symphonie de couleurs d'aspect aléatoire sans aucun motif particulier apparent. En effet, en comptant les différents types de bandes utilisées, on se rend compte que les couleurs et les largeurs apparaissent avec des fréquences très proches. En calculant la quantité de peinture nécessaire, nous avons constaté que les surfaces couvertes par les différentes couleurs sont très proches, ce qui indique également une distribution uniforme des bandes.
Si notre promeneur connaît notre modèle, mais pas le texte qu'on a utilisé, il sera impossible pour lui de deviner ce texte. Et s'il connaît tout, il sera en mesure de calculer l'empreinte du texte et de vérifier si les consignes de peinture ont été bien respectés.
L'unicité des cabanes n'est pas inclue explicitement dans le modèle. Nous avons compté sur le hasard et sur le très grand nombre de possibilités. Au final, toutes les cabanes sont uniques et même plus, aucune paire de cabanes ne partage le même ensemble de bandes (même sans prendre en compte leur ordre).
Travailler sur ce projet fut une expérience très intéressante et enrichissante pour les faironniers. Nous voudrions remercier Karel pour sa disponibilité et sa générosité qu'il a montré lors de nos nombreux échanges. Nous sommes très contents d'avoir mis nos connaissances scientifiques au service de l'art et très fiers d'avoir participé dans ce beau projet.
## Liens
* [Le site web de la Faironnerie ABC](https://faironnerie-abc.xyz/)
* [Les codes informatiques développés en cours du projet](https://github.com/faironnerie-abc/cabanes-2k17)
* [Une visualisation en 3D des cabanes](http://faironnerie-abc.github.io/cabanes-2k17/)
* [La documentation à destination des peintres](http://faironnerie-abc.github.io/cabanes-2k17/PaintDoc.pdf)
---
layout: default
title: Science at Art
subtitle: La science au service de l'art
---
{% include documentation_index.html data=site.data.doc-art %}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment