Mashery允许通过数字签名进行身份验证,如下所示:
文档指出unix时间戳只需要+/- 5分钟的准确度。详情:http://support.mashery.com/docs/read/mashery_api/20/Authentication。
假设这不是商业秘密,执行此类身份验证的算法是什么?
具体来说,当unix时间戳可以变化5分钟时怎么可能? “强力”技术可能是为每个可能的时间戳值计算签名,直到找到匹配(或不匹配),但这对于验证频繁的API调用似乎不切实际。
答案 0 :(得分:3)
是的,这似乎就是它的作用。您提供的文档链接指出:“Mashery服务器上当前时间戳的任何一侧都允许五分钟的摆动,以允许合理的时钟漂移。”这意味着他们需要检查多达600个哈希值以查看提交的哈希值是否有效。 5分钟是300秒。加或减可以进行600次检查。
对我来说似乎很实用。 600 MD5s并没有做很多处理。事实上,现代密码验证器(就像使用bcrypt的东西)会执行更多的工作来验证密码。
答案 1 :(得分:2)
亚马逊给出了一个很好的请求签名示例,其中有很多细节应该让机制显而易见(我意识到它不是奇迹 - 但我认为这是你的追求,或者至少会帮助你实现API安全幸福之旅)
http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?RESTAuthentication.html
答案 2 :(得分:0)
Mashery还可以预先生成有效签名列表或按需缓存每个签名。该签名对于Mashery正在为该API密钥/共享密钥保护的所有API都是全局的,因此不需要为每个请求唯一地验证API调用。
答案 3 :(得分: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");
?>