Урок 4. Подпись против подмены
Урок 4. Подпись против подмены (spoofing)
Паспорт урока
| Параметр | Значение |
|---|---|
| Место в модуле | FoxHunter, модуль 2 «Безопасность протокола», урок 4 из 6 |
| Длительность | 45 мин |
| Возраст | 13–16 |
| Оборудование | Лиса, охотник, фальшлиса (FoxHunt_FakeFox), кнопка атак |
| Предварительные знания | Уроки 1–3; понятие пакета данных |
| Предмет | Информатика, основы информационной безопасности |
Условие допуска к модулю 2. Уроки 4–6 проводятся только после того, как дети уверенно ищут лис. Порядок принципиален: сначала ребёнок должен полюбить сигнал и научиться ему доверять — и лишь затем узнать, что доверие можно обмануть. Обратный порядок разрушает мотивацию.
Перед уроком 6 обязательна процедура из документа 4 экспертизы (правовая рамка, подписание правил). Урок 4 в ней не нуждается — здесь только защита.
Образовательные цели
| № | Цель | Блум | Миллер | Чем доказывается |
|---|---|---|---|---|
| 4.1 | Объяснять, как подпись обеспечивает аутентификацию без знания отправителя | понимать | знает как | Ответ: какое поле выдало подделку |
| 4.2 | Различать целостность, аутентичность и конфиденциальность | анализировать | знает как | Классификация трёх свойств на примерах |
| 4.3 | Строить простейшую модель угроз для радиоканала | анализировать | показывает как | Перечень: что может злоумышленник |
Сценарий занятия (45 минут)
| Время | Блок | Что делает педагог | Что делают ученики |
|---|---|---|---|
| 0–5 | Retrieval | Мини-квиз по урокам 1–3 | Пишут, разбор |
| 5–12 | Провокация | Включает фальшлису (атака 1), не объясняя | Видят [FAKE], недоумевают |
| 12–20 | Модель угроз | «Что вообще может злодей в эфире?» | Составляют перечень |
| 20–33 | Теория подписи | Как работает проверка | Считают подпись руками |
| 33–42 | Практика | Разбор задач | Решают свой уровень |
| 42–45 | Итог и ДЗ | Фиксация вывода | Записывают |
Блок 1. Провокация (5–12 мин)
Постановка
«Мы научились находить лис. Прибор нам верно служил. Сегодня я включу ещё один передатчик — и посмотрим, что будет.»
Педагог включает фальшлису в режиме атаки 1 (подмена). Она шлёт пакеты с верным fox_id, растущим fcnt, но испорченной подписью.
Что увидят дети
- В мониторе охотника:
[SEC] REJECT ... SIG:FAIL - На экране:
[FAKE] - Зуммер молчит — охотник не признаёт эти пакеты за лису.
Разговор
«Передатчик работает, пакеты идут, охотник их слышит — и отказывается принимать. Он говорит: это подделка. Откуда он знает?»
Пусть класс выдвигает гипотезы. Типичные:
| Гипотеза ученика | Ответ педагога |
|---|---|
| «Он видит, что сигнал с другой стороны» | Проверим: переставим фальшлису туда, где стояла настоящая. Всё равно [FAKE] |
| «У фальшивки другая частота» | Нет, частота та же — иначе охотник бы её вообще не услышал |
| «В пакете что-то не то» | Тепло. Что именно может быть «не то»? |
| «Там есть какая-то проверка» | Это нужный ответ |
Ключевая формулировка проблемы
На доску:
Приёмник не видит отправителя. Он получает только байты. Как по одним байтам понять, кто их послал?
Блок 2. Модель угроз (12–20 мин)
Прежде чем изучать защиту, нужно понять, от чего защищаемся. Это называется моделью угроз.
Упражнение «что может злодей»
Класс составляет перечень. Педагог достраивает до полного:
| Что может злоумышленник | Название | Наш случай |
|---|---|---|
| Слушать чужие пакеты | перехват (eavesdropping) | может: эфир открыт |
| Послать свой пакет от чужого имени | подмена (spoofing) | урок 4 |
| Записать чужой пакет и послать снова | повтор (replay) | урок 5 |
| Изменить пакет по дороге | модификация | требует сложной аппаратуры |
| Заглушить эфир помехой | глушение (jamming) | может, но это заметно |
| Подобрать секрет перебором | брутфорс | урок 6 |
Три свойства защищённой связи — их надо развести явно, дети их путают:
| Свойство | Вопрос, на который отвечает | Механизм |
|---|---|---|
| Конфиденциальность | Может ли посторонний прочитать? | шифрование |
| Целостность | Изменились ли данные по дороге? | контрольная сумма, подпись |
| Аутентичность | Тот ли, за кого себя выдаёт, послал? | подпись с секретным ключом |
Наш маяк не секретен — координаты лисы никого не интересуют, шифрование не нужно. Но нам критична аутентичность: важно, чтобы чужой не смог притвориться лисой.
Важное различение: CRC против подписи
Дети уже знают CRC (в BeaconRadio). Разница принципиальна:
| CRC | Подпись | |
|---|---|---|
| Против чего защищает | случайных искажений (помеха, шум) | намеренной подделки |
| Нужен ли секрет | нет, алгоритм общеизвестен | да, секретный ключ |
| Может ли злодей подделать | да, легко — пересчитает CRC | нет, если не знает ключа |
CRC защищает от природы. Подпись защищает от человека. Природа не хитрит — человек хитрит.
Блок 3. Теория: как работает подпись (20–33 мин)
3.1. Базовый уровень (13–14 лет)
Через записку с секретным словом.
Представь, что вы с другом договорились: в конце каждой записки пишете число, полученное по секретному правилу — например, «сложить все буквы по алфавиту и прибавить наше секретное число 7».
Ты получаешь записку. Пересчитываешь по тому же правилу. Сошлось — записка от друга: постороннему неоткуда узнать секретное число. Не сошлось — подделка.
Важно: ты не видел, кто писал записку. Ты доверяешь ей только потому, что сошлась математика.
Перенос на пакет:
Лиса берёт все поля пакета (номер, счётчик, напряжение, мощность), смешивает их с секретным ключом по известному правилу и приписывает результат последним байтом. Охотник знает то же правило и тот же ключ — он пересчитывает и сравнивает.
3.2. Углублённый уровень (14–16 лет)
Шаг 1. Структура пакета.
Пакет маяка занимает 9 байт:
| Смещение | Размер | Поле | Назначение |
|---|---|---|---|
| 0 | 1 | fox_id | номер лисы (1…5) |
| 1 | 4 | fcnt | счётчик кадров (урок 5) |
| 5 | 2 | bat_mv | напряжение питания, мВ |
| 7 | 1 | tx_pwr_dbm | мощность передатчика |
| 8 | 1 | signature | подпись по байтам 0…7 |
Шаг 2. Как считается подпись.
Функция foxCalcSignature() проходит по всем байтам данных и смешивает их с ключом:
sig = 0
для каждого байта i от 0 до 7:
sig = sig XOR данные[i] XOR ключ[i mod 8]Ключ — 8 байт: DE AD BE EF CA FE 13 37.
Шаг 3. Что даёт операция XOR.
XOR (исключающее ИЛИ) — побитовая операция со свойствами:
| Свойство | Запись | Смысл |
|---|---|---|
| Самообратность | a ⊕ a = 0 | применённая дважды, отменяет себя |
| Нейтральный элемент | a ⊕ 0 = a | ноль ничего не меняет |
| Коммутативность | a ⊕ b = b ⊕ a | порядок не важен |
Именно самообратность делает XOR удобным для контрольных сумм: если хотя бы один бит данных изменился, результат изменится.
Шаг 4. Проверка на приёмнике.
принят пакет
считаем подпись по байтам 0..7 своим ключом
сравниваем с байтом 8
совпало -> пакет подлинный, обрабатываем
не совпало -> [FAKE], отбрасываемШаг 5. Почему злоумышленник не может подделать.
Он видит все 9 байт в эфире. Он может изменить данные. Но чтобы пакет приняли, ему нужно приписать правильную подпись, а она зависит от ключа, которого у него нет.
Честное предупреждение, которое надо сказать детям прямо сейчас. Наша подпись — намеренно слабая, и на уроке 6 мы её взломаем. Она длиной 1 байт: всего 256 возможных значений. Настоящие системы используют 4-байтовый MIC на базе AES-CMAC. Мы начинаем с игрушечной версии, чтобы понять принцип, а затем увидим, почему её недостаточно.
Это не недоработка проекта — это его замысел.
Блок 4. Практикум: считаем подпись руками (внутри блока 3)
Раздать пример пакета и посчитать подпись на бумаге. Работа в парах.
Дано: лиса №1, fcnt = 100, bat_mv = 3300, tx_pwr = 2 дБм.
Байты пакета (little-endian):
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| данные | 01 | 64 | 00 | 00 | 00 | E4 | 0C | 02 |
| ключ | DE | AD | BE | EF | CA | FE | 13 | 37 |
Ответ: подпись = 0xBD.
Разбор для педагога
Считается накопительно: sig ⊕= данные[i] ⊕ ключ[i].
Более быстрый путь для проверки: поскольку XOR коммутативен, результат равен
Обратите внимание на этот факт — он понадобится на уроке 6 и является ключом к уязвимости схемы.
Блок 5. Практические задачи (33–42 мин)
Уровень A (13–14 лет)
A1. Охотник напечатал SIG:FAIL. Что это означает?
Ответ
Подпись в пакете не совпала с той, которую охотник посчитал сам. Значит, пакет отправлен тем, кто не знает секретного ключа, — это подделка. Охотник её отбрасывает.
A2. Фальшлиса поставила правильный fox_id = 1. Почему этого не хватило, чтобы обмануть охотника?
Ответ
Номер лисы — открытое поле, его видно в эфире и подставить может кто угодно. Проверяется не он, а подпись, которую без ключа посчитать нельзя.
A3. Чем подпись отличается от контрольной суммы CRC?
Ответ
CRC защищает от случайных ошибок (помехи в эфире) и считается по общеизвестному правилу — злоумышленник легко пересчитает её для своих данных. Подпись требует секретного ключа, поэтому защищает от намеренной подделки.
Уровень B (14–15 лет)
B1. Посчитайте подпись для пакета: fox_id = 2, fcnt = 1, bat_mv = 3000, tx_pwr = 14.
Решение
Байты данных: 02 01 00 00 00 B8 0B 0E
XOR данных: 02 ⊕ 01 ⊕ 00 ⊕ 00 ⊕ 00 ⊕ B8 ⊕ 0B ⊕ 0E = 0xBC
XOR ключа: DE ⊕ AD ⊕ BE ⊕ EF ⊕ CA ⊕ FE ⊕ 13 ⊕ 37 = 0x32
Подпись: 0xBC ⊕ 0x32 = 0x8E
B2. Злоумышленник перехватил пакет и хочет изменить поле bat_mv, оставив остальное. Что ему помешает?
Ответ
Изменение любого байта данных меняет подпись. Он должен пересчитать её — но для этого нужен ключ. Без ключа он может лишь подставить случайное значение подписи, которое почти наверняка не совпадёт (шанс 1 из 256).
B3. Наш маяк не шифруется — любой может прочитать содержимое пакета. Это уязвимость?
Разбор
Для нашей задачи — нет. Содержимое (номер лисы, счётчик, напряжение батареи) не является секретом: лиса и так кричит на весь эфир, а её положение ученики ищут именно по сигналу.
Защищать нужно не конфиденциальность, а аутентичность: чтобы чужой не притворился лисой. Именно это и делает подпись.
Общий принцип: защита строится под конкретную модель угроз. Шифровать то, что не является секретом, — трата ресурсов. Но если бы маяк передавал, например, координаты человека, конфиденциальность стала бы критичной.
Уровень C (15–16 лет)
C1. Предложите модификацию атаки, при которой злоумышленник обходит проверку подписи не зная ключа. (Подсказка: он не обязан создавать новый пакет.)
Разбор
Ответ: повторить чужой валидный пакет без изменений. Подпись в нём уже правильная — злоумышленник её не считал, а скопировал вместе с данными.
Это replay-атака, и подпись от неё не защищает принципиально: она подтверждает, что пакет когда-то был создан владельцем ключа, но ничего не говорит о том, когда.
Это точная подводка к уроку 5. Если ученик дошёл до этого сам — отметить публично.
C2. Подпись занимает 1 байт из 9, то есть 11% пакета. Оцените, во сколько раз вырастет пакет при переходе на 4-байтовый MIC, и что это означает для времени в эфире.
Решение
Пакет вырастет с 9 до 12 байт, то есть на 33%.
Время в эфире при SF7/BW125 растёт не пропорционально: LoRa упаковывает данные символами. Для 9 байт airtime ≈ 41 мс, для 12 байт ≈ 46 мс — прирост около 12%.
Вывод: плата за серьёзную защиту невелика — примерно десятая часть эфирного времени. Для маяка, вещающего трижды в секунду, это приемлемо. Именно поэтому в промышленных протоколах 4-байтовый MIC — норма, а не роскошь.
C3. Постройте полную модель угроз для нашего стенда: перечислите угрозы, укажите, какие механизмы их закрывают, и назовите оставшиеся незакрытыми.
Разбор
| Угроза | Закрыта? | Чем |
|---|---|---|
| Подмена (spoofing) | частично | подпись (слабая — 1 байт) |
| Повтор (replay) | да | счётчик fcnt (урок 5) |
| Перехват/чтение | нет | шифрования нет — осознанно, содержимое не секретно |
| Брутфорс подписи | нет | 256 вариантов, урок 6 |
| Глушение (jamming) | нет | принципиально не закрывается на этом уровне |
| Модификация в полёте | да | подпись изменится |
Незакрытые угрозы и почему это приемлемо: перехват не страшен (нет секретов), глушение обнаруживается по пропаже сигнала и не даёт злоумышленнику преимущества в игре, брутфорс — учебная демонстрация урока 6.
Главный вывод: честная модель угроз всегда содержит незакрытые пункты. Инженерная зрелость — не в том, чтобы закрыть всё, а в том, чтобы знать, что осталось открытым, и обосновать, почему это допустимо.
Ответы на вопросы, которые прозвучат
| Вопрос ученика | Как отвечать |
|---|---|
| «А если злодей узнает ключ?» | Тогда защита рушится полностью. Поэтому ключ хранят в устройстве и не передают в эфир. В промышленных системах используют OTAA: ключи выдаются при подключении и не лежат в прошивке |
| «Почему нельзя просто зашифровать?» | Шифрование скрывает содержимое, но не мешает подделке: злоумышленник может послать случайный «шифротекст». Нужна именно подпись. В реальных системах применяют оба механизма |
| «Наш ключ виден в исходниках, это же неправильно?» | Абсолютно верное наблюдение. Это учебный стенд, ключ намеренно открыт. В боевой системе так делать нельзя — и на уроке 6 мы увидим, почему даже секретный ключ здесь не спасает |
| «Можно ли подделать подпись случайно?» | Да, с вероятностью 1/256 — примерно 0,4%. При потоке в 3 пакета в секунду случайное совпадение произойдёт примерно раз в полторы минуты. Это ещё один довод против однобайтовой подписи |
| «Зачем нужен CRC, если есть подпись?» | Подпись здесь заменяет CRC: она ловит и случайные искажения тоже. В нашем пакете отдельного CRC нет — есть аппаратный CRC самой LoRa |
Раздаточный лист (для печати)
Урок 4. Подпись против подмены
Три свойства защищённой связи:
Свойство Вопрос Механизм Нужно ли нам? Конфиденциальность могут прочитать? шифрование Целостность данные изменились? контрольная сумма Аутентичность тот ли отправитель? подпись с ключом Структура пакета (9 байт):
[0] [1 2 3 4] [5 6] [7] [8] fox_id fcnt bat_mv tx_pwr ПОДПИСЬ └──────── данные, по которым считается подпись ───┘Алгоритм подписи:
sig = 0 для i от 0 до 7: sig = sig XOR данные[i] XOR ключ[i]Ключ:
DE AD BE EF CA FE 13 37Задание. Посчитайте подпись:
i 0 1 2 3 4 5 6 7 данные 01 64 00 00 00 E4 0C 02 ключ DE AD BE EF CA FE 13 37 XOR Подпись = ______
Моя модель угроз для стенда:
Что может злоумышленник Закрыто? Чем?
Домашнее задание
Обязательная часть
Врайтап по рубрике А. Обязательный пункт: объясните своими словами, как приёмник отличает подделку, не видя отправителя.
Уровень A
Придумать свою систему подписи для записок с другом (правило + секрет). Проверить: сможет ли посторонний подделать записку, зная только правило, но не секрет?
Уровень B
Посчитать подписи для трёх пакетов с разными fcnt (1, 2, 3) при прочих равных полях. Заметить, как меняется подпись при изменении одного байта данных.
Уровень C
Изучить, как устроен HMAC (код аутентификации на основе хеш-функции). Объяснить письменно, чем он принципиально надёжнее нашей XOR-схемы. Подсказка: обратить внимание на то, что XOR — линейная операция, а хеш-функция — нет.
Ориентир для педагога
Ключевое отличие: в XOR-схеме изменение бита данных предсказуемо меняет соответствующий бит подписи — злоумышленник может рассуждать о структуре. В HMAC изменение одного бита входа меняет примерно половину битов выхода непредсказуемым образом (лавинный эффект), а обратить хеш-функцию вычислительно невозможно.
Это готовит урок 6, где линейность нашей схемы окажется фатальной.
Итог урока: что записать в журнал
Вывод урока 4
- Приёмник не видит отправителя — он получает только байты. Доверие строится на математике.
- Подпись — число, вычисленное из всех полей пакета и секретного ключа.
- Кто не знает ключа, не подделает подпись под свои данные.
- Подпись даёт аутентичность (тот ли отправитель) и целостность (не изменились ли данные), но не даёт конфиденциальности.
- CRC защищает от случайных ошибок, подпись — от намеренной подделки. Это разные задачи.
- Наша подпись длиной 1 байт намеренно слабая — на уроке 6 мы её сломаем.
Связь с курсом
| Что родилось на этом уроке | Где станет инструментом |
|---|---|
| Модель угроз | PowerSentry урок 7 (безопасность инфраструктуры) |
| Аутентификация сообщения | PowerSentry (AES-CMAC в LoRaWAN) |
| Различение свойств защиты | Любая работа с протоколами |
| «Защита строится под модель угроз» | Защита выпускного проекта |
Чек-лист педагога перед уроком
- Фальшлиса прошита, кнопка переключения атак работает
- Проверено: атака 1 даёт
SIG:FAILи[FAKE]на охотнике - Настоящая лиса рядом — для контраста показать корректный приём
- Раздаточный лист распечатан
- Фальшлиса работает на минимальной мощности, только в помещении
- Помнить: правовая рамка (документ 4) обязательна перед уроком 6, здесь достаточно оговорки «это наше железо»