[请益] api key 安全性问题

楼主: wuwt4y (Poky)   2018-08-13 20:36:24
小弟最近在做api 的安全机制,
参考了amazon api key 的做法。
我给client 一组api key跟secret key
他每次请求要给我api key,timestamp,sign
sign 我用请求的api key, timestamp, url下去签名(HMAC256)
但是主管说同一时间签出来的东西都一样,这样不安全,时间够久就可以算出我的SECRET K
EY
但是有那么好算吗?
他又不知道我用什么下去签,
即使知道,算出来也不太可能吧?
想请问如果他今天可以拦截到我发出的东西,也知道我用什么下去签,那算出我secret key
可能性高吗?真的是时间够就一定算的出来吗?
作者: MoMoShota (正太控)   2018-08-13 20:43:00
先说结论:理论上可行但实际上困难 担心的话定期改 key
作者: hiigara (石头)   2018-08-13 20:53:00
timestamp 有 replay attack 的机会不过量大的时候用 nonce 也是有点麻烦,看强度需求吧差点忘记,用时间的话 client 跟 server 还要能够对时
作者: knives   2018-08-14 03:30:00
贵司网站有那么热门?
楼主: wuwt4y (Poky)   2018-08-14 13:08:00
这样似乎也没有比较好的解法
作者: MOONRAKER (㊣牛鹤鳗毛人)   2018-08-14 14:29:00
用完整的timestamp不是136年才会重复
作者: hiigara (石头)   2018-08-14 16:21:00
overflow 好解决,问题是在容许双方有多大的时间差容许五分钟就是五分钟内可以可以被重播连打五秒钟那就是对时机制要做如果 API 没有需要防御 replay 那就好解决
作者: MOONRAKER (㊣牛鹤鳗毛人)   2018-08-14 19:18:00
其实参数有timestamp 等于告诉人家会用timestamp算
作者: hiigara (石头)   2018-08-14 22:27:00
这部分 nonce 也是一样,反正整个 URL 都露出了,倒还好存取量不大的话 nonce 很方便,存取量大的时候光是把所有nonce 存起来就有点麻烦,可行但是会有些囉唆事要照顾要看楼主想保护什么,被攻破有多严重,以及client可信度才能决定最好的做法是什么如果 client 可信也不会放进浏览器,其实 https 很硬了只要强迫走 https 就能挡掉九成的问题
楼主: wuwt4y (Poky)   2018-08-15 09:18:00
使用nonce 等于client每次发起请求之前,要先跟我发起一个要nonce的请求吗?等于每次都要发两次请求?
作者: hiigara (石头)   2018-08-15 09:51:00
nonce 只是 client 加一段不会重复使用的随机字串应该说,nonce这个字的意思是只用一次的随机字串server 发的话就像是 server 挑战给 client但我不知道 挑战-回应 与 client 送 nonce 相比的好处server 不用存一大堆用过的 nonce 大概算好处吧
楼主: wuwt4y (Poky)   2018-08-16 15:06:00
如果client 自己发的话,我server 要如何知道他得随机字串他这个随机字串 不能付在外部,而是只有签名会用到,这样才安全吧,那这样的话我server如何知道他的随机字串
作者: MOONRAKER (㊣牛鹤鳗毛人)   2018-08-16 15:53:00
要在request里面一起送去吧?以前接API是这样跟你的timestamp一样 我自己写是没用过
作者: SS327 (蛋头)   2018-11-01 23:19:00

Links booklink

Contact Us: admin [ a t ] ucptt.com