Protection contre l'accès au code source Java [fermé]

96

La semaine dernière, j'ai dû créer une petite interface graphique pour les devoirs. Aucun de mes camarades de classe ne l'a fait. Ils ont volé le mien d'où nous devions le télécharger, puis ils l'ont téléchargé à nouveau comme le leur. Quand j'ai dit à mon professeur que c'était tout mon travail, il ne m'a pas cru.

J'ai donc pensé à mettre une méthode inutile ou quelque chose à l'intérieur avec une preuve que je l'avais codé. J'ai pensé au cryptage. Ma meilleure idée jusqu'à présent:

String key = ("ZGV2ZWxvcGVkIGJ5IFdhckdvZE5U"); //My proof in base64

Pouvez-vous penser à d'autres meilleures façons?

WarGodNT
la source
31
Les fichiers n'avaient-ils pas d'horodatage sur le site de téléchargement?
Averroes
76
Êtes-vous en train de dire qu'ils pourraient télécharger votre code à partir de l'endroit où vous l'avez téléchargé? Cela semble fou. Vous devriez remettre en question les méthodes de l'enseignant. De préférence en parlant à son patron car il / elle semble un peu déraisonnable.
keyer
56
Epic échoue à l'un de vos devoirs et laisse toute la classe échouer.
tenue le
25
On dirait que le professeur est aussi un débutant ...
UmNyobe
22
La seule chose sensée à faire dans cette situation est d'essayer de corriger le problème en discutant avec l'enseignant de la façon dont vous téléchargez vos devoirs. Le télécharger dans une zone où vous pouvez télécharger les soumissions de tous les autres est tout simplement stupide - je ne suis pas sûr qu'un enseignant qui pense que cette approche est bonne devrait vraiment enseigner!
Michael Berry

Réponses:

104

J'ai eu le même problème que vous il y a longtemps. Nous avions des machines Windows 2000 et téléchargions des fichiers dans un dossier réseau Novel que tout le monde pouvait voir. J'ai utilisé plusieurs astuces pour battre même les meilleurs voleurs: le filigrane d'espaces blancs; filigrane de métadonnées; caractères inhabituels; horodatage de confiance; mode opératoire. Voici-les dans l'ordre.

Filigrane d'espaces blancs:

C'est ma contribution originale au tatouage. J'avais besoin d'un filigrane invisible qui fonctionnait dans les fichiers texte. Le truc que j'ai trouvé était de mettre dans un modèle spécifique d'espaces entre les instructions de programmation (ou les paragraphes). Le fichier leur ressemblait: des instructions de programmation et des sauts de ligne. La sélection du texte avec soin montrerait l'espace blanc. Chaque ligne vide contiendrait un certain nombre d'espaces qui n'est évidemment pas aléatoire ou accidentel. (par exemple 17) En pratique, cette méthode a fait le travail pour moi parce qu'ils ne pouvaient pas comprendre ce que j'incorporais dans les documents.

Filigrane de métadonnées

C'est ici que vous modifiez les métadonnées du fichier pour qu'elles contiennent des informations. Vous pouvez intégrer votre nom, un hachage, etc. dans des parties invisibles d'un fichier, en particulier les EXE. À l'époque NT, les flux de données alternatifs étaient populaires.

Personnages inhabituels

Je vais jeter celui-ci juste pour les coups de pied. Une vieille astuce d'usurpation d'identité IRC consistait à créer un nom avec des lettres qui ressemblent au nom d'une autre personne. Vous pouvez l'utiliser dans le filigrane. La table de caractères dans Windows vous donnera de nombreux caractères inhabituels qui ressemblent à, mais ne le sont pas, une lettre ou un chiffre que vous pourriez utiliser dans votre code source. Celles-ci apparaissant à un endroit précis du travail de quelqu'un d'autre ne peuvent pas être accidentelles.

Horodatage fiable

En un mot, vous envoyez un fichier (ou son hachage) à un tiers qui lui ajoute ensuite un horodatage et le signe avec une clé privée. Toute personne souhaitant une preuve de la création d'un document peut se rendre auprès du tiers de confiance, souvent un site Web, pour vérifier votre preuve de l'heure de création. Celles-ci ont été utilisées dans des affaires judiciaires pour des litiges de propriété intellectuelle et constituent donc une forme de preuve très solide. C'est le moyen standard d'accomplir la preuve que vous recherchez. (J'ai d'abord inclus les autres car ils sont faciles, ils sont plus amusants et fonctionneront probablement.)

Cet article Wikipédia peut aider votre instructeur à comprendre vos preuves et la section des liens externes contient de nombreux fournisseurs, y compris des fournisseurs gratuits. J'exécutais des fichiers de test sur des fichiers gratuits pendant quelques jours avant de les utiliser pour quelque chose d'important.

Mode opératoire

Alors, vous avez fait quelque chose et vous avez maintenant une preuve non? Non, les élèves peuvent encore dire que vous leur avez volé l'idée ou une autre absurdité. Ma solution pour cela était d'établir, en privé, une ou plusieurs de mes méthodes avec mon instructeur. Je dis à l'instructeur de chercher les espaces, de rechercher certains symboles, etc. mais de ne jamais dire aux autres ce qu'était le filigrane. Si l'instructeur accepte de garder secrètes vos techniques simples, elles continueront probablement à bien fonctionner. Sinon, il y a toujours un horodatage fiable. ;)

Nick P
la source
5
+1 - Belle réponse complète. La réponse devrait probablement être acceptée.
Andy Thomas
5
Encore une idée: encodez vos initiales en noms de variables, noms de champs, noms de méthodes, noms de classes, etc. Le voleur aura du mal à tout réécrire. (Je l'ai mentionné ici, car c'est une bonne collection)
gaborsch
1
+1 GaborSch. C'est une belle addition. Si vous ne perdez pas de points pour les noms de méthodes ambigus, alors la tactique peut être rendue moins évidente de cette façon et les initiales elles-mêmes peuvent être réparties dans les noms.
Nick P
4
Une autre idée inspirée par le commentaire de GaborSch: mal orthographier intentionnellement certaines choses. Faites une faute d'orthographe très rare d'un nom de fonction ou de variable. 10 autres personnes ont fait la même chose de leur propre chef? Oui, c'est vrai ... (Note: un critique éminent de la traduction de la Bible du Nouveau Monde a prétendu que c'était une imitation KJV et la preuve était qu'une erreur grammaticale rare dans KJV était dans "tout nouveau" TNO. Donc, il y a un précédent pour ce travail. )
Nick P
7
Un point à noter sur le "filigrane d'espaces" est que si l'EDI (re) formate votre code (par exemple VS C # / Eclipse), ils seront partis.
Alvin Wong
63

Si vos camarades de classe volaient votre code sur le site de téléchargement, je chiffrerais vos devoirs et enverrais la clé à l'enseignant. Vous pouvez le faire avec PGP si vous voulez être compliqué, ou quelque chose d'aussi simple qu'un fichier Zip avec un mot de passe.

EDIT: PGP vous permettrait de crypter / signer sans révéler votre clé, mais vous ne pouvez pas battre la simplicité de cisaillement d'un fichier Zip avec un mot de passe, alors choisissez simplement une nouvelle clé à chaque devoir. La beauté dans la simplicité :)

Jonathan S. Fisher
la source
2
C'est l'approche la plus simple.
Jon Raynor
2
Comment prouvez-vous que le code est le vôtre? Je peux voler votre code et compresser comme si c'était le mien.
gaborsch
4
@GaborSch, si je télécharge mon code dans un fichier zip avec un mot de passe, je verrai votre version volée peu de temps après la mort par la chaleur du soleil (avec le mot de passe correctement choisi)
SeanC
11
Vous pouvez prouver qu'il s'agissait de votre code en fournissant avec succès la clé de déchiffrement.
Jonathan
10
Bien sûr, il y a de nombreuses lacunes dans la théorie, mais en réalité, il est peu probable que quiconque accède à ses fichiers s'il les envoie cryptés: il y a des limites à jusqu'où ils iraient, et il y a des limites à leurs capacités. S'ils ne parviennent pas à écrire une interface graphique pour leurs devoirs, il y a de fortes chances qu'ils ne craquent pas les mots de passe ou ne piratent pas l'ordinateur de quelqu'un de sitôt.
Supr
39

Si vous donnez le code source à l'enseignant, ajoutez simplement un serialVersionUIDà l'un de vos fichiers de classe qui est une version cryptée de votre nom. Vous pouvez le décrypter vous-même auprès du professeur.

Cela ne veut rien dire pour les autres, juste pour vous. Vous pouvez dire que c'est un code généré, s'ils le volent, ils ne prendront probablement pas la peine de le modifier.

Si vous voulez le faire de manière élégante, vous pouvez utiliser cette astuce , si vous trouvez la graine aléatoire qui produit votre nom. :) Ce serait alors votre numéro , et partout où il apparaîtrait, cela prouverait que c'était vous qui créé ce code.

gaborsch
la source
5
Un voleur peut apporter des modifications cosmétiques au code, pour rendre le vol moins évident. Un UID de version série serait un changement cosmétique facile.
Andy Thomas
3
@GaborSch celui avec le serialVersionUID est parfait merci
allot
2
@ AndyThomas-Cramer oui je devrais programmer une méthode avec mon nom crypté dedans et si elle est supprimée le programme ne fonctionnera pas haha
LoremIpsum
2
@ AndyThomas-Cramer En théorie oui. En pratique, la plupart des tricheurs sont paresseux et ne font que le minimum absolu qu'ils jugent nécessaire. (Probablement remplacé //written by WarGodNTpar //Written by ImaCheata.) Il est également peu probable que beaucoup d'entre eux sachent même que le svUID pourrait les détruire. Même si quelques-uns d'entre eux sont aussi intelligents; si la majorité de la classe triche, quelques-uns sont presque certains de se faire prendre. Au minimum, cela devrait être suffisant pour convaincre l'enseignant de ne pas mettre son processus en place.
Dan Is Fiddling By Firelight
3
@WilQu: Vous ne signerez pas votre propre code avec le nom ou la clé privée de quelqu'un d'autre, n'est-ce pas?
Unslander Monica
35

Cela s'est produit avec deux de mes étudiants qui vivaient dans le même appartement. L'un d'eux a volé le code source d'un disque laissé dans un tiroir de bureau.

Le voleur a légèrement modifié la source volée, pour que ce ne soit pas évident. J'ai quand même remarqué la similitude du code et examiné la source dans un éditeur. Certaines lignes avaient des espaces supplémentaires aux extrémités. La source de chaque élève avait le même nombre d'espaces supplémentaires.

Vous pouvez exploiter cela pour encoder des informations sans les rendre visibles. Vous pouvez encoder vos initiales ou votre carte d'étudiant à la fin de certaines lignes, avec des espaces.

Un voleur apportera probablement des modifications cosmétiques au code visible, mais peut manquer les caractères non visibles.

ÉDITER:

En y réfléchissant un peu plus, vous pouvez utiliser des espaces et des tabulations comme dits et dah en code Morse, et mettre votre nom à la fin de plusieurs lignes. Un voleur pourrait supprimer, réorganiser ou retaper certaines lignes sans détruire votre identification.

MODIFIER 2:

"La stéganographie en espace blanc" est le terme pour dissimuler des messages dans un espace blanc. Googler révèle cette implémentation open-source datant des années 90, utilisant l'encodage Huffman au lieu du code Morse.

Andy Thomas
la source
2
De rien, merci pour la question. M'a donné l'occasion de penser à l'espacement du code Morse.
Andy Thomas
1
N'importe quel IDE Java peut formater le code en supprimant tous les caractères invisibles ;-) Toujours l'idée du code morse est sympa :-)
Prakash K
5
Extension: dans n'importe quelle chaîne littérale, remplacez certains espaces par un caractère qui ressemble à un espace. Comme le caractère # 255 en ASCII, ou le "blanc non emballable" en Unicode. La plupart des débutants ne noteront pas la différence, et cela vous permettra d'indiquer qui (probablement!) A volé vos sources.
TheBlastOne
@PrakashK - Oui, cela contrarierait cette mesure. Une combinaison de mesures est probablement la meilleure.
Andy Thomas
@TheBlastOne - Bonne idée. Ne vous identifie pas par lui-même, mais ce n'est pas perdu si le voleur reformate.
Andy Thomas
19

Cela me semble être un problème d'administration informatique. Chaque étudiant doit avoir sa propre zone de téléchargement qui n'est pas accessible aux autres étudiants.

L'enseignant serait un niveau supérieur, étant en mesure d'accéder à chaque dossier de téléchargement d'élève. Si ce n'est pas possible, utilisez @exabrial answer car c'est la solution la plus simple.

Jon Raynor
la source
9

La meilleure chose à faire est de compresser simplement le code source avec un mot de passe et d'envoyer le mot de passe par e-mail à l'enseignant.

Problème résolu.

Omid
la source
2
+1 aux solutions simples. N'en faites pas trop. Mais vérifiez d'abord avec le professeur s'il est d'accord avec cela.
Eduardo
6

Utilisez un système de contrôle de version distribué (= autonome) , comme git . Cela pourrait aussi être utile.

Un historique des versions avec votre nom et vos dates peut être suffisamment convaincant.

Joop Eggen
la source
2
Mais OP ne manque pas de prouver que sa source a été créée par lui. Il a du mal à prouver que ses camarades utilisent ses sources pour les leurs.
TheBlastOne
2
Un VCS distribué est assez complexe. Tout ce dont l'auteur a besoin est de prouver l'originalité du contenu et / ou de la copie. Cela peut être accompli avec n'importe quel mécanisme de soumission de fichier qui horodate la soumission, identifie le soumissionnaire et ne permet pas aux étudiants de supprimer les soumissions. Cela peut être fait avec quelque chose d'aussi simple qu'un serveur FTP ou Web.
Nick P
1
Il est assez facile d'écrire un script qui analysera le journal de validation et recréera un nouveau dépôt avec le même historique mais un utilisateur différent.
mikerobi
@mikerobi a git filter-branchété conçu pour des trucs dingues comme ça, ça ne devrait pas être facile
Izkata
@Izkata, je n'ai pas envisagé la possibilité de modifier l'historique des révisions. Je pensais à un script qui vérifie la première révision et la commute dans un autre dépôt, puis vérifie la deuxième révision et corrige le nouveau dépôt commits, répète. Similaire à la façon dont certains outils pour convertir d'un VCS à un autre fonctionnent.
mikerobi
3

Qu'est-ce qui a été volé?

  • La source ? Vous pouvez y mettre des chaînes aléatoires (mais cela peut être changé). Vous pouvez également essayer d'ajouter un comportement spécial que vous ne connaissez que de vous (une pression spéciale sur une touche changera une ligne de couleur), vous pouvez alors demander à l'enseignant "les autres connaissent ce combo spécial?". Le meilleur moyen sera de planter le programme si un fichier vide inutile n'est pas présent dans l'archive après 5 minutes d'activité, vos camarades de classe seront trop paresseux pour attendre ce laps de temps.

  • Le binaire? Il suffit de comparer la somme de contrôle de chaque .class (vos camarades de classe sont trop paresseux pour réécrire les fichiers de la classe)

Kartoch
la source
2

Publiez simplement votre solution à la dernière minute. Cela ne donnera à personne le temps de le copier.

Et envoyez un commentaire à l'administrateur pour interdire aux étudiants de voir les devoirs d'autres étudiants.

Eduardo
la source
1

Si vous téléchargez le fichier dans un fichier .zip avec cryptage de mot de passe, n'importe qui peut simplement déchiffrer le mot de passe en téléchargeant le fichier .zip et demander à son processeur d'exécuter un million de requêtes s'il est aussi gros voleur de triche. Malheureusement, certains le sont et c'est facile à faire.

Votre source peut être consultée sur le serveur partagé par les autres étudiants. L'enseignant devrait vraiment vous donner votre propre répertoire crypté par mot de passe pour télécharger. Cela pourrait être fait facilement en ajoutant simplement des sous-domaines. Mais peut-être que l'enseignant vous autorisera à télécharger les fichiers sur votre propre serveur pour qu'il puisse y accéder.

Il est également possible de masquer le script afin qu'il ait un document.write ('Cette page a été écrite par xxxxx'), obligeant quiconque copie votre travail à ne pas pouvoir supprimer le crédit à moins de le déchiffrer au préalable. Mais la vraie réponse est que votre école doit donner à chacun de ses élèves ses propres répertoires protégés par mot de passe.

michael d
la source
0

Dans mon cas, mes professeurs sont venus avec une meilleure approche. Les questions qu'ils nous ont posées ont quelque chose à voir avec notre numéro d'enregistrement. Ex:

L'entrée à une fonction / théorie est notre numéro d'inscription, qui est différent pour chaque étudiant

Ainsi, les réponses ou l'approche de la solution sont relativement différentes de chaque élève, ce qui oblige tous les élèves à faire leurs devoirs seuls, ou du moins à savoir comment pirater l'approche avec leur propre inscription [it peut être plus difficile que d'apprendre la lession;)].

Hope your lecturer will read this thread before his next tutorial :D
Chand Priyankara
la source