Офлайн-проверка X-Device-Signature через DevToys
Иногда нужно проверить подпись webhook, не вставляя signing secret ни на какой сайт. DevToys — настольный набор инструментов, работающий полностью офлайн: секрет никогда не покидает вашу машину.
Что такое DevToys
DevToys — это офлайновый «швейцарский нож разработчика»: настольное приложение с генераторами, конвертерами и кодировщиками, ради которых иначе пришлось бы открывать десяток веб-инструментов. Здесь нас интересует его генератор HMAC.
Почему для signing secret важна офлайновость
Подпись webhook UnifyPort — это HMAC на ключе из вашего signing_secret. Веб-инструменты для хеширования удобны, но просят вставить этот секрет на страницу. DevToys считает всё локально — ничего никуда не отправляется, — поэтому это безопаснее, когда секрет реально используется.
Проверка X-Device-Signature в DevToys
UnifyPort подписывает каждую доставку так:
Чтобы воспроизвести вручную:
- 1. Откройте генератор HMAC в DevToys и задайте функцию хеширования
SHA256. - 2. Вставьте signing secret в поле ключа как обычный текст UTF-8.
- 3. В поле ввода вставьте ровно
<timestamp>.<raw_body>— значениеX-Device-Timestamp, ASCII-точку, затем байты raw body: - 4. Сравните вывод в нижнем регистре hex с заголовком
X-Device-Signature. Совпадение байт в байт означает, что секрет, timestamp и body сходятся.
Когда 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 — и всегда сравнивайте функцией постоянного времени, никогда ==.