为了实现双重认证,我们能用RSA签署GCM最终标签吗?使用RSA,没有人能够创建自己的标记,因为私钥是未知的。
然而,根据FIPS.186-4,RSA的输入必须符合NIST批准的散列函数。
这个GCM + RSA组合有可能吗?
发布于 2020-11-23 16:47:35
不多;使用RSA对GCM标记进行签名是不够的。
首先,知道AES秘密密钥后,就很容易生成包含任何所需内容的消息(末尾除外),以及检查并具有任何所需标记的AES-GCM密码。因此,AES密钥的任何持有者都可以在截获由另一个人签名的密文之后,伪造通过RSA公钥验证的消息。
另外,一个持有AES密钥的人可以准备两条非常不同的消息,他们的AES-GCM加密共享相同的标签,允许通过显示一条消息的签名也适用于另一条消息来传播FUD。
此外,如果RSA-签署标签,但不能使用教科书RSA,这是不安全的时候,直接签署的小值m,如128位标签(例如,当e是如此小到m^e<n\,,或在攻击下的任何e)。
一种适当的方法是签名然后加密:使用RSA (例如RSASSA或RSASSA-PKCS1-v1_5)对明文进行签名,并附加签名,然后使用AES-GCM。这样,只有RSA私钥的持有者(而不是AES-GCM密钥的任何持有者)才能在相应的公钥下发出通过验证的有效消息;在解密之前无法访问签名(该签名公开了已签名的信息)。
在这里,我不推荐加密然后签名,因为我不排除完整性可能容易被替换原来的AES秘密密钥。
发布于 2020-11-23 16:33:18
通常使用RSA密钥来签署密钥协议。密钥协议用于建立GCM中使用的密钥。一般来说,秘密密钥并不是使用某种带外程序分配的。之后,GCM身份验证标记应该为消息的完整性和真实性提供足够的安全性。
另一个问题是,如果使用签名,任何人都可以替换它。正因为如此,签名后加密经常被使用,而不是加密。。
如果用例需要该构造,那么只为加密-然后签名的身份验证标记签名可能会很有趣。但是,在这种情况下,可以使用正常的签名生成过程。请注意,例如,RSA使用哈希将散列填充到键大小(在内部使用MGF1 ),并且模块指数计算量很大--比128位以上的单个哈希重(这将转化为对SHA-2内部的单个块进行散列)。
https://crypto.stackexchange.com/questions/86403
复制相似问题