Flouter un QR code sur une photo : ce qui marche vraiment — featured illustration
Sécurité

Flouter un QR code sur une photo : ce qui marche vraiment

6 min de lecture
Créer un QR code

Au moment de partir pour un voyage attendu depuis des mois, quelqu'un publie la photo de sa carte d'embarquement. Le nom est lisible, le numéro de vol aussi, et le code dans le coin a été flouté d'un coup de doigt. Il semble caché, et la personne pense que l'affaire est réglée.

Pour un décodeur, cette bavure n'est souvent que du bruit qu'il a été conçu pour traverser.

Ce que les gens publient en réalité

Le code est rarement décoratif. Chacun de ces cas transporte quelque chose de précis.

Un code de carte d'embarquement contient des données de réservation qui, associées à un nom de famille, peuvent suffire à accéder au dossier. Un code de billet contient un jeton que le contrôle valide, et un jeton utilisé par quelqu'un d'autre avant vous est un jeton qui cesse de fonctionner pour vous. Un code de demande de paiement contient des identifiants de compte. Un code Wi-Fi contient le nom du réseau et le mot de passe en texte clairement lisible, sans aucun chiffrement dans la charge utile.

Le pire cas est un code de configuration à double facteur. Ce carré contient le secret partagé qui sert à générer vos codes à usage unique. Quiconque le scanne peut générer les mêmes codes que vous, indéfiniment, depuis son propre appareil, et rien dans votre compte ne paraîtra anormal jusqu'à ce que ça le soit.

Rien de tout cela n'est un scénario exotique. Ces images circulent en permanence dans les groupes de discussion et les fils sociaux, et les QR codes évoluent déjà dans un environnement où les codes falsifiés et remplacés sont une catégorie de fraude qui fonctionne. Partez du principe que tout ce qui est scannable dans une image publique sera scanné par quelqu'un.

La correction d'erreurs joue contre vous

Les QR codes ont été conçus pour le monde physique : imprimés sur des cartons qui s'éraflent, collés sur des vitres arrosées par la pluie, pliés au fond des poches. Pour survivre à cela, le format intègre de la redondance dans chaque symbole grâce à la correction d'erreurs Reed-Solomon, en quatre niveaux au choix.

Au niveau le plus élevé, un symbole peut perdre environ trente pour cent de lui-même et se décoder correctement quand même. C'est pourquoi un logo peut trôner au milieu d'un code marketing sans le casser. La tolérance aux dégâts est une caractéristique, délibérément conçue, et tous les décodeurs l'implémentent.

Appliquez maintenant cela à votre flou. Masquer un coin, ou un quart de la surface, ou le centre, entre confortablement dans ce dont le format a été bâti pour se remettre. Le code n'est pas partiellement caché. C'est un code légèrement abîmé, ce qui est exactement ce qu'il a été conçu pour être. Notre décryptage des niveaux de correction d'erreurs montre la redondance apportée par chaque niveau.

Le flou, la pixellisation et l'autocollant emoji

Chacune des approches populaires échoue pour une raison qui lui est propre.

Le flou gaussien préserve la structure à grande échelle. Les zones sombres restent sombres, les zones claires restent claires, et les frontières sont toujours là où elles étaient. Les décodeurs seuillent une image en noir et blanc avant de la lire, donc un flou léger peut traverser cette étape presque intact. Un flou lourd détruit davantage, mais "assez lourd" n'est pas quelque chose que l'œil peut juger.

La pixellisation remplace des zones par des couleurs moyennes. Si les blocs sont plus petits que les modules du code, vous avez pour l'essentiel préservé le motif. S'ils sont plus grands, des données sont perdues, mais les carrés de repérage, les lignes de synchronisation et la géométrie d'ensemble survivent le plus souvent, et la correction d'erreurs comble le trou.

Un emoji ou un autocollant sur le milieu est précisément une superposition de logo. C'est le cas prévu. Les équipes marketing le font exprès parce que cela ne casse pas le code.

Une règle remplace tout ce jugement : si une partie quelconque du motif d'origine reste visible, considérez que le code est récupérable.

Ce qui retire réellement un code d'une image

Deux techniques fonctionnent, et toutes deux sont ennuyeuses.

  • Tracez un rectangle plein, totalement opaque, d'une seule couleur unie, sur l'intégralité du symbole. Pas une superposition semi-transparente, pas un surlignage arrondi, pas un effet marqueur à bord doux.
  • Prolongez ce rectangle au-delà des bords du code, zone de silence blanche comprise. Chaque carré d'angle doit avoir disparu. Une couverture partielle des motifs de repérage reste une couverture partielle.
  • Ou recadrez pour sortir le code du champ, ce qui est plus rapide et ne laisse rien à discuter.
  • Passez le reste de l'image en revue à la recherche d'une seconde copie. Un code reflété dans une vitre, visible sur un écran d'ordinateur à l'arrière-plan, ou imprimé sur la feuille posée à côté de celle que vous avez couverte, réduit tout l'exercice à néant.

Si l'image n'existe que pour montrer à un ami où vous êtes assis, demandez-vous si la carte doit vraiment être dans le cadre. La meilleure occultation reste la photo prise sous un autre angle.

Aplatissez le fichier, puis testez le fichier

Couvrir le code dans un éditeur n'est pas la même chose que le couvrir dans le fichier que vous envoyez.

Beaucoup d'applications photo travaillent de façon non destructive. L'original reste intact et les retouches sont enregistrées comme des instructions, annulables d'une pression et parfois emportées avec le fichier partagé. Exportez une copie aplatie plutôt que de partager l'original retouché, et vérifiez que l'export est bien ce que vous croyez.

Les métadonnées sont le second piège. Un fichier image peut porter une vignette intégrée générée avant votre retouche, et certains outils ne la régénèrent pas. Supprimez les métadonnées à l'export quand l'option existe. Il y a aussi eu des cas documentés d'outils d'édition de captures écrivant l'image retouchée par-dessus le fichier d'origine sans tronquer les octets restants, laissant la version antérieure récupérable dans ce qui ressemblait à un fichier fini. Ces bogues précis sont corrigés, mais la leçon dure : faites confiance au fichier exporté, pas à l'aperçu de l'éditeur.

Testez ensuite correctement. Prenez le fichier que vous êtes sur le point de publier, pas la version sur votre plan de travail, et passez-le dans un décodeur. Téléversez-le dans un outil qui va lire un code depuis une image. Si quoi que ce soit se décode, retournez couvrir davantage. Cela prend quinze secondes et c'est la seule étape qui vérifie réellement le résultat. Les habitudes plus larges pour manipuler les codes sans risque sont rassemblées dans la sécurité des QR codes.

Et en France ?

En France, les codes les plus sensibles à publier par mégarde ne sont pas toujours des QR codes. Sur un avis d'imposition, une facture d'énergie ou un justificatif de domicile, le carré en bas de page est souvent un 2D-Doc : il contient en clair, et signées, les données essentielles du document, comme le nom, l'adresse ou le revenu fiscal de référence.

Photographier un document pour montrer une information à un proche et publier l'image, c'est donc potentiellement diffuser ces données. Avant de partager la photo d'un document officiel, recouvrez entièrement le code d'un rectangle opaque, pas d'un flou, et vérifiez qu'aucune autre partie du document n'expose d'informations personnelles.

La même physique, l'objectif inverse

La situation est d'ailleurs l'inverse d'un problème plus courant. D'habitude, on cherche à faire lire un code abîmé, flou ou mal imprimé : c'est le cas du QR code flou, où la solution consiste à donner plus d'informations au décodeur, avec une meilleure lumière, une source plus nette et un angle plus droit.

L'occultation est la même propriété vue de l'autre côté. La tolérance qui rend un code lisible à travers une tache de café est celle qui le rend lisible à travers votre flou. La combattre avec une brosse douce, c'est combattre un système conçu pour gagner ce combat.

Ouvrez la capture que vous alliez publier, posez un rectangle noir plein sur le code et sa marge, exportez une copie aplatie, et téléversez cette copie dans un décodeur avant qu'elle ne parte où que ce soit.

Partager cet article