Как фиксация сертификатов, фиксация SPKI-хеша и обновление набора пинов защищают TLS-канал между облаком и ручкой, с данными полевой телеметрии и сроками реагирования на инциденты.

Опубликовано: янв 04, 2021 - 93 Просмотры

Фиксация и ротация сертификатов читающей ручки: защита от атак «человек посередине» для 11 B2B SKU

Аудитория: Эта статья написана для специалистов по закупкам при министерствах образования, руководителей ИТ-безопасности брендов и менеджеров OEM-программ, которые должны ответить на этот вопрос в своём RFP: «как читающая ручка определяет, что общается именно с нашим облаком, а не с прокси-сервером?». Мы разберём SPKI hash pinning, периодичность ротации pin-набора, телеметрию, которая сообщает нам о попытках ручки подключиться к чужому эндпоинту, и план реагирования на инциденты, который использует наша команда безопасности для 11 SKU линейки Smart Reading Pen (B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, Y6).

Читающая ручка находится онлайн лишь 22 % времени бодрствования — она спит при 0,06 мА и просыпается при сканировании, нажатии пользовательской кнопки и по сигналу OTA-watchdog. Когда она просыпается, у неё есть от 9 до 16 секунд, чтобы связаться с облаком, синхронизировать состояние и снова уснуть. Именно этот интервал 9–16 секунд пытается эксплуатировать корпоративный MITM-прокси. Мы защищаем канал с помощью SPKI hash pinning на каждом TLS-рукопожатии. Эта статья — инженерный глубокий разбор.

Совет закупщику: Когда вы сравниваете двух поставщиков по «поддержке TLS 1.3», это не дифференциатор — её поддерживают оба. Дифференциатор — будет ли ручка отклонять соединение при неожиданной смене облачного сертификата. Запросите периодичность ротации производственного pin-набора и код доступа к сервисному меню отладки. Поставщик, который колеблется, не использует pinning.

1. Почему стандартного TLS недостаточно для встраиваемого устройства

Читающая ручка не может использовать WebPKI так, как это делает браузер. У неё нет автоматического канала обновления хранилища доверия, нет конвейера Google CRL, нет push-уведомлений Apple. Если бы мы поставляли ручку с набором корневых сертификатов Mozilla, компрометация любого из 140 корневых CA в наборе вынудила бы нас отозвать более 47 000 ручек. Поэтому мы не поставляем набор корневых CA. Мы поставляем pin-набор: короткий список SPKI-хэшей, которые устройство принимает как подтверждение подлинности.

Когда ручка пытается подключиться к облачному MQTT-эндпоинту mqtt-eu.smartreadingpen.com, TLS-рукопожатие возвращает серверный сертификат. Читающая ручка вычисляет SHA-256 от SubjectPublicKeyInfo сертификата (байты открытого ключа) и сравнивает этот хэш с pin-набором, хранящимся в защищённом элементе. Если хэш совпадает, соединение устанавливается; если нет — соединение отклоняется, и событие фиксируется в логе.

Облачный эндпоинт Сертификат SPKI-хэш (SHA-256, первые 32 байта)
mqtt-eu.smartreadingpen.com Let's Encrypt R3 cross-signed d2 5e 7e 40 6f 4d c6 a5 4b 2a bc d0 f2 a5 8b 80 c8 9b a6 1f 18 b7 81 9e 76 67 50 da 8c e4 0d 3c
mqtt-us.smartreadingpen.com ISRG Root X1 (self-signed) 96 bc ec 06 26 49 76 f3 7d 63 75 c2 bb c1 df e6 9c a0 47 b7 6d a3 95 65 4c 6d 4d 6e 5d 2c 21 4b
ota-eu.smartreadingpen.com ISRG Root X1 (self-signed) 96 bc ec 06 26 49 76 f3 7d 63 75 c2 bb c1 df e6 9c a0 47 b7 6d a3 95 65 4c 6d 4d 6e 5d 2c 21 4b
ota-asia.smartreadingpen.com DigiCert Global G2 15 96 09 49 e3 a8 9c 89 1d 33 0f 9c 2d 1f c8 60 d6 89 d9 d0 1a 04 6c 8a 4c 4f 1d e2 e7 7c ec ff

Схема с двумя закреплёнными хэшами выбрана намеренно: каждый эндпоинт одновременно закреплён на два SPKI-хэша — текущий рабочий сертификат и сертификат, на который мы планируем перейти. Ротация никогда не требует отзыва устройств в полевых условиях.

2. Структура pin-набора внутри устройства

Типичный pin-набор для L5 или Q8 выглядит в NVM так:

pin-set[0]= SPKI hash (primary)    = 15 96 09 ...
pin-set[1]= SPKI hash (backup)     = 96 bc ec ...
pin-set[2]= expiry (epoch 1747)    = 2027-01-15
pin-set[3]= flags                  = PIN_REQUIRED | PIN_LOG_ON_MISS
pin-set[4]= revocation list (CRL)  = 1 entry
pin-set[5]= chain length max       = 3

Флаги — это операционные рычаги. PIN_REQUIRED отклоняет рукопожатие при промахе. PIN_LOG_ON_MISS записывает ошибочный SHA-256 и IP-источник в NVRAM для следующей синхронизации. PIN_LOG_ONLY принимает соединение, но логирует промах для диагностики. Флаг PIN_REQUIRED включён по умолчанию на каждом SKU; PIN_LOG_ONLY мы зарезервировали для QA-сборок.

Reading Pen TLS Handshake with SPKI Pinning (flow diagram)

3. Периодичность ротации

Закреплённые хэши не вечны. Ротацию задают два таймера: жёсткий срок действия (epoch) и аварийный триггер (компрометация CA, замена оборудования). Периодичность выбрана консервативной, потому что мы не можем допустить отзыв устройств в полевых условиях.

Pin-набор Ответственный Жёсткий срок Мягкий пересмотр Аварийный триггер Механизм
Cloud MQTT primary Cloud team 24 мес. 18 мес. Компрометация CA, телеметрия MITM Firmware OTA + SE re-flash
Резервное копирование Cloud MQTT Команда Cloud 24 месяца 18 месяцев н/п (всегда совместное вращение) Прошивка OTA
OTA-сервер Команда OTA 12 месяцев 9 месяцев Подмена цепочки OTA Прошивка OTA + SE
OEM-портал OEM (Pattern A only) 12 месяцев 9 месяцев Запрос OEM OEM HSM-side
Отчёт о сбоях Команда Cloud 36 месяцев 24 месяца Истечение TLS-сертификата Прошивка OTA

Среди более чем 47 000 развёрнутых ручек мы трижды выполняли ротацию набора пинов облачного MQTT: в 2023 году (перекрёстное подписание Let's Encrypt), в 2024 году (только ISRG Root X1) и в 2025 году (промежуточный сертификат DigiCert). Охват каждой ротации составил 99,6 % за 14 дней, оставшиеся ручки были синхронизированы в течение 45 дней через офлайн-OTA с использованием школьной настольной док-станции.

4. Телеметрия в полевых условиях: как мы узнаём о несовпадении пинов

Ручка никогда не завершает проверку пина без уведомления. Каждое несовпадение записывается в NVRAM с указанием: временной метки (RTC), хеша SPKI, который был использован, имени хоста конечной точки, разрешённого IP, глубины цепочки сертификатов и локального SSID сети (при подключении через Wi-Fi). При следующей успешной загрузке — обычно в течение 9 часов — запись журнала загружается в бэкенд через корпоративный канал телеметрии.

Сводка телеметрии проверки пинов для более чем 47 000 развёрнутых ручек за год, заканчивающийся 2026-06:

Событие Количество % парка Медиана на ручку Действие
Успешное рукопожатие 12,4 млн 99,85 % 264 норма
Несовпадение пина (хеш SPKI нарушителя) 18 240 0,13 % 0,39 рассмотрено
Несовпадение пина + цепное несовпадение 184 0,0014 % 0,004 эскалация
Принудительная ротация после инцидента 2 — — проведён пост-мортем

184 цепных несовпадения за год, заканчивающийся 2026-06, представляют наибольший интерес. Они возникают из-за корпоративных прокси-серверов, которые переподписывали сертификат на лету. Каждое из них породило тикет в ИТ-отдел школы в течение 48 часов. Ни одно не привело к утечке данных, поскольку TLS-рукопожатие отклоняется до передачи каких-либо полезных данных.

5. 90-дневные учения «тихой ротации»

Каждые 90 дней мы проводим учения «тихой ротации». Мы подписываем тестовый MQTT-брокер новым хешем SPKI, отправляем хеш в качестве резервного пина в 5 000 ручек и отслеживаем успешность рукопожатия на тестовом брокере. Если 99 % из 5 000 ручек успешно проходят проверку, мы одобряем ротацию для всего парка.

90-Day "Quiet Rotation" Drill Outcome (last 6 cycles)

Учения ни разу не опустились ниже порога 99,0 %. Самый низкий цикл был в Q3-26 и составил 98,4 % (вызван 32 ручками на корпоративном прокси, расшифровывающем TLS — эти 32 ручки были перенастроены через OEM-соглашение, а не на самом устройстве).

6. OEM-программы, которые хотят собственные пины

Для OEM-программ Pattern A (только T2 и Y6) мы передаём сертификат подписи OEM-портала, который HSM импортёра может переподписать. Импортный портал аутентифицирует устройство через mTLS. Набор пинов размещается на защищённом элементе T2/Y6.

OEM может установить собственную периодичность ротации пинов. Большинство выбирает 12 месяцев. 6-месячный цикл допустим на T2/Y6, так как повторная установка пинов на устройстве представляет собой OTA-обновление размером 4 600 байт и выполняется за 1,2 с. При периодичности менее 6 месяцев мы наблюдаем нагрузку на канал OTA по типу CR-LATEX-NAGLE и не рекомендуем это.

Периодичность пинов OEM Рекомендуется? Размер OTA-пакета Время работы по Wi-Fi
3 месяца Нет 4 600 B 1,2 с
6 месяцев Да 4 600 B 1,2 с
12 месяцев Да (по умолчанию) 4 600 B 1,2 с
24 месяца Да (облачный MQTT) 4 600 B 1,2 с

7. Что происходит, когда несовпадение пина — это правильный ответ

Не каждое несовпадение пина является атакой. Существуют три повторяющихся случая, когда несовпадение отражает корректную политику и ИТ-отделу школы следует провести проверку:

  1. Корпоративный прокси школы — прокси переподписывает TLS, нарушая пин. Читалка отказывает. Решение — добавить SPKI-хэш прокси в читалку через OEM-портал, но только если прокси находится в сети, контролируемой школой.
  2. Устаревший офлайн-словарь — читалка, находившаяся на хранении 24+ месяцев, сталкивается с ротацией сертификата. Решение — ручная перепрошивка в сервисном центре OEM.
  3. Поддельное облако — кто-то развернул фальшивый MQTT-брокер с валидной TLS-цепочкой. Пин отказывает. OEM получает уведомление через отчёт о несовпадении цепочки.

Для каждого из трёх случаев предусмотрен документированный runbook, который поставляется с каждым OEM-соглашением. Школы, эксплуатирующие 12 000 и более читалок, получают двухчасовой разбор runbook.

8. Итог для дистрибьюторов и тендеров

Certificate pinning — это самая сложная для модернизации часть читалки. Если вы начинаете с поставщика, который не использует пин, добавить его без аппаратной ревизии невозможно. Все наши одиннадцать SKU применяют пин на каждом TLS-хэндшейке, а набор пинов ротируется ежеквартально по проверенному графику. Любой специалист по закупкам узнает формулировку из нашего Приложения к RFP: «SPKI каждого эндпоинта закреплён, с перекрытием двух хэшей и жёстким 24-месячным сроком действия».

Запросить предложение — быстрый ответ с фабрики

CTA

Запросить предложение — быстрый ответ с фабрики

Связанные материалы

Финальный CTA

Запросить предложение — быстрый ответ с фабрики

Frequently Asked Questions

Какие SKU читалок SPKI-пинят облачный MQTT-эндпоинт по умолчанию?
Все 11 SKU пинят по умолчанию. Пин-набор содержит два хэша (основной + резервный), жёсткий срок действия облачного MQTT-пин-набора — 24 месяца, OTA-пинов — 12 месяцев, пинов краш-репортера — 36 месяцев. Это реализовано в заводских прошивках 2.4.7 (B1, B2), 3.1.2 (F8), 1.9.5 (K7, KF1), 4.2.0 (L5), 2.0.3 (P2), 3.3.1 (Q6, Q8), 2.6.4 (T2, Y6).
Как быстро несовпадение пина фиксируется и отправляется в бэкенд?
Каждое несовпадение записывается в NVRAM с указанием SPKI-хэша нарушителя, имени хоста, разрешённого IP и исходного SSID. Запись отправляется при следующей успешной загрузке, обычно в пределах 9 часов. На более чем 47 000 развёрнутых ручек в 2025–26 гг. зафиксировано 18 240 событий несовпадения пинов (0,13 % от хэндшейков), и 184 из них (0,0014 %) были эскалированы в цепочечные несовпадения, вызвавшие обращения в школьные IT-службы.
Может ли OEM задать собственный график ротации пинов?
Да, на T2 и Y6 (Pattern A) с рекомендуемым окном 6–24 месяца. При сроке менее 6 месяцев мы наблюдали нагрузку на OTA-канал. Перепиновка пин-набора — это OTA-обновление объёмом 4 600 байт, выполняемое за 1,2 с по Wi-Fi. На остальных 9 SKU график управляется с завода и составляет 12 месяцев, с тренировочными тихими ротациями каждые 90 дней и аварийной ротацией менее чем за 4 часа.
Что делать школьной IT-команде, если ручка отказывается устанавливать TLS за корпоративным прокси?
Ручка работает корректно — переподписанный прокси-сертификат нарушает SPKI-пин. У OEM есть runbook для добавления SPKI-хэша прокси через OEM-портал. Добавляйте хэши только для сетей, контролируемых школой; никогда — для публичных прокси. Мы передали его 38 OEM-программам, и у нас не было ни одного подтверждённого инцидента утечки данных из-за корректно запиненного переподписанного сертификата.
Как часто ротируется облачный MQTT-пин-набор и как обновляется парк устройств?
Плановая ротация выполняется по жёсткому 24-месячному циклу, с тренировочными тихими ротациями каждые 90 дней. Покрытие обновления парка за три последних цикла составило 99,6 % за 14 дней; оставшиеся 0,4 % синхронизировались за 45 дней через OTA-канал школьной настольной док-станции. На более чем 47 000 развёрнутых ручек мы выполнили три ротации — 2023, 2024 и 2025 — без необходимости полевого отзыва.
Ваша корзина
Разрешение cookies улучшит вашу работу с этим сайтом. Политика cookies
Chat on WhatsApp