我正在争论一个类似于使用授权散列的S3作为种子和使用hmac sha1(Amazon S3方式)签署的消息的请求上的一些数据与支持数据的symetric加密的其他开发人员的争论发射器和服务器已知的密钥。
使用带有hmac sha1 vs symetric密钥的签名数据有什么好处,而不是使用前者,我们不需要加密用户名或密码。
最难打破的是什么? la S3中的symetric加密或sha1散列?
如果所有大型玩家都使用oauth和没有symetric键的类似玩家,那么肯定会有明显的优势,那些是什么?
答案 0 :(得分:5)
hmac和对称密码不是互斥的想法。实际上AES-CMAC既是MAC(非散列)又是对称密码,AES-CMAC是使WPA安全的加密原语。 (虽然使用rainbow table仍然可以破坏WPA。
您不应该需要一个奇特的身份验证系统。使用用户名和密码登录并使用cookie维护会话状态是常用的,因为它易于实现且安全。通过存储状态,就像cookie一样,它在技术上不再是RESTful,但没有什么能阻止你这样做。
然而,在身份验证方面,我认为像RSA这样的非对称密码术是最安全的。 (默认情况下,Amazon使用非对称加密技术进行ssh连接。)这使您只能存储公钥,这样,如果您的服务器受到攻击,则无法使用身份验证凭据。它还防御MITM攻击。在许多情况下,这可以通过REST非常容易地植入,因为HTTPS已经支持客户端证书。您可以免费签署客户证书,然后verify them自己签名。
如果实施得当,hmac与对称密码的强度主要归结为秘密的强弱。如果您使用密码之类的秘密,那么两个系统同样非常弱。这些分泌物必须很大,Cryptographically Secure Psudorandom Numbers。另外要记住的是,对称密码很难正确实现。大多数程序员不理解这一点,并在使用流密码时最终重用PRNG,或者在使用块密码时,他们使用不正确的模式并使IV无效。相比之下,HMACS实施起来非常容易,而且不会出错。如果所有内容都通过HTTPS传输,并且您使用的是hmac,则可以轻松实现安全的身份验证系统。如果你真的想要实现一个对称密码,你必须得到Piratical Cryptography的副本,有几个章节专门讨论对称密码,因为这么多可能会出现可怕的错误。您还必须考虑密钥分发,ssl使用DH-Key Exchange作为其对称密钥。
请务必阅读OWASP前10名,尤其是Broken Authentication and Session Management。这需要对整个会话使用https,大多数Web应用程序程序员都没有意识到这一点。
答案 1 :(得分:4)
最大的区别在于HMAC会提供完整性但不提供隐私,而加密会提供隐私而不会保持完整性。许多用例需要两者,但我无法想到任何完整性不必要的地方。 HMAC似乎是最低要求,加密可能是最佳伴侣。