HMAC在客户端JavaScript和身份欺骗

时间:2013-08-07 13:52:44

标签: javascript hmac cryptojs

CryptoJS具有从消息和密钥创建HMAC的功能。

考虑到秘密密钥必须存放在客户端上部署的JavaScript源中,这怎么可能是安全的?

任何人都可以获取密钥,并以API原始客户端的身份向服务器发出类似请求。难道“身份”不是HMAC应该解决的问题吗?

总而言之,我不了解HMAC在客户端JS中的用途,因为密钥不能保密。

在JavaScript中计算HMAC是否有用例?

2 个答案:

答案 0 :(得分:4)

JavaScript现在拥有WebRTC,其中两个客户端可以进行点对点通信,这将是客户端可以生成和使用自己的“秘密”的场景。

在某些情况下客户 - >服务器也可以使用。如果您的服务器“动态”为JavaScript提供服务,那么它可以根据客户端当前会话/登录信息插入“秘密”。假设您正在使用HTTPS(如果不是,可能会有一个中间人捏造“秘密”)那么假设与该特定“秘密”(即使是不安全的HTTP)签署的服务器通信仅属于那个客户。

答案 1 :(得分:1)

  

考虑到秘密密钥必须存放在客户端上部署的JavaScript源中,这怎么可能是安全的?

每个客户端都应该获得自己的密钥/密钥,这使他们能够访问他们应该有权访问的资源。这实际上与用户知道自己的用户名和密码没有什么不同。他们的user / pass组合只允许访问他们需要的资源。密钥对也是如此。

  

任何人都可以获取密钥,并以API原始客户端的身份向服务器发出类似请求。不是" t"身份" HMAC应该解决的问题是什么?

是的,当然,如果有人获得您的密钥和秘密,他们可以发出请求,就像他们来自您一样。只是不要向别人透露你的秘密。在JavaScript中使用它并不重要。当然,用户可以看到它,但除非他们把这个密钥和秘密放在别的地方,否则它不是问题。

我有一个系统,用户通过正常方式登录(用户名/密码,OAuth,OpenID等),并立即发出用于进行API调用的密钥/密钥。客户端应用程序使用此密钥/机密实际执行其工作。此密钥/密钥的发布是通过HTTPS完成的。我想将HMAC用于我的API,因为我希望用户能够预先签署要在开放中使用的请求。这种方法使我能够将HMAC保留在通常的管理GUI中。