Chiffrement et cryptographie
Ce que j'aimerais, quand on m'envoie un message (chiffré ou non), c'est être sûr d'identifier l'auteur. Comme dans les lettres de cachet pour être embastillé : le sceau du roi en garantissait la provenance..
C'est un raffinement d'utilisation des clés de chiffrement.
Il existe également un cas particulier de sceau : lorsque l'on veut être sûr que la puce électronique utilisée est une vraie. Dans ce cas on utilise ce qu'on appelle des PUF, un élément impossible à cloner (impossible ? enfin, c'est l'objectif).
Sceau
La solution est simple dans le cas d'une clé asymétrique : l'expéditeur va calculer un haché du message, haché qui sera chiffré avec sa clé secrète (que seul l'expéditeur connait, par définition), résultant dans un digest, une empreinte, un sceau… peu importe le nom que vous lui donnez, qui sera joint au message.
Le récipiendaire pourra lire le message, recalculer le haché et déchiffrer la signature reçue en utilisant la clé publique de l'expéditeur : seule cette clé publique donnera un résultat identique.
De plus, le récipiendaire sera sûr que le message n'a pas été modifié : il est intègre. Et non répudiable = personne d'autre (plus exactement aucune autre clé secrète) n'a pu signer ce document ainsi.
C'est évidemment stupide de chiffrer un message avec une clé privée, si l'univers peut le déchiffrer avec la clé publique : bonjour la confidentialité. Mais dans ce cas précis, c'est bien utile. Seul le possesseur de la clé privée peut faire ça.
Objets physiques
Cette histoire de sceau est également utile pour les objets physiques, histoire de prouver que vous avez une version authentique de votre objet.
Le problème n'est pas si évident :
- Dans tous les cas, il faudra qu'une autorité de confiance authentifie l'objet. Dans le cas du sceau du roi, vous faisiez confiance au fait que seul le roi pouvait réaliser le sceau en question, qu'il n'existait pas de copie (encore fallait-il que vous connaissiez le sceau en question...)
- Et il faudra qu'un lien fort existe entre l'objet et le sceau qui prouvera son authenticité.
Il existe pas mal de propositions et produits qui tentent de réaliser cela, souvent des objets physiques quasiment impossibles à copier, basés sur des motifs aléatoires. Une vieille proposition dans laquelle j'avais été impliquée fut le code à bulles, commercialisé par Prooftag.
On se retrouve alors en face d'un problème similaire à la biométrie :
- il faut enregistrer le sceau dans une base de données (de confiance !)
- afin de pouvoir le "matcher" plus tard, c'est-à-dire vérifier que c'est le bon
Le moyen le plus trivial dans le cas de Prooftag consiste à demander à l'utilisateur de consulter un site web (de confiance !), en donnant un identifiant, et vous ferez la comparaison vous-même avec vos petits yeux en regardant votre original et la photo enregistrée.
Vous noterez que vous aurez alors vérifié le sceau, mais pas l'objet. Aussi faut-il que le sceau soit solidement ancré à l'objet...
PUF
Ce problème de sceau existe encore plus crucialement pour les puces électroniques.
En effet, il faut alors que la puce prouve qu'elle est une vraie puce, dûment accréditée. Il faut donc ajouter dans la puce un élément unique, mais qui soit différent pour chaque copie de la puce. Et pas question d'ajouter un simple numéro de série à la fabrication (ce qui est déjà un bon début), car c'est trop facilement copiable !
On utilise alors ce qu'on appelle un PUF pour "Physical Unclonable Fonction". Il s'agit d'une opération permettant de fabriquer un nombre :
- totalement aléatoire dans le sens où il est différent et imprédictible pour chaque copie de la puce
- MAIS qui sera toujours le même (dans la durée) pour une puce particulière (forcément, sinon on ne risque pas de la reconnaitre)
Il s'agit d'une sorte de numéro de série, mais imprédictible même par le fabricant. Il faudra l'enregistrer afin de pouvoir vérifier son identité plus tard.
MAIS attention, il est important que l'on ne puisse pas imiter une puce particulière !
Et oui, ce serait très con s'il suffisait de prendre une puce, de lire son code, puis de le dupliquer à l'envi.
On va donc cacher autant que possible ce code, ainsi que le capteur qui permet de le lire. Et de plus, on va ajouter la panoplie de fonction de dérivation de clé vue page précédente. Ceci interdira de remonter à la source, à la suite de bits aléatoires unique inscrite dans la puce. C'est une sorte de mot de passe.
Qu'on ne confondra pas avec le mécanisme qui s'appelle aussi challenge-response qui sert à lire le nombre aléatoire.
Il faut aussi évidemment vérifier l'intégrité de la puce électronique, cela va de soi. Mais c'est mieux de le dire. Et ces objets sont également soumis aux problèmes d'attaques, side-channel par exemple.