Mathis Hammel Profile picture
Aug 11, 2021 43 tweets 12 min read Read on X
Cette semaine, #Apple a annoncé une nouvelle feature dans iOS 15 qui scannera l'album photo des utilisateurs d'iCloud à la recherche de contenus pédo-pornographiques.

J'ai étudié le protocole cryptographique sous-jacent, et je vous propose un #Thread de vulgarisation. ImageImage
Je me suis paluché la publication scientifique d'Apple, 32 pages de notation mathématique assez touffue que je vais me charger de simplifier. Première surprise, le papier est co-écrit par Dan Boneh, une pointure en cryptographie (membre émérite de l'IACR, prix Gödel, ...) Image
Comme je le rappelais en réaction à un titre d'article un peu trop clickbait, la détection se fait sur une liste de photos pré-établie pour limiter au maximum le risque de faux positifs.
Le protocole est bien construit, il s'appuie sur trois composants principaux qui assurent une protection de la vie privée, malgré cette intrusion assez directe dans les données perso. J'ai cependant identifié quelques problèmes sur lesquels je reviendrai en fin de thread.
N.B. : on ne se penchera pas sur le 2e mécanisme de protection de l'enfance annoncé par Apple, à savoir la détection de nudité dans les photos envoyées vers/depuis des appareils soumis au contrôle parental. Je n'ai pas la légitimité d'expert en vie privée pour cette analyse. Image
On va étudier dans trois mini-chapitres les composants du protocole d'Apple, qui ont chacun des propriétés très intéressantes.
I. NEURALHASH Image
NeuralHash est un algorithme de hachage d'images basé sur un réseau de neurones. Ici, pas question d'utiliser un hash cryptographique conventionnel comme SHA256, car il serait possible de contourner la détection en modifiant un seul bit de l'image. Image
Dans notre protocole, le réseau de neurones est entraîné pour "comprendre" la structure de l'information et donner le même hash à deux images visuellement identiques, tout en résistant aux transformations comme l'ajout de bruit, le recadrage, la compression, ... Image
Le réseau transforme une image en un vecteur de nombres. Le réseau est entraîné à partir d'images dérivées d'un ensemble d'images de base. Il produit des vecteurs proches si les deux images ont la même base, et éloigné sinon.

Très similaire à word2vec pour ceux qui connaissent : Image
Ce type de hachage existe déjà, avec notamment PhotoDNA de Microsoft (qui a d'ailleurs été créé en 2009 pour combattre l'exploitation des mineurs).

J'utilise aussi ce type de réseau de neurones dans un outil que je dévoilerai lors de ma prochaine conférence, à @_barbhack_ ! 😇 Image
Les NeuralHashs sont la base du système de détection proposé. Mais ils ne sont pas transmis directement à Apple pour comparaison avec la base de données d'images illégales, ce serait une entorse au chiffrement end-to-end d'iCloud.

On en reparle au chapitre III 😉
II. THRESHOLD SECRET SHARING Image
Le système de détection d'images pédo-pornographiques envoie à Apple des métadonnées sur les images détectées. En cas de faux positif, Apple pourrait accéder aux métadonnées correspondantes sans raison valable, et c'est pour cette raison qu'un seuil a été mis en place.
En dessous de N correspondances avec la base de données, un mécanisme cryptographique (que les initiés voient venir d'après son nom) empêche de lire les métadonnées. Le nombre N de correspondances nécessaires n'a pas été rendu public (je pense qu'il est entre 3 et 5).
Le principe sous-jacent au Threshold Secret Sharing ne date pas d'hier : en 1979, Adi Shamir (éminent cryptologue, la lettre S du cryptosystème RSA c'est lui) publie son "Secret Sharing Scheme" (SSS), qui permet de partager une donnée secrète de manière très élégante. Image
Le SSS permet de découper un nombre secret en plusieurs parts, de telle sorte que l'on peut reconstituer le secret d'origine seulement si l'on dispose d'au moins K parts (K est un paramètre choisi lors de la création des parts). On va prendre un petit exemple :
Quand je meurs, je veux que ma famille ait accès à mon compte Twitter pour continuer à liker les tweets de @plhery. Mais pas question de donner à chacun mon mdp dès maintenant ! Je peux donc créer des parts de mon mdp avec un seuil K=3, et j'en donne une à chacun de mes proches. Image
À tout moment, il suffira que 3 de mes proches (peu importe lesquels) mettent leurs parts en commun et ils pourront reconstituer le mdp. SSS est beaucoup plus fort que de donner à chacun quelques caractères du secret, car ici n'importe quelle combinaison de 3 parts fonctionne ! Image
Le système Threshold Secret Sharing fonctionne à peu près de la même manière : pour chaque correspondance avec la base de données d'images illégales, l'appareil fait remonter des métadonnées qui sont chiffrées à l'aide d'une clé générée par l'appareil de l'utilisateur. Image
Apple n'a initialement pas cette clé et ne peut donc déchiffrer aucune métadonnée. Par contre, avec chaque match remonté est aussi fourni un fragment SSS de la clé. Après N rapports remontés, Apple peut donc reconstituer la clé et déchiffrer les métadonnées associées à ceux-ci. Image
Un autre mécanisme permet aussi de cacher à Apple le nombre exact de matchs : des matchs "synthétiques" contenant des faux fragments de clés sont produits aléatoirement par tous les appareils, et Apple n'a aucun moyen de distinguer les vrais des faux avant d'en posséder N vrais.
III. PRIVATE SET INTERSECTION Image
Dans les deux précédents chapitres, on a étudié comment les images étaient comparées de manière fiable, et comment les matchs dans la base d'images étaient masqués avant d'avoir atteint un seuil. Mais le vrai coeur du protocole c'est PSI, ou Private Set Intersection.
Il y a plusieurs considérations à prendre en compte :
- Apple ne veut pas dévoiler la liste d'images recherchées (sûrement pour éviter les contournements)
- On ne doit pas divulguer à Apple la moindre info sur les images non-illégales d'un utilisateur, pas même leur NeuralHash
Ce problème semble impossible à résoudre : Apple et l'utilisateur ont chacun une liste de NeuralHashs et on cherche à savoir quels sont ceux qui sont en commun, sans que l'un divulgue à l'autre la moindre information sur ses propres NeuralHashs. Et pourtant, PSI le fait !
Apple commence par calculer les NeuralHashs des images qui l'intéressent, puis les place dans un tableau (spécifiquement une cuckoo table, pour éviter les collisions). L'index du NeuralHash dans le tableau est calculé à partir de sa valeur uniquement. Image
Ces NeuralHashs sont ensuite masqués (blinded) à l'aide d'une clé détenue par Apple, mais ils gardent leur index dans la table. Les autres index non utilisés sont remplis de hashs aléatoires masqués, pour ne pas révéler quels sont les index qui intéressent Apple. Image
Ce tableau est transmis aux appareils des utilisateurs. La première contrainte (ne pas dévoiler les images recherchées) est respectée, car l'utilisateur n'a aucun moyen de retrouver les NeuralHashs de la liste d'Apple sans posséder également la clé de masquage tenue secrète.
Pour établir les correspondances entre les photos de l'utilisateur et celles recherchées sans connaître la liste de ces dernières, l'utilisateur va en fait envoyer des informations sur TOUTES ses photos, mais Apple ne saura déchiffrer que celles qui correspondent à sa liste.
Chacune des photos va donc être traitée de la manière suivante : on calcule d'abord une clé de chiffrement basée à la fois sur le NeuralHash de l'image et sur le NeuralHash masqué à l'index associé (qui potentiellement ne correspondra pas, si l'image n'est pas dans la base). Image
Cette clé nous sert à chiffrer le duo de {métadonnées image + fragment de clé des métadonnées} dont on parlait au chapitre précédent sur le Threshold Secret Sharing. Ces infos chiffrées sont transmises au serveur d'Apple avec une sous-partie de la clé du tweet précédent. Image
Des propriétés super chouettes des courbes elliptiques permettent à Apple de reconstituer la clé à partir de la sous-partie qui lui est transmise, à condition que celle-ci ait bien été générée à partir d'un NeuralHash et de sa version masquée correspondante. Image
Ainsi, on s'assure de deux choses :
- Le message ne peut être déchiffré que si le NeuralHash fait aussi partie de la liste d'Apple
- Apple ne peut pas tricher en ajoutant un NeuralHash à sa liste a posteriori, car le hash masqué est pris dans la liste au moment du calcul de clé
Pour résumer, le protocole d'Apple est basé sur une sécurité à deux couches : un message ne peut être déchiffré que si l'image correspond à un hash recherché, et la clé permettant de déchiffrer les métadonnées de ces matchs n'est récupérée qu'après N correspondances avérées.
EPILOGUE Image
On peut cependant relever plusieurs risques opérationnels sur le protocole proposé par Apple.
La première attaque qui me vient à l'esprit est basée sur des attaques antagonistes contre NeuralHash. En effet, il est généralement simple de faire dire ce que l'on veut à un réseau de neurones avec un input malicieux bien calculé. Image
Il suffirait donc de forger des images d'apparence tout à fait inoffensive qui auraient le même NeuralHash que des images pédo-pornographiques recherchées par Apple, et de les envoyer à son ennemi juré pour déclencher une enquête à son encontre.
Second problème, bien plus important : seul Apple connaît les images qui composent sa base de données. Qui contrôle que ce sont effectivement des contenus pédo-pornographiques et non des images d'opposition politique ou de contenu LGBT (jugé illégal dans plusieurs pays) ?
Dans cette même veine, qui garantit que cette liste est la même pour tout le monde et qu'un gouvernement autoritaire ne peut pas forcer Apple à modifier sa liste sous peine de sanctions ?
À mon avis, il est vital d'avoir des observateurs tiers sur ce système, et il semblerait qu'Apple ne prévoit pas cette supervision externe. L'opacité de la liste de fichiers offre certes des avantages contre le contournement des filtres, mais c'est aussi un danger.
Pour conclure, la cryptographie du protocole PSI est effectivement un très bon système pour assurer la protection de l'enfance sans empiéter sur la vie privée (pour relativiser avec la censure de WeChat : citizenlab.ca/2020/05/we-cha…), mais il est imparfait et manque de garde-fous.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Mathis Hammel

Mathis Hammel Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @MathisHammel

Mar 29
THREAD - les manipulations illicites du classement lors de la compétition la plus chère d'Europe.

Cette semaine, l'équipe de l'European Cyber Cup a trafiqué arbitrairement son scoreboard pour favoriser certaines équipes qui lui faisaient pression. 1/14 Image
Je suis coach de 10 étudiant·es de @Guardia_School qui ont participé cette semaine aux épreuves de l'European Cyber Cup.

Cette compétition est organisée par le forum InCyber (anciennement FIC, qui a discrètement changé de nom à cause de quelques casseroles).
Le prix d'inscription n'est pas rendu public, mais en 2021 je me souviens que mon entreprise avait dû payer 10.000€ pour nous inscrire, sachant que le cash prize pour l'équipe gagnante est de 5.000€ 🙃 Image
Read 16 tweets
Feb 8
J'ai besoin de votre aide pour m'aider à entraîner l'équipe de France de cybersécurité !

Quelques détails ci-dessous, merci de partager au maximum 🙏
En janvier, j'ai eu l'honneur d'être nommé entraîneur des compétiteurs français en cybersécurité, pour la prestigieuse compétition WorldSkills qui opposera 65 pays cette année.
Contrairement aux excellentes compétitions FCSC/ECSC qui sont très orientées CTF, le challenge WorldSkills va plutôt demander des compétences métier, appliquées à des environnements réalistes.
Read 6 tweets
Nov 8, 2023
THREAD

Je me suis intéressé à la cybersécurité de Crush, l'appli de rencontres pour 10-21 ans qui fait beaucoup de bruit.

J'y ai découvert un réseau de sociétés fictives qui récolte activement les données de dizaines de milliers de mineur·es. Explications ⤵️ Capture de l'appli "Crush, trouve ton crush secret" sur le store iOS.
PARTIE 1. Le fonctionnement de l'appli

Crush est une appli dont le but est de découvrir ses admirateurs secrets au collège/lycée.

Elle a été renommée "Friendzy, sondages entre amis" depuis son bad buzz.
Le principe est simple : après avoir ajouté vos amis sur l'appli, vous répondez à des questions sur vos liens d'amitié.

Dans un autre onglet, vous pouvez savoir ce que les gens ont répondu sur vous, sans voir leur nom. Sondage "La discrétion est son superpouvoir" avec 4 choix parmi mes amis sur l'appli (j'ai masqué deux noms qui appartiennent potentiellement à des vraies personnes)
Read 24 tweets
Aug 1, 2023
Droite au Coeur est toujours en maintenance, mais j'ai réussi à contourner la fermeture de l'authentification donc j'ai toujours accès au site.

La vulnérabilité initiale a été corrigée, je peux donc légalement vous expliquer la pire faille de sécurité du monde. 🧵1/9
L'interface de Droite au Coeur, comme beaucoup de sites web depuis ~2010, est dynamique.

Cela signifie que votre navigateur va d'abord télécharger le code qui gère l'affichage de la page, mais sans télécharger le contenu.

Pendant qq secondes, la page ressemble en gros à ça : Image
C'est ce squelette de page qui va ensuite faire d'autres requêtes pour récupérer le contenu, ici les profils de dating.

Pour ça, l'interface va utiliser une API : c'est un programme hébergé côté serveur, qui va récupérer et formater les données qu'on lui demande. Image
Read 10 tweets
Jul 17, 2023
🧶THREAD - Un programme de 15 lignes de code Python arrive à rivaliser avec les meilleures intelligences artificielles !

Cette drôle de découverte vient d'être publiée par une équipe de chercheurs canadiens, et risque de bouleverser le monde du Machine Learning.

Explications ⤵️ "Qui gagne ?"  À gauche, un réseau de neurones ultra perfectionné avec 340 millions de paramètres  À droite, 15 lignes de Python
La classification de texte est l'un des domaines de recherche les plus actifs en intelligence artificielle : elle consiste à trier automatiquement des textes courts dans un ensemble de catégories pré-définies. Quelques phrases classées par catégorie :  Le briquet a été inventé 3 ans avant l'allumette (Histoire)  Les crocodiles ne peuvent pas tirer la langue (Nature)  Le miel ne périme jamais (Cuisine)  Les amandiers et les pêchers sont dans la même famille d'arbres (Nature)  (Instant culture inutile : toutes ces phrases sont vraies)
Pour évaluer la performance d'un modèle, on va travailler avec des datasets spécifiques.

L'un des plus connus est basé sur 1.4 millions de questions posées sur le site Yahoo Answers, réparties en 10 catégories : Plusieurs questions triées dans un tableau par catégorie. Voici par exemple les questions de la catégorie "Société" :  Comment ont été inventés les gros mots ? Comment devenir gothique ? SI DIEU NOUS A FAIT QUI A FAIT DIEU !? Est-ce que bisexuel est plus fun ? Croyez-vous en le nouvel an chinois ? Sens de la vie ?  (oui, ces questions existent vraiment dans le dataset)
Read 33 tweets
Jul 7, 2023
Bon, j'ai trouvé une manière de cracker le nouveau shadowban Twitter 🥳

Déroulez pour + de détails ⤵️ Image
Vous le savez peut-être, certains mots sont devenus "interdits" sur Twitter : les mentionner appliquera sur vos tweets un facteur qui pénalisera généralement votre visibilité de 80% en moyenne.
Sans surprise, parmi ces termes bannis on retrouve
ВIuеsky et Τhrеads, deux réseaux sociaux concurrents de Twitter.

Normal de vouloir éviter que les utilisateurs se barrent chez la concurrence, mais Musk n'aurait pas besoin de faire ça si Twitter était en bonne santé... Image
Read 9 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(