为什么 Amazon 不使用 NONCE 进行 REST 身份验证?

信息安全 休息 hmac 随机数
2021-09-04 01:06:57

当您查看 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>

这不应该包括一个随机数吗?他们是否以其他方式防范重放攻击?如何?

1个回答

随机数的使用使设计变得复杂。s3 服务器必须发送一个 nonce,而客户端必须保持一个会话或持有这个 nonce 值。正如您所提到的,nonce 的缺失肯定会导致重放攻击,这是使用 S3 存储的应用程序中存在的所有直接 URL 访问漏洞的主要原因。Amazon 认为使用时间戳限制攻击面可以将风险降低到可接受的水平。例如,如果请求时间戳不在设定的窗口(5-15 分钟)内,则视为无效。