web-dev-qa-db-ja.com

REST認証にAmazonがNONCEを使用しないのはなぜですか?

Amazons RESTAuthentication を見ると、ナンスを使用していないことがわかります。

Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;

Signature = Base64( HMAC-SHA1( YourSecretAccessKeyID, UTF-8-Encoding-Of( StringToSign ) ) );

StringToSign = HTTP-Verb + "\n" +
    Content-MD5 + "\n" +
    Content-Type + "\n" +
    Date + "\n" +
    CanonicalizedAmzHeaders +
    CanonicalizedResource;

CanonicalizedResource = [ "/" + Bucket ] +
    <HTTP-Request-URI, from the protocol name up to the query string> +
    [ subresource, if present. For example "?acl", "?location", "?logging", or "?torrent"];

CanonicalizedAmzHeaders = <described below>

これにはナンスが含まれるべきではありませんか?彼らは別の方法でリプレイ攻撃を防ぎますか?どうやって?

8
laktak

Nonceを使用すると、設計が複雑になります。 s3サーバーはnonceを送信する必要があり、クライアントはセッションを維持するかnonce値を保持する必要があります。ナンスの欠如は、あなたが述べたように間違いなくリプレイ攻撃につながります。それが、S3ストレージを使用するアプリケーションに存在するすべての直接URLアクセスの脆弱性の主な理由です。 Amazonは、タイムスタンプを使用して攻撃対象を限定することで、リスクを許容可能なレベルに低減できると考えています。たとえば、リクエストのタイムスタンプが設定された時間内(5〜15分)にない場合は、無効と見なされます。

2
hax