gpt4 book ai didi

security - 数字签名与 HMAC 与通过 DH 的 key

转载 作者:行者123 更新时间:2023-12-03 21:42:03 27 4
gpt4 key购买 nike

我正在编写一个大量使用密码学的应用程序。与大多数网络应用程序一样,我的应用程序将数据分解为不同类型的消息(即时消息、文件 block 、视频帧等)——并且必须检查每个消息的真实性,以防篡改和正确的来源。到目前为止,我能够使用 ECDH 来协商我已经用于 AES 的共享 key 。当然,以后可以使用相同的共享 key 。

我的问题是:在这种情况下,使用 ECDSA 来签署每条消息,而不是简单地使用 ECDH 与 HMAC 建立的共享 key ,是否有任何额外的好处?

下面,当我说 M 时,我指的是加密消息或明文;没关系。请更正以下任何错误。

我知道在 ECDSA(或 DSA)中,通常使用安全散列算法(我目前正在使用其中一个 SHA-2)对消息(M)进行散列处理以生成 H(M)。 , 然后加密 H(M)使用签名者的私钥。这会产生 RS整数(签名)。然后,M、R 和 S 被发送给已经拥有发送者公钥的接收者。 H'(M)计算,并使用 R 验证签名和 S . BouncyCaSTLe 提供 ECDSASigner它实现了这一点。

在 HMAC 中,我需要一个共享 key 。然后:HMAC(K, M) := H( f2(K) || H(f1(K) || M) )(感谢 Paŭlo Ebermann 的更正。有关详细信息,请参阅他的答案。)

那么,考虑到 DH/ECDH 安全地协商共享 key ,我是否有理由不使用 HMAC?

相关:为什么 NSA为 DSA 而不是 MAC 指定标准算法?仅仅因为它可以是 SHA-2 + AES?

速度在这里很重要,因为我希望我正在制作的这个协议(protocol)不仅现在支持文本消息,而且在不久的将来也支持大文件和视频帧。因此,我更喜欢使用 HMAC,但想确保我能达到上述目标。

谢谢你的帮助!

最佳答案

DSA 的一个缺点是您的签名需要相当多的随机字节。甚至在使用错误的随机源的情况下,您的私钥也可以从签名中重建。对于 MAC,您必须签署大量消息,因此您需要大量随机数。如果您没有生产这些的硬件,您将耗尽熵。
HMAC 不需要任何随机数(它是确定性的)。
此外,我认为 HMAC 将比在这里使用 DSA 更有效,但您可以(并且应该)衡量这一点。

关于“更正错误”:您对 HMAC 的描述不太正确 - 没有“解密”。它更像是这样的:
您有消息M , 散列函数 H , 和一个共享 secret K .添加两个公共(public)函数f1f2 (这些是一些简单的 XOR+填充)。然后

HMAC(K, M) := H( f2(K) || H(f1(K) || M) )
||是简单的串联。发送者和接收者做同样的计算,发送者将他的与消息一起发送,然后接收者将他的结果与发送的结果进行比较。 (确保以不允许定时攻击的方式进行比较,即比较所有内容,即使您已经发现它不匹配。)
HMAC 的准确定义在 RFC 2104 ,其中还包含一些澄清数字。

关于这个问题:

Related: why does the NSA specify a standard algorithm for DSA and not MAC?


我不太确定,但这里有一个想法:
那里的链接列表提到了 Galois Counter Mode 的“ TLS (RFC 5288)”。和 SSH (RFC 5647) ,据说这可以同时保护 secret 性和完整性。因此不再需要单独的 MAC。 (这是我第一次读到这个,所以我现在无法判断。)

关于security - 数字签名与 HMAC 与通过 DH 的 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5683215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com