0Pricing
Cryptology Academy · Урок

HMAC в API: подпись запросов

Реализуйте подпись запросов на основе HMAC и защиту от атак повторного воспроизведения

«HMAC в API: подпись запросов» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Добро пожаловать

Подпись запросов на основе HMAC используется AWS, GitHub, Stripe и Twilio для аутентификации вызовов API. На этом уроке Вы создадите полноценную систему подписи запросов.

Зачем нужна подпись API-запросов

API-ключи в URL могут попасть в журналы прокси-серверов, историю браузера и журналы сервера. Подпись запроса включает в MAC полное тело запроса, гарантируя, что полезная нагрузка не была изменена, а ключ не раскрывается сам по себе.

AWS Signature Version 4

AWS SigV4 вычисляет: 1. Канонический запрос (метод + URL + заголовки + хеш тела) 2. Строку для подписи (дата + регион + служба + хеш канонического запроса) 3. Ключ подписи = HMAC(HMAC(HMAC(HMAC('AWS4'+secret, date), region), service), 'aws4_request') 4. Подпись = HMAC(signing_key, string_to_sign)

Проверка вебхуков GitHub

GitHub подписывает каждую полезную нагрузку вебхука: X-Hub-Signature-256: sha256=HMACHEX Проверка: import hmac expected = 'sha256=' + hmac.new(secret, payload, 'sha256').hexdigest() hmac.compare_digest(expected, received_signature)

Угроза атаки повторного воспроизведения

Если злоумышленник перехватит корректно подписанный запрос, он сможет отправить его повторно много раз. Перевод на сумму 100 долларов, подписанный один раз, можно воспроизвести 1000 раз. Одного HMAC недостаточно для предотвращения повторного воспроизведения.

Предотвращение повторного воспроизведения по временной метке

Включите временную метку в подписываемое сообщение. Отклоняйте запросы, которым больше 5 минут. Stripe отправляет X-Stripe-Signature с временной меткой. GitHub использует X-GitHub-Delivery (UUID), а не механизм на основе временных меток.

Предотвращение повторного воспроизведения с помощью одноразового числа

Включайте случайное одноразовое число в каждый запрос. Сервер сохраняет использованные одноразовые числа (в Redis с TTL). Отклоняйте любой запрос с одноразовым числом, которое уже встречалось. Для распределённых систем этот способ надёжнее временных меток.

Реализация подписи запросов

import hmac, hashlib, time, os def sign_request(secret, method, path, body, timestamp=None): ts = timestamp or str(int(time.time())) payload = f'{method}\n{path}\n{ts}\n' + hashlib.sha256(body).hexdigest() sig = hmac.new(secret.encode(), payload.encode(), 'sha256').hexdigest() return ts, sig

Проверка на стороне сервера

def verify_request(secret, method, path, body, ts, received_sig): # Check timestamp freshness if abs(time.time() - int(ts)) > 300: # 5 minutes return False # Recompute and compare _, expected = sign_request(secret, method, path, body, ts) return hmac.compare_digest(expected, received_sig)

JWT с HMAC (HS256)

JWT с HS256 используют HMAC-SHA256 и общий секрет. Сервер и подписывает токены, и проверяет их. Ограничение: любая сторона, у которой есть ключ, может подделать токены. Для асимметричной модели доверия (аутентификации сторонними сервисами) используйте RS256 или ES256.

Стратегия смены ключей

Периодически меняйте ключи HMAC: создайте новый ключ, поддерживайте старый и новый в течение переходного периода (24 часа), затем выведите старый ключ из эксплуатации. AWS SigV4 получает ключи из секретов, привязанных к дате, что позволяет менять их ежедневно.

Быстрая проверка

Почему одной подписи запросов с помощью HMAC недостаточно для предотвращения атак повторного воспроизведения?

Итоги

Подпись запросов с помощью HMAC и защита от повторного воспроизведения реализованы. Далее Вы сравните CMAC и Poly1305 как альтернативы MAC на основе блочных шифров.

Часто задаваемые вопросы

Урок «HMAC в API: подпись запросов» бесплатный?

Да — полный текст урока «HMAC в API: подпись запросов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «HMAC в API: подпись запросов»?

Реализуйте подпись запросов на основе HMAC и защиту от атак повторного воспроизведения Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «HMAC в API: подпись запросов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы MAC и атаки с расширением длины
  2. Конструкция HMAC и доказательство безопасности
  3. HMAC в API: подпись запросов
  4. CMAC и Poly1305: MAC на основе блочных шифров
← Назад к Cryptology Academy