[請益] api key 安全性問題

看板PHP作者 (Poky)時間5年前 (2018/08/13 20:36), 編輯推噓8(8024)
留言32則, 6人參與, 5年前最新討論串1/1
小弟最近在做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

08/13 20:43, 5年前 , 1F
先說結論:理論上可行但實際上困難 擔心的話定期改 key
08/13 20:43, 1F

08/13 20:53, 5年前 , 2F
timestamp 有 replay attack 的機會
08/13 20:53, 2F

08/13 20:53, 5年前 , 3F
不過量大的時候用 nonce 也是有點麻煩,看強度需求吧
08/13 20:53, 3F

08/13 21:03, 5年前 , 4F
差點忘記,用時間的話 client 跟 server 還要能夠對時
08/13 21:03, 4F

08/14 03:30, 5年前 , 5F
貴司網站有那麼熱門?
08/14 03:30, 5F

08/14 13:08, 5年前 , 6F
這樣似乎也沒有比較好的解法
08/14 13:08, 6F

08/14 14:29, 5年前 , 7F
用完整的timestamp不是136年才會重覆
08/14 14:29, 7F

08/14 16:21, 5年前 , 8F
overflow 好解決,問題是在容許雙方有多大的時間差
08/14 16:21, 8F

08/14 16:22, 5年前 , 9F
容許五分鐘就是五分鐘內可以可以被重播連打
08/14 16:22, 9F

08/14 16:23, 5年前 , 10F
五秒鐘那就是對時機制要做
08/14 16:23, 10F

08/14 16:24, 5年前 , 11F
如果 API 沒有需要防禦 replay 那就好解決
08/14 16:24, 11F

08/14 19:18, 5年前 , 12F
其實參數有timestamp 等於告訴人家會用timestamp算
08/14 19:18, 12F

08/14 22:27, 5年前 , 13F
這部分 nonce 也是一樣,反正整個 URL 都露出了,倒還好
08/14 22:27, 13F

08/14 22:29, 5年前 , 14F
存取量不大的話 nonce 很方便,存取量大的時候光是把所有
08/14 22:29, 14F

08/14 22:33, 5年前 , 15F
nonce 存起來就有點麻煩,可行但是會有些囉唆事要照顧
08/14 22:33, 15F

08/14 22:38, 5年前 , 16F
要看樓主想保護什麼,被攻破有多嚴重,以及client可信度
08/14 22:38, 16F

08/14 22:38, 5年前 , 17F
才能決定最好的做法是什麼
08/14 22:38, 17F

08/14 22:39, 5年前 , 18F
如果 client 可信也不會放進瀏覽器,其實 https 很硬了
08/14 22:39, 18F

08/14 22:40, 5年前 , 19F
只要強迫走 https 就能擋掉九成的問題
08/14 22:40, 19F

08/15 09:18, 5年前 , 20F
使用nonce 等於client每次發起請求之前,要先跟我發起一個
08/15 09:18, 20F

08/15 09:19, 5年前 , 21F
要nonce的請求嗎?等於每次都要發兩次請求?
08/15 09:19, 21F

08/15 09:51, 5年前 , 22F
nonce 只是 client 加一段不會重複使用的隨機字串
08/15 09:51, 22F

08/15 09:58, 5年前 , 23F
應該說,nonce這個字的意思是只用一次的隨機字串
08/15 09:58, 23F

08/15 10:00, 5年前 , 24F
server 發的話就像是 server 挑戰給 client
08/15 10:00, 24F

08/15 10:04, 5年前 , 25F
但我不知道 挑戰-回應 與 client 送 nonce 相比的好處
08/15 10:04, 25F

08/15 10:08, 5年前 , 26F
server 不用存一大堆用過的 nonce 大概算好處吧
08/15 10:08, 26F

08/16 15:06, 5年前 , 27F
如果client 自己發的話,我server 要如何知道他得隨機字串
08/16 15:06, 27F

08/16 15:08, 5年前 , 28F
他這個隨機字串 不能付在外部,而是只有簽名會用到,這樣才
08/16 15:08, 28F

08/16 15:08, 5年前 , 29F
安全吧,那這樣的話我server如何知道他的隨機字串
08/16 15:08, 29F

08/16 15:53, 5年前 , 30F
要在request裏面一起送去吧?以前接API是這樣
08/16 15:53, 30F

08/16 15:54, 5年前 , 31F
跟你的timestamp一樣 我自己寫是沒用過
08/16 15:54, 31F

11/01 23:19, 5年前 , 32F
11/01 23:19, 32F
文章代碼(AID): #1RSNjBzg (PHP)