我需要確保REST請求知道誰在做這件事。我知道HMAC方法,但我不想將客戶機私鑰存儲在我的服務器上。這是我的方法:只分享公鑰是否安全?
- 服務器會爲客戶
- 服務器發送私有密鑰和客戶端ID給客戶一個私鑰和公鑰
- 客戶端存儲的私鑰
- SERVER只存儲公鑰客戶端密鑰
- 客戶端通過使用其私鑰(ecryptedData)加密其客戶端ID來發出RESTful請求,並將對clientID:encryptedData發送到服務器。SERVER看起來是f或給定客戶端ID的公鑰並解密已加密的數據。SERVER檢查解密後的數據是否包含相同的客戶端ID。如果客戶端ID相同,則SERVER信任發件人,否則拒絕該請求。
也許這種方法已經存在,但我不知道它。
這種方法安全嗎?
編輯
我重新制定了一個問題:
,如果我只關心誰是關於什麼的,他是在單向通信發送發送者,而不是(CLIENT - >服務器),我可以使用RSA以這種方式?
ONE TIME
- 服務器創建客戶端的RSA密鑰對
- 服務器存儲客戶端的公鑰(如果該鍵爲stolen..it的公共我沒關係!)
- 服務器向客戶端發送在客戶端的私鑰對客戶
- >服務器的通信
- CLIENT通過其私鑰ex來加密已知單詞+時間戳(以防止重放攻擊)。 SIGNATURE = encrypt(RSA,'FOO:1234234')
- CLIENT發送帶有API KEY和singature ex的消息。 54545345:SIGNATURE
- 服務器查找給定的API KEY的公鑰
- 服務器解密用公鑰信息發現
- 服務器檢查已知單詞FOO的正確性和時間戳
- 服務器拒絕消息如果上一步失敗
這種方法安全嗎?
非常感謝!
aGO!
錯誤的模式。讓服務器生成自己的私鑰/公鑰(也許是RSA)並共享公鑰。另一方面,要知道誰在呼叫您的REST服務,請嘗試簽名算法(El Gamal?RSA Signature)。 –
爲什麼它是一個錯誤的模式? HMAC方法也將私鑰發送給客戶端 – aGO
假設200客戶端,200個不同的HMAC密鑰生成,並且每個消息需要在服務器信任發件人之前解密。通過El Gamal,服務器只生成其密鑰對,每個客戶端也可以生成它自己的對(如果需要的話)。所以接收者將確定發送者身份檢查消息的簽名(而不是整個消息)。如果你使用POST/GET/PUT動詞,你需要確定這個模式。對於單向通信RSA就足夠了。 –