署名されたリクエストとは、次のようなものです(簡単な例):
クライアントは自分のリクエストにsigを作成します。たとえば、$sig = hash('sha256', $api_key.$data);
は7409ur0k0asidjko2j
を生成します。次に、これを自分のリクエストに送信します:example.com/api/7409ur0k0asidjko2j
これで、受信サーバーは正確なプロセスを実行してsigの一致を実行します。
このような署名付きリクエスト、またはAPIサーバーへのリクエストを認証するためのHTTPダイジェスト認証のどちらが一般的に安全ですか。 SSLがインストールされていないことを前提としています。
署名がリクエスト全体をカバーしている場合は、整合性が保証されます。 リクエストのリプレイは依然として潜在的な脅威です(リソースの乱用を考えてください)。
HTTPダイジェスト認証では、転送中にリクエストが変更される可能性があります。 あなたはMITM(Man In The Middle)攻撃のなすがままです。
とにかく、本当にTLSを使用する必要がありますトランスポートレベルのセキュリティ:
リクエストの署名は良いかもしれませんが、正しく実装する必要があります。 hash(key || data)構造はハッシュ長拡張攻撃に対して脆弱であり、使用してはなりません。ここでは、この件について適切に説明します: Hash Length Extension Attacks 。メッセージ認証にはHMACを使用する必要があります。
リクエストで送信されるデータの整合性も保護できるため、リクエストの署名はHTTPダイジェスト認証よりも優れています。