Encryption 安全保证,建议方法的缺陷

Encryption 安全保证,建议方法的缺陷,encryption,cryptography,signature,Encryption,Cryptography,Signature,我想通过类似于UDP的传输方法将Alice的消息发送给Bob,因此没有连接。我假设窃听者伊芙可以获得所发送内容的副本,攻击者马洛里可以做伊芙所能做的一切,并将其发送给鲍勃。我还假设Mallory不能让中间人,也就是说,不能阻止Alice发送给Bob的消息到达Bob,但是Mallory可以更改数据,并且可以重播截获的消息。我的带宽是有限的,所以我不想在“用户数据”中添加太多数据来实现数据保护 我想实现数据机密性加密加上防篡改完整性和真实性保证,基本上将Mallory的功能降低到零。我提议: Ali

我想通过类似于UDP的传输方法将Alice的消息发送给Bob,因此没有连接。我假设窃听者伊芙可以获得所发送内容的副本,攻击者马洛里可以做伊芙所能做的一切,并将其发送给鲍勃。我还假设Mallory不能让中间人,也就是说,不能阻止Alice发送给Bob的消息到达Bob,但是Mallory可以更改数据,并且可以重播截获的消息。我的带宽是有限的,所以我不想在“用户数据”中添加太多数据来实现数据保护

我想实现数据机密性加密加上防篡改完整性和真实性保证,基本上将Mallory的功能降低到零。我提议:

Alice和Bob共享一个密钥,用于加密,例如AES

Alice和Bob共享一个密钥,用于签名/验证,例如HMAC+SHA256

加密密钥和签名密钥可以相同或不同

Alice发送给Bob的消息中应包含nonce。UUID可以用作nonce,给我一个16字节的nonce。前进的时间也可以作为暂时的

对于明文数据p,Alice将其加密以生成C,然后附加一个nonce N以生成C+N。然后,她对C+N进行签名,获得S,并附加到C+N,生成C+N+S。这就是发送给Bob的内容。Eve/Mallory不能派生P,Mallory也不能更改消息,也不能重播消息,也不能编写新消息

鲍勃必须管理一家他所见过的所有临时商店。或者可能使用时间作为将存储减少为单个值的nonce,但是Alice有责任生成单调递增的值

考虑到大多数加密协议(如TLS)都是在连接模型(如TCP)上工作的,我还没有找到任何现成的可接受协议! 方法,因此提出了这一建议

感谢您的帮助,尤其是“您不想这样做,因为它会遇到X、Y、Z等安全漏洞”。我知道整个“先加密后签名”的争论,我真的不想把它带到这里面去


更新:对于建议使用DTL和非连接时间的回复,我必须详细说明我的非连接模型的一些方面,我希望这些方面在最初的帖子中不相关,但显然是相关的。在我的模型中,Alice实际上并没有直接发送给Bob。这些消息由中间人持有,可以将其视为邮件服务器。而且,从Alice发布消息起,Bob可能在几个小时甚至几天内都不会查看他的“收件箱”。此外,Bob和Alice的时钟不同步,因此有一个“到期时间”x并不简单

您提出的方法已经非常合理了。不过,我建议:

不要使用与MAC相同的密钥进行加密。AES和HMAC之间没有任何已知的基于理论的交互,但实际原因——密钥泄漏等——意味着拥有两个不同的密钥可能更好

你说你不想参与其中,但没有什么理由不加密mac。如果可能的话,你应该更喜欢这个

永远存储所有nonce是相当乏味的。使用基于时间的签名到期方法:

Alice加密C=EM并附加当前时间T,然后签名生成S。她将C+T+S发送给Bob。 Bob检查T是否在当前时间的x秒内。如果不是,Bob将忽略该消息。 Bob检查是否识别S。如果识别,Bob将忽略该消息。 Bob将S暂时存储x秒,之后他会忘记它。 Bob解密M=DC并处理M。
理论上,这里的x值可以是您喜欢的任何值,但我建议在5-10秒左右的范围内。

为什么不使用DTL?密码设计问题在这里是无关紧要的。我不理解您关于Bob识别和存储S的观点。这不仅仅是为了保证Alice的完整性和身份吗?您是否建议在唯一性断言中使用S?你能详细说明一下吗?除非我们有办法识别,否则会在x秒内处理重复的消息。如果是重复消息重播攻击,则签名也将相同。因此,如果我们跟踪签名x秒,我们可以识别重播攻击或意外重复的消息,并安全地忽略它们。在x秒之外,由于时差,消息将被忽略,签名将不需要记住。