← Все инструменты
Наши заметки

Офлайн-проверка X-Device-Signature через DevToys

Иногда нужно проверить подпись webhook, не вставляя signing secret ни на какой сайт. DevToys — настольный набор инструментов, работающий полностью офлайн: секрет никогда не покидает вашу машину.

Что такое DevToys

DevToys — это офлайновый «швейцарский нож разработчика»: настольное приложение с генераторами, конвертерами и кодировщиками, ради которых иначе пришлось бы открывать десяток веб-инструментов. Здесь нас интересует его генератор HMAC.

Почему для signing secret важна офлайновость

Подпись webhook UnifyPort — это HMAC на ключе из вашего signing_secret. Веб-инструменты для хеширования удобны, но просят вставить этот секрет на страницу. DevToys считает всё локально — ничего никуда не отправляется, — поэтому это безопаснее, когда секрет реально используется.

Проверка X-Device-Signature в DevToys

UnifyPort подписывает каждую доставку так:

X-Device-Signature = hex( HMAC-SHA256( secret, timestamp + "." + raw_body ) )

Чтобы воспроизвести вручную:

  1. 1. Откройте генератор HMAC в DevToys и задайте функцию хеширования SHA256.
  2. 2. Вставьте signing secret в поле ключа как обычный текст UTF-8.
  3. 3. В поле ввода вставьте ровно <timestamp>.<raw_body> — значение X-Device-Timestamp, ASCII-точку, затем байты raw body:
  4. 4. Сравните вывод в нижнем регистре hex с заголовком X-Device-Signature. Совпадение байт в байт означает, что секрет, timestamp и body сходятся.
1716800000.{"type":"message.received", … }

Когда CyberChef или код подходят лучше

  • CyberChef. Если нужно соединить шаги — сначала base64-декод body, потом HMAC — в одном рецепте, наш разбор CyberChef гибче, ценой вставки на веб-страницу.
  • В коде. Для всего повторяемого проверяйте в обработчике сравнением за постоянное время (timingSafeEqual, hmac.compare_digest, hmac.Equal) — и никогда ==.

Где взять входные данные

  • Чтобы получить X-Device-Timestamp и raw body для ввода, захватите доставку через webhook.site или пробросьте её на localhost через smee.io.
  • Предпочитаете браузер и удобство сохраняемого рецепта? Разбор CyberChef выполняет тот же алгоритм.

Частые вопросы

На каких платформах работает DevToys?
DevToys — офлайновое настольное приложение для Windows и macOS. Берите его, когда не хотите вставлять signing secret в веб-форму.
Почему DevToys безопаснее веб-инструмента HMAC?
Он работает целиком на вашей машине — введённый signing secret никогда не передаётся на сервер. Веб-инструменты тоже бывают клиентскими, но с настольным приложением это не нужно принимать на веру.
Моя подпись не совпадает с X-Device-Signature — в чём дело?
Три обычные причины: неверный signing secret; body изменён перед хешированием (пересериализованный JSON, убранные пробелы, unicode-нормализация); или timestamp прочитан не из того заголовка — подписывается только X-Device-Timestamp. Ввод должен быть ровно <timestamp>.<raw_body> с буквальной точкой.

Когда совпало

Перенесите тот же расчёт в обработчик — crypto.createHmac в Node, hmac.new в Python, hmac.New в Go — и всегда сравнивайте функцией постоянного времени, никогда ==.