J’ai récemment eu l’occasion de vendre une de mes photos, dont j’avais fait tirer une petite série de cinq exemplaires numérotés et signés dans un laboratoire spécialisé en tirages d’art. Je ne l’avais pas vraiment prévu, car ça s’était passé au détour d’une conversation.
Cette vente était une petite source d’angoisse, car quand on vend une photo, il convient de fournir à l’acheteur un certificat d’authenticité, prouvant l’origine (et l’originalité) de l’œuvre achetée. Ce que je n’avais jamais fait avant.
Ces certificats d’authenticité sont généralement édités sur des papiers spéciaux, avec des encres spéciales, accompagnés de filigranes, hologrammes et autres mesures de sécurité pour en dissuader la falsification. Mais je n’avais pas du tout le temps pour faire éditer un certificat sous cette forme-là ; je n’avais qu’une soirée pour fournir à mon acheteur quelque chose de semblable. Heureusement, puisqu’il a des notions solides en cybersécurité, je savais que je pouvais improviser quelque chose avec rien d’autre que LaTeX, GPG, qrencode et ImageMagick.
Mais alors, comment créer ce certificat ?
En guise d’exemple, je vais utiliser la photo ci-dessous, que j’ai prise récemment :
Imaginons que j’aie fait tirer cette photo à dix exemplaires par mon
laboratoire de prédilection, puis que j’aie vendu l’exemplaire numéro 1 de
cette série. Je vais donc préparer un certificat d’authenticité qui reprend
les informations ci-dessous, que je sauvegarde par ailleurs dans un fichier
texte (appelons-le meta.txt
) :
Auteur: x0r
Titre: TGV 2N2-3UF (rame 820)
Date de la prise de vue: 15 février 2022
Numéro du tirage: 1/10
Format: 45 × 30 cm
Type d'impression: Piezography - Encres pigmentaires Epson UltraChrome™ HDR
Papier: Platine Fibre Rag 310 g/m² Canson
C’est une bonne idée d’ajouter, sur le certificat, une petite vignette de l’image en question. Je la prépare donc avec une résolution suffisante pour apparaître à environ 300 dpi sur la feuille :
% convert photo -quality 80 -resize 1000x thumb-photo.jpg
Avec tout ça, on a de quoi faire un certificat d’authenticité avec LaTeX ; je pourrais alors l’imprimer, la signer et m’arrêter là. Mais n’importe qui pourrait le falsifier, alors que faire ?
C’est là où GPG peut nous aider. Tout d’abord, je signe mon fichier meta.txt
avec GPG :
% gpg --clear-sign meta.txt
J’utilise l’option --clear-sign
afin de conserver le contenu de
meta.txt
lisible. Le fichier signé, meta.txt.asc
, ressemble à ceci :
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Auteur: x0r
Titre: TGV 2N2-3UF (rame 820)
Date de la prise de vue: 15 février 2022
Numéro du tirage: 1/10
Format: 45 × 30 cm
Type d'impression: Piezography - Encres pigmentaires Epson UltraChrome™ HDR
Papier: Platine Fibre Rag 310 g/m² Canson
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCgAdFiEE/JoAQPj3zjdYk5ClL0gWKnq2LYYFAmJ2ZvQACgkQL0gWKnq2
LYZ0RBAAwYLAjfHcz26d9FTJemxWGattypV6m7BReH9n9XDUSP8TR0n0fjgw5sf5
meoddDc5SyXZW8O9wZVYZygnFiZIo98TQCCkWfWgLc2wOPMNKZAT7s1c6kgcFIrU
wldKq0udGtF5psRYWd6pLjgjNFMzB8lk+SPM6zi8pS/9pJcNqrYTCTbB+Pdbbrm2
NJcLwIn6gCRNUtz51dLtWywszej9nmY1E00QqTzBaFzxisGX1S64jiOawprYcNHr
ysrUzKvWTg8ywC9h9g47lP5ZkN++ak87y9iqkojwfky5aVdsfC/S14wB5vADmUEg
9jIbVbG2YWaA9bFPvgw0vCPm/qLGhmQ9ARTHMrLJj6uBkoQQTh98EBvp0oyA38c0
qJNZSt6W5bD/MJyZsZ9HY/yRzpswNa0KLzYH5dFQ2QhmkhnFHJ6VwZTGMNefZFDn
qz058EAWDM3rq7beLz0ksAjImOn8s4dr3k7kA0ydUrqRANZsSl0cUlwKKn5j412v
YuvjCud9oBFtczFbz4K21VKrDlTPRL2q2rQpsX1UZyLezm4MfJTmYd1IEEJrkC/F
6t5xbnlcomAshQK9+3XI96Jog4CMTcSGZwux1VasbsCWmONh9aE6CRmxB3CZuD6x
NMNGcSHVnhH56hjlP/RYv5X9IzRoChh3e4+nvDQVYLRNweoRldk=
=yE6O
-----END PGP SIGNATURE-----
Puis, on en fait un code QR.
% qrencode -r meta.txt.asc -o meta_qr.png
L’ajout de la signature cryptographique multiplie par plus de quatre la taille de l’entrée : on passe de 249 à 1 131 octets. Mais on reste largement sous la limite permise par la spécification, car le résultat est un code QR version 24, de 113 × 113 pixels, alors que les codes QR les plus grands, appelés « version 40 », ont pour dimensions 177 × 177, soit presque 2,5 fois la surface d’une version 24.
Comme j’utilise XeLaTeX, il faut d’abord convertir cette image au format PDF :
% convert meta_qr.png meta_qr.pdf
Et ensuite, on peut l’embarquer dans le document. J’y ajoute un paragraphe décrivant l’utilité de cet énorme QR code, ainsi que l’empreinte de la clef publique ayant permis de signer les métadonnées.
Et voilà le résultat : un joli document avec toutes les informations à propos de ma photo vendue, avec une signature électronique qui protège contre la majorité des fraudes. Une fois imprimée, j’y ajoute juste une signature de ma propre main, en utilisant une encre indélébile.
En pratique, le code QR a besoin de faire au moins 6,4 cm de côté pour qu’il puisse être lu par un téléphone. Avec une imprimante à jet d’encre, les points du QR code peuvent donc avoir tendance à « baver » ; descendre en-dessous de cette taille risque de rendre ce code QR inexploitable.
Vérification de la signature
Une signature électronique n’aurait que peu d’intérêt s’il n’y avait aucune façon de la vérifier.
Avec un téléphone Android, c’est facile : il faut d’abord installer une application de scan de codes QR (j’utilise QR Scanner de SECUSO Research Group, mais si vous en connaissez d’autres, sans publicité, qui sont recommandables, je suis tout ouïe), puis OpenKeychain pour gérer la partie GPG.
Puis il faut importer ma clef publique dans l’application OpenKeychain (il n’est pas forcément nécessaire de créer des clefs GPG).
Ensuite, pour vérifier ma signature numérique, il faut procéder ainsi : scannez le QR code, sélectionnez l’icône « Partager », puis l’icône OpenKeyChain avec la légende « Déchiffrer… ». Vous devriez alors voir à l’écran l’indication que la signature est bonne.
Que se passe-t-il si j’essaye de falsifier le contenu du QR Code ? Ici, j’ai
changé le numéro du tirage de 1/10 à 1/30 dans meta.txt.asc
, puis j’ai
généré un nouveau code QR. Lorsque je le scanne, le changement est visible
dans le texte en clair… mais OpenKeychain m’affiche un gros avertissement,
indiquant que quelqu’un a modifié le texte.
Conclusion
Vous savez maintenant comment j’ai improvisé un certificat d’authenticité pour des tirages d’art que je ne pensais pas forcément vendre de façon organisée.
Bien entendu, si j’avais vraiment voulu vendre mes photos de façon habituelle (autrement dit, si j’avais pris le statut d’artiste-photographe par exemple), je me serais tourné vers des certificats d’authenticité édité par des services visant un public de photographes professionnels. Pour les acheteurs, vérifier un document comme celui-ci nécessite tout de même d’être familiarisé avec GPG, une compétence que je ne pourrais pas exiger d’acheteurs « lambda ».
Au moins, la seule façon réaliste de frauder serait de générer un document similaire, mais de tout signer avec une clef qui ne serait pas la mienne. Seule une personne avertie qui connaîtrait préalablement l’empreinte de ma vraie clef publique pourrait alors déceler le subterfuge. Mais cette méthode me donne, pour mon cas d’utilisation, un niveau de protection qui me semble tout à fait acceptable.
En fabriquant ces certificats d’authenticité, j’ai beaucoup pensé aux non-fungible tokens (NFT), la nouvelle mode du moment (et bien expliqués dans cet article). Je ne me suis pas intéressé de plus près à ce nouvel objet de spéculation, mais pourtant, la question se pose : aurais-je créé une sorte de « NFT physique » sans le savoir ?
Le contenu du fichier meta.txt.asc
tout seul ne suffirait pas pour qualifier
de NFT : j’y ai par exemple omis une empreinte (SHA-512 par exemple) du
fichier JPEG que j’ai fait tirer, car la miniature figurant sur le certificat
joue déjà ce rôle. Ce n’est donc pas meta.txt.asc
qui jouerait le rôle de
« NFT physique », mais bel et bien le document imprimé complet. Même si là
encore, ça se discute : cette feuille de papier ne rentrera dans aucune chaîne
de bloc et je ne peux pas non plus y attacher un contrat automatique stipulant
que je touche de l’argent à chaque revente. Mais là, comme ça, c’est déjà pas
mal.
Commentaires
Poster un commentaire
Poster un commentaire