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