Skip to content
Урок 4. Подпись против подмены

Урок 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–5RetrievalМини-квиз по урокам 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 байт:

СмещениеРазмерПолеНазначение
01fox_idномер лисы (1…5)
14fcntсчётчик кадров (урок 5)
52bat_mvнапряжение питания, мВ
71tx_pwr_dbmмощность передатчика
81signatureподпись по байтам 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):

i01234567
данные0164000000E40C02
ключDEADBEEFCAFE1337

Ответ: подпись = 0xBD.

Разбор для педагога

Считается накопительно: sig ⊕= данные[i] ⊕ ключ[i].

Более быстрый путь для проверки: поскольку XOR коммутативен, результат равен

XOR всех данныхXOR всех байтов ключа=0x8F0x32=0xBD\text{XOR всех данных} \oplus \text{XOR всех байтов ключа} = \text{0x8F} \oplus \text{0x32} = \text{0xBD}

Обратите внимание на этот факт — он понадобится на уроке 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

Задание. Посчитайте подпись:

i01234567
данные0164000000E40C02
ключDEADBEEFCAFE1337
XOR

Подпись = ______

Моя модель угроз для стенда:

Что может злоумышленникЗакрыто? Чем?

Домашнее задание

Обязательная часть

Врайтап по рубрике А. Обязательный пункт: объясните своими словами, как приёмник отличает подделку, не видя отправителя.

Уровень A

Придумать свою систему подписи для записок с другом (правило + секрет). Проверить: сможет ли посторонний подделать записку, зная только правило, но не секрет?

Уровень B

Посчитать подписи для трёх пакетов с разными fcnt (1, 2, 3) при прочих равных полях. Заметить, как меняется подпись при изменении одного байта данных.

Уровень C

Изучить, как устроен HMAC (код аутентификации на основе хеш-функции). Объяснить письменно, чем он принципиально надёжнее нашей XOR-схемы. Подсказка: обратить внимание на то, что XOR — линейная операция, а хеш-функция — нет.

Ориентир для педагога

Ключевое отличие: в XOR-схеме изменение бита данных предсказуемо меняет соответствующий бит подписи — злоумышленник может рассуждать о структуре. В HMAC изменение одного бита входа меняет примерно половину битов выхода непредсказуемым образом (лавинный эффект), а обратить хеш-функцию вычислительно невозможно.

Это готовит урок 6, где линейность нашей схемы окажется фатальной.


Итог урока: что записать в журнал

Вывод урока 4

  1. Приёмник не видит отправителя — он получает только байты. Доверие строится на математике.
  2. Подпись — число, вычисленное из всех полей пакета и секретного ключа.
  3. Кто не знает ключа, не подделает подпись под свои данные.
  4. Подпись даёт аутентичность (тот ли отправитель) и целостность (не изменились ли данные), но не даёт конфиденциальности.
  5. CRC защищает от случайных ошибок, подпись — от намеренной подделки. Это разные задачи.
  6. Наша подпись длиной 1 байт намеренно слабая — на уроке 6 мы её сломаем.

Связь с курсом

Что родилось на этом урокеГде станет инструментом
Модель угрозPowerSentry урок 7 (безопасность инфраструктуры)
Аутентификация сообщенияPowerSentry (AES-CMAC в LoRaWAN)
Различение свойств защитыЛюбая работа с протоколами
«Защита строится под модель угроз»Защита выпускного проекта

Чек-лист педагога перед уроком

  • Фальшлиса прошита, кнопка переключения атак работает
  • Проверено: атака 1 даёт SIG:FAIL и [FAKE] на охотнике
  • Настоящая лиса рядом — для контраста показать корректный приём
  • Раздаточный лист распечатан
  • Фальшлиса работает на минимальной мощности, только в помещении
  • Помнить: правовая рамка (документ 4) обязательна перед уроком 6, здесь достаточно оговорки «это наше железо»