Вход вскрытия (tamper) STM32
Счётчик электроэнергии, терминал оплаты или прибор с секретным ключом должны заметить, что их корпус открыли, даже если питание выключено. Для этого у STM32 есть вход вскрытия — tamper: событие на нём мгновенно стирает резервные регистры.
Обновлено Редакция GAW
Вход вскрытия (tamper detection) — вход STM32, событие на котором мгновенно сбрасывает резервные регистры. К нему подключают контакт крышки корпуса или защитную сетку: если прибор открыли, секретные данные в резервных регистрах исчезают. Блок относится к резервному домену и работает даже при выключенном VDD, пока есть питание на VBAT (RM0008, разд. 6.3.1; RM0090, разд. 26.3.13).
STM32F1: один вывод TAMPER
У STM32F1 один вывод TAMPER, совмещённый с PC13. Бит TPAL в BKP_CR выбирает активный уровень, бит TPE включает вход, TPIE — прерывание. Событие возникает по фронту и сбрасывает все регистры BKP_DRx. Важная тонкость: фронт объединён с разрешением, поэтому если вывод уже в активном уровне в момент включения, событие произойдёт сразу. После обработки события RM0008 требует выключить и снова включить вход, прежде чем писать в резервные регистры, — так программа не запишет данные, пока крышка всё ещё открыта (разд. 6.3.1).
STM32F4: два входа, фильтр и метка времени
RTC STM32F4 имеет два входа вскрытия; TAMPER1 подключается к PC13 или PI8. Каждый работает в одном из двух режимов (RM0090, разд. 26.3.13):
- по фронту (TAMPFLT = 00) — как у STM32F1, внутренняя подтяжка отключена;
- по уровню с фильтром — событие засчитывается после 2, 4 или 8 одинаковых отсчётов подряд; перед каждым отсчётом вход заряжается через внутреннюю подтяжку, а частота опроса TAMPFREQ задаёт компромисс между задержкой и током потребления.
Событие сбрасывает 20 регистров RTC_BKPxR, а при TAMPTS = 1 ещё и защёлкивает метку времени — прибор потом знает, когда его вскрыли.
На что обратить внимание
- Без питания вход по-прежнему активен, поэтому вывод обязательно подтягивают к неактивному уровню внешним резистором — RM0008 и RM0090 требуют этого прямо.
- Вход вскрытия защищает только резервные регистры. Прошивку от чтения защищает отдельный механизм — защита от чтения RDP.
- У STM32F1 тот же вывод служит калибровочным выходом RTC; пока он включён (бит CCO), вход вскрытия включать нельзя (RM0008, разд. 6.4.2).
В новых сериях функции вскрытия вынесены в отдельный блок TAMP (по названию AN4759), но идея та же. Тактирование и делители RTC — в калькуляторе RTC STM32.
Частые вопросы
Что именно стирается при срабатывании?
Резервные регистры: у STM32F1 — регистры данных BKP_DRx, у STM32F4 — 20 регистров RTC_BKPxR, 80 байт (RM0008, разд. 6.3.1; RM0090, разд. 26.3.13). Руководства называют сбрасываемыми именно резервные регистры, поэтому в резервные регистры кладут то, что нельзя отдать злоумышленнику, например ключ или признак целостности.
Работает ли вход вскрытия без основного питания?
Да. Обнаружение вскрытия остаётся активным при выключенном VDD, пока резервный домен питается от VBAT (оба руководства говорят об этом прямо). Отсюда требование: вывод нужно внешне подтянуть к неактивному уровню, иначе наводка без питания сотрёт резервные регистры.
Можно ли использовать PC13 и как вход вскрытия, и как светодиод?
Одновременно нет: при включённом входе вскрытия вывод принадлежит RTC. У STM32F1 на тот же вывод выводится и калибровочный такт RTC, и RM0008 запрещает включать вход вскрытия, пока стоит бит CCO. Для индикатора лучше взять другой вывод — PC13 к тому же питается через слабый ключ резервного домена.
Источники
- STMicroelectronics. RM0008 Reference manual STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx (Rev 21) — разд. 6.3.1: вывод TAMPER даёт событие при переходе 0→1 или 1→0 в зависимости от бита TPAL в BKP_CR; событие сбрасывает все резервные регистры данных; сигнал фронта логически объединён с разрешением TPE, поэтому при уже активном уровне событие возникает сразу при включении; прерывание по биту TPIE в BKP_CSR; после события вывод выключают и снова включают (TPE) перед записью в BKP_DRx — это равносильно детектированию уровня; обнаружение работает и при выключенном VDD, вывод нужно внешне подтянуть к нужному уровню; разд. 6.4.2: при CCO вывод TAMPER выводит такт RTC/64, и включать вход вскрытия нельзя
- STMicroelectronics. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437, STM32F429/439 (Rev 21) — разд. 26.3.13: два входа вскрытия, по фронту или по уровню с фильтром; событие сбрасывает 20 резервных регистров RTC_BKPxR (80 байт); входы включают биты TAMP1E/TAMP2E в RTC_TAFCR, флаги TAMP1F/TAMP2F, прерывание TAMPIE; при TAMPTS = 1 событие ставит метку времени; при TAMPFLT = 00 — детектирование фронта по TAMPxTRG, внутренняя подтяжка отключена; при TAMPFLT ≠ 0 событие после 2, 4 или 8 одинаковых отсчётов, вход предзаряжается подтяжкой (TAMPPUDIS, TAMPPRCH), частота опроса TAMPFREQ; работает при выключенном VDD; TAMPER1 подключается к PC13 (RTC_AF1) или PI8 (RTC_AF2) битом TAMP1INSEL
Нашли ошибку?
Смотрите также
- Резервный домен (backup domain)Часть STM32 с питанием от VBAT: RTC, LSE и резервные регистры
- RTCСчётчик времени в режимах сна: источники такта, счётчик и календарь
- Защита от чтения (RDP)Запрет чтения прошивки STM32 отладчиком и загрузчиком
- Часы RTC STM32PREDIV_A, PREDIV_S, PRL, калибровка CALP/CALM и CAL, уход в с/сут
- Калибровка RTC STM32 (smooth calibration)Цифровая поправка хода RTC STM32 маскированием импульсов: CALM, CALP, ppm