Модуль I · IT Skills (Cloud Services & Cyber Security) · тема 3, урок 1 з 2 · 120 хвилин · класи 10A, 10B, 10C
Мета. Зібрати таблицю з відповідями однокласників і прибрати з неї людей. Наступного уроку з цієї таблиці ти зробиш діаграми. «Прибрати людей» — це не «стерти прізвища». Це зробити так, щоб за жодним рядком не можна було показати пальцем на конкретного однокласника.
Найпоширеніша помилка звучить так: «ми ж прибрали прізвища, отже дані анонімні». Сьогодні ти побачиш на екрані, що це не так. У таблиці на 24 людини прізвище видалено, а 12 рядків усе одно вказують рівно на одну особу.
Слова квазіідентифікатор, k-анонімність і EXIF поки нічого не означають. Розберемо їх по черзі. Кожне — після прикладу, а не до нього.
raw.csv) і всі фото залишаються на твоєму комп'ютері,
у теці data/lesson-03/. exiftool ти запускаєш у своєму
терміналі, не по SSH. По FTP на сервер їдуть три текстові файли:
data.csv (очищений), credits.md і anonymize-log.md.
Вихідні фото на сервер не заливаються ніколи — учитель дивиться їх очно, з твого екрана.~/www/infographic/. Сьогодні ти кладеш
туди дані, наступного уроку — діаграми. Теки lesson-05 немає.| Етап | Хв | Що робимо |
|---|---|---|
| Вхід | 10 | Учитель за дві хвилини знаходить конкретну людину в «анонімному» датасеті |
| Теорія: PII і квазіідентифікатори | 20 | Інспектор датасету: скільки рядків лишаються унікальними |
| Практика: збір датасету | 20 | ≥10 рядків × ≥3 колонки: опитування класу або відкриті дані |
| Практика: анонімізація | 25 | Видалення, псевдоніми, узагальнення, агрегація до k ≥ 5 |
| Теорія: метадані | 15 | EXIF-детектив: фото → координати на мапі |
| Практика: очищення метаданих | 15 | exiftool -all= локально, запис у credits.md |
| Автоперевірка | 10 | Доводимо до зеленого дві перевірки: «у файлах немає персональних даних» (🔒 no_pii) і «на сервері немає фото» (🔒 no_media) |
| Підсумок | 5 | Правило «публікуй мінімум, достатній для висновку» |
| Разом | 120 |
data.csv — очищений датасет, ≥10 рядків даних і ≥3 колонки;
credits.md — джерело, ліцензія, AI-інструменти й промпти, що саме анонімізовано;
anonymize-log.md — щонайменше три перетворення у форматі
«колонка → що зробив → чому». Усі три файли — у ~/www/infographic/.Не «те, що соромно показати», а точний юридичний і технічний критерій
Уяви рядок: «10A, 15 років, вулиця Лісова». Імені тут немає, а людина є — однокласники впізнають її за секунду. Такі відомості закон називає персональними даними.
Точне формулювання — зі статті 2 Закону «Про захист персональних даних». Це відомості про фізичну особу, яка ідентифікована або може бути конкретно ідентифікована. Європейський GDPR каже те саме довше. Він додає, що особу можна визначити й непрямо. Наприклад, за місцем чи за онлайн-ідентифікатором. Або за однією з ознак її життя — від здоров'я до статків і занять.
Ключове слово тут — «може бути». Не «названа на ім'я», а «можна вирахувати». Тому дивитися на одну колонку марно. Питання завжди одне: чи можу я, дивлячись на цей рядок, показати пальцем на людину?
| Тип | Приклади | Що робить із рядком |
|---|---|---|
| Прямі ідентифікатори | прізвище та ім'я, номер телефону, email, нік у соцмережі, номер паспорта, податковий номер (РНОКПП), логін на сервері | вказують на людину самі по собі, без жодних додаткових даних |
| Квазіідентифікатори | клас, вік або дата народження, вулиця, стать, дата й час події, професія батьків, зріст | поодинці нешкідливі, а в комбінації звужують коло до однієї людини |
| Чутливі атрибути | оцінки, стан здоров'я, релігія, політичні погляди, орієнтація, доходи родини | саме заради них зазвичай і роблять деанонімізацію |
Прямі ідентифікатори всі бачать одразу: жоден школяр не опублікує таблицю з колонкою «телефон». А от «клас», «вік» і «вулиця» виглядають безневинно — і саме тому їх залишають. Про них — увесь наступний блок.
Ти публікуєш опитування класу. Прізвищ немає, телефонів немає — але є колонка «нік в Instagram», бо «за ним же не видно справжнього імені». Чи анонімний такий датасет?
Три нешкідливі колонки перетинаються рівно в одній людині
Уяви таблицю опитування 10A. Прізвище видалено — колонка просто зникла. Лишилися клас, вік, вулиця й улюблений предмет. Виглядає анонімно. Аж поки хтось із класу не подивиться на рядок «10A, 15 років, Математика» і не скаже: «це ж Коваленко, він у нас єдиний, хто пішов до школи з шести років».
До твоєї таблиці хтось додає те, що знає сам, — і дістає ім’я. Це називають повторною ідентифікацією, або деанонімізацією.
Таким зовнішнім знанням може бути що завгодно. Однокласники пам’ятають, хто де живе. На сайті школи висить список олімпіадників. У соцмережі відкрита дата народження. Вистачає будь-якого з цих трьох джерел.
Її ж підрахунок за переписом США 1990 року: комбінація «поштовий індекс + стать + повна дата народження» унікальна для 87 % населення. Пізніша перевірка Філіпа Ґолле на переписі 2000 року дала 63 %. Цифра менша, а висновок той самий: три «нешкідливі» поля ідентифікують більшість людей.
Ти прибрав із таблиці імена, лишив клас, вік і улюблений предмет. Твій однокласник упізнав себе за три секунди. Як таке можливо?
Вимикай колонки й дивись, скільки людей лишаються впізнаваними
Ось опитування трьох десятих класів: 24 рядки, п’ять колонок. Кожен прапорець — це колонка, яку ти публікуєш. Знятий прапорець означає, що колонки у файлі немає взагалі.
Після кожного кліку сторінка перераховує рядки заново. Вона шукає ті, чия комбінація ознак більше ніде не повторюється. Такий рядок вказує рівно на одну людину — його підсвічено.
Дані вигадані спеціально для цієї сторінки — це не реальний клас. Числа над таблицею рахуються з неї просто зараз, у твоєму браузері.
| Що опубліковано | Унікальних | k | Висновок |
|---|---|---|---|
| усі п’ять колонок | 24 | 1 | кожен рядок — це людина на ім’я |
| без прізвища | 12 | 1 | половина класу впізнається без імені |
| без прізвища і вулиці | 3 | 1 | краще, але троє все ще самі у своїй групі |
| + вік діапазоном 15–16 / 17–18 | 0 | 2 | унікальних немає — і все одно не досить |
| лише клас (агрегація) | 0 | 8 | у кожній групі 8 людей: публікувати можна |
В інспекторі ти зняв прапорець «прізвище» і бачиш 12 унікальних із 24. Однокласник каже: «це просто датасет замалий, на 200 рядках такого б не було». Що з цим твердженням не так?
Від «видалити колонку» до «показувати лише групи» — і що втрачається на кожному кроці
Знеособлення — це не одна кнопка, а сходинки. Кожна наступна сходинка робить датасет безпечнішим і водночас біднішим. Твоє завдання — зупинитися там, де висновок для інфографіки ще можливий, а людина вже ні.
| Спосіб | Що робиш | Що втрачаєш |
|---|---|---|
| 1. Видалення | колонки просто немає у файлі: прізвище, телефон, email, нік | нічого корисного — прямі ідентифікатори в інфографіці не потрібні ніколи |
| 2. Псевдонім | Коваленко → учень_03; той самий псевдонім щоразу для тієї самої людини |
нічого, але дані лишаються персональними, поки жива таблиця відповідності |
| 3. Узагальнення | вік → діапазон 15–16; точна адреса → район; місто → область |
точність: більше не побудуєш графік «по роках», лише «по групах» |
| 4. Округлення | дата 2011-03-17 → 2011; час 16:42 → після 16:00; дохід → до тисячі |
деталь у часі: сезонність ще видно, конкретний день — уже ні |
| 5. Агрегація | окремих рядків немає взагалі — публікуєш лише підсумки по групах від N осіб | рядок як одиницю: більше не подивишся на окрему відповідь |
Іноді зв’язок між записами однієї людини потрібен. Наприклад, щоб порівняти її відповідь у вересні й у травні. Тоді й беруть псевдонім.
Але файл keys.csv із рядками учень_03,Коваленко —
це повноцінна база персональних даних. Тримай його поза
~/www/: у теці ~/data/ з правами 600.
На сервер він зазвичай не їде взагалі.
учень_kovalenko, k_15_lisova чи ініціали К.О. —
це не псевдоніми, а те саме прізвище іншим шрифтом. Псевдонім має бути
беззмістовним: порядковий номер або випадковий рядок.Ти замінив прізвища на учень_01…учень_24. Файл із відповідністю
поклав у ~/www/infographic/keys.csv — «щоб не загубився поруч
із даними». Що ти щойно опублікував?
У датасеті є колонка «дата народження» у форматі 2009-04-02.
Тобі для інфографіки треба показати розподіл за віком. Який мінімальний
крок дає і графік, і безпеку?
Одне правило, яке замінює всю інтуїцію: не показуй групу, у якій менш ніж п’ять людей
Уяви шкільне фото. Одна людина стоїть окремо — на неї легко показати. П’ятеро в однакових куртках стоять поруч — вибрати з них конкретну важко. Розмір такої групи й позначають буквою k.
У таблиці група — це рядки з однаковими значеннями. Знайди найменшу таку групу: скільки в ній людей, таке в тебе й k. Формально це звучить так: датасет k-анонімний, якщо в кожного рядка є ще k − 1 таких самих сусідів. Ідею запропонувала Латаня Свіні у 2002 році.
k = 1 означає, що хтось у таблиці сам-один: його видно. k = 5 означає інше. Найточніше, що можна сказати про людину, — «вона одна з п’ятьох». Поріг п’ять беруть і статистичні служби, коли публікують дані по малих районах.
data.csv є квазіідентифікаторами;інше
і напиши про це в anonymize-log.md.Найменша група — двоє (сімнадцятирічні в 10C), отже k = 2, і публікувати такий зріз ще зарано. Прибери колонку віку зовсім — лишиться три групи по вісім осіб, k = 8, і правило виконано.
Твоя інфографіка «улюблений предмет по класах» показує стовпчик висотою 1: «10B, Астрономія — 1 людина». Прізвищ на діаграмі немає. Чому цей стовпчик усе одно не можна публікувати?
Ти узагальнив вік до діапазонів і бачиш: унікальних рядків 0, найменша група — двоє. Учитель каже «недостатньо». Що зробити, щоб не викидати колонку «предмет» повністю?
Ти публікуєш зображення. Разом із ним публікуються модель телефона, час і координати
На звороті паперового знімка колись підписували дату й місце. Телефон робить це сам, тільки підпис лежить усередині файлу. Цей прихований підпис зветься EXIF — Exchangeable image file format.
Придумали його для фотографів: камера сама записувала витримку й діафрагму. Стандарт веде організація CIPA, актуальна версія — Exif 2.32. Смартфон дописує в той самий блок секцію GPSInfo — координати місця зйомки.
Найважливіше: EXIF — це частина файлу, а не властивість програми. Він їде разом із фото у месенджер, на сайт, на флешку. Одні сервіси зрізають його при завантаженні, інші — ні. Вгадувати, який саме перед тобою, не варто.
exiftool.
Значення підставлені для демонстрації: це не чиєсь реальне фото.Ліворуч — картка знімка з полями метаданих. Кнопки внизу роблять із файлом
рівно те саме, що зробив би exiftool. «Опублікувати як є» показує,
який висновок зробить стороння людина з того, що лишилося.
Усе це ти робиш у себе на комп’ютері, у теці data/lesson-03/.
На сервері фотографій немає, тому й чистити там нічого.
exiftool
Без ключа -overwrite_original програма створює поруч копію
IMG_4821.jpg_original — і в ній усі координати лишаються.
Якщо потім залити на сервер «усю теку», витік поїде разом із нею.
На Windows завантажений архів містить файл exiftool(-k).exe:
його треба перейменувати на exiftool.exe, інакше він працює лише
подвійним кліком і закривається одразу після виводу.У PNG-скриншоті EXIF зазвичай немає. Зате зайве в ньому видно очима. Ім’я користувача в шляху до файлу. Вкладки браузера. Сповіщення месенджера. Прізвища у списку чату. Відкрита мапа з твоїм домом.
Саме так дані витікають найчастіше — зі скриншота, надісланого в чат класу.
Ще одна пастка. Ти обрізав фото в редакторі, а в EXIF лишилася
мініатюра, зроблена до обрізання. Тобто те, що ти щойно відрізав.
exiftool -all= знімає й її. Видалення окремих полів — ні.
Ти сфотографував робоче місце вдома, щоб показати проєкт. Обличчя в кадрі немає, адреси на фото не видно. Чому таке фото все одно не варто публікувати без обробки?
Ти запустив exiftool -all= IMG_4821.jpg без ключа
-overwrite_original, перевірив файл — метаданих немає —
і скинув однокласнику всю теку архівом. Що ти йому надіслав?
Без юридичної казуїстики — лише те, що змінює твої дії в цьому проєкті
Приватність в Україні захищена не «правилами школи», а Цивільним кодексом і окремим законом. Тобі досить трьох норм.
| Норма | Про що вона | Що це означає для твого проєкту |
|---|---|---|
| ЦК України, ст. 302 Право на інформацію |
збирати, зберігати, використовувати й поширювати інформацію про особисте життя людини без її згоди не дозволено | опитування починається з речення «ці відповіді підуть у відкриту інфографіку», а не закінчується ним |
| ЦК України, ст. 307 Фото-, теле- та відеозйомка |
знімати людину можна лише за її згодою; згода припускається, якщо зйомка відкрита на публічному заході; людина може вимагати припинити показ у частині, що стосується її особистого життя | однокласник у кадрі — це його рішення, а не твоє; «я вже виклав» не є аргументом, він має право вимагати прибрати |
| Закон «Про захист персональних даних» № 2297-VI, 2010 |
дає означення персональних даних, вимагає конкретної мети обробки, забороняє збирати надмірні дані й зберігати їх довше, ніж потрібно; людина має право знати, які її дані в тебе є, і вимагати їх видалення | колонка «телефон» в опитуванні про улюблений предмет — надмірна за означенням; сирий файл після очищення видаляється, а не лежить «про всяк випадок» |
За тим, чи виконують цей закон, стежить окрема посадова особа. Її посада зветься довго: Уповноважений Верховної Ради України з прав людини. Простіше кажучи — це людина, якій пишуть скаргу, коли чиїсь дані опублікували без дозволу. Вона може зажадати від сайту чи школи прибрати дані, а за відмову — оштрафувати.
Європейський GDPR влаштований за тією ж логікою, але додає одну деталь.
Уяви, що ти замінив прізвища на учень_03, а таблиця відповідності
лежить у тебе на диску. Це псевдонімізація, і закон такі дані
досі захищає. А ось до по-справжньому анонімних даних закон уже
не застосовується: людини за ними немає, захищати нічого. Тому мета
уроку — довести файл до другого стану, а не до першого.
data.csv зібрано,
сирий файл із прізвищами не має жити ані на сервері, ані «в завантаженнях»
назавжди.Ти сфотографував клас під час відкритого шкільного заходу й поставив фото на сторінку проєкту. Через тиждень однокласниця просить прибрати знімок — їй не подобається, як вона вийшла. Твоя правильна дія?
data.csv, credits.md, anonymize-log.md — і нічого більше
raw.csv із прізвищами й таблиця
відповідності keys.csv залишаються на твоєму комп’ютері.
У теку ~/www/infographic/ не потрапляє жодного растрового
зображення — це окремий блокуючий критерій. Учитель дивиться сирий датасет
і вивід exiftool до та після очищення очно, з твого екрана.data.csv — очищений датасетЩонайменше 10 рядків даних і 3 колонки. Кома як роздільник, перший рядок — заголовки латиницею без пробілів. Приклад оформлення (числа умовні, свої візьмеш зі свого опитування):
Зверни увагу на останню колонку: у жодній групі не менше п’яти осіб. Це і є k = 5 у готовому вигляді. Прізвищ, телефонів, точних адрес і точного віку у файлі немає взагалі — не «замінено на зірочки», а немає.
… > data.csv дасть файл у UTF-16, і чекер на сервері
прочитає з нього кракозябри. Зберігай явно.anonymize-log.md — що саме прибрано і чомуГоловний документ уроку. Щонайменше три перетворення, кожне — рядком «колонка → що зроблено → чому». Запис без «чому» чекер поки не зарахує. Допиши причину й залий файл ще раз — спроби не обмежені. Саме «чому» показує, що ти розумієш ризик, а не копіюєш шаблон.
credits.md — походження і ліцензіяЧекер шукає в цьому файлі слова «джерело» і «ліценз». Але пишеш ти його не для чекера: наступного уроку саме з цього файлу братимуться підписи під діаграмами.
Одна з перевірок на сервері блокуюча. Вона читає всі три опублікованих файли.
Шукає чотири речі: телефон, +380, адресу електронної пошти
та запис виду «Прізвище І.П.». У списку критеріїв ця перевірка зветься
no_pii. Прожени ті самі пошуки в себе до заливання.
no_pii ловить формати, а не сенс. Колонка «нік у Telegram»,
«номер кабінету, де сидить лише один учень» чи «прізвище класного керівника»
пройдуть усі регулярки світу. Тому останній крок перед FTP — прочитати
заголовок свого CSV уголос і на кожній колонці спитати: чи можу я за нею
показати пальцем на людину?Кроки 1—11 — у твоєму терміналі й редакторі, крок 12 — заливання по FTP. Галочки зберігаються, сторінку можна закрити.
data/lesson-03/, — твоє
й лишається в тебе: raw.csv, keys.csv, тека
photos/. На сервер піднімаються рівно три текстові файли:
data.csv, credits.md, anonymize-log.md.Чекер не знає твого класу. Він читає опубліковані файли й шукає в них те, чого там бути не повинно. Спроби не обмежені.
Демонстраційний режим: результат згенеровано для показу. На сервері
ця кнопка викликає POST /api/check, який запускає
/opt/lessons/05/check.sh від імені учня.
raw.csv із прізвищами — щоб було видно,
що анонімізація справді виконана, а не датасет був порожній із самого початку;exiftool на одному твоєму фото до й після
очищення: у першому GPS є, у другому вивід порожній;raw.csv конкретний рядок і кажеш, у що він
перетворився в data.csv і чому;~/www/infographic/ немає нічого, крім трьох текстових файлів.Це те, що бачить учитель, коли виставляє оцінку.
| Складник | Вага | Результат |
|---|
exiftool -all=
працює до публікації, після — вже пізно.К. О. — ідентифікація зберігається;~/www/;-overwrite_original і залишають поруч
.jpg_original з усіма координатами;~/www/infographic/ —
це відразу зупиняє блокуючий критерій no_media.Знайди приклад реального витоку через «анонімізовані» дані.
Підійде Netflix Prize, пошукові логи AOL, теплова карта Strava або будь-який інший.
Опиши його в credits.md п’ятьма реченнями.
Перше — які дані опублікували. Друге — що до них додали ззовні. Третє — кого й як упізнали. Четверте — чим це закінчилося. П’яте — який висновок ти зробив для власного датасету.
Усе, що на цій сторінці подано як факт, має посилання. Перевіряти дозволено й корисно.
-all=,
-gps:all=, -overwrite_original.
exiftool.orgПовний список із поясненнями, що звідки взято, —
у файлі urok-05-джерела.md поруч із цією сторінкою.