Les développeurs peuvent être identifiés à partir de leur code source
Des chercheurs estiment qu'ils laissent leurs traces dans leurs programmes

Le , par Michael Guilloux

0PARTAGES

7  1 
Des chercheurs viennent de montrer que les programmeurs laissent leurs empreintes digitales dans leurs codes sources. En effet, leur étude révèle que chaque programmeur a un style de programmation unique qui peut permettre de le «désanonymiser ». En d'autres termes, sa personnalité est traduite dans son code, par sa préférence pour les espacements au lieu des tabulations, sa préférence pour les boucles ‘While’ plutôt que pour les boucles ‘For’, la règle utilisée pour nommer ses variables, l'alignement des blocs de code, etc., mais aussi par sa manière de mettre en œuvre certains types de fonctionnalités.

Selon l'étude, toutes ces caractéristiques pourraient permettre de remonter à l'auteur d'un morceau de code anonyme avec une très forte précision.

Pour aboutir à ces résultats, les chercheurs, des universités de Drexel, Maryland, Goettingen, et Princeton ont développé une stylométrie de code, qui utilise le traitement du langage naturel et l'apprentissage automatique pour déterminer les auteurs de codes sources à partir du style de programmation.

Leur méthode est basée sur les caractéristiques traditionnelles de style, telles que la mise en page et les attributs lexicaux. Elle est aussi fondée sur les arbres de syntaxe abstraite qui permettent de capter les propriétés du style de programmation indépendamment du style d'écriture. En d'autres mots, avec cette méthode, même si un individu modifie par exemple les noms de variables, les commentaires ou espacements d'un code comme pour brouiller les pistes remontant à l'auteur, cela ne changera pas la probabilité d'identifier l'auteur du code, parce que le style de codage est toujours conservé.

L'étude a permis de dégager deux principaux résultats:

  • Il est plus facile de remonter à l'auteur lorsqu'un code résulte de tâches de programmation difficiles que lorsqu'il résulte de tâches de programmation faciles.
  • Il est plus facile d'identifier l'auteur d'un code lorsque celui-ci est qualifié (capable d'exécuter les tâches les plus difficiles) que lorsqu'il est moins qualifié. « Cela pourrait indiquer que lorsque les programmeurs deviennent plus avancés, ils construisent un style de codage plus fort par rapport à des débutants. Il y a une autre possibilité que peut-être de meilleurs programmeurs commencent avec un style de codage plus unique», selon les chercheurs.


La méthode utilisée a été testée sur un échantillon de 250 codeurs pris sur plusieurs années avec une moyenne de 630 lignes de code par auteur. Le test a permis d'identifier les auteurs des codes anonymes avec une précision de 95%. Un 2è test avec moins de programmeurs (30), mais plus de lignes de code par personne (1900), a donné une précision de 97%.

L'étude montre donc que, dans tous les cas, les programmeurs laissent leurs empreintes digitales dans leurs codes.

Une telle étude présente un double intérêt:

« D'abord, après avoir obtenu un code source malveillant, on pourrait obtenir des preuves pour des poursuites pénales. Pour cela, on pourrait faire une comparaison stylistique du code avec divers auteurs dans des dépôts de code en ligne. Un adversaire prudent ne peut laisser les fichiers binaires, mais un moins prudent peut laisser un code écrit dans un langage de script ou un code source téléchargé dans le système violé pour la compilation. » Ont déclaré les chercheurs.

« La seconde application est de déterminer si, oui ou non, un morceau de code a été écrit par son auteur revendiqué. Cela prend diverses formes, y compris la détection de ghostwriting, une forme de plagiat, et l'investigation des litiges de droit d'auteur. »

Source : Rapport d’étude (pdf)

Et vous ?

Que pensez-vous de l’étude et des implications de ses résultats?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Paul TOTH
Expert éminent sénior https://www.developpez.com
Le 30/01/2015 à 19:30
Citation Envoyé par Michael Guilloux Voir le message

L'étude a permis de dégager deux principaux résultats:

  • Il est plus facile de remonter à l'auteur lorsqu'un code résulte de tâches de programmation difficiles que lorsqu'il résulte de tâches de programmation faciles.
  • Il est plus facile d'identifier l'auteur d'un code lorsque celui-ci est qualifié (capable d'exécuter les tâches les plus difficiles) que lorsqu'il est moins qualifié. « Cela pourrait indiquer que lorsque les programmeurs deviennent plus avancés, ils construisent un style de codage plus fort par rapport à des débutants. Il y a une autre possibilité que peut-être de meilleurs programmeurs commencent avec un style de codage plus unique», selon les chercheurs.

alors là je suis bluffé, je ne m'attendais vraiment pas à de tes résultats...ça voudrait dire que quand le type se creuse le crâne pour taper ses lignes de code il est plus facile de le reconnaître que quand il utilise la souris sur un L4G ? Qui aurait pu le deviner !

mais du coup je me pose une question, est-ce que dans un programme développé avec un L4G on retrouve les empreintes digitales de celui qui a conçu le L4G ? Ou si j'utilise un reformateur de code, est-ce que je gomme mes traces et laisse les siennes ? On pourrait alors se faire passer pour un autre, j'espère que ça ne créera pas un précédent de vol de copyright, empreintes digitales à l'appui !
Avatar de Deuzz
Membre confirmé https://www.developpez.com
Le 30/01/2015 à 21:07
Bonsoir

Personnellement je ne suis pas étonné par les conclusions de l'article : à savoir que chacun laisse sa marque, sa signature, son cachet voire son empreinte dans son travail.Tant pour les productions matérielles où l'on peut reconnaître la patte de l'artisan que pour les productions de l'esprit où l'on perçoit le style de l'auteur.

Cependant je suis surpris par l'emploi du terme "digitales" que je qualifierai d'abusif.
Avatar de
https://www.developpez.com
Le 30/01/2015 à 22:47
Salut,

Citation Envoyé par Deuzz Voir le message
Cependant je suis surpris par l'emploi du terme "digitales" que je qualifierai d'abusif.
L'article original étant en anglais, c'est sans doute la traduction la plus commune de "fingerprint" ("empreinte digitale". Là, il aurait fallu le traduire par "trace" ou quelque chose comme ça.

Concernant les résultats, je ne suis pas vraiment bluffé...

Quant l'article précise

de mettre en œuvre certains types de fonctionnalités
ça veut bien dire que les chercheurs ont aussi regardé le fond après la forme dans les codes sources (bon, après, les critères exacts, j'ai pas encore lu l'article).

J'aurais tendance à dire qu'un expert technique, quel que soit le job, a tendance à "converger de la même façon" vers les objectifs quotidiens de ses tâches. Au fil des années, beaucoup de choses deviennent des constantes. Parce que répétées, corrigées et surtout vérifiées par l'expérience.

Donc effectivement, je m'attendrais à ce qu'un codeur expérimenté code plus ou moins "de la même façon" dans des programmes différents. Tandis qu'un jeune codeur aura tendance à faire les choses de façon un peu plus "désordonnée", et parfois il fera la même chose de deux façons différentes. Donc, oui, certainement mois bien pistable qu'un expérimenté...

Le double intérêt de l'étude est plutôt sympa. Du pénal et des $$$. Sacrés américains

Imaginez un peu le jour de votre entretien annuel (si entretien il y a ), ou lorsque vous commencez à parler du package de votre rupture de contrat, votre boss qui vous sort : "tu te souviens du bug qui a coûté 3 M€ à l'entreprise ? Ben, surprise, en fait la bestiole était dans tes sources, c'est 2 chercheurs du Michigan qui l'ont localisée"

Steph
Avatar de Deuzz
Membre confirmé https://www.developpez.com
Le 31/01/2015 à 0:16
Citation Envoyé par IP_Steph Voir le message
L'article original étant en anglais, c'est sans doute la traduction la plus commune de "fingerprint" ("empreinte digitale". Là, il aurait fallu le traduire par "trace" ou quelque chose comme ça.
Je sais bien... Mais c'est justement contre la traduction que je m'insurge... Je ne connais pas assez les subtilités de la langue de Shakespeare pour apprécier les différents sens de "fingerprint", cependant je connais suffisamment celle de Molière pour savoir que le terme est ici parfaitement inapproprié...
Avatar de Michael Guilloux
Chroniqueur Actualités https://www.developpez.com
Le 31/01/2015 à 17:58
Citation Envoyé par IP_Steph Voir le message
Salut,

L'article original étant en anglais, c'est sans doute la traduction la plus commune de "fingerprint" ("empreinte digitale". Là, il aurait fallu le traduire par "trace" ou quelque chose comme ça.
La traduction "empreinte digitale" est faite sciemment, cela traduit bien le message que les chercheurs veulent véhiculer. En fait, avec la précision des tests, les chercheurs placent leur méthode pratiquement au même niveau que les empreintes digitales pour pouvoir identifier un individu (ici un programmeur) de manière unique.
Avatar de psychadelic
Expert confirmé https://www.developpez.com
Le 01/02/2015 à 18:17
mouais..
Je suis franchement sceptique.

Perso j'ai écrit, et j'écris encore du code dans X langages, et bien sur ma manière de le faire à évolué (j'aime à le croire), et ma stylistique aussi....

J'ai surtout fait pas mal de TMA, et quand on rentre dans le code d'un autre, on la joue pas vraiment comme on veut, a la limite on choppe les bonne idées...

Donc beaucoup de changements tres différents dans la manière de faire.
Par exemple j'ai eu une longue période Whitesmiths style, puis j'ai du y renoncer à cause des Code Formatter/Beautifier qui avouons le, est un gros progrès pour la TMA.

Quand à me demander si j'arrive à reconnaitre par le style les personnes sur lesquelles je corrige les programmes : pas vraiment.
certains codes sont tres anciens (ceux en COBOL) et il y a eu plusieurs générations de codeurs dessus voire des équipes.
Dans les programmes Java et autres, j'ai souvent rencontré des règles d'écriture pour nommer les varialbles, etc, donc pas vraiment d'ADN dans l'histoire...
Dans les techno Web, c'est même pas la peine d'y penser, car tout passe par la minification (et j'en passe avec coffeescript et SASS)...

Bref, je trouve que cette étude est en décalage total avec les méthodes d'aujourd'hui
Avatar de miky55
Membre averti https://www.developpez.com
Le 02/02/2015 à 9:24
Citation Envoyé par psychadelic Voir le message

Dans les techno Web, c'est même pas la peine d'y penser, car tout passe par la minification (et j'en passe avec coffeescript et SASS)...

Bref, je trouve que cette étude est en décalage total avec la méthodes d'aujourd'hui
T'est un peu rabat-joie... Quand on parle de code source c'est évidement avant minification/compilation. Pour le reste,si un code source a été trituré dans tous les sens par 50 devs ça sera difficile de savoir qui a fait quoi rien qu'en lisant du code.

Cela dit pour avoir pas mal bossé en équipe, des fois en un coup d’œil on se dit "tient ça c'est machin qui a pondu ça" ou encore "ça pourrait être moi à mes débuts".

Bref je pense que ces chercheurs ont prouvé quelque chose qui parait dans le fond évident. D'autres ont prouvé avant eux, qu'ont pouvait identifier de façon précise l'auteur d'un texte quelconque (livre, ou simple mail) rien qu'en analysant la syntaxe...

Edit: Pour ceux que ça intéresse il existe une controverse sur certaines œuvres de Molière que certains attribuent à Corneille, cette controverse part du fait qu'un algo trouve que les textes sont top proches pour appartenir à deux auteurs différents, puis également de certains faits historiques...
Avatar de Gumichan01
Membre régulier https://www.developpez.com
Le 02/02/2015 à 9:39
Citation Envoyé par IP_Steph Voir le message

L'article original étant en anglais, c'est sans doute la traduction la plus commune de "fingerprint" ("empreinte digitale". Là, il aurait fallu le traduire par "trace" ou quelque chose comme ça.
Steph
Citation Envoyé par Michael Guilloux Voir le message
La traduction "empreinte digitale" est faite sciemment, cela traduit bien le message que les chercheurs veulent véhiculer. En fait, avec la précision des tests, les chercheurs placent leur méthode pratiquement au même niveau que les empreintes digitales pour pouvoir identifier un individu (ici un programmeur) de manière unique.

Je pense que le problème vient du fait que l'on utilise un mot galvaudé par certaines traductions. Je rejoins IP_Steph pour la traduction. Dans le cas présent, utiliser "empreinte digitale" ne me choque pas, même si l'emploi de "trace" aurait pu être accepté. Personnellement j'ai été perturbé par le terme "digitale" dans le sens où j'entends trop souvent ce mot utilisé à tort et à travers par certains médias généralistes lorsqu'ils traduisent le terme anglais "digital" en "digitale" alors que c'est un faux ami.
Un peu comme certains informaticiens qui traduisent "library" en "librairie"

Mais ici, avec l'article original qu'on peut consulté, il n'y a pas d’ambiguïté.
Avatar de grunk
Modérateur https://www.developpez.com
Le 02/02/2015 à 10:10
Y'a un truc sympa aussi pour connaitre l'auteur d'un code source c'est les commentaires.
Souvent y'a un truc du genre :

Code : Sélectionner tout
* @author Prénom Nom <mail@mail.com>
Bon j'admet que c'est hyper technique comme solution , mais ca peut servir
Avatar de Aiekick
Membre extrêmement actif https://www.developpez.com
Le 02/02/2015 à 10:28
donc en gros faut plus faire d'open source ?
Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web