[請益] 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