IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

25PARTAGES

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-nous-la !

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.
10  0 
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...
7  0 
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
6  0 
Avatar de ternel
Expert éminent sénior https://www.developpez.com
Le 02/02/2015 à 15:25
@cuicui78:
Non, ca veut juste dire que quand tu commit, tout le monde sait qui tu es (et heureusement). Du moins quel nom tu utilises pour coder.
Donc tu n'es pas anonyme sur un projet libre un peu sérieux. (le commit réellement anonyme est le meilleur moyen de se faire pourrir)

Du coup, la problématique du développeur anonyme n'existe vraiment que dans les codes fermés, et cette étude montre qu'on peut quand même dire: "ces codes-ci ont été écrits par la même personne".

Cependant, ca confirme que l'instinct du "tiens, du code de Machin", que souligne miky55, n'est pas une illusion.

@Saverok:
Les règles de nommages uniformise l'aspect des noms, mais pas les noms eux-meme.
Selon le développeur, pour garder le numéro de ligne en écrivant un fichier, tu pourrais avoir:
compteur, nombre_ligne, lignes, nombre_lignes, nb_lignes, nombre, compte, lignes_nombre, et certainement d'autres noms encore.

Tous respectent pourtant les mêmes règles de nommage (pas de préfixe de type, pas de préfixe pour les variables locales, pas de majuscules, séparation des mots par _).
6  0 
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 !
5  0 
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
5  0 
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é...
4  0 
Avatar de
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é.
4  0 
Avatar de
https://www.developpez.com
Le 06/02/2015 à 11:58
Citation Envoyé par landry161 Voir le message
Moi j'aime quand le code est bien indenté , ça donne une lisibilité beaucoup plus facile
Citation Envoyé par Justforfunmedia Voir le message
Pour moi ça se tient.
Je dis souvent que la programmation est une forme d'art.
Il y a du beau code celui qui fait pleurer et le moche celui qui fait couler des larmes de sang.
Toujours est il que comme en peinture, musique, sculpture on reconnait la pas de l'auteur.
Citation Envoyé par Escapetiger Voir le message
Merci chers ami(e)s développeurs et artistes dans l'âme, je ressens la même impression pour des scripts plus ou moins complexes (nombre de lignes, fonctions, structure, etc ... interprétés par nature, non compilés donc) dans la partie système / production / exploitation.
Bientôt il faudra un BAC littéraire pour être codeur

Allez, pour le fun :

https://github.com/c00kiemon5ter/ioc...1990/westley.c

Steph
4  0 
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.
3  0