安全保证,建议方法的陷阱

时间:2019-02-25 21:27:49

标签: encryption cryptography signature

我想通过类似于UDP的传输方法将消息从Alice发送到Bob,因此未连接。我假设窃听者Eve可以获取所发送内容的副本,并且攻击者Mallory可以做到Eve可以做的所有事情,然后发送给Bob。我还要假设,马洛里不能成为中间人,即不能阻止从爱丽丝到鲍勃的消息到达鲍勃,但是马洛里可以更改数据,并且可以重放被拦截的消息。我的带宽有限,所以我不想在“用户数据”中添加太多数据来实现数据保护。

我想实现数据机密性(加密)加上防篡改(完整性)和真实性保证,基本上是将Mallory的功能降低为零。我建议这样做:

出于加密(例如AES)的目的,爱丽丝和鲍勃共享一个秘密密钥。

Alice和Bob共享一个密钥,以进行签名/验证(例如HMAC + SHA256)。

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

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

对于明文数据P,Alice对此进行加密以生成C,然后附加一个随机数N来生成C + N。然后,她在C + N上签名,得到S,然后将S附加到C + N上,得到C + N + S。这就是发送给Bob的内容。 Eve / Mallory无法派生P,Mallory也无法更改,重播或编写新消息。

鲍勃必须管理一个他曾经见过的所有随机数的“即刻存储”。或者也许用时间作为随机数(将存储减少为单个值),但是爱丽丝有责任单调增加值。

鉴于大多数加密协议(例如TLS)在连接的模型(例如TCP,我无法找到任何现成的(接受!) 方法,因此提出了这个建议。

任何帮助,尤其是“您不想那样做,因为它将遭受安全漏洞X,Y,Z”的任何帮助,我们都会感激不尽。我知道整个“先加密然后签名”的辩论,并且真的不想将其纳入讨论范围。

更新:为了回应有关DTLS的答复以及对现时使用时间的问题,我必须详细阐述我的非连接模型的各个方面,我希望这些方面与最初的帖子无关,但显然是相关的。在我的模型中,爱丽丝实际上并没有直接发送给鲍勃。消息由中间人持有,可以将其视为邮件服务器。从爱丽丝发布消息开始的数小时甚至数天,鲍勃可能都不会检查他的“收件箱”。此外,鲍勃和爱丽丝的时钟不同步,因此拥有“到期时间” x并非易事

1 个答案:

答案 0 :(得分:0)

您提出的方法已经很不错了。我会建议,但是:

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

  • 您说您不想进入它,但是很少有不加密-然后-mac的原因。如果可能的话,您应该喜欢它。

  • 永久存储所有随机数是相当乏味的。使用基于时间的签名到期方法:

    • 爱丽丝加密C = E(M)并附加当前时间T,然后签名以生成S。她将C + T + S发送给Bob。
    • Bob检查T是否在当前时间的x秒内。如果不是,那么Bob将忽略该消息。
    • 鲍勃检查他是否识别出S。如果他这样做,则Bob会忽略该消息。
    • 鲍勃S暂时存储x秒,之后他忘记了。
    • Bob解密M = D(C)并处理M

理论上,x的值可以是您喜欢的任何值,但是我建议在5到10秒左右的范围内进行输入。