Как работает аутентификация подписи API, реализованная в Mashery? - PullRequest
4 голосов
/ 08 ноября 2011

Mashery позволяет аутентификацию с помощью цифровой подписи следующим образом:

  • Сначала объедините следующие компоненты:
    • API ключ
    • Общий секрет
    • UNIX Timestamp
  • Затем создайте хеш MD5 для объединенной строки.

В документации говорится, что метка времени Unix требует точности +/- 5 минут. Детали: http://support.mashery.com/docs/read/mashery_api/20/Authentication.

Предполагая, что это не коммерческая тайна, Каков алгоритм для такой аутентификации?

В частности, как это возможно, когда метка времени Unix может меняться на 5 минут? Техника "грубой силы" может заключаться в том, чтобы вычислять подпись для каждого возможного значения временной метки до нахождения соответствия (или нет), но это не кажется практичным для аутентификации частых вызовов API.

Ответы [ 4 ]

3 голосов
/ 10 ноября 2011

Да, похоже, это то, что он делает.Ссылка на документацию, которую вы указали, гласит: «По обе стороны от текущей метки времени на сервере Mashery разрешено пятиминутное покачивание, чтобы обеспечить разумный сдвиг часов».Это означает, что им нужно проверить до 600 хэшей, чтобы убедиться, что представленный хэш действителен.5 минут - 300 секунд.Плюс или минус делает 600 проверок.

Мне кажется это практичным.600 MD5s - это не много обработки.Фактически, современный валидатор паролей (например, тот, который использует bcrypt) будет выполнять гораздо больше работы для проверки пароля.

2 голосов
/ 15 ноября 2011

Amazon приводит хороший пример подписания запроса и во многих деталях, которые должны сделать механику очевидной (я понимаю, что это не махинация - но я думаю, что это то, что вам нужно, или, по крайней мере, поможет вам в вашем путешествии к безопасности API)

http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?RESTAuthentication.html

0 голосов
/ 03 мая 2016

sha256 довольно быстро. Даже в php вы можете вычислить 830K sha256 в секунду, поэтому они, скорее всего, просто переборщили.

<?php

$COUNT = 6000000;
$start = microtime(true);
for($i = 0; $i < $COUNT; $i++) {
  $out = hash('sha256', 'wefjklwfekjlewfjklwefjklfwejkwefjklwfekjl' . $i);
  //print("$out\n");
}
$total = microtime(true) - $start;
print("Time: $total\n");
print("sha256's per second: " . ($COUNT / $total) . "\n");

?>
0 голосов
/ 28 апреля 2016

Mashery может также предварительно сгенерировать список действительных подписей или кэшировать каждый сиг по требованию. Подпись является общей для всех API, которые Mashery защищает для этого API Key / Shared Secret, поэтому нет необходимости проверять вызов API уникально для каждого запроса.

...