作者wuwt4y (Poky)
看板PHP
标题[请益] api key 安全性问题
时间Mon Aug 13 20:36:24 2018
小弟最近在做api 的安全机制,
参考了amazon api key 的做法。
我给client 一组api key跟secret key
他每次请求要给我api key,timestamp,sign
sign 我用请求的api key, timestamp, url下去签名(HMAC256)
但是主管说同一时间签出来的东西都一样,这样不安全,时间够久就可以算出我的SECRET K
EY
但是有那麽好算吗?
他又不知道我用什麽下去签,
即使知道,算出来也不太可能吧?
想请问如果他今天可以拦截到我发出的东西,也知道我用什麽下去签,那算出我secret key
可能性高吗?真的是时间够就一定算的出来吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.150.140.80
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1534163787.A.F6A.html
1F:推 MoMoShota: 先说结论:理论上可行但实际上困难 担心的话定期改 key 08/13 20:43
2F:推 hiigara: timestamp 有 replay attack 的机会 08/13 20:53
3F:→ hiigara: 不过量大的时候用 nonce 也是有点麻烦,看强度需求吧 08/13 20:53
4F:→ hiigara: 差点忘记,用时间的话 client 跟 server 还要能够对时 08/13 21:03
5F:→ knives: 贵司网站有那麽热门? 08/14 03:30
6F:→ wuwt4y: 这样似乎也没有比较好的解法 08/14 13:08
7F:→ MOONRAKER: 用完整的timestamp不是136年才会重覆 08/14 14:29
8F:推 hiigara: overflow 好解决,问题是在容许双方有多大的时间差 08/14 16:21
9F:→ hiigara: 容许五分钟就是五分钟内可以可以被重播连打 08/14 16:22
10F:→ hiigara: 五秒钟那就是对时机制要做 08/14 16:23
11F:→ hiigara: 如果 API 没有需要防御 replay 那就好解决 08/14 16:24
12F:→ MOONRAKER: 其实参数有timestamp 等於告诉人家会用timestamp算 08/14 19:18
13F:推 hiigara: 这部分 nonce 也是一样,反正整个 URL 都露出了,倒还好 08/14 22:27
14F:→ hiigara: 存取量不大的话 nonce 很方便,存取量大的时候光是把所有 08/14 22:29
15F:→ hiigara: nonce 存起来就有点麻烦,可行但是会有些罗唆事要照顾 08/14 22:33
16F:→ hiigara: 要看楼主想保护什麽,被攻破有多严重,以及client可信度 08/14 22:38
17F:→ hiigara: 才能决定最好的做法是什麽 08/14 22:38
18F:→ hiigara: 如果 client 可信也不会放进浏览器,其实 https 很硬了 08/14 22:39
19F:→ hiigara: 只要强迫走 https 就能挡掉九成的问题 08/14 22:40
20F:→ wuwt4y: 使用nonce 等於client每次发起请求之前,要先跟我发起一个 08/15 09:18
21F:→ wuwt4y: 要nonce的请求吗?等於每次都要发两次请求? 08/15 09:19
22F:推 hiigara: nonce 只是 client 加一段不会重复使用的随机字串 08/15 09:51
23F:→ hiigara: 应该说,nonce这个字的意思是只用一次的随机字串 08/15 09:58
24F:→ hiigara: server 发的话就像是 server 挑战给 client 08/15 10:00
25F:推 hiigara: 但我不知道 挑战-回应 与 client 送 nonce 相比的好处 08/15 10:04
26F:推 hiigara: server 不用存一大堆用过的 nonce 大概算好处吧 08/15 10:08
27F:→ wuwt4y: 如果client 自己发的话,我server 要如何知道他得随机字串 08/16 15:06
28F:→ wuwt4y: 他这个随机字串 不能付在外部,而是只有签名会用到,这样才 08/16 15:08
29F:→ wuwt4y: 安全吧,那这样的话我server如何知道他的随机字串 08/16 15:08
30F:→ MOONRAKER: 要在request里面一起送去吧?以前接API是这样 08/16 15:53
31F:→ MOONRAKER: 跟你的timestamp一样 我自己写是没用过 08/16 15:54
32F:推 SS327: 棒 11/01 23:19