2015-03-10 2 views
0

Я рассматриваю возможность создания системы API, использующей HMAC. У сервера и клиента будет общий секрет, клиент будет подписывать запросы, сервер будет проверять и продолжать, если все будет хорошо. Проблема с такой системой заключается в том, что секрет должен храниться таким образом, чтобы его можно было найти, например, базу данных. Если кто-то украл секрет, у них есть ключ, необходимый для того, чтобы делать в основном все, что разрешено пользователю.Безопасный общий секрет HMAC путем шифрования авторизации с помощью RSA

Я думал, что должна быть более безопасная альтернатива. Есть ли недостатки в использовании RSA?

  1. У клиента есть «открытый» ключ, а не общий секрет. (Открытый ключ все равно должен храниться в секрете для моего случая использования.)
  2. Клиент получит сообщение с SHA-1 или как обычно.
  3. Вместо того, чтобы добавлять хэш к сообщению напрямую, хэш будет зашифрован через его открытый ключ, а затем отправлен с сообщением.
  4. У сервера есть «закрытый» ключ (для расшифровки сообщений), но он не знает «открытого» ключа. (Это та часть, которая делает ее более безопасной, чем обычный подход. Если база данных украдена, никакие ключи не украдены, которые могут олицетворять пользователя.)
  5. Сервер расшифровывает хэш и проверяет сообщение как обычно.

Есть ли что-то не так с этим подходом? Известны ли реализации этого или что-то подобное?

+2

Этот вопрос немного не по теме для переполнения стека. Рассматривали ли вы размещение на http://security.stackexchange.com или http://crypto.stackexchange.com? (Очевидно, проверьте их справочные центры, чтобы узнать, какая из них лучше подходит, если вообще). Вам нужно будет предоставить дополнительную информацию о целях и угрозах безопасности, чтобы другие могли анализировать, соответствует ли предлагаемое решение этим целям.Вероятно, эта проблема была решена должным образом, поэтому я сомневаюсь, что вы должны изобретать свою собственную схему. –

+2

Я голосую, чтобы закрыть этот вопрос как вне темы, потому что речь идет о безопасности/криптографии и не содержит вопрос программирования. –

+0

@ Duncan Да, моя цель - не изобретать мою собственную схему, поэтому, когда я думал об этом, я должен увидеть, что с ней не так, или если существует существующая реализация. Я рассмотрел публикацию на http://security.stackexchange.com, но решил, что Stack Overflow был таким же хорошим местом, поскольку здесь есть много других подобных вопросов. Я думаю, что это очень актуально для обоих. – Brad

ответ

1

Это зависит от асимметричной криптосистемы вы выбрали:

(EC) Диффи-Хеллмана: Это не работает. Publickey непосредственно получен из частной клавиши через генератор, например. [d] G = Q

RSA: Обычно люди выбирают фиксированные публикации, такие как 0x010001. Это делается по соображениям эффективности. Если взять достаточно большой, полностью случайный e и получить d от него нет никакой возможности вычислить p и q дал d и NИЛИe и N. На самом деле они в равной степени одинаковы, а ярлык, закрытый и публичный, больше не имеет смысла. Все это зависит от smmyetrical собственности RSA. Обязательно не входите в вопросы RSA в учебнике. И обязательно спросите об этом достаточно умных людей, это только мои мысли об этом.

+0

Полезная информация о Диффи-Хеллман. Благодаря! – Brad

+0

0x010001 не является открытым ключом, но одним из [часто используемых] (http://security.stackexchange.com/questions/2335/should-rsa-public-exponent-be-only-in-3-5-17- 257-or-65537-due-to-security-c) (публичные) показатели. – eckes

1

Если вы создаете систему шифрования на доказательство владения секрету вам нужно, хорошо - держать его в секрете :)

Но да, если вы не нужна скорость симметричной аутентификации, то вы можете использовать асимметричная подпись. Обычно это делается с помощью подписанного хэша, но вы также можете использовать подписанный hmac.

Терминология обычно заключается в том, что вы подписываете секретным ключом и проверяете с помощью открытого ключа (даже если операция подписания выглядит как шифрование).

Смежные вопросы