我在一个大型网站工作。我们计划使用身份验证令牌,这些令牌必须由大量应用程序验证,但由auth应用程序发布。我正在考虑非对称而不是对称签名方案,以避免在大量应用程序服务器上存储密钥。
我列出了候选算法--dsa,ecdsa,rsa,其中有Java加密提供程序。
比较dsa与rsa: dsa具有独立于密钥强度的签名,并且比rsa签名小得多,以获得相同的安全性(rsa 1024/1568 vs dsa 192)。然而,dsa验证(期望验证调用为100x问题)比rsa验证慢大约10倍。 dsa192可以使用sha1进行摘要,虽然我可以使用Sha234并将输出截断为192位。
对dsa vs rsa的回顾也带来了其他深奥的问题 - dsa中私钥的保密性非常依赖于k参数的随机性,dsa不支持对我们来说不是问题的防火墙哈希。
比较ecdsa与dsa - ecdsa在签名和验证方面略快一点,我看到一个声称,对于ecdsa,我们有信心签名将验证(这里略有关注)。签名大小相同,不会进入图片。
由于令牌是随每个请求发送的,我们在编码之前讨论的是40 vs 128/196字节,我正在考虑使用ecdsa-192将sha2截断为192位 - 我认为10倍的成本是不幸的,但希望如此以I / O成本为主。
感谢反馈。让我知道我错过了什么。
答案 0 :(得分:1)
是的,您使用的加密类型很重要,但请记住,恶意用户破坏安全性的最简单方法不是破解加密,而是拦截/窃取密钥。查看Eric Lippert的博客,了解肠道检查:http://blogs.msdn.com/b/ericlippert/archive/2011/09/27/keep-it-secret-keep-it-safe.aspx