我正试着弄清楚什么才是真正的爱。我是应用程序开发人员,不是加密者。我在网上搜索了一段时间,看了一堆Youtube视频,翻阅了几本书“严肃密码学”和“理解密码学”,但发现这些解释过于简洁。我的目标是在使用密码库时了解文档,它们提到了AEAD和AES各种模式的优缺点。下面是我对AEAD的一些问题。
发布于 2020-09-20 16:39:48
首先,让我们看看AAD是什么;它是一个必须在加密和解密时都显示的字符串;如果解密器显示了错误的字符串,则解密失败。
为什么这个有用?因为AAD可以理解为“加密上下文”。我们通常使用相同的密钥来加密多条消息。AAD防止的是攻击者获取一个有效的密文,并用它替换另一个密文(用相同的密钥加密);如果解密者对两个不同的上下文使用不同的AADs,则解密将失败(攻击被挫败;如果攻击者只希望解密失败,他就可以用随机的胡言乱语替换密文)。
另一种方法是每次只使用一个单独的键;但是,AAD通常以较低的复杂度解决问题。
所以,要回答你的问题:
AEAD解决的一个示例问题/场景是什么?
你要一个,我给你两个:
这个问题是如何解决的?(不是算法细节,而是更高层次的大图)
GCM所做的是将AAD搅拌到标记中;如果AAD不正确,则标记不会验证(在这种情况下,您应该拒绝解密)。
如果没有使用AEAD,攻击者能做什么?
将一个密文替换为另一个密文
作为一名开发人员,我是否应该总是在每件事上都使用AEAD?
好吧,如果您使用相同的密钥用于多种用途,您可能应该对每种加密使用不同的AAD。另一方面,如果您只使用密钥加密一条消息(例如,作为IES中的对称部分),则不需要
AEAD是否只用于分组密码,而不需要流密码?当使用公钥密码(如RSA )时,需要使用AEAD吗?
通常,需要解决重放问题,但是流密码器和公钥方法通常使用不同的方法。
使用流密码器,我们通常生成一个长字符串,并使用不同的部分对单个消息进行加密--这可以防止重放攻击。其他情况下(当我们需要对消息进行无序解密时),我们会将一个nonce作为流密码的输入,并且有一个更高级别的协议来确保not不被重用。
使用公钥加密,它通常在更高的级别上处理,可能使用的是现在.
1:真正的数据库更有可能有一些序列号,而不是名称;对于这个例子,我将忽略它。
https://crypto.stackexchange.com/questions/84052
复制相似问题