4

Mashery 允许通过数字签名进行身份验证,如下所示:

  • 首先,连接以下组件:
    • API 密钥
    • 共享秘密
    • UNIX 时间戳
  • 然后,创建连接字符串的 MD5 哈希。

文档指出,unix 时间戳只需要 +/- 5 分钟的精度。详细信息:http: //support.mashery.com/docs/read/mashery_api/20/Authentication

假设这不是商业机密,那么执行这样的身份验证的算法是什么?

具体来说,当 unix 时间戳可以变化 5 分钟时,这怎么可能?“蛮力”技术可能是计算每个可能的时间戳值的签名,直到找到匹配(或不匹配),但这对于验证频繁的 API 调用似乎并不实用。

4

4 回答 4

3

是的,这似乎就是它的作用。您提供的文档链接指出,“Mashery 服务器上当前时间戳的任一侧都允许有五分钟的摆动,以允许合理的时钟漂移。” 这意味着他们需要检查多达 600 个哈希来查看提交的哈希是否有效。5 分钟是 300 秒。加号或减号使其成为 600 张支票。

这对我来说似乎很实用。600 MD5s 不是很多处理。事实上,现代密码验证器(例如使用 bcrypt 的工具)将执行更多工作来验证密码。

于 2011-11-10T03:15:02.817 回答
2

亚马逊给出了请求签名的一个很好的例子,并且非常详细,这应该使机制显而易见(我意识到它不是捣碎 - 但我认为这是你所追求的,或者至少会帮助你获得 API 安全幸福的旅程)

http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?RESTAuthentication.html

于 2011-11-15T10:43:10.607 回答
0

Mashery 还可以预先生成有效签名列表或按需缓存每个签名。签名对于 Mashery 为该 API 密钥/共享密钥保护的所有 API 都是全局的,因此无需为每个请求唯一地验证 API 调用。

于 2016-04-28T19:07:59.420 回答
0

sha256 相当快。即使在 php 中,您也可以每秒计算 830K sha256,因此他们很可能只是暴力破解。

<?php

$COUNT = 6000000;
$start = microtime(true);
for($i = 0; $i < $COUNT; $i++) {
  $out = hash('sha256', 'wefjklwfekjlewfjklwefjklfwejkwefjklwfekjl' . $i);
  //print("$out\n");
}
$total = microtime(true) - $start;
print("Time: $total\n");
print("sha256's per second: " . ($COUNT / $total) . "\n");

?>
于 2016-05-03T19:29:32.543 回答