Захист вихідного коду Java від доступу [закрито]


96

Минулого тижня мені довелося створити трохи графічного інтерфейсу для домашніх завдань. Жоден із моїх однокласників цього не робив. Вони вкрали мій, звідки ми мусили його завантажити, а потім знову завантажили його як своє. Коли я сказав моєму вчителю, що це вся моя робота, він мені не повірив.

Тож я подумав поставити марний метод чи щось всередині із доказом того, що я його закодував. Я думав про шифрування. Моя найкраща ідея до цих пір:

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

Чи можете ви придумати якісь інші кращі способи?


31
Невже файли не мали часової позначки на сайті завантаження?
Averroes

76
Ви кажете, що вони могли завантажити ваш код з того місця, де ви його завантажили? Це здається божевільним. Вам слід розпитати методи вчителя. Переважно, розмовляючи зі своїм начальником, оскільки він / вона здається трохи нерозумним.
клавішник

56
Епік провалить одне з домашніх завдань і нехай провалиться весь клас.
відбувся

25
Здається, вчитель теж новачок ...
UmNyobe

22
Єдине розумне, що слід зробити в цій ситуації - спробувати виправити проблему, поговоривши з викладачем про те, як ви завантажуєте домашнє завдання. Завантажувати його в область, де ви можете завантажувати подання для всіх інших, це просто дурно - я не впевнений, що вчитель, який вважає, що такий підхід хороший, дійсно повинен викладати!
Майкл Беррі

Відповіді:


104

У мене була така ж проблема, як у вас давно. Ми мали машини Windows 2000 і завантажували файли в мережеву папку Novel, яку міг бачити кожен. Я використав кілька прийомів, щоб перемогти навіть найкращих злодіїв: пробіли з водяними знаками; водне маркування метаданих; незвичайні персонажі; довірена мітка часу; образ дії. Ось вони по порядку.

Пробіл водяних знаків:

Це мій оригінальний внесок у водне маркування. Мені потрібен був невидимий водяний знак, який працював у текстових файлах. Фокус, який я придумав, полягав у тому, щоб ввести певний пробіл між операторами програмування (або абзацами). Файл для них виглядав однаково: деякі оператори програмування та розриви рядків. Ретельний підбір тексту відображатиме пробіли. Кожен порожній рядок містив би певну кількість пробілів, що, очевидно, не було випадковим чи випадковим. (наприклад, 17) На практиці цей метод спрацював за мене, оскільки вони не могли зрозуміти, що я вкладаю в документи.

Метадані водяного маркування

Тут ви змінюєте метадані файлу, щоб містити інформацію. Ви можете вставляти своє ім’я, хеш тощо у невидимі частини файлу, особливо в EXE. У дні Нового Заходу альтернативні потоки даних були популярними.

Незвичайні символи

Я кину цей лише для ударів. Старий прийом IRC, який представляв себе, полягав у тому, щоб створити ім'я літерами, які схожі на ім'я іншої людини. Ви можете використовувати це для водяного маркування. Карта символів у Windows надасть вам багато незвичайних символів, схожих на букву чи цифру, яку ви можете використовувати у своєму вихідному коді, але це не так. Це показ у певному місці в чужій роботі не може бути випадковим.

Довірене позначення часу

У двох словах, ви надсилаєте файл (або його хеш) третій особі, яка потім додає до нього часову позначку і підписує її приватним ключем. Кожен, хто хоче підтвердити, коли ви створили документ, може звернутися до довіреної третьої сторони, часто веб-сайту, щоб перевірити ваш доказ часу створення. Вони використовувались у судових справах для спорів щодо інтелектуальної власності, тому є дуже вагомою формою доказів. Вони - стандартний спосіб досягти доказів, яких ви шукаєте. (Я включив інших перших студентів, вони легкі, вони веселіші і, ймовірно, будуть працювати.)

Ця стаття у Вікіпедії може допомогти вашому викладачеві зрозуміти ваші докази, і в розділі зовнішніх посилань є багато постачальників, включаючи безкоштовних. Я б запускав тестові файли через безкоштовні кілька днів, перш ніж використовувати їх для чогось важливого.

Образ дії

Отже, ви щось зробили, і тепер у вас є докази, чи не так? Ні, студенти все ще можуть сказати, що ви вкрали у них ідею чи іншу дурницю. Моє виправлення для цього полягало в тому, щоб приватно встановити один або кілька моїх методів із моїм інструктором. Я кажу інструкторові шукати пробіли, шукати певні символи тощо, але ніколи не розповідати іншим, яким був водяний знак. Якщо інструктор погодиться зберігати ваші прості методи в таємниці, вони, ймовірно, продовжуватимуть працювати нормально. Якщо ні, завжди є довірена мітка часу. ;)


5
+1 - приємна, вичерпна відповідь. Напевно, має бути прийнята відповідь.
Енді Томас

5
Ще одна ідея: закодуйте свої ініціали в іменах змінних, іменах полів, назвах методів, іменах класів тощо. Злодію важко буде все переписати. (Я згадував це тут, оскільки це гарна колекція)
gaborsch

1
+1 GaborSch. Це приємне доповнення. Якщо ви не втрачаєте балів для неоднозначних назв методів, то тактику можна зробити менш очевидною таким чином, а самі ініціали можна розподілити по назвах.
Нік Р

4
Ще одна ідея коментаря GaborSch надихнула: навмисне неправильно написати певні речі. Виконайте дуже рідкісні помилки в написанні функції чи імені змінної. 10 інших людей зробили те ж саме самостійно? Так, так ... (Примітка: один видатний критик перекладу Біблії Нового Світу стверджував, що це був збиток KJV, і свідченням того, що рідкісна граматична помилка в KJV була в "абсолютно новому" СЗТ. Отже, є прецедент для цієї роботи. )
Нік П

7
Одним моментом, який слід зауважити щодо "пробілів з водяними знаками", є те, що якщо IDE (повторно) відформатує ваш код (наприклад, VS C # / Eclipse), вони зникнуть.
Елвін Вонг

63

Якщо ваші однокласники вкрали ваш код із сайту для завантаження, я зашифрував би ваше домашнє завдання та надішлю електронному ключу вчителю. Це можна зробити за допомогою PGP, якщо ви хочете бути складним, або щось таке просте, як Zip-файл із паролем.

РЕДАГУВАТИ: PGP дозволить вам шифрувати / підписувати, не розкриваючи ваш ключ, але ви не можете перемогти простоту зсувного файлу Zip за допомогою пароля, тому просто вибирайте новий ключ під час кожного домашнього завдання. Краса в простоті :)


2
Це найпростіший підхід.
Джон Рейнор

2
Як довести, що код ваш? Я можу вкрасти ваш код і поштовувати так, ніби він мій.
gaborsch

4
@GaborSch, якщо я завантажу свій код у zip-файл із паролем, я побачу вашу викрадену версію незабаром після теплової смерті сонця (з відповідним чином вибраним паролем)
SeanC,

11
Ви можете довести, що це ваш код, успішно надавши ключ розшифровки.
Джонатан С. Фішер,

10
Звичайно, в теорії є багато дір, але реально навряд чи хтось отримає доступ до його файлів, якщо він надсилає їх зашифрованим: існує обмеження щодо того, наскільки далеко вони підуть, і є обмеження щодо їхніх можливостей. Якщо вони не зможуть написати графічний інтерфейс для домашнього завдання, швидше за все, вони незабаром не зламуть паролі або зламуть на будь-який комп'ютер.
Супр

39

Якщо ви даєте вихідний код вчителю, просто додайте serialVersionUIDдо одного з файлів класу, який є зашифрованою версією вашого імені. Ви можете розшифрувати його вчителю самостійно.

Це для інших нічого не означає, лише для вас. Можна сказати, що це згенерований код, якщо вони його крадуть, ймовірно, взагалі не потурбуються змінити його.

Якщо ви хочете зробити це стильно, ви можете скористатися цим трюком , якщо знайдете випадкове насіння, яке видає ваше ім'я. :) Тоді це був би ваш номер , і скрізь, де він з’явиться, це довело б, що це ви створили цей код.


5
Злодій може внести косметичні зміни в код, щоб зробити крадіжку менш очевидною. Серійна версія UID буде простою косметичною зміною.
Енді Томас,

3
@GaborSch той, що має serialVersionUID, ідеальний завдяки виділеному
LoremIpsum

2
@ AndyThomas-Cramer так, я повинен запрограмувати метод із моїм зашифрованим ім'ям у ньому, і якщо його буде видалено, програма не буде працювати
LoremIpsum

2
@ AndyThomas-Cramer У теорії так. На практиці більшість шахраїв ліниві і роблять лише той абсолютний мінімум, який вони вважають за потрібне. (Можливо заміна //written by WarGodNTз //Written by ImaCheata.) Також малоймовірно , що багато хто з них навіть знають , що svUID може розорити їх. Навіть якщо деякі з них такі розумні; якщо більша частина класу обманює декілька, вони майже напевно потраплять. Як мінімум, що повинно бути достатньо, щоб переконати вчителя розкрити свій процес.
Дан вигадує Firelight

3
@WilQu: Ви не будете підписувати власний код з чиїм-небудь іменем або приватним ключем, чи не так?
Відновити Моніку

35

Це сталося з парою моїх студентів, які жили в одній квартирі. Один викрав вихідний код з диска, залишеного у шухляді столу.

Злодій трохи змінив викрадене джерело, щоб воно не було очевидним. Я помітив схожість коду в будь-якому випадку і вивчив джерело в редакторі. Деякі рядки мали додаткові пробіли на кінцях. Джерело кожного студента мало однакову кількість додаткових пробілів.

Ви можете використати це для кодування інформації, не роблячи її видимою. Ви можете кодувати ініціали або ідентифікатор учня на кінці деяких рядків з пробілами.

Злодій, ймовірно, внесе косметичні зміни у видимий код, але може пропустити невидимі символи.

Редагувати:

Думаючи про це трохи більше, ви можете використовувати пробіли та вкладки, як коди Морзе та dhs, і ввести своє ім’я в кінці кількох рядків. Злодій може видалити, змінити порядок або переписати деякі рядки, не знищуючи вашу ідентифікацію.

EDIT 2:

"Стеганографія білого простору" - термін для приховування повідомлень у пробілі. Погугливши, це відкриває цю реалізацію з відкритим кодом, починаючи з 90-х, використовуючи кодування Хаффмана замість коду Морзе.


2
Вітаю вас, дякую за запитання. Дав мені можливість подумати про розміщення коду Морзе.
Енді Томас,

1
Будь-який Java IDE може відформатувати код, видаливши всі невидимі символи ;-) І все-таки ідея morse-коду приємна :-)
Prakash K

5
Розширення: у будь-якому рядковому літералі замініть деякі порожні символи символом, що виглядає як порожній. Як символ # 255 в ASCII, або "порожнє розгортання" в Unicode. Більшість початківців не помітять різниці, і це дозволить вам визначити, хто (можливо!) Вкрав ваші джерела.
TheBlast,

@PrakashK - Так, це протидіяло б цьому заходу. Мабуть, найкраще поєднання заходів.
Енді Томас,

@TheBlastOne - приємна ідея. Сам по собі не ідентифікує вас, але це не втрачено, якщо злодій переформатується.
Енді Томас,

19

Мені здається, це проблема ІТ-адміністрування. Кожен студент повинен мати власну область завантаження, до якої інші студенти не можуть отримати доступ.

Викладач був би вищого рівня, маючи доступ до кожної папки для завантаження студентів. Якщо це неможливо, використовуйте @exabrial відповідь, оскільки це найпростіше рішення.


9

Найкраще, що ви можете зробити, це просто заархівувати вихідний код паролем і надіслати пароль електронною поштою вчителю.

Проблема вирішена.


2
+1 до простих рішень. Не передумуйте це. Але уточнюйте у професора, чи з ним спочатку все в порядку.
Едуардо

6

Використовуйте розподілену (= автономну) систему контролю версій , наприклад git . Можливо, буде і корисно.

Історія версій з вашим ім’ям та датами може бути досить переконливою.


2
Але ОП не пропускає довести, що його джерело було створене ним. Йому важко довести, що однокласники використовують його джерела для своїх.
TheBlastOne

2
Розподілений VCS досить складний. Все, що потрібно автору, - це довести оригінальність змісту та / або копіювання. Це може бути досягнуто за допомогою будь-якого механізму подання файлів, який відмічає часове позначення подання, ідентифікує особу та не дозволяє студентам видаляти матеріали. Це можна зробити настільки ж просто, як FTP або веб-сервер.
Нік Р

1
Досить просто написати сценарій, який скануватиме журнал фіксування та відтворить нове репо з тією ж історією, але з іншим користувачем.
mikerobi

@mikerobi git filter-branchбув побудований для таких божевільних речей, що не повинно бути просто
Ізката

@Izkata, я не розглядав можливості зміни історії редагування. Я думав про скрипт, який перевіряє першу редакцію та передає її в інше репо, потім перевіряє другу ревізію та виправляє нові коміти репо, повторює. Подібно до того, як працюють деякі інструменти для перетворення з однієї ДКС в іншу.
mikerobi

3

Що було вкрадено?

  • Джерело ? Ви можете помістити в нього випадкові рядки (але це можна змінити). Ви також можете спробувати додати спеціальну поведінку, яку знаєте лише ви (спеціальне натискання клавіші змінить кольоровий рядок), тоді ви можете попросити вчителя "інші знають цю спеціальну комбінацію?" Найкращим способом буде збій програми, якщо порожній марний файл не буде присутній в архіві через 5 хвилин активності, вашим товаришам по школі буде лінь чекати цю кількість часу.

  • Двійкові? Для порівняння контрольної суми кожного класу буде достатньо (ваші шкільні товариші ліниві, щоб переписати файли класу)


2

Просто опублікуйте своє рішення в останню хвилину. Це не дасть часу нікому скопіювати його.

І надіслати зворотній зв'язок адміністратору, щоб заборонити студентам бачити інші завдання учнів.


1

Якщо ви завантажуєте файл у форматі .zip із шифруванням пароля, будь-хто може просто зламати пароль, завантаживши файл .zip, і його процесор повинен запустити мільйон запитів до нього, якщо він такий великий, як шахрай. На жаль, деякі є, і це легко зробити.

Інші студенти можуть переглядати ваше джерело на спільному сервері. Вчитель повинен дійсно надавати вам свій власний зашифрований паролем каталог для завантаження. Це можна зробити легко, додавши субдомени. Але, можливо, вчитель може дозволити вам завантажувати файли на свій власний сервер, щоб він отримав доступ до них там.

Можна також приховати сценарій так, щоб він мав document.write ("Ця сторінка написана xxxxx"), змушуючи всіх, хто копіює вашу роботу, не мати змоги видалити кредит, якщо вони спочатку не розшифрують його. Але справжня відповідь полягає в тому, що вашій школі потрібно дати кожному з своїх учнів власні каталоги, захищені паролем.


0

У моєму випадку мої вчителі прийшли з кращим підходом. Питання, які вони надали, пов'язані з нашим реєстраційним номером. Наприклад:

Вхід до функції / теорії - наш реєстраційний номер, який відрізняється для кожного студента

Отже, відповіді або підхід до рішення порівняно відрізняються від кожного студента. Це змушує всіх учнів робити домашні завдання самостійно або хоча б ознайомитись, як зламати підхід із власною реєстрацією [це може бути важче, ніж навчитися місії;)].

Hope your lecturer will read this thread before his next tutorial :D
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.