Empreinte graphique d'une clé publique

J’ai bidouillé un petit bout de code en js pour avoir un rendu graphique en couleur correspondant à une clé publique.
L’idée est d’avoir un moyen plus rapide pour vérifier que notre clé publique est bien la nôtre.

pour le moment j’ai un prototype tout bête qui génère des couleurs à partir de la clé publique (acutellement 8 couleurs hexa)


je me disais qu’on pourrait avoir une sorte d’avatar avec une certaine forme à définir parmi un jeu de formes géométriques, qui utilise ces couleurs.
un peu comme les logos des distributions linux, ou les avatars gravatar aléatoires.
comme ça on aurait non seulement des couleurs à reconnaître mais aussi une forme.

3 Likes

Imaginons qu’on utilise ce système en affichant conjointement la clé publique et l’empreinte graphique, et que l’utilisateur retient sans problème les A premiers caractères de la clé publique, ainsi que les couleurs de B carrés de l’empreinte, avec une résolution de C couleurs par carré (ne reconnaît pas plus de C nuances différentes).

Il faut que l’empreinte aie subi une diffusion par rapport à la clé publique (donc que ce soit un hash).

Le nombre d’essais à partir duquel il est probable qu’un adversaire trouve une collision est :
sqrt(58^A × C^B)

Avec A=3, B=4 et C=15, ça donne environ 100 000. C’est très peu. Il est donc facile de trouver d’autres clés publiques ayant une empreinte très ressemblante. Du coup il faudrait l’utiliser en plus d’autres empreintes par exemple la génération de phrases ?


Suggestion de design : on voit mal le dernier carré, qui est bleu. Ça serait plus visible avec une fine bordure blanche autour.

3 Likes

Pourquoi pas utiliser ça :

1 Like

oui avec un coup de hash on devrait obtenir un résultat très différent avec un seul caractère changeant.
ton estimation de 100000 possibilités prend en compte la diffusion ou non ?

ah tiens un autre topic sur le sujet X)

on pourrait choisir la lib qui propose le plus de combinaisons possible pour un rendu graphique le plus varié qui soit. (le rendu en carré noir et blanc permet de voir très bien une modif très subtile)
ou bien se lancer dans un dizayne maison que l’on pourrait définir ici.

Oui, j’ai pris en compte une diffusion parfaite entre les deux empreintes, pour être sûr que, par exemple, le premier carré ne représente pas les 8 premiers octets de la clé publique (ce qui annulerait le bénéfice de se souvenir des carrés ET des caractères).

Tout dépend de la complexité du calcul donnant cette empreinte. Il vaut mieux que le calcul soit très lent. Si l’attaquant a, disons arbitrairement, 1 THash/s, il mettra 6 mois à collisionner 16 octets d’entropie, 150 ans pour 18 octets, 38 000 ans pour 20 octets.

Si on fixe le seuil à 18 octets, on peut les représenter par 12 mots parmi un dictionnaire de 4096 mots. Pour faire plus simple à retenir, on peut générer une phrase plus longue, utilisant des n-grammes et ayant un sens.

Il faudrait arriver à calculer l’entropie d’un tableau (de peinture) pouvant contenir plein d’éléments différents, à différents endroits, avec des décors variés…

2 Likes