我需要确保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就足够了。 –