看板 PHP 關於我們 聯絡資訊
小弟最近在做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://www.ptt.cc/bbs/PHP/M.1534163787.A.F6A.html
MoMoShota: 先說結論:理論上可行但實際上困難 擔心的話定期改 key 08/13 20:43
hiigara: timestamp 有 replay attack 的機會 08/13 20:53
hiigara: 不過量大的時候用 nonce 也是有點麻煩,看強度需求吧 08/13 20:53
hiigara: 差點忘記,用時間的話 client 跟 server 還要能夠對時 08/13 21:03
knives: 貴司網站有那麼熱門? 08/14 03:30
wuwt4y: 這樣似乎也沒有比較好的解法 08/14 13:08
MOONRAKER: 用完整的timestamp不是136年才會重覆 08/14 14:29
hiigara: overflow 好解決,問題是在容許雙方有多大的時間差 08/14 16:21
hiigara: 容許五分鐘就是五分鐘內可以可以被重播連打 08/14 16:22
hiigara: 五秒鐘那就是對時機制要做 08/14 16:23
hiigara: 如果 API 沒有需要防禦 replay 那就好解決 08/14 16:24
MOONRAKER: 其實參數有timestamp 等於告訴人家會用timestamp算 08/14 19:18
hiigara: 這部分 nonce 也是一樣,反正整個 URL 都露出了,倒還好 08/14 22:27
hiigara: 存取量不大的話 nonce 很方便,存取量大的時候光是把所有 08/14 22:29
hiigara: nonce 存起來就有點麻煩,可行但是會有些囉唆事要照顧 08/14 22:33
hiigara: 要看樓主想保護什麼,被攻破有多嚴重,以及client可信度 08/14 22:38
hiigara: 才能決定最好的做法是什麼 08/14 22:38
hiigara: 如果 client 可信也不會放進瀏覽器,其實 https 很硬了 08/14 22:39
hiigara: 只要強迫走 https 就能擋掉九成的問題 08/14 22:40
wuwt4y: 使用nonce 等於client每次發起請求之前,要先跟我發起一個 08/15 09:18
wuwt4y: 要nonce的請求嗎?等於每次都要發兩次請求? 08/15 09:19
hiigara: nonce 只是 client 加一段不會重複使用的隨機字串 08/15 09:51
hiigara: 應該說,nonce這個字的意思是只用一次的隨機字串 08/15 09:58
hiigara: server 發的話就像是 server 挑戰給 client 08/15 10:00
hiigara: 但我不知道 挑戰-回應 與 client 送 nonce 相比的好處 08/15 10:04
hiigara: server 不用存一大堆用過的 nonce 大概算好處吧 08/15 10:08
wuwt4y: 如果client 自己發的話,我server 要如何知道他得隨機字串 08/16 15:06
wuwt4y: 他這個隨機字串 不能付在外部,而是只有簽名會用到,這樣才 08/16 15:08
wuwt4y: 安全吧,那這樣的話我server如何知道他的隨機字串 08/16 15:08
MOONRAKER: 要在request裏面一起送去吧?以前接API是這樣 08/16 15:53
MOONRAKER: 跟你的timestamp一樣 我自己寫是沒用過 08/16 15:54
SS327: 棒 11/01 23:19