web-dev-qa-db-ja.com

署名付きリクエストとAPI認証のHTTPダイジェスト認証?

署名されたリクエストとは、次のようなものです(簡単な例):

クライアントは自分のリクエストにsigを作成します。たとえば、$sig = hash('sha256', $api_key.$data);7409ur0k0asidjko2jを生成します。次に、これを自分のリクエストに送信します:example.com/api/7409ur0k0asidjko2j

これで、受信サーバーは正確なプロセスを実行してsigの一致を実行します。

このような署名付きリクエスト、またはAPIサーバーへのリクエストを認証するためのHTTPダイジェスト認証のどちらが一般的に安全ですか。 SSLがインストールされていないことを前提としています。

3
IMB

署名がリクエスト全体をカバーしている場合は、整合性が保証されます。 リクエストのリプレイは依然として潜在的な脅威です(リソースの乱用を考えてください)。

HTTPダイジェスト認証では、転送中にリクエストが変更される可能性があります。 あなたはMITM(Man In The Middle)攻撃のなすがままです。

とにかく、本当にTLSを使用する必要がありますトランスポートレベルのセキュリティ

  • パスワードまたはオーセンティケーターだけではなくペイロードの機密情報の保証(ただしではないペイロードサイズ!ペイロードサイズが有用な情報を明らかにできる場合)
  • ペイロードの完全性の保証(ただしno保証WRTクライアントIPアドレス!)
3
curiousguy

リクエストの署名は良いかもしれませんが、正しく実装する必要があります。 hash(key || data)構造はハッシュ長拡張攻撃に対して脆弱であり、使用してはなりません。ここでは、この件について適切に説明します: Hash Length Extension Attacks 。メッセージ認証にはHMACを使用する必要があります。

リクエストで送信されるデータの整合性も保護できるため、リクエストの署名はHTTPダイジェスト認証よりも優れています。

2
pgolen