ssl - 非对称 HMAC

标签 ssl hash digital-signature hmac

验证 HMAC 生成的哈希需要验证器知道 key 。所以它是对称的。除了 SSL 之外,更相似的非对称解决方案是什么?因为我希望签名像 md5 哈希一样小。并且生成和验证程序要简单。我正在研究 Rabin 的签名算法,但找不到任何实现或伪代码。

最佳答案

最小的非对称签名来自elliptic curve ECDSA 等密码系统。 ECDSA 签名方案需要的签名长度大约是具有同等安全性的对称密码 key 长度的四倍。因此,安全性与 128 位 AES 相当的方案将具有 512 位签名。这是目前最先进的技术——签名较小但安全性相同或更高的方案尚不清楚。

如果您不需要那么高的安全性,您可以使用 192 位曲线来生成 384 位签名。您可以降低到 320 位签名(160 位曲线),并且仍然具有与 80 位对称密码相当的安全性。如果您真的不是特别关心安全性,可以使用 112 位曲线,提供与 DES 一样难以破解的 224 位签名。

以下曲线是我为每个安全级别推荐的曲线:

SecP112R1:224位签名,56位安全级别
SecP128R1:256位签名,64位安全级别
SecP160K1:320位签名,80位安全级别
SecP192K1:386位签名,96位安全级别
SecP224K1:448位签名,112位安全级别
SecP256K1:512位签名,128位安全级别

对于每条曲线,私钥与曲线的大小相同。公钥(压缩形式)比曲线大小大一位。签名是曲线大小的两倍。因此对于 SecP256K1,私钥为 256 位,公钥为 257 位,签名为 512 位。这些是原始二进制值的最小大小。

警告:我认为 160 位曲线对于安全性是一个因素的任何目的都是最小的。如果生成、使用 key 然后在短时间范围内丢弃,则较小的曲线可能是合适的。为了长期安全,应使用 256 位曲线。整个系统在依赖之前应由有能力的专家进行评估。

关于ssl - 非对称 HMAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9897023/

相关文章:

spring-boot - Hashicorp Vault 错误 : Error checking seal status

ssl - 如何配置 Camel jetty 生产者端点以使用 SSL 证书

hash - 什么样的哈希返回小写和大写字符?

web-services - haproxy 1.5 特定源 IP 地址在 haproxy 日志中显示 <NOSRV> 503 SC

docker - 在 docker 容器中通过桥接时无法访问 SSL IP。获取 SSL_ERROR_SYSCALL

java - 类图中的 HashMap (UML)

redis - Redis 中的哈希集还是排序集?

java - 访问已安装认证签名

java - 如何使用 PEM 文件在 Java 中对 PDF 进行数字签名?

javascript - Sencha touch 中的数字签名选项