41 Востаннє редагувалося HetmanNet (09.04.2015 11:35:36)

Re: А що далі?

Q-bart написав:

І використовувати PyQt?

Ну колись треба почати?
Для зберігання відповідей користувачів рекомендую зберігати в .csv чи .tsv, а самі тести в .xml чи хоча би в повноцінному .json, бо те в чому ви зберігали курси здається не зовсім нагадує його.
Якщо хочете створити повноцінну версію, яку зможуть використовувати освітяни, то треба одразу робити структуру клієнт-сервер, або зберігати тест у двох копіях (з правильними відповідями та без них).
Клієнт результати тестів може потім шифрувати асиметричним шифруванням за допомогою бібліотекою Libgcrypt-py (Python версія gpg бібліотеки) та відправляти на сервер, відкритий ключ клієнт отримуватиме при створенні облікового запису студента (учня) від сервера. Сервер надсилає клієнту тест без даних про правильні відповіді.
В автономній версії використати симетричне шифрування для файлу тесту з відповідями. Тобто відповідає студент чи учень на всі питання, потім викладач (учитель) запускає перевірку перед тим  вказавши місце збереження ключа, розшифрував, проаналізував, результат вивів.
А ще краще обидві версії в одній програмі.
Щодо вимог до тестів можу написати згодом коли спитаю у знайомого викладача який робив свою систему. Звісно якщо це цікавить вас. Щодо безпеки, то тут кілька речей:
1. Тест з відповідями має зберігатися зашифровано, а ключ бути окремо від програми та не зберігатися в її налаштуваннях.
2. Файл з пройденим тестом має бути і бажано зі зашифрованою копією (для архіву).
3. Клієнт немає генерувати закритих ключів, якими шифрують дані.
4. Результати шифрувати асиметричними ключами, а тести семеричними.
5. В результатах має бути завжди унікальний ідентифікатор тесту, питання та дані відповіді, а краще і можливі (треба для архіву, бо тести буває гублять з часом, а результати які неможливо розшифрувати і оцінити вручну не мають сенсу)
6. Тимчасові файли не мають містити ні тестів, ні результатів, ні ключів.
7. Обмін даними між сервером і клієнтом має бути шифрованим.
Ці заходи безпеки були продиктовані прогресивністю студентів та учнів, які навчилися прості програми зламувати впродовж кількох тижнів.

Як реалізовано у знайомого викладача

0. При встановленні, сервер генерує пару ключів, відкритий (client.key) потім зберігають у клієнтів, а закритий (server.key) у сервера. Потім симетричний ключ адміна (data.key).
1. При запуску клієнт генерує пару ключів (open_client.key, close_client.key), їхня довжина значно менше за встановленні (client.key та server.key). Подає зашифрований ключем client.key запит до сервера на отримання ключа сесії та надсилаючи при цьому open_client.key.
2. Сервер розшифровує отриманий запит і ключ за допомогою ключа server.key. Генерує свою пару ключів (open_server.key та close_server.key, при тому кожному клієнту своя пара), їхня довжина така сама як отриманого від клієнта. Надсилає зашифровану відповідь зашифровану ключем open_client.key, яка містить open_server.key та ID клієнта, який присвоює сервер при підключені клієнта.
# З цього моменту всі запити що надсилає клієнт зашифруються ключем open_server.key, а відповіді до клієнта open_client.key. Ну а розшифровуються відповідно ключами close_server.key та close_client.key на стороні отримувача. Тож слова шифрується і розшифровується не пишу.
3. Після цього клієнт запитує у сервера перелік груп та навчальних закладів. Той виймає його з БД, перемішує (рандомно) послідовність і надсилає.
4. Отримавши переліки клієнт впорядковує за абеткою, та пропонує зареєструватися студенту (ПІП, група, навчальний заклад). Отриману форму надсилає серверу (не ID). Той у відповідь повертає перелік доступних тестів та результати (бал, дата, кількість спроб, крайній термін здачі, витрачений час на проходження) по пройдених, вийнявши їх з БД та перемішує (рандомно) послідовність. Всі тести мають ID (realID) та тимчасовий (tempID) який для кожного клієнта свій та змінюється кожній сесії. Асоціативна таблиця тимчасових і реальних ID зберігається в тимчасових таблицях БД.
5. Після вибору студентом тесту, надсилається ID обраного. Сервер розшифровує симетричним ключем data.key тест в файлі .xml, генерує xml без позначок правильних відповідей чи балів за них, виймає з кожної групи (за рівнем складності) визначену кількість запитань рандомом (інфа в зашифрованому файлі тесту), перемішує (рандомно) послідовність записів та надсилає.
6. Клієнт отримавши по мітках послідовності та груп відновлює порядок. Студент проходить тест. Після завершення надсилається серверу xml що отримав (перемішує перед тим порядок записів) але з позначками відповідей та часу затраченому, доданою інфою (ПІП, група, заклад, час і дата надсилання).
7. Сервер отримавши відновлює послідовність, оцінює відповідно, вносить інфу про результат в БД та надсилає відповідь з балом. Додає інфу про правильні відповіді до відповідей студента до отриманого xml, шифрує ключем data.key та зберігає на диску.
8. При завершенні роботи клієнт подає запит на закриття сесії, видаляє всі ключі крім client.key, а сервер ключі close_server.key та open_client.key які згенерував для цього клієнта та отримав від клієнта, знищує всі тимчасові таблиці (точніше всі записи в тимчасових таблицях) про цього клієнта.

P.S. На думку викладача "всі студенти шахраї". Тож не дивуйтеся параної.

Подякували: Q-bart1

42

Re: А що далі?

Дякую!!!
Напевно я перше зроблю програму тільки для локального комп'ютера(без взаємодії клієнт - сервер.)
А потім додам ще й другу версію(з взаємодією)...

А тепер саме головне, як мені то все реалізувати.
Як я бачу це з сторони користувача:
1. Є програма(з графічним інтерф.), користувач (вчитель) за допомогою цієї програми створює тест.
2. тоді програма формує .exe файл в якому є сам тест( .json) і відповіді до нього...
3. І тоді вчитель копіює .exe файл на інший комп. де учень його відкриває і відповідає.
4. Після останньої відповіді програма рахує правильні і не правильні відповіді, і виводить оцінку.

Так?
А як це реалізувати на Python?

43 Востаннє редагувалося HetmanNet (09.04.2015 11:38:53)

Re: А що далі?

Q-bart написав:

Дякую!!!
Напевно я перше зроблю програму тільки для локального комп'ютера(без взаємодії клієнт - сервер.)
А потім додам ще й другу версію(з взаємодією)...

А тепер саме головне, як мені то все реалізувати.
Як я бачу це з сторони користувача:
1. Є програма(з графічним інтерф.), користувач (вчитель) за допомогою цієї програми створює тест.
2. тоді програма формує .exe файл в якому є сам тест( .json) і відповіді до нього...
3. І тоді вчитель копіює .exe файл на інший комп. де учень його відкриває і відповідає.
4. Після останньої відповіді програма рахує правильні і не правильні відповіді, і виводить оцінку.

Так?
А як це реалізувати на Python?

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

Подякували: Q-bart1

44

Re: А що далі?

умільців що виймали його з exe.

Найпростіший шифр мав би цьому запобігти, але чому дивуватися якщо ..

знайомий викладач

Q-bart
Нескладно реалізувати насправді, ваша програма має створювати джерельний код програми, а потім запускати компілер. Я в таких випадках змінюю ресурси.

Подякували: Q-bart1

45 Востаннє редагувалося HetmanNet (09.04.2015 12:07:22)

Re: А що далі?

0xDADA11C7 написав:

але чому дивуватися якщо ..

знайомий викладач

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

Подякували: 0xDADA11C7, Q-bart2

46

Re: А що далі?

HetmanNet написав:
Q-bart написав:

Дякую!!!
Напевно я перше зроблю програму тільки для локального комп'ютера(без взаємодії клієнт - сервер.)
А потім додам ще й другу версію(з взаємодією)...

А тепер саме головне, як мені то все реалізувати.
Як я бачу це з сторони користувача:
1. Є програма(з графічним інтерф.), користувач (вчитель) за допомогою цієї програми створює тест.
2. тоді програма формує .exe файл в якому є сам тест( .json) і відповіді до нього...
3. І тоді вчитель копіює .exe файл на інший комп. де учень його відкриває і відповідає.
4. Після останньої відповіді програма рахує правильні і не правильні відповіді, і виводить оцінку.

Так?
А як це реалізувати на Python?

З exe мабуть ніяк.

А як тоді?

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

Але мені тоді треба буде розбиратися з роботою серверів... Та й, я пишу програму лише для навчання...

47 Востаннє редагувалося HetmanNet (09.04.2015 19:11:56)

Re: А що далі?

Q-bart написав:
HetmanNet написав:
Q-bart написав:

Дякую!!!
Напевно я перше зроблю програму тільки для локального комп'ютера(без взаємодії клієнт - сервер.)
А потім додам ще й другу версію(з взаємодією)...

А тепер саме головне, як мені то все реалізувати.
Як я бачу це з сторони користувача:
1. Є програма(з графічним інтерф.), користувач (вчитель) за допомогою цієї програми створює тест.
2. тоді програма формує .exe файл в якому є сам тест( .json) і відповіді до нього...
3. І тоді вчитель копіює .exe файл на інший комп. де учень його відкриває і відповідає.
4. Після останньої відповіді програма рахує правильні і не правильні відповіді, і виводить оцінку.

Так?
А як це реалізувати на Python?

З exe мабуть ніяк.

А як тоді?

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

Але мені тоді треба буде розбиратися з роботою серверів... Та й, я пишу програму лише для навчання...

Навчися apache піднімати і буде тобі щастя, для початку можеш попробувати денвер (чи щось подібне) використати на вінді. Коли освоїшся то перейти на лінукс де можливості у мільйони разів більше щодо серверних можливостейі. Одним словом тоді можна зробити веб-версію системи тестування.
Загалом якщо вирішиш спробувати, то раджу mageia (для новачка в самий раз), обирай 64 бітну і не пар мізки (32 бітні компи давно не бачив).. :)

Подякували: Q-bart1